КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Проект 1. Метеостанция (температура, давление, влажность)


Метеостанция предназначена для измерения температуры, влажности, давления в любых помещениях и за ее пределами. Пригодится для быстрого и мобильного измерения основных параметров погоды. Универсальность и портативность не заставит вас беспокоиться об изменениях погодных условий. Выводит показания на экран.

Описание работы метеостанции:

При подключении питания на экране будут высвечиваться показания температуры, влажности или давления, их отличительные значки и единицы измерения с периодичностью в три секунды.


Нам понадобится:

Для реализации проекта нам необходимо установить следующие библиотеки:

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.

Схема сборки:

  • Устанавливаем Trema-модуль барометр BMP280 в 2 посадочную площадку, в верхнюю I2C колодку. Предварительно перевернув на 180 градусов.

  • Полученные результат представлен ниже на рисунке.

Код программы:

#include <iarduino_OLED.h>                                  // Подключаем библиотеку iarduino_OLED.
iarduino_OLED myOLED(0x3C);                                 // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C.
extern uint8_t MediumFont[];                                // Подключаем шрифт MediumFontRus.
                                                            //
#include <iarduino_Pressure_BMP.h>                          // Подключаем библиотеку для работы с датчиками BMP180 или BMP280
iarduino_Pressure_BMP SensorP;                              // Создаём объект SensorP для работы с датчиком адрес которого на шине I2C установлен по умолчанию.
                                                            //
#include <iarduino_AM2320.h>                                // Подключаем библиотеку iarduino_AM2320.
iarduino_AM2320 SensorTH;                                   // Объявляем объект SensorTH для работы с датчиком AM2320, используя функции и методы библиотеки iarduino_AM2320.
                                                            //
const uint8_t Temperature[] PROGMEM = { 24, 24,             // Массив для картинки знака температуры.
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0x02, //
0x01, 0x01, 0x01, 0x02, 0xFC, 0x00, 0xA0, 0xA0, 0x20, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0xFF, 0x00, 0xFE, 0xFF, 0xFE, 0x00, 0xFF, 0x00, //
0x2A, 0x2A, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x1E, 0x21, 0x40, 0x8E, 0x9F, 0x9F, //
0x9F, 0x8E, 0x40, 0x21, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x00};                                                //
                                                            //
const uint8_t Humidity[] PROGMEM = { 24, 24,                // Массив для картинки знака влажности.
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0x30, 0x18, //
0x0C, 0x06, 0x0C, 0x18, 0x30, 0xC0, 0x80, 0x00, 0x00, 0x00, //
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x1C, 0x07, //
0x01, 0x30, 0x78, 0x4C, 0xF8, 0xE0, 0xF0, 0x58, 0xC0, 0x80, //
0x01, 0x06, 0x1C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //
0x00, 0x03, 0x06, 0x08, 0x10, 0x20, 0x20, 0x63, 0x41, 0x40, //
0x43, 0x66, 0x23, 0x21, 0x10, 0x08, 0x06, 0x03, 0x00, 0x00, //
0x00, 0x00};                                                //
                                                            //
const uint8_t Pressure[] PROGMEM = { 24, 24,                // Массив для картинки знака давления.
0x00, 0xC0, 0xE0, 0x30, 0x18, 0x8C, 0x46, 0x26, 0x26, 0x13, //
0x13, 0x13, 0x13, 0x13, 0x13, 0x26, 0x22, 0x46, 0x8C, 0x18, //
0x38, 0xE0, 0xC0, 0x00, 0xFE, 0xFF, 0x01, 0x10, 0x7E, 0x81, //
0x00, 0x00, 0x00, 0x00, 0x20, 0x18, 0x18, 0x04, 0x02, 0x01, //
0x00, 0x00, 0x81, 0x7E, 0x10, 0x01, 0xFF, 0xFF, 0x00, 0x03, //
0x07, 0x1C, 0x18, 0x31, 0x62, 0x60, 0xE0, 0xC0, 0xC0, 0xC0, //
0xC0, 0xC0, 0xC0, 0xE0, 0x60, 0x62, 0x31, 0x18, 0x1C, 0x07, //
0x03, 0x00};                                                //
                                                            //
void setup()                                                //
{                                                           //
  delay(1000);                                              // Задержка 1 секунда.
  SensorP.begin();                                          // Инициируем работу с датчиком (начальная высота по умолчанию = 0 метров)
  SensorTH.begin();                                         // Инициируем работу с датчиком AM2320.
  myOLED.begin();                                           // Инициируем работу с дисплеем.
                                                            //
  myOLED.setFont(MediumFont);                               // Указываем шрифт который требуется использовать для вывода цифр и текста.
  myOLED.print(F("IARDUINO"), OLED_C, OLED_C);              // Выводим надпись по центру. 
  delay(3000);                                              // Задержка 3 секунда.
  myOLED.clrScr();                                          // Чистим экран.
}                                                           //
                                                            //
void loop()                                                 //
{                                                           //
  switch(SensorTH.read())                                   // Читаем показания датчика температуры и влажности.
  {                                                         //
    case AM2320_OK:                                         // Ответ с полученными данными.
    myOLED.drawImage(Temperature,   5, 45, IMG_ROM);        // Выводим на дисплей знак температуры.
    myOLED.print(SensorTH.tem, 43, 40, 1);                  // Выводим на дисплей показания температуры.
    myOLED.drawCircle (100,  30, 3, false, 1);              // Выводим на дисплей обозначение температуры в виде фигуры круга с радиусом 3.
    myOLED.drawCircle (100,  30, 2, false, 1);              // Выводим на дисплей обозначение температуры в виде фигуры круга с радиусом 2.
    delay(3000);                                            // Задержка 3 секунды.
    myOLED.clrScr();                                        // Чистим экран.
                                                            //
    myOLED.drawImage(Humidity,   5, 45, IMG_ROM);           // Выводим на дисплей знак влажности.
    myOLED.print(SensorTH.hum, 45, 40, 1);                  // Выводим на дисплей показания влажности.
    myOLED.print(F("%"), 100, 40);                          // Выводим на дисплей обозначение влажности.
    delay(3000);                                            // Задержка 3 секунды.
    myOLED.clrScr();                                        // Чистим экран.
    break;                                                  // Выходим из оператора case.
  }                                                         //
                                                            // 
  if(SensorP.read(1))                                       // Читаем показания датчика давления.
  {                                                         //
    myOLED.drawImage(Pressure,   5, 45, IMG_ROM);           // Выводим на дисплей знак влажности.
    myOLED.print(SensorP.pressure, 35, 40, 1);              // Выводим на дисплей показания температуры.
    myOLED.print(F("MM"), 100, 40);                         // Выводим на дисплей обозначение влажности. 
    Serial.println(SensorP.pressure);
    delay(1000);                                            // Задержка 3 секунды.
    myOLED.clrScr();                                        // Чистим экран.
  }                                                         //
}                                                           //

Алгоритм работы:

В начале скетча (до кода setup) выполняются следующие действия:

В коде setup выполняются следующие действия:

  • Инициализируем работу с датчиками и дисплеем.
  • Указываем шрифт.
  • Выводим заставку и очищаем экран.

В коде loop выполняются следующие действия:

  • Считываем показания температуры и выводим на экран: отличительный знак температуры, показания, единицы измерения. Ждем три секунды и очищаем экран.
  • Считываем показания влажности и выводим на экран: отличительный знак влажности , показания, единицы измерения. Ждем три секунды и очищаем экран.
  • Считываем показания давления и выводим на экран: отличительный знак давления , показания, единицы измерения. Ждем три секунды и очищаем экран.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями