Arduinoを用いてLCDに温湿度センサーの値を表示してみた‼
本日はLCD(液晶ディスプレイ)に温度センサーの値を表示してみたいと思います‼
結構難しいイメージかもしれませんが、想像以上に簡単なので、是非、お試しを^^
※ESP32シリーズで試されたい方はこちら⇩
①「部品準備」
・LCDディスプレイ (LCD1602A) (シリアルインタフェースボードモジュール)
電子工作ステーション 640円(送料無料)
・温度センサー(なんでもOK)
本記事では、今回は電子工作ステーションさんのDHT22温湿度センサーモジュールを使います。
DHT22温湿度センサーモジュール 560円(送料無料)
・Arduino UNO
電子工作ステーション 1110円(送料無料)(互換ボード)
電子工作ステーション 1170円(送料無料)(互換ボード)(Type-C)
※UNO以外の物でも大丈夫です。
※Arduino用のケーブルは付属していません。
お持ちでない方は同時購入をお勧めします。
・ジャンパーワイヤー(オス・メス)(7本)
電子工作ステーション 1セットで100円(送料500円以上で無料)
②「配線」
・今回電子工作ステーションさんで購入したLCDディスプレイはシリアルインターフェイスがすでに付いている状態なので、
たった4本のピンを繋ぐだけで機能します。
今回使用しているLCD1602Aは、2行x16文字表示でき、動作電圧はDC5VとなっていますのでArduinoの5Vから電源を取ります。
LCD1602A | Arduino |
GND | GND |
VCC | 5V |
SDA | A4 |
SCL | A5 |
・DHT22センサーは動作電圧3~5.5Vまで幅広く対応しています。今回はLCD1602AでArduinoの5Vピンを使ってしまっているので、こちらは3.3Vピンから電源を取ります。
測定範囲は温度が-40℃~80℃(±0.5℃)、湿度が0〜100%(±2%)と、日常生活上の温湿度計としては十分役に立ちそうな精度ですね!
DHT22 | Arduino |
DAT | 2 |
VCC | 3.3V |
GND | GND |
③「開発環境整備」
まず、Arduino IDEが無い方は、Arduino IDEをダウンロードし開発環境を整えましょう‼
次に、DHTセンサーのライブラリーを入れます‼
Arduino IDEを開き、ツール⇒ライブラリー管理を選択、
「DHT sensor library」を検索しインストールします。
インストール完了したら、最後に、LCDディスプレイを使えるようにするために、
LiquidCrystal_I2C というライブラリーを入れます‼
手順は先ほどと同じで、ツール⇒ライブラリー管理を選択、
「LiquidCrystal_I2C」を検索しインストールします。
(上から3ん番目ぐらいに出てくるかと思います、「jm_LiquidCrystal_I2C」というものです。)
これで開発環境は整いましたので、次は待ちに待ったプログラミングです‼
④「プログラミング」
下記のコードをコピペして貼り付けるだけで動くはずです‼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
//LEDディスプレイ #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); //DHTセンサー #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #define DHTPIN 2 // Digital pin connected to the DHT sensor #define DHTTYPE DHT22 // DHT 22 (AM2302) DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t delayMS; //取得数値格納用 double s = 0; void setup() { Serial.begin(9600); //初期化 dht.begin(); Serial.println(F("DHTxx Unified Sensor Example")); // 温度、湿度センサーの詳細をセット sensor_t sensor; dht.temperature().getSensor(&sensor); dht.humidity().getSensor(&sensor); // センサーの詳細に基づいて、センサー読み取り間の遅延を設定します。 delayMS = sensor.min_delay / 1000; //ディスプレイに最初のみHello, world!と表示。 lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hello, world!"); } void loop() { //測定間の遅延。 delay(delayMS); //温度イベントを取得。 sensors_event_t event; dht.temperature().getEvent(&event); if (isnan(event.temperature)) { Serial.println(F("Error reading temperature!")); } else { //シリアルモニターに温度表示 Serial.print(F("Temperature: ")); Serial.print(event.temperature); //ディスプレイに温度表示 s = event.temperature; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Tem"); lcd.print(s); lcd.print("C"); } // 湿度イベントを取得。 dht.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { Serial.println(F("Error reading humidity!")); } else { //シリアルモニターに湿度表示 Serial.print(F("Humidity: ")); Serial.print(event.relative_humidity); Serial.println(F("%")); //ディスプレイに湿度表示 s = event.relative_humidity; lcd.setCursor(0, 1); lcd.print("Hum"); lcd.print(s); lcd.print("%"); } } |
⑤「結果」
上手くビルドが完了すると、最初に「Hello, world!」と表示され、
数秒後にセンサーの値が表示されます‼
こんな感じに表示されれば大成功です‼
これでリアルタイムな温度と湿度が可視化できるようになりました‼
他のセンサーにも応用できますので是非、いろいろ試してみてください^^
※液晶に何も表示されない、もしくは文字が薄い場合は、LEDディスプレイ裏面にある、
半固定抵抗で調整できます‼
以上、ご閲覧ありがとうございます。
ご不明点等ございましたらお気軽にコメントください^^
はじめまして、arduino 初心者の小川と申します
記事を読まさせて頂き、自分にも出来そうだなと思い作って見ましたが、[ERROR]が表示され、温度 湿度が表示されません、何度も確認しましたが配線は間違ってないようです、何かアドバイスがあれば教えて欲しいです、よろしくお願いします。
使用:UNO
LCD 1602
DHT22
小川様
コメントありがとうございます。
[ERROR]が表示されるということですが、それはどのタイミングでしょうか?
例えば、プログラムを書き込むときに出るのか、あるいは書き込んだ後、シリアルモニターに表示されるのか、それともLCDディスプレイでしょうか?
また、シリアルモニターには何か表示されますでしょうか?
詳しく教えていただければより原因究明しやすいので、お手数ですがよろしくお願いします。
ご回答ありがとうございます
「ERROR]が表示されるタイミングですが、書き込み完了後LCDの下段に表示されます、上段には「Humid] 「Temp]です、シリアルモニターにも読み込みの2秒ごとに「ERROR]が表示されます、初心者で大変申し訳ないですが、なんとか完成させたいです、どうかよろしくお願いします。
サイト通りにもう一度再現しましたが、正常に動作が確認できました‼
シリアルモニターには「Temperature: 19.70Humidity: 34.80%」と表示され、LCDディスプレイには「Tem19.70C(上段) Hum34.80%(下段)」と表示されました。
起動時LCDディスプレイには「Hello, world!」と2秒ほど表示されるかと思いますが、されますでしょうか?
X(Twitter)もしていますので、そちらでDMしていただければ画像とかも共有できますので、もし文章だけでは難しそうであればよければDMしてみてください^^
(ど素人電子工作でアカウントは作っています。)
何度も申し訳ありません
なんか間違っていました、「Hello world!」は表示されますが、その先に進みません、シリアルモニターには「Error reading tem・・・」と「Error reading hum・・・」と交互に表示されます、なぜかセンサーの値が読み取れてないような気がしてきました、DHTは購入したばかりです、どうか助けて下さい。
そうなるとDHT側に問題がありそうですね。
ArduinoとDHTセンサーを繋ぐケーブルが悪かったりすることもあるので取り替えてみたり、あとは配線が間違っているかですね(-_-;)
それかDHTセンサーそのものが不良の可能性もあり得ます。
何度もお付き合い頂きありがとうございました。
ご指摘の通りケーブルを交換したり、配線を見直したりしましたが、結局「Hello world!]から先に進む事は出来ませんでした、何処に不具合が有るのかも分からず、仕方ないので自分では無理だったと諦める事にしました、もう少し勉強してから出直します、初心者の質問に時間を割いていただきありがとうございました。
お役に立てなくて申し訳ないです。