32X32画素のドット絵ディスプレイ完成

「32×8のフルカラーLEDマトリクスを4枚連結して32×32の表示器に(MicroPython)」の続編です。

ディスプレイをIKEAのフレームに納めました。光を和らげるためにダイソーのPPシート(乳白色、両面つや消し、0.75/390×550mm)をLEDパネルの前に置いています。

外部電源から給電しているときにUSBケーブルでPCと接続できるようにマイコンボードをラズパイPicoに変更しました。

外部電源のACアダプターは5V 4AのPSE認証付きのものを使っています。

配線
外部電源  5V — LEDパネル 5V, Pico VSYS
外部電源  GND — LEDパネル GND, Pico GND
Pico GP14(19pin) — LEDパネル DIN

ドット絵のデータを別ファイルで管理できるようにプログラムを変更しました。

メインプログラム
ファイル名でドット絵のデータを指定します。画像によってスクロール方向を変えるためにforループの昇順や降順(reversed())を指定します。

ピクセルの(x,Y)座標とシリアルLEDの番号を変換する関数

ドット絵のファイルを読み込む関数

ドット絵ファイルは表計算ソフトでCSV形式で保存して、拡張子を.pyに変更しました。こうすることでThonnyでファイルを開いてPicoに保存することができます。ドット絵は96×32でパレット番号を記入します。’palette’と書かれた1行後からパレットのデータをパレット番号、R値、G値、B値で指定します。

ラズパイpico内部に保存されたファイル(左下の枠内)

 

 

 

 

 

32×8のフルカラーLEDマトリクスを4枚連結して32×32の表示器に(MicroPython)

32×8のフルカラーLEDマトリクスは文字の大きな時計を作るのによく使っています。LEDマトリクスの値段は2022年5月の時点で2799円でした。

今回はそれを見ていたKさんから4枚連結して32×32でドット絵の表示器を作りたいとのリクエストがありました。それなりの値段になるので、Aliexpressで探すと1150円です。

32×32=1024個のLEDは全てフルに点灯するわけではありませんが、USBからの給電では不安なので5V 4AのAC/DCアダプター電源を使います。コネクタを使って4枚を連結します。

OLYMPUS DIGITAL CAMERA
OLYMPUS DIGITAL CAMERA

4枚を横に並べてコネクタで接続するとLEDは直列に接続されるので楽なのですが、縦に並べると下の絵のようになります。

(x,y)を指定するとLEDの番号がわかる関数serial_pos(x,y)を作って対応します。ドット絵のデータはimage1に書きます。1024個のデータなので大変だろうと思いましたが、エクセルファイルにドット絵を書き出すプログラムが公開されているようなので、カンマ区切りで出力してコピペの後少し修正すればそんなには面倒では無いようです。色はpalette14で指定します。

 

 

 

 

 

 

 

 

 

 

ラズパイPicoとMicroPythonでPWMコントローラー

PWM制御端子のあるクーリングファンで垂直風洞を作りました。JAXAの手作り風洞のパラメータを参考にして、ファンから少し離してハニカムの整流板を取り付けました。
https://www.yac-j.com/wp-content/themes/yac/pdf/labo/list/5.Experiment/5-8.pdf

翼付きの種子が風洞内で回転する様子を観察するための風洞なので、15cmの高さで風速が1/3、45cmの高さで風速が1/6になるように、開口を広げています。透明シートは100円ショップのB4サイズのカードケース(ハードタイプ)を使いました。

ファンは120mm角38mm厚で12V 2.1AのSanyo Denki America Inc.製の「9GV1212P1G01」(7500円程度)です。(1号機ではPC用で大風量のファンと言われている「CFY-12038PF」12V 0.45Aを使ったのですが、もっと風量が欲しかったので変更しました。)PWMは25kHzの0-5V信号が指定されていますが、ラズパイPicoの3.3Vパルスでも動いています。ハウジングとの固定にはM4長さ50mmを使いました。

電源は「VHBW 12V 5A ACアダプター 60W 5.5*2.5(2.1)mm AC100V-240V DC12V 電源アダプター 内極性[+] 0.1A~5A汎用 PSE認証」にしましたが、とりあえず問題なく使えています。

12V電源だけでPicoも動かしたいので、手元にあった3端子レギュレータNJU7223F33で3.3Vを作ります。Picoは互換機のWaveshare RP2040-Zeroよりも外部給電での使い方が便利で、VSYSに1.8Vから5.5Vを接続できます。可変抵抗を回してPWMのDutyを変更します。また、現在のPWM値を視覚的に表現するために4×4マトリクスLEDの状態を変化させます。LEDの制御はneopixelライブラリを使用しました。

OLYMPUS DIGITAL CAMERA

