コロナ禍の冬、室内の湿度をチェックする機会が増えています。
チャコメーター1に7セグLEDを付け、直接湿度を読めるようにします。
いよいよ回路を組んで、Tinker Boardで制御します。
部品配置
見た目を気にして、抵抗を1列に配置しました。
Tinker Board PINOUT
LEDのアノードにGPIOを配線します。
LEDをドライブできるのは、下表の緑色で記してあるGPIOピンです。
プログラム
DBから最新の湿度データを読み込み、ダイナミックモードで3桁表示します。
ダイナミックモードの設定は以下の通りで、約330Hzです。
3分に1回、湿度を更新します。
1桁 点灯:0.0004sec → 消灯:0.0006sec
2桁 点灯:0.0004sec → 消灯:0.0006sec
3桁 点灯:0.0004sec → 消灯:0.0006sec
import ASUS.GPIO as GPIO import time import sqlite3 import datetime dbname = '/mnt/usb/work/sht31_logger/sht31.db' Pin_A=(238, 223, 185, 224, 187, 168, 188, 239) Pin_C=(255, 251, 165) digit = ((1, 1, 1, 1, 1, 1, 0, 0), # 0 (0, 1, 1, 0, 0, 0, 0, 0), # 1 (1, 1, 0, 1, 1, 0, 1, 0), # 2 (1, 1, 1, 1, 0, 0, 1, 0), # 3 (0, 1, 1, 0, 0, 1, 1, 0), # 4 (1, 0, 1, 1, 0, 1, 1, 0), # 5 (1, 0, 1, 1, 1, 1, 1, 0), # 6 (1, 1, 1, 0, 0, 0, 0, 0), # 7 (1, 1, 1, 1, 1, 1, 1, 0), # 8 (1, 1, 1, 1, 0, 1, 1, 0), # 9 (0, 0, 0, 0, 0, 0, 0, 0), # Blank (0, 0, 0, 0, 0, 0, 1, 0)) # Minus GPIO.setmode(GPIO.ASUS) GPIO.setwarnings(False) for Pin in Pin_C: GPIO.setup(Pin, GPIO.OUT) GPIO.output(Pin, GPIO.LOW) for Pin in Pin_A: GPIO.setup(Pin, GPIO.OUT) GPIO.output(Pin, GPIO.LOW) while 1: con = sqlite3.connect(dbname) cur = con.cursor() cur.execute('SELECT * FROM sensor3 order by timestamp desc limit 1') val = cur.fetchone() cur.close() con.close() H = round(val[3], 1) str_H = str(H) d1 = int(str_H[0]) d2 = int(str_H[1]) d3 = int(str_H[3]) d = (d1,d2,d3) for t in range(60000): for j in range(3): a = digit[ d[j] ] for i in range(8): if a[i] == 1: GPIO.output(Pin_A[i], GPIO.HIGH) else: GPIO.output(Pin_A[i], GPIO.LOW) if j == 1: GPIO.output(239, GPIO.HIGH) GPIO.output(Pin_C[j], GPIO.HIGH) time.sleep(0.0004) GPIO.output(Pin_C[j], GPIO.LOW) time.sleep(0.0006)
完成
さっそく連続運転してみました。
時々、値がチラつくのが気になります。
・・・
夜中にトイレで起きると、緑LEDが煌々と光っていたので、慌ててプログラムを止めました。
夜間は暗くするか、非表示にしないとダメだな。。。