Метеостанция с дисплеем

Проекты на Arduino Uno и Slot Shield

Метеостанция должна не только измерять температуру воздуха и относительную влажность, но и выводить результаты измерений на экран. Самый простой вариант — использовать четырёхразрядный индикатор Quad Display.

Управляющая плата в метеостанции это оригинальная Arduino Uno. За температуру и влажность отвечает цифровой метеосенсор.

Что потребуется

Полный сет компонентов проекта. В сет входят:

Видеоинструкция

Как собрать

Установите Troyka Slot Shield на Arduino Uno

Подключите метеодатчик к пинам I²C разъёма A.

Вставьте Quad Display в разъёмы E и F. Пин CS подключите к 10 пину Arduino.

Барометр вставьте в пины I²C разъёма B.

Скетч

Прошейте контроллер скетчем через Arduino IDE.

weather-station-display.ino
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с метеосенсором
#include <TroykaMeteoSensor.h>
// Подключаем библиотеку для работы с дисплеем
#include <QuadDisplay2.h>
 
// создаём объект для работы с метеосенсором
TroykaMeteoSensor meteoSensor;
// создаём объект класса QuadDisplay и передаём номер пина CS
QuadDisplay qd(10);
 
// создаем объект класса long для хранения счетчиков
unsigned long respite_Time = 0;
unsigned long respite_Meteo = 0;
 
// создаем объект для регулировки времени показа значений на экране
int slowdown_qd = 1000;
 
void setup() {
  // инициализация дисплея
  qd.begin();
  // инициализируем метеосенсор
  meteoSensor.begin();
}
 
void loop() {
  // запускаем бесконечный счетчик. Его содержимое будет обрабатываться каждые 1000 миллисекунд
  if (millis() - respite_Time > slowdown_qd) {
    // запускаем функции вывода температуры и влажности по очереди
    if (millis() - respite_Meteo < 2 * slowdown_qd) {
      showTemperatureC();
    }
    else if (millis() - respite_Meteo < 3 * slowdown_qd ) {
      showHumidity();
    }
    // гасим экран и обнуляем цикл
    else if (millis() - respite_Meteo < 4 * slowdown_qd ) {
      qd.displayDigits(QD_NONE, QD_NONE, QD_NONE, QD_NONE);
      respite_Meteo = millis();
    }
    respite_Time = millis();
  }
}
 
// функция работы датчика температуры
void showTemperatureC() {
  // считываем данные с датчика
  int stateSensor = meteoSensor.read();
  // проверяем состояние данных
  switch (stateSensor) {
    // выводим показания температуры на дисплей
    case SHT_OK:
      qd.displayTemperatureC(meteoSensor.getTemperatureC());
      break;
    // выводим сообщение "Errd", если ошибка данных или сенсор не подключён
    case SHT_ERROR_DATA:
      qd.displayDigits(QD_E, QD_r, QD_r, QD_d);
    // выводим сообщение "ErrC", если ошибка контрольной суммы
    case SHT_ERROR_CHECKSUM:
      qd.displayDigits(QD_E, QD_r, QD_r, QD_C);
      break;
  }
}
 
// функция работы датчика влажности
void showHumidity() {
  // считываем данные с датчика
  int stateSensor = meteoSensor.read();
  // проверяем состояние данных
  switch (stateSensor) {
    // выводим показания влажности на дисплей
    case SHT_OK:
      qd.displayHumidity(meteoSensor.getHumidity());
      break;
    // выводим сообщение "Errd", если ошибка данных или сенсор не подключён
    case SHT_ERROR_DATA:
      qd.displayDigits(QD_E, QD_r, QD_r, QD_d);
    // выводим сообщение "ErrC", если ошибка контрольной суммы
    case SHT_ERROR_CHECKSUM:
      qd.displayDigits(QD_E, QD_r, QD_r, QD_C);
      break;
  }
}

Часто задаваемые вопросы

Где скачать необходимые библиотеки и как их установить?
У моего модуля QuadDisplay всего три ноги и расположены они слева. Можно ли использовать его в этом проекте?

У вас предыдущая версия модуля. Она снята с производства пару лет назад. С этим скетчем, библиотекой и схемой сборки модуль работать не будет.