create every day - 福野泰介の一日一創

マトリクスLEDで表示する温湿度計をIchigoJamでつくる - SH-21 x HT16K33 via I2C

2017/07/16 23:55:00
#IchigoJam #KidsIT #maker 

いい温度センサーに加え、快適さの要、湿度もちゃんと測りたい。
そんな時便利なのが「SH-21」温度の誤差0.3度、湿度の誤差2%とかなり正確!
I2C接続できるマトリクスLEDに表示する、温湿度計ができました。


作り方 (IchigoJam ver1.2.2用)
まずは温湿度計、SH-21を攻略しましょう。

?I2CW(#40,#F3) 0 ?I2CR(#40,#700,3) 0 N=PEEK(#700)<<8+PEEK(#701) OK ?(N>>2+46)/93-47 26 OK

#40がSH-21のI2C用アドレスです。
コマンド#F3を送って、温度計測開始、0.1秒以上待って3byte読み出します。
先頭の2byte(big endian = 上位桁が先)の結果の下位2bitは状態なので捨てて、計算すれば温度がでます!(最後の1byteはチェックサム)

データシート記載の正しい式は、-46.85+175.72*(N/65536) ですが、1度単位で表示するだけなので、概算でいきます。

同じように湿度計も計算し、表示するプログラムがこちら。

10 GSB@TEMP:T=N 20 GSB@HUM:H=N 30 ?T;CHR$(223);"C ";H;"% " 40 END 100 @TEMP:M=#F3:GSB@SH21:IF!N RTN 110 N=(N>>2+46)/94-47:RTN 200 @HUM:M=#F5:GSB@SH21:IF!N RTN 210 N=(N>>2+65)/131-6:RTN 300 @SH21:N=0 310 IF I2CW(#40,M) RTN 320 WAIT 6 330 IF I2CR(#40,#700,3) RTN 340 N=PEEK(#700)<<8+PEEK(#701) 350 RTN

@SH21でデータ送受信部分をまとめておくと、プログラムが短くなります。
*VIDEO5 を加えると大きく表示!


ディスプレイに表示し続けるのはちょっと電気がもったいないので、I2Cで接続できるマトリクスLEDにスクロール表示させてみることにします。

今回はIchigoDakeで使える、I2C接続のマトリクスLEDを使いました。
使ったこのキット[K-8X8I2C1388]は在庫切れなようですが、同じドライバ「HT16K33-24W」を使った大型のキット[K-8x8I2C412388]なら在庫あり。
シリアルが使えるIchigoJamならIchigoDotSを使ってもOKです!

HT16K33の使い方は、初期化から。

?I2CW(#70,#21) 0 ?I2CW(#70,#81) 0

これで何か表示されるはず。続いて、ランダムパターンを表示させてみます。

FOR I=0 TO 7:[I]=RND(256):NEXT OK ?I2CW(#70,0,#800,16) 0

明るさは16段階、#E0から#EFで指定します。

?I2CW(#70,#E0) 0

画面の一番上の行をスクロール表示するプログラムをつくります

10 ?I2CW(#70,#21) 20 ?I2CW(#70,#81) 30 ?I2CW(#70,#E0) 200 S=#900:CLS:?"26";CHR$(223);"C 69% " 210 N=0 220 C=PEEK(S+N>>3):M=N&7 230 FOR I=0 TO 7:[I]=[I]<<1|(PEEK(C*8+I)&(#80>>M)!=0):NEXT 240 R=I2CW(#70,0,#800,16) 250 N=N+1:IF N=LEN(S)*8 N=0:GOTO200 260 GOTO 220

温湿度計プログラムとスクロール表示プログラムを組み合わせればできあがり!
それぞれファイルに保存しておき、コマンド「LRUN プログラム番号、実行行番号」でつなぐとすっきりします。

学習リモコンプログラムと組み合わせて、真夏の夜中を快適に寝られるようにエアコンを自動制御してみる予定です。
sakura.ioと組み合わせて、いろんなところの温度と湿度の変化を見る、デジタル百葉箱オープンデータも楽しそう。

Let's Life Hack!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / high-res profile image