Монитор температуры и реальные часы на Arduino Due с TFT-дисплеем 3.2"
Компоненты и материалы
| Arduino Due | 1 |
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
Введение

Друзья, добро пожаловать! Это Ник от educ8s.tv. Сегодня сделаем часы реального времени и термометр на большом цветном дисплее. На экране: текущая дата и время, текущая температура, а внизу — зафиксированные минимум и максимум за сессию. Простая, но полезная вещь. Поехали!
Шаг 1: Закупка деталей
- Arduino Due
- 3.2" цветной TFT-дисплей (HX8357C или HX8357B)
- Модуль RTC DS3231
- Pin header (розетки)
- Провода
Стоимость ~$24: Due ~$14, дисплей ~$8, RTC ~$2.
Шаг 2: Модуль реального времени DS3231

DS3231 — точный I2C RTC с температурокомпенсированным кварцем (TCXO) и встроенным датчиком температуры. Работает от батарейки CR2032 годами. Хранит секунды, минуты, часы, день, дату, месяц, год (с учётом високосных). Форматы 12/24ч, два будильника, квадратный выход. I2C-интерфейс. Цена ~$2 с батарейкой.
Мы используем его для времени и измерения температуры.
Шаг 3: 3.2" TFT-дисплей (HX8357C или HX8357B)

Хотел большой дисплей для проектов. Цена <$10 за 3.2" 480×320 — не устоял. На обратной стороне слот microSD (пока не использовал). На плате есть 3.3V стабилизатор — работает и с 5V, и с 3.3V логикой.
Два варианта контроллера: HX8357C или HX8357B. Библиотека одна для обоих.
Библиотека дисплея: TFT_HX8357_Due. В User_Setup.h закомментируйте строку 13, раскомментируйте 14, если у вас HX8357C (как у меня).
Шаг 4: Подключение




Использую Arduino Due — он быстрее Mega и с большей памятью, идеален для графики.
RTC подключаю через pin header: 4 пина — 3.3V, GND, SDA, SCL. Сгибаю ножки, вставляю в Due, соединяю дупёрами.
Дисплей просто вставляется в контакты Due (два пина можно оставить свободными). Включаем — работает!
Шаг 5: Код проекта

Две библиотеки:
- Display Library (TFT_HX8357_Due)
- DS3231 Library (Sodaq_DS3231)
Установите их — проект скомпилируется.
Сначала нужно установить время в RTC (если не задано). В функции setRTCTime впишите текущую дату/время:
void setRTCTime(){
DateTime dt(2016, 4, 4, 13, 56, 30, 1); // Year, Month, Day, Hour, Min, Sec, DayOfWeek
rtc.setDateTime(dt);
}
Раскомментируйте вызов в setup(), загрузите, затем закомментируйте обратно и загрузите снова.
void setup(){
rtc.begin();
tft.init();
tft.setRotation(1);
tft.fillScreen(0xC618);
delay(100);
printUI();
// setRTCTime(); // после первой загрузки закомментировать
}
Основной цикл прост: читаем температуру, время, обновляем экран, трекаем мин/макс.
void loop(){
float temperature = rtc.getTemperature();
getAndPrintTime();
printTemperature(temperature);
if(temperature > maxTemperature) { maxTemperature = temperature; updateMaxTemperature(); }
if(temperature < minTemperature) { minTemperature = temperature; updateMinTemperature(); }
delay(1000);
}
Полный код: DueRTC.ino (прикреплён). Актуальная версия на сайте: educ8s.tv.
Шаг 6: Заключение

Мало кода, мало денег — полезный прибор. Планирую развить в продвинутую метеостанцию: больше датчиков, графики, Wi-Fi. Arduino Due — идеальная база: быстро, много памяти. Что думаете? Как развивать? Пишите в комментариях!
Код
Фрагменты кода
void setup(){ rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618); delay(100); printUI(); setRTCTime(); }
void setup(){ rtc.begin(); tft.init(); tft.setRotation(1); tft.fillScreen(0xC618); delay(100); printUI(); //setRTCTime(); }
void loop(){ float temperature = rtc.getTemperature(); getAndPrintTime(); printTemperature(temperature); if(temperature>maxTemperature) { maxTemperature = temperature; updateMaxTemperature(); } if(temperature
Полезные ссылки
Производственный процесс
- Создание аудио-эффектов, управляемых датчиками, с набором Satellite CCRMA
- Часы реального времени на Arduino с расчётом времени намаза
- Точные словесные часы: отображение времени в словах с точностью до минуты
- Интерактивный HMI-проект на Nextion с Arduino Mega и датчиками
- Цифровые часы на TM1637 с настройкой времени и будильником — прототип на Arduino Nano
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Вывод данных BME280 (температура, влажность, давление) на сенсорный экран Nextion
- Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
- Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код