
Метеостанция предназначена для измерения температуры, влажности, давления в любых помещениях и за ее пределами. Пригодится для быстрого и мобильного измерения основных параметров погоды. Универсальность и портативность не заставит вас беспокоиться об изменениях погодных условий. Выводит показания на экран.
Описание работы метеостанции:
При подключении питания на экране будут высвечиваться показания температуры, влажности или давления, их отличительные значки и единицы измерения с периодичностью в три секунды.
Нам понадобится:
- 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 выполняются следующие действия:
- Считываем показания температуры и выводим на экран: отличительный знак температуры, показания, единицы измерения. Ждем три секунды и очищаем экран.
- Считываем показания влажности и выводим на экран: отличительный знак влажности , показания, единицы измерения. Ждем три секунды и очищаем экран.
- Считываем показания давления и выводим на экран: отличительный знак давления , показания, единицы измерения. Ждем три секунды и очищаем экран.

Обсуждение