Отображение температуры Arduino OLED с часами реального времени
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Об этом проекте
Мы собираемся сделать погодные часы Arduino, которые будут сообщать нам время, дату и температуру. Датчик LM35 сообщит нам температуру, DS3231 сообщит нам дату и время, а мы будем использовать OLED для отображения температуры, даты и времени.
Обязательные компоненты
Компоненты, необходимые для этого проекта, следующие
- Ардуино
- DS3231 (модуль часов реального времени)
- OLED-дисплей (здесь использовался SSD1306)
- SSD1306.pdf
- Lm35
- Соединительные провода
- Макет
Принципиальная схема
Прежде всего, подключите OLED к Arduino. OLED работает с Arduino через SPI, а также через связь I2C, но мы подключили его с помощью связи SPI. Контакты SPI на Arduino - это контакты 8, 9, 10, 11 и 13. Соединения OLED с Arduino следующие:
- Подключите CS OLED к выводу 10 Arduino.
- Подключите постоянный ток OLED к выводу 9 Arduino.
- Подключите RES OLED-дисплея к контакту 8 Arduino.
- Подключите D1 OLED к выводу 11 Arduino.
- Подключите D0 OLED-дисплея к 13-му контакту Arduino.
- Подключите VCC OLED к выводу 5V Arduino.
- Подключите GND OLED к контакту GND Arduino.
После этого подключите модуль DS3231 к Arduino. Модуль DS3231 работает с Arduino через соединение I2C. Контакты для связи I2C на Arduino - это SDA и SCL. Подключите модуль DS3231 к Arduino следующим образом:
- Подключите GND DS3231 к контакту GND Arduino.
- Подключите VCC DS3231 к выводу 5V Arduino.
- Подключите SDA OLED к A4 на Arduino.
- Подключите SCL на OLED-экране к контакту A5 на Arduino.
В конце подключите датчик LM35 к Arduino. Подключите левый вывод LM35 к 5 В на Arduino, средний вывод к A0 на Arduino и левый вывод к заземлению на Arduino.
Вы можете найти здесь полноразмерная схема
Пояснение к коду
Прежде всего, мы добавили библиотеки для модуля DS3231 и OLED. Библиотека Adafruit для OLED имеет больше функций по сравнению с другими библиотеками, используемыми для OLED.
#include #include
Затем мы определили контакты, на которых мы подключили модуль DS3231 и OLED. Модуль DS3231 работает с Arduino через соединение I2C, поэтому мы использовали выводы SDA и SCL Arduino. OLED работает с Arduino через соединение SPI. Поэтому мы инициализировали контакты 8, 9, 10, 11, 13, которые предназначены для связи SPI. После этого мы инициализировали контакт датчика 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 (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); // Устанавливаем дату на 6 июня 2017 г.
Затем мы распечатали «погодные часы» на OLED-экране на 5 секунд.
display.clearDisplay (); display.setTextColor (БЕЛЫЙ); display.setTextSize (2); display.setCursor (0,0); display.print («Погода»); display.setCursor (0,17); display.print («Часы»); display.display (); задержка (5000);
В функции цикла мы считываем данные с LM35 и рассчитываем температуру. Затем получаем время и дату и печатаем их на OLED-экране.
output =analogRead (sensor_pin); temp =(вывод * 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); # определить OLED_MOSI 11 # определить OLED_CLK 13 # определить OLED_DC 9 # определить OLED_CS 10 # определить OLED_RESET 8, ада; const int sensor_pin =A0; температура поплавка; вывод с плавающей запятой; 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); // Устанавливаем дату на 6 июня 2017 года display.clearDisplay (); display.setTextColor (БЕЛЫЙ); display.setTextSize (2); display.setCursor (0,0); display.print («Погода»); display.setCursor (0,17); display.print («Часы»); display.display (); задержка (5000);} void loop () {output =analogRead (sensor_pin); temp =(вывод * 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 (темп); display.print («C»); display.display (); delay (1000);}
Код
- Фрагмент кода 4
- Фрагмент кода 5
- Фрагмент кода №6
Фрагмент кода №4 Обычный текст
display.clearDisplay (); display.setTextColor (БЕЛЫЙ); display.setTextSize (2); display.setCursor (0,0); display.print («Погода»); display.setCursor (0,17); display.print («Часы»); display.display (); задержка (5000);
Фрагмент кода № 5 Обычный текст
output =analogRead (sensor_pin); temp =(вывод * 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); # определение OLED_MOSI 11 # определение OLED_CLK 13 # определение OLED_DC 9 # определение OLED_CS 10 # определение OLED_RESET 8Adafruit_SSD1306 отображение (OLED_MOSI, OLED_CLK, OLED_DC, OLED_DC, OLED_DC, OLED_DC, OLED_DC) sensor_pin =A0; температура поплавка; вывод с плавающей запятой; 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); // Устанавливаем дату на 6 июня 2017 года display.clearDisplay (); display.setTextColor (БЕЛЫЙ); display.setTextSize (2); display.setCursor (0,0); display.print («Погода»); display.setCursor (0,17); display.print («Часы»); display.display (); задержка (5000);} void loop () {output =analogRead (sensor_pin); temp =(вывод * 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 (темп); display.print («C»); display.display (); задержка (1000);}
Схема
Производственный процесс
- Управление эффектом с помощью реальных датчиков
- Самодельные простейшие часы Numitron IV9 с Arduino
- Часы Arduino с исламским временем молитв
- Игра Arduino Pong - OLED-дисплей
- Word Clock с минутным разрешением времени в словах
- Основные часы
- Arduino Temp. Монитор и часы реального времени с дисплеем 3.2
- Берлинские часы
- Игра с дисплеем Nextion
- Простой будильник с DS1302 RTC