Содержание:
Для точного измерения температуры и влажности возьмите датчик DHT22 – он выдаёт показания с погрешностью до ±0.5°C и ±2% при диапазоне от -40°C до +80°C. Подключите его к цифровому пину, например, D2, и используйте библиотеку Adafruit DHT для считывания данных. Учтите: этот сенсор требует подтягивающего резистора на 10 кОм.
Атмосферное давление удобнее фиксировать модулем BMP280 с интерфейсом I²C. Он работает при напряжениях от 1.71V до 3.6V, что позволяет запитать его напрямую от платы. Для калибровки снимите 5–10 показаний подряд и вычислите среднее значение – это снизит влияние случайных колебаний.
Добавьте анемометр из 3D-печатных лопастей и геркона. Закрепите магнит на оси вращения, а датчик – в зоне его действия. Каждый импульс соответствует одному обороту. Рассчитайте скорость ветра по формуле: V = (2πr × N) / t, где r – радиус лопастей, N – количество импульсов за время t.
Сборка устройства для измерения погодных условий
Для точного считывания температуры и влажности подключите датчик DHT22 к цифровому пину 2 на плате. Используйте библиотеку DHT.h
для обработки данных. Пример кода:
#include
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
Serial.print("Влажность: ");
Serial.print(h);
Serial.print("% Температура: ");
Serial.print(t);
Serial.println("°C");
delay(2000);
}
Для замера атмосферного давления подойдёт модуль BMP280. Подключите его через I2C (SDA – A4, SCL – A5). Библиотека Adafruit_BMP280
упростит работу:
#include
#include
Adafruit_BMP280 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin(0x76)) {
Serial.println("Ошибка BMP280");
while (1);
}
}
void loop() {
Serial.print("Давление: ");
Serial.print(bmp.readPressure() / 133.322);
Serial.println(" мм рт.ст.");
delay(1000);
}
Добавьте анемометр для замера скорости ветра. Подключите герконовый датчик к пину 3, используя подтягивающий резистор 10 кОм. Расчёт скорости в м/с:
volatile int count = 0;
void setup() {
pinMode(3, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(3), countPulse, FALLING);
}
void loop() {
count = 0;
delay(1000);
float speed = count * 2.4 / 100; // Калибровка под конкретную модель
Serial.print(speed);
Serial.println(" м/с");
}
void countPulse() {
count++;
}
Соберите схему на макетной плате или создайте печатную плату для устойчивости. Корпус должен защищать электронику от осадков – подойдёт пластиковый бокс с отверстиями для датчиков.
Датчики для измерения температуры, влажности и давления
Для точного замера температуры подойдёт DS18B20 – цифровой датчик с погрешностью ±0,5°C в диапазоне от -10°C до +85°C. Аналоговый LM35 проще в подключении, но требует калибровки.
Датчики влажности
DHT22 измеряет влажность от 0% до 100% с точностью ±2%. Для бюджетных проектов подойдёт DHT11, но его погрешность выше – ±5%. Оба датчика также снимают показания температуры.
Датчики давления
BMP280 фиксирует давление в диапазоне 300–1100 гПа с точностью ±1 гПа. Для более точных замеров используйте BME280, который дополнительно измеряет влажность.
Для одновременного сбора данных по всем параметрам выберите BME280 – он компактен и требует минимум проводов для подключения.
Подключите дисплей по интерфейсу I2C, используя контакты A4 (SDA) и A5 (SCL) для плат на базе ATmega328. Для других моделей проверьте распиновку в документации.
Настройка библиотек
Установите библиотеки LiquidCrystal_I2C и Wire через менеджер библиотек в IDE. Добавьте в код:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Адрес 0x27, 16 символов, 2 строки
В функции setup() инициализируйте дисплей:
void setup() {
lcd.init();
lcd.backlight();
lcd.print("Температура:");
}
Для динамического обновления данных в loop() используйте:
void loop() {
float temp = dht.readTemperature();
lcd.setCursor(0, 1);
lcd.print(temp);
lcd.print(" C");
delay(1000);
}