リアルタイムクロック付きArduinoOLED温度ディスプレイ
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
| × | 1 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
![]() |
| × | 1 |
このプロジェクトについて
時間、日付、気温を知らせるArduino気象時計を作成します。 LM35センサーは温度を示し、DS3231は日付と時刻を示し、OLEDを使用して温度と日付と時刻を表示します。
必要なコンポーネント
このプロジェクトに必要なコンポーネントは次のとおりです
- Arduino
- DS3231(リアルタイムクロックモジュール)
- OLEDディスプレイ(ここではSSD1306を使用)
- SSD1306.pdf
- Lm35
- ワイヤーの接続
- ブレッドボード
回路図
まず、OLEDをArduinoに接続します。 OLEDは、SPIおよびI2C通信を介してArduinoと連携しますが、SPI通信を使用して接続しました。 ArduinoのSPIピンはピン8、9、10、11、および13です。OLEDとArduinoの接続は次のとおりです。
- OLEDのCSをArduinoのピン10に接続します。
- OLEDのDCをArduinoのピン9に接続します。
- OLEDのRESをArduinoのピン8に接続します。
- OLEDのD1をArduinoのピン11に接続します。
- OLEDのD0をArduinoのピン13に接続します。
- OLEDのVCCをArduinoの5Vピンに接続します。
- OLEDのGNDをArduinoのGNDピンに接続します。
その後、DS3231モジュールをArduinoに接続します。 DS3231モジュールは、I2C通信を介してArduinoと連携します。 ArduinoのI2C通信のピンはSDAとSCLです。次のようにDS3231モジュールをArduinoに接続します:
- DS3231のGNDをArduinoのGNDピンに接続します。
- DS3231のVCCをArduinoの5Vピンに接続します。
- OLEDのSDAをArduinoのA4に接続します。
- OLEDのSCLをArduinoのA5ピンに接続します。
最後に、LM35センサーをArduinoに接続します。 LM35の左側のピンをArduinoの5Vに接続し、中央のピンをArduinoのA0に接続し、左側のピンをArduinoのアースに接続します。
<図>
あなたはを見つけることができます フルサイズの回路図はこちら
コードの説明
まず、DS3231モジュールとOLEDのライブラリを追加しました。 OLED用のAdafruitライブラリは、OLEDに使用される他のライブラリと比較してより多くの機能を備えています。
#include #include
次に、DS3231モジュールとOLEDを接続したピンを定義しました。 DS3231モジュールはI2C通信を介してArduinoと連携するため、ArduinoのSDAピンとSCLピンを使用しました。 OLEDはSPI通信を介してArduinoと連携します。したがって、SPI通信用のピン8、9、10、11、13を初期化しました。その後、LM35センサーピンとその他の変数を初期化しました。
DS3231 rtc(SDA、SCL); #define OLED_MOSI 11 #define OLED_CLK 13 #define OLED_DC 9 #define OLED_CS 10 #define OLED_RESET 8 Adafruit_SSD1306 display(OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS); const int Sensor_pin =A0;フロート温度;フロート出力;
セットアップ機能では、Arduinoがセンサーから入力を受け取るため、LM35センサーピンを入力として宣言しました。次に、DS3231とOLEDにコマンドを送信して、Arduinoとの通信を開始しました。
pinMode(sensor_pin、INPUT); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC);
以下の行はコードでコメント化されていますが、DS3231モジュールを初めて使用し、曜日、日付、時刻を設定する場合は、これらの行のコメントを解除して設定します。
//rtc.setDOW(WEDNESDAY); //曜日を日曜日に設定します//rtc.setTime(19、02、0); //時刻を12:00:00(24時間形式)に設定します//rtc.setDate(7、12、2017); //日付を2017年6月6日に設定します
次に、OLEDに「天気時計」を5秒間印刷しました。
display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); display.print( "天気"); display.setCursor(0,17); display.print( "時計"); display.display(); delay(5000);
ループ関数では、LM35から読み取り、温度を計算しました。次に、日時を取得してOLEDに印刷します。
output =analogRead(sensor_pin); temp =(output * 500)/ 1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr());
完全なArduinoコード
#include #include DS3231 rtc(SDA、SCL); #define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 display(OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_RESET; const int Sensor_pin =A0; float temp; float output; void setup(){pinMode(sensor_pin、INPUT); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); //rtc.setDOW(WEDNESDAY); //曜日を日曜日に設定します//rtc.setTime(19、02、0); //時刻を12:00:00(24時間形式)に設定します//rtc.setDate(7、12、2017); //日付を2017年6月6日に設定しますdisplay.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); display.print( "天気"); display.setCursor(0,17); display.print( "時計"); display.display(); delay(5000);} void loop(){output =analogRead(sensor_pin); temp =(output * 500)/ 1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr()); display.setTextSize(1); display.setCursor(20,25); display.print( "Temp:"); display.print(temp); display.print( "C"); display.display(); delay(1000);}
コード
- コードスニペット#4
- コードスニペット#5
- コードスニペット#6
コードスニペット#4 プレーンテキスト
display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); display.print( "天気"); display.setCursor(0,17); display.print( "時計"); display.display(); delay(5000);
コードスニペット#5 プレーンテキスト
output =analogRead(sensor_pin); temp =(output * 500)/ 1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr());
コードスニペット#6 プレーンテキスト
#include #include DS3231 rtc(SDA、SCL); #define OLED_MOSI 11#define OLED_CLK 13#define OLED_DC 9#define OLED_CS 10#define OLED_RESET 8Adafruit_SSD1306 display(OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS); Sensor_pin =A0; float temp; float output; void setup(){pinMode(sensor_pin、INPUT); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); //rtc.setDOW(WEDNESDAY); //曜日を日曜日に設定します//rtc.setTime(19、02、0); //時刻を12:00:00(24時間形式)に設定します//rtc.setDate(7、12、2017); //日付を2017年6月6日に設定しますdisplay.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); display.print( "天気"); display.setCursor(0,17); display.print( "時計"); display.display(); delay(5000);} void loop(){output =analogRead(sensor_pin); temp =(output * 500)/ 1023; display.clearDisplay(); display.setTextSize(2); display.setCursor(20,0); display.print(rtc.getTimeStr()); display.setTextSize(1); display.setCursor(0,15); display.print(rtc.getDateStr()); display.setTextSize(1); display.setCursor(70,15); display.print(rtc.getDOWStr()); display.setTextSize(1); display.setCursor(20,25); display.print( "Temp:"); display.print(temp); display.print( "C"); display.display(); delay(1000);}
回路図

製造プロセス