在本文中,我們將制作Arduino天氣時鐘,它將告訴我們時間,日期和溫度。 LM35傳感器將為我們提供溫度,DS3231將告訴我們日期和時間,我們將使用OLED顯示溫度,日期和時間。
電路圖
首先,將OLED與Arduino連接。 OLED通過SPI和I2C通信與Arduino配合使用,但我們使用SPI通信連接它。 Arduino上的SPI引腳分別為引腳8,9,10,11和13. OLED與Arduino的連接如下:
連接CS將OLED連接到Arduino的10個。
將OLED的DC連接到Arduino的第9針。
Connect 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的其他庫相比,OLED的Adafruit庫具有更多功能。
#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 8Adafruit_SSD1306顯示(OLED_MOSI,OLED_CLK,OLED_DC,OLED_RESET,OLED_CS);
float temp;
float output;
在設置功能中,我們將LM35傳感器引腳聲明為輸入,因為Arduino將從傳感器獲取輸入。然后我們將命令發送到DS3231和OLED以開始與Arduino通信。
pinMode(sensor_pin,INPUT); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); 以下行在代碼中進行了注釋,但如果您是第一次使用DS3231模塊并且想要設置日期,日期和時間,則取消注釋這些行并進行設置。
//rtc.setDOW(星期三);//將星期設置為星期日//rtc.setTime(19,02,0);//將時間設置為12:00:00(24小時格式)//rtc.setDate(7,12,1917);//將日期設置為2017年6月6日然后我們在OLED上打印“天氣時鐘”5秒鐘。
display.clearDisplay(); display.setTextColor(WHITE); display。 setTextSize(2); display.setCursor(0,0); display.print(“Weather”); display.setCursor(0,17); display.print(“Clock”); 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_CS); 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,1917);//將日期設置為6月6日,2017display.clearDisplay(); display.setTextColor(WHITE); display.setTextSize(2); display.setCursor(0,0); display.print(“Weather”); display.setCursor (0,17); display.print(“Clock”); 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);顯示。打印(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();延遲(1000);}
-
Arduino
+關注
關注
188文章
6477瀏覽量
188029
發布評論請先 登錄
相關推薦
開源項目!手把手教你制作一個互動式LED墻壁時鐘!
I2C總線與Arduino的接口示例
使用小安派DSL制作天氣站
![使用小安派DSL<b class='flag-5'>制作</b><b class='flag-5'>天氣</b>站](https://file1.elecfans.com/web3/M00/04/B6/wKgZO2d3V6aACBgnAAAV5jKrlXw610.jpg)
自己設計的Arduino UNO R3主控板原理圖+PCB源文件(可直接打樣)
中國氣象局推出“中國天氣小助手”智能體
開源項目!基于 Arduino 的 MIDI 架子鼓
基于Arduino的串口通信項目
如何使用Arduino實現CAN總線通信
支持 GPS,基于 Arduino 的墨水屏時鐘(文末可下載完整文件)
微軟MSN天氣服務引入全新AI模型
如何用Arduino制作一個簡易自動喂魚器
如何制作自己的Arduino電容計
![如何<b class='flag-5'>制作</b>自己的<b class='flag-5'>Arduino</b>電容計](https://file1.elecfans.com/web2/M00/C1/D8/wKgaomXa53-AADvOAAAB6DIT4HM693.jpg)
評論