亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

带有实时时钟的 Arduino OLED 温度显示

组件和用品

Arduino UNO
× 1
Adafruit DS3231 RTC
× 1
Digilent Pmod OLED
× 1
Texas Instruments LM35 温度传感器
× 1
跳线(通用)
× 1
面包板(通用)
× 1

关于这个项目

我们将制作一个 Arduino 天气时钟,它会告诉我们时间、日期和温度。 LM35传感器会告诉我们温度,DS3231会告诉我们日期和时间,我们会用OLED来显示温度、日期和时间。

必需组件

本项目所需组件如下

  • 阿杜诺
  • DS3231(实时时钟模块)
  • OLED 显示屏(此处使用 SSD1306)
  • SSD1306.pdf
  • Lm35
  • 连接线
  • 面包板
lm35.pdf

电路图

首先,将 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,左侧引脚接地。

你可以找到一个 全尺寸原理图在这里

代码说明

首先,我们添加了 DS3231 模块和 OLED 的库。与其他用于 OLED 的库相比,用于 OLED 的 Adafruit 库具有更多的功能。

#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;浮动温度;浮动输出; 

在设置函数中,我们将 LM35 传感器引脚声明为输入,因为 Arduino 将从传感器获取输入。然后我们给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("时钟");显示。显示();延迟(5000); 

在循环函数中,我们从 LM35 读取并计算温度。然后我们获取时间和日期并将其打印在 OLED 上。

 output =analogRead(sensor_pin);温度=(输出*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_RESET,OLED);const int sensor_pin =A0;浮动温度;浮动输出;无效设置(){ pinMode(sensor_pin,输入); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); //rtc.setDOW(星期三); // 将星期几设置为星期日 //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("时钟");显示。显示();延迟(5000);}无效循环(){输出=模拟读取(传感器引脚);温度=(输出*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("温度:");显示。打印(温度); display.print("C");显示。显示();延迟(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("时钟");显示。显示();延迟(5000);
代码片段 #5纯文本
 output =analogRead(sensor_pin);温度=(输出*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, OLEDCS_DC, st OLED_RESET) sensor_pin =A0;浮动温度;浮动输出;无效设置(){ pinMode(sensor_pin,输入); rtc.begin(); display.begin(SSD1306_SWITCHCAPVCC); //rtc.setDOW(星期三); // 将星期几设置为星期日 //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("时钟");显示。显示();延迟(5000);}无效循环(){输出=模拟读取(传感器引脚);温度=(输出*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("温度:");显示。打印(温度); display.print("C");显示。显示();延迟(1000);}

示意图


制造工艺

  1. 使用真实传感器控制效果
  2. DIY 最简单的 IV9 Numitron 时钟与 Arduino
  3. 带有伊斯兰祈祷时间的 Arduino 时钟
  4. Arduino Pong Game - OLED 显示器
  5. 字时钟,以文字表示时间的分钟分辨率
  6. 主时钟
  7. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  8. 柏林时钟
  9. 玩 Nextion Display
  10. TM1637 具有时间设置和闹钟功能的数字时钟
  11. BME280 Nextion Display 上的温度、湿度和压力
  12. 带 DS1302 RTC 的简单闹钟