12V電源 —– NJU7223F33
接続なし —– Pin1(Vout 3.3V)
12V —– Pin2(Vin)
GND —– Pin3(GND)

Pico
VSYS —– 3.3V
GP15(pin20) —– Fan PWM
GP16(pin21) —– LED DIN
GP26(pin31) —– 可変抵抗器Pin2

可変抵抗器
Pin1 —– 3.3V
Pin2 —– Pico GP26
Pin3 —–GND

フルカラーLED 4×4マトリクス
VDD —– 3.3V
DIN —– Pico GP16
GND —– GND

Fan
Red —– 12V
Black —– GND
Brown —– Pico GP15

プログラム pico_fanControlMax.py

PicoにはMicroPythonインタープリタをダウンロードし、ライブラリneopixel.pyと上記プログラム(pico_fanControlMax.py)をmain.pyという名前で保存します。

 

 

MicroPythonで大きな数字の時計を作る

2017年に作った時計がブレッドボードの接触不良で時々ハングするようになったので、ラズパイPico Wでリメイクしました。[ハングしていたように見えたのはNeopixelが1個死にかけていたためのようです。リメイクした後でも再発したので故障したLEDを見つけて交換しました。]

製作当時の記事は以下です。
http://keisoku-lab.mond.jp/2017/06/28/手作りの大型7セグメントフルカラー表示器を使っ/
http://keisoku-lab.mond.jp/2017/08/10/手作りの大型7セグメントフルカラー表示器デモ版/

OLYMPUS DIGITAL CAMERA

当時はまだシリアルフルカラーLEDを32×8 で敷き詰めたユニットは高価だったので、テープ状のシリアルフルカラーLEDを7セグメントLEDのように配置して表示板を作りました。1文字14個で4桁なので56個のLEDを使いました。

配線は以下の3本だけです。
Pico W—–シリアルLED
VBUS —–+5V
GND  —–GND
GP16 —–Din

シリアルLEDのライブラリは以下を使いました。
https://github.com/blaz-r/pi_pico_neopixel

NTPサーバーへの接続とPico Wが内蔵しているrtcの更新については以下の記事に書きました。

MicroPythonでラズパイPico Wと1.69インチTFT DisplayモジュールのNTP時計を作成

 

時計の機能
毎時0分にNTPサーバーに接続してrtcを更新します。
6時から21時59分までは明るく、それ以外は暗く表示します。
毎分45秒から次の5秒まで表示色をグラデーションで変化させます。

一応、狙い通り動いていますが、Pythonは使い慣れていませんのでアドバイスがあればohashi(アットマーク)mac.email.ne.jpまでお願いします。

OLYMPUS DIGITAL CAMERA

 

MicroPythonでラズパイPico Wと1.69インチTFT DisplayモジュールのNTP時計を作成

MicroPythonの使い心地を知るためにRaspberry Pi Pico Wに安価な1.69インチのTFTディスプレイを接続してNTPで更新した内蔵RTC(リアルタイムクロック)の時刻を表示するプログラムを作りました。

OLYMPUS DIGITAL CAMERA

Raspberry Pi Pico W (詳細情報はスイッチサイエンスの商品ページから辿ってください)

1.69インチのTFTディスプレイ (詳細情報はAliexpressの商品ページから辿ってください。400円程度で購入できるSPI通信の240×280画素のフルカラーディスプレイでインターフェースコントローラはst7789を使用していてします。)

配線
<TFTディスプレイ> ——– <Pico W>
GND ——– GND (18pin)
VCC ——– 3V3(OUT) (36pin)
SCL(SCLK) ——– SPI1SCK(19pin)
SDA(MOSI,SDI,DIN) ——– SPI1TX(20pin)
RES(Reset) ——– GP11(15pin)
DC(Data/Command) ——– GP12(16pin)
CS ——– SPI1CSn(17pin)
BLK(Backlight) ——– GP10(14pin)

st7789用ライブラリ
ST7789 Driver for MicroPythonとしてgithubに公開されています。Pico W用MicroPython Firmware (https://github.com/russhughes/st7789_mpy/tree/master/firmware/RP2W/firmware.uf2)をダウンロードして、Pico Wのブートボタンを押しながらPCのUSBポートに接続し、現れたUSBドライブにfirmware.uf2ファイルをドラッグ・ドロップします。

NTP時刻を取得するライブラリは時差を補正することができなかったので、ライブラリ内でJAPAN_TIME = 9*60*60を補正してRTCに書き込むことにしました。ntptime_jp.pyという名前でpico Wに保存しました。(オリジナルはmicropython-lib/micropython/net/ntptime/ntptime.py です。)

フォントはst7789_mpy/fonts/vector/romand.pyをPico Wに保存して使いました。