Метеостанция предназначена для измерения температуры, влажности, давления в любых помещениях и за ее пределами. Пригодится для быстрого и мобильного измерения основных параметров погоды. Универсальность и портативность не заставит вас беспокоиться об изменениях погодных условий. Выводит показания на экран.
Описание работы метеостанции:
При подключении питания на экране будут высвечиваться показания температуры, влажности или давления, их отличительные значки и единицы измерения с периодичностью в три секунды.
Нам понадобится:
- Arduino Uno х 1шт.
- Trema Set Shield х 1шт.
- Trema OLED-дисплей 128x64 х 1шт.
- Trema-модуль барометр BMP280 х 1шт.
- Trema-модуль датчик температуры и влажности I2C х 1шт.
Для реализации проекта нам необходимо установить следующие библиотеки:
- Библиотека iarduino_OLED для работы с Trema OLED-дисплей 128x64.
- Библиотека iarduino_Pressure_BMP для работы с Trema-модуль барометром BMP280.
- Библиотека iarduino_AM2320 для работы с Trema-модуль датчиком температуры и влажности I2C.
О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki - Установка библиотек в Arduino IDE.
Схема сборки:
- Устанавливаем Trema Set Shield в Arduino Uno.
- Устанавливаем Trema OLED-дисплей 128x64 в 3 посадочную площадку, в верхнюю I2C колодку.
- Устанавливаем Trema-модуль барометр BMP280 в 2 посадочную площадку, в верхнюю I2C колодку. Предварительно перевернув на 180 градусов.
- Устанавливаем Trema-модуль датчик температуры и влажности I2C в 6 посадочную площадку, в верхнюю I2C колодку. Предварительно перевернув на 180 градусов.
- Полученные результат представлен ниже на рисунке.
Код программы:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_OLED. #include <iarduino_OLED.h> // Подключаем библиотеку iarduino_OLED. iarduino_OLED myOLED(0x3C); // Объявляем объект myOLED, указывая адрес дисплея на шине I2C: 0x3C. extern const 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) выполняются следующие действия:
- Подключаем библиотеку iarduino_OLED для работы с Trema OLED-дисплей 128x64.
- Объявляем объект myLED, с указанием адреса дисплея на шине I2C.
- Подключаем шрифт.
- Подключаем библиотека iarduino_Pressure_BMP для работы с Trema-модуль барометром BMP280.
- Объявляем объект SensorP для работы с датчиком давления.
- Библиотека iarduino_AM2320 для работы с Trema-модуль датчиком температуры и влажности I2C.
- Объявляем объект SensorTH для работы с датчиком температуры и влажности.
- Объявляем двумерный массивы для задействованных картинок (отличительные знаки температуры, влажности или давления).
В коде setup выполняются следующие действия:
- Инициализируем работу с датчиками и дисплеем.
- Указываем шрифт.
- Выводим заставку и очищаем экран.
В коде loop выполняются следующие действия:
- Считываем показания температуры и выводим на экран: отличительный знак температуры, показания, единицы измерения. Ждем три секунды и очищаем экран.
- Считываем показания влажности и выводим на экран: отличительный знак влажности , показания, единицы измерения. Ждем три секунды и очищаем экран.
- Считываем показания давления и выводим на экран: отличительный знак давления , показания, единицы измерения. Ждем три секунды и очищаем экран.
Обсуждение