Умная метеостанция на Arduino UNO с интеграцией AWS: полное руководство
Компоненты и материалы
| Компонент | Описание | Кол-во |
|---|---|---|
| Arduino UNO | Основной контроллер | 1 |
| USB-A — Micro-USB кабель | Питание и прошивка | 1 |
| Беспайковая макетная плата | Сборка схемы | 1 |
| Перемычки | Соединения | 1 |
| Оргстекло 4 мм | Корпус (лазерная резка) | 1 |
| Резистор 221 Ом | Подсветка LCD | 1 |
| Adafruit LCD 16x2 (I2C, белый на синем) | Индикатор данных | 1 |
| DS1307 RTC (I²C) | Часы реального времени | 1 |
| Фоторезистор (LDR) | Измерение освещенности | 1 |
| DHT11 Температура и влажность | Среда | 1 |
| LM35 Температура | Точная аналоговая температура | 1 |
| IR-приемник | Управление пультом | 1 |
| Датчик уровня воды | Уровень жидкости/снега | 1 |
| Sunfounder RFID Starter Kit | Доп. модули (не используется в основном коде) | 1 |
Инструменты
- Лазерный резак (для корпуса из оргстекла)
О проекте
AWS (Arduino Weather Station) — круглосуточный мониторинг среды на базе Arduino с полным набором датчиков. Компактное «железо» помещается в лазерно-вырезанный корпус.
Цель
Сбор данных с датчиков и вывод на LCD. Малый размер позволяет уместить всё в небольшой коробке.
Используемые датчики








Датчик уровня воды/снега
Показывает уровень в баке, предотвращает перелив, позволяет узнать заполненность в любой момент.
DHT11 — влажность и температура
Калиброванный цифровой выход, высокая надежность, долгая стабильность, быстрый отклик, помехоустойчивость, низкая стоимость.
Фоторезистор (LDR)
Чувствителен к свету: в темноте сопротивление высокое, при освещении падает до единиц Ом. Измеряет интенсивность света / темноту в %.
LCD I2C 1602
Две линии: SDA, SCL. Потенциометр на модуле регулирует подсветку. Напряжение 5В или 3.3В.
DS1302 RTC (в коде используется DS1302, в списке — DS1307)
Часы/календарь + 31 байт RAM. Формат времени чч:мм:сс, дата гггг/мм/дд. Батарейка на 10 лет.
LM35 — точность температуры
АЦП: ADC = входное_напряжение * 205 (при опоре 5В). Высокая точность.
IR-приемник и пульт
Кнопки пульта переключают экраны на LCD:
- 0 — дата и время (10 сек, возврат в Home)
- 1 — температура (LM35) и влажность (DHT11)
- 2 — % темноты (LDR)
- 3 — уровень жидкости (мм)
- Cycle — циклический просмотр всех 4 экранов по 4 сек





AWS — итоговый прибор
Шаг 1: Корпус
Разработка в AutoCAD, резка лазером, сборка на клее.


Шаг 2: Схема и монтаж
Схема в Fritzing, подключения простые.

Шаг 3: Программирование
Arduino IDE, все нужные библиотеки.
Шаг 4: Как работает
AWS забирает данные среды, пульт ИК переключает 5 экранов на LCD:
- Home — заставка «Arduino Weather Station» с эффектом появления. Возврат сюда после любого экрана.
- Date/Time — кнопка 0, задержка 10 сек.
- Temp/Hum — кнопка 1, LM35 + DHT11, 10 сек.
- Darkness — кнопка 2, % темноты LDR, 10 сек.
- Fluid Level — кнопка 3, мм жидкости, 10 сек.
Кнопка Cycle — по одному кругу всех 4 экранов по 4 сек.





Предостережения
- Защита от влаги и агрессивных сред.
- После дождя — опорожнить емкость, прочистить датчик уровня.
- Аккумулятор ~2 дня, зарядка 2 часа.
- ИК-приемник может глючить при ~0°C — помогает нажатие Reset.
- RTC DS1302 сохраняет время при сбросе (батарейка 10 лет). При полном отключении питания время сбивается — нужно перезалить скетч с закомментированной установкой времени.
Код (основной скетч)
//include sketch libraries
#include <IRremote.h>
#include <stdio.h>
#include <string.h>
#include <DS1302.h>
#include <dht.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#define lmPin A1
LiquidCrystal_I2C lcd(0x27, 16, 2);
dht DHT;
const int DHT11_PIN = 4;
const int waterSensor = 0;
int waterValue = 0, mmwaterValue = 0;
int sensorPin = A3;
int luce = 0, pluce = 0;
float tem = 0;
long lmVal = 0;
const int irReceiverPin = 3;
IRrecv irrecv(irReceiverPin);
decode_results results;
uint8_t RST_PIN = 5, SDA_PIN = 6, SCL_PIN = 7;
char buf[50], day[10];
DS1302 rtc(RST_PIN, SDA_PIN, SCL_PIN);
void print_time() {
Time t = rtc.time();
memset(day, 0, sizeof(day));
switch (t.day) {
case 1: strcpy(day, "Sun"); break;
case 2: strcpy(day, "Mon"); break;
case 3: strcpy(day, "Tue"); break;
case 4: strcpy(day, "Wed"); break;
case 5: strcpy(day, "Thu"); break;
case 6: strcpy(day, "Fri"); break;
case 7: strcpy(day, "Sat"); break;
}
snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day, t.yr, t.mon, t.date, t.hr, t.min, t.sec);
Serial.println(buf);
lcd.setCursor(2, 0); lcd.print(t.yr); lcd.print("-"); lcd.print(t.mon/10); lcd.print(t.mon%10); lcd.print("-"); lcd.print(t.date/10); lcd.print(t.date%10); lcd.print(" "); lcd.print(day);
lcd.setCursor(4, 1); lcd.print(t.hr); lcd.print(":"); lcd.print(t.min/10); lcd.print(t.min%10); lcd.print(":"); lcd.print(t.sec/10); lcd.print(t.sec%10);
}
void setup() {
Serial.begin(9600);
rtc.write_protect(false); rtc.halt(false);
irrecv.enableIRIn();
lcd.init(); lcd.backlight();
pinMode(sensorPin, INPUT);
Time t(2017, 12, 9, 11, 20, 00, 7);
rtc.time(t);
}
void loop() {
// Анимация заставки "Arduino Weather Station" посимвольно...
if (irrecv.decode(&results)) {
if (results.value == 0xFF6897) { /* 0 - Time */ }
if (results.value == 0xFF30CF) { /* 1 - Temp/Hum */ }
if (results.value == 0xFF18E7) { /* 2 - Darkness */ }
if (results.value == 0xFF7A85) { /* 3 - Fluid Level */ }
if (results.value == 0xFF9867) { /* Cycle - все экраны по 4 сек */ }
}
}
Заставку удобнее делать через switch/case.
Заключение
Сделанная метеостанция учитывает время, собирает эко-данные, выводит на LCD под управлением ИК-пульта.
Файлы
- Код: AWS_code.ino (полный листинг выше)
- Корпус (CAD): box_a5et5f4U9F.dwg
- Схема (Fritzing): aws_DMDwb4iUZp.fzz
Производственный процесс
- Продвинутая метеостанция v2.0: мониторинг температуры, давления, влажности и высоты в реальном времени
- TinyML-детектор языка на Arduino Nano 33 BLE Sense с Edge Impulse
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Автоматизированная барная станция «6-Сhooter» на Arduino — Собираем коктейльный робот своими руками
- Цифровые кости на Arduino: генератор случайных чисел с LCD-дисплеем и кнопкой
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- Сборка аудиореактивной настольной лампы на Arduino Nano
- Высокопроизводительный регистратор данных для метеозонда на Arduino
- Портативная метеостанция на Arduino Nano за $10: DHT22, BMP180 и LCD
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10