ProMicroを手に入れました。正確にはProMicroの互換品ですが。
ProMicro自体もArduino Leonardoの互換品ということで、互換品の互換品になりますね。今回はProMicroと温度センサモジュールとキャラク タLCD モジュールを使って温度計を作ってみましょう。
どうせなら、熱中症 の危険度がLEDの色で一目でわかるようにしてみましょう。
仕様
温度計なので、LCD に温度を表示させるのは決まりです。LEDの色と閾値 を決めなければいけません。
こちらの環境省の資料 によれば部屋の温度が28℃が最もよく、24℃以下では外気温との温度差が大きく体に負担とのことです。
また、こちらの資料 では、暑さ指数(WGBT)が
暑さ指数
危険度
28℃~31℃
厳重警戒
31℃以上
危険
となっていますね。
暑さ指数は実際には湿度によっても変わるんですが、今回は手元に湿度計がないので温度だけ見てアラートを出すことにします。湿度測定への拡張は作ってしまってからでも簡単にできますしね。
ということで、LEDの色と閾値 は下記の感じでいきましょう。
室温
危険度
24℃以下
黄色
24~28.5℃
青色
28.5~31℃
黄色
31℃以上
赤色
材料
回路
こんな感じです。
LEDの電流制限抵抗は赤が順方向電圧2.1V minで、最大定格50mAなので、
RRED = (5-1.8)V/0.05A = 64 ohm
青と緑は順方向電圧2.9V minで、最大定格30mAなので、
RBG = (5-2.9)V/0.03A = 70 ohm
って感じで、抵抗のMIN値だけ計算して、適当に決めました。
配線
こんなんになりました。配線多くて見た目はいまいちだなぁ。
こちらの記事 とかだと、ユニバーサル基板にLCD モジュールを取り付けてきれいに配線してるなぁ。今後の課題です。
コード
基本的にはArduino IDE に収録されてるコードのコピペで作れてしまいます。今回は、
ファイル → スケッチ例 → Wire → master_reader
ファイル → スケッチ例 → LiquidCrystal → HelloWorld
の二つをベースに作りました。
#include <Wire.h>
#include <LiquidCrystal.h>
const int rs = 9 , en = 10 , d4 = 8 , d5 = 7 , d6 = 6 , d7 = 5 ;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
const int rled=15 , gled=14 , bled = 16 ;
void setup() {
Wire.begin();
Serial.begin(9600 );
Wire.beginTransmission(0x48 );
Wire.write(0x03 );
Wire.write(0x80 );
Wire.endTransmission();
delay(240 );
lcd.begin(16 , 2 );
lcd.print("temperature" );
pinMode(rled,OUTPUT);
pinMode(bled,OUTPUT);
pinMode(gled,OUTPUT);
digitalWrite(rled,LOW);
digitalWrite(gled,LOW);
digitalWrite(bled,LOW);
}
void loop() {
Wire.requestFrom(0x48 , 2 );
int byteData;
int data=0 ;
float temp;
while (Wire.available()) {
byteData = (Wire.read()<<8 ) | Wire.read();
if (byteData & 0x8000 ){
data = -((~byteData & 0x7fff ) +1 );
}
else {
data = byteData&0x7fff ;
}
}
temp = data*0.0078 ;
lcd.setCursor(0 , 1 );
lcd.print(temp);
lcd.setCursor(6 ,1 );
lcd.print("degC" );
if (temp>31 ){
digitalWrite(rled,HIGH);
digitalWrite(gled,LOW);
digitalWrite(bled,LOW);
}
else if (temp>28.5 | temp<24 ){
digitalWrite(rled,HIGH);
digitalWrite(gled,HIGH);
digitalWrite(bled,LOW);
}
else {
digitalWrite(rled,LOW);
digitalWrite(gled,LOW);
digitalWrite(bled,HIGH);
}
delay(500 );
}
完成品
室温が28℃以下の部屋で、温度センサー部を指で温めて動作を確認します。
28.5℃以下から28.5℃以上
31℃以下から31℃以上
動きました!温度によってLEDの色も変化してくれていますね。ただ、黄色がただの赤と緑になってますね。フルカラーLEDを初めて使ったんですが、上手く色が混ざらないものなんでしょうか?拡散板とか使えばいいのかなぁ。もしくは輝度調整?また次の機会にそこらへんは見ていくことにしましょう。