今回は、DS1307RTCとDHT11、LCD 1602 Module(液晶ディスプレイ)を使って、測定した日時と温度および湿度をディスプレイに表示してみたいと思います。
配線図
使用部品
- DS1307 RTC モジュール ・・・(スターターキット:Amazon購入)
- DHT11 温・湿度モジュール ・・・(スターターキット:Amazon購入)
- LCD 1602 Module(液晶ディスプレイ)・・・(スターターキット:Amazon購入)
- シリアルインターフェースモジュール ・・・ (Amazon購入)
https://amzn.to/3UbDxSZ
https://amzn.to/3PZreXv
Arduino IDE
#include <Wire.h>
#include <RTClib.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
RTC_DS1307 rtc;
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
#define DHTPIN 7 // DHT11センサーのデータピン
#define DHTTYPE DHT11 // 使用するDHTセンサーのタイプ
DHT dht(DHTPIN, DHTTYPE); // DHTオブジェクトを作成
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(200);
Serial.println("DS1307RTC Read Test");
Serial.println("-------------------");
Serial.begin(9600);
// Initialize device.
dht.begin();
Serial.println(F("DHTxx Unified Sensor Example"));
// Print temperature sensor details.
rtc.begin();
lcd.begin(16, 2);
}
void loop() {
// 現在時刻を取得
DateTime now = rtc.now();
// 温度と湿度を取得
float temperature = dht.readTemperature(); // 温度を読み取る
float humidity = dht.readHumidity(); // 湿度を読み取る // 温度と湿度をシリアルモニターに表示
// データが有効か確認
if (isnan(temperature)) {
Serial.println("DHTセンサーからの無効な読み取り!"); // センサーからの無効な読み取りを警告
} else {
// 時刻、温度、湿度をシリアルモニタに表示
Serial.print("年月日: ");
Serial.print(now.year(), DEC);
Serial.print("/");
Serial.print(now.month());
Serial.print("/");
Serial.print(now.day());
Serial.print(" 時刻: ");
Serial.print(now.hour());
Serial.print(":");
Serial.print(now.minute());
Serial.print(" 温度: ");
Serial.print(temperature);
Serial.print("°C 湿度: ");
Serial.print(humidity);
Serial.println("%");
lcd.setCursor(0,0);
print2digits(now.month());
lcd.print('/');
print2digits(now.day());
lcd.print('/');
lcd.setCursor(8,0);
print2digits(now.hour());
lcd.print(':');
print2digits(now.minute());
lcd.print(':');
print2digits(now.second());
lcd.setCursor(0,1);
lcd.print("te:");
lcd.print(temperature);
lcd.print("/hu:");
lcd.print(humidity);
}
delay(5000); // 5秒待機
}
void print2digits(int number) {
if (number < 10) {
lcd.print("0"); // 1桁の場合は0を追加して2桁にする
}
lcd.print(number);
}
スケッチをコンパイルする。
測定年月日:時刻:温度:湿度を、シリアルモニタおよび LCD 1602 Module(液晶ディスプレイ)に表示されています。
成功です。
まとめ
- Arduinoで、DS1307RTCとDHT11LCD を使って、シリアルモニタおよび LCD 1602 Module(液晶ディスプレイ)に測定年月日・時刻・温度・湿度を表示することができた。
- シリアルモニタには、漢字表記等ができるが、LCD 1602 Module(液晶ディスプレイ)の表示には16文字2行の制約があるため、プログラミングに考慮が必要である。
- 今後は、いろいろなディスプレイを使用してみたい。