Точный барометр на Arduino UNO и Nano: два циферблата, три шаговых двигателя, прогноз погоды
Компоненты и материалы
| Arduino Nano R3 | 1 шт. (управляет 3-часовым дисплеем и прогнозом) |
| Arduino UNO (Atmega328 на вероборде) | 1 шт. (основной барометр + 6-часовой дисплей + RTC) |
| Датчики давления BMP180 (I2C) | 2 шт. (по одному на каждый МК) |
| RTC DS3231 (модуль с AT24C32) | 1 шт. (на UNO) |
| Шаговые двигатели NEMA 17 (1.8°, 1А, 13 Н·см) | 3 шт. (основной, 6ч, 3ч) |
| Драйверы A4988 | 3 шт. (в режиме 1/16 шага) |
| LCD 20x4 (I2C) | 2 шт. (инфо-дисплеи) |
| Источники питания: AMS1117 3.3В (для BMP180), LM2596 (12В→5В) | по 1 шт. |
| Светодиоды 3мм (диапазон, прогноз) | 10+ шт. |
| Вероборда, перемычки, корпус (рамки 30×30 см или часы 12") | 1 компл. |
О проекте
Полноценный настенный барометр с аналоговыми циферблатами (стрелки на шаговых двигателях). Три шкалы:
- Основной барометр (12"): абсолютное давление в гПа, обновление каждые 10 мин.
- 6-часовой тренд: изменение давления за 6 часов.
- 3-часовой тренд (повышенное разрешение 0.5 гПа): используется для прогноза погоды.
Все три шкалы имеют расширенный диапазон (±5, ±9 делений) с индикацией LEDs. Два LCD 20x4 внутри показывают детали. Прогноз погоды — 8 LEDs на основе текущего давления и 3-часового тренда (алгоритм Замба/МетОфис).
Сравнение с обычным барометром
Обычный анероидный барометр показывает только текущее давление и требует ручной установки контрольной стрелки. Этот прибор автоматически фиксирует тренды за 3 и 6 часов, выдаёт прогноз по 8 состояниям (ясно, дождь, гроза, переменная облачность и т.д.) и не требует ручной калибровки после настройки.
Расширенный диапазон шкал
При выходе за основной диапазон загораются LEDs: зелёный — отрицательный экстремум (давление падает), красный — положительный. Если выходит за расширенный (±9) — горят оба. Стрелка показывает значение по модулю, нужно прибавить/вычесть 10.
Алгоритм прогноза (8 LEDs)
| Давление | Тренд 3ч | Прогноз (LEDs) |
|---|---|---|
| < 1009 гПа | ≥ 0 (растёт/стабильно) | Clearing (прояснение) + Change |
| < 1009 | -1.5 … 0 (медленно падает) | Rain (дождь) + Threat |
| < 1009 | < -1.5 (быстро падает) | Storm (гроза) + Threat |
| 1009–1022 | -1.5 … +1.5 | Fair (переменная облачность) + No Change |
| 1009–1022 | > +1.5 | Clearing + Fair |
| 1009–1022 | < -1.5 | Rain + Change |
| > 1022 | ≥ 0 | Dry (сухо) + Fair |
| > 1022 | -1.5 … 0 | Fair + No Change |
| > 1022 | < -1.5 | Change + Threat |
Конструкция и монтаж
Вариант 1: Классический корпус часов 12"
Куплен на eBay («case only»). Дуб, петливый циферблат, стекло. Новый циферблат вырезан из алюминия 1.5 мм, декаль — водяной декаль на 잉кжете + акриловый лак.
Вариант 2: Современный корпус из двух фоторамок 30×30 см
Две одинаковые рамы склеены задними стенками — двойная глубина. Циферблат (алюминий) закреплён на усиливающих профилях (уголок алюминиевый + деревянные блоки). Вся электроника на обратной стороне циферблата. Корпус крепится к стене на врезных петлях GTV 270° с быстрым освобождением — прибор открывается как дверца для доступа к настройкам и LCD.
Циферблат и стрелки
- Материал: алюминий 1.5 мм, грунт + античный белый + матовый лак.
- Разметка: печать на А3 → центровка → сверление (3 мм для LEDs, под вал двигателей).
- Декаль: водяная декаль на прозрачной бумаге, выравнивание по крестикам отверстий.
- Стрелки: комбинированы из донорских кварцевых секундных. Крепление на Blu Tack (липкая масса) — надежно, но снимаемо.
Электрика: Вероборда и схемы
Две вероборды: основная (UNO, Nano, драйверы, RTC, BMP180, стабилизаторы) и LED-борда (только светодиоды циферблата, разъемы Dupont для отсоединения). Питание 12В → LM2596 → 5В для логики и двигателей, AMS1117 → 3.3В для BMP180. Важно: электролитический конденсатор 470+ мкФ на входе двигателей (защита A4988 от скачков).
Настройка драйверов A4988
- Режим 1/16 шага: MS1=HIGH, MS2=HIGH, MS3=HIGH (на модулях часто перемычки).
- Ток ограничивается потенциометром: Vref = I_max × 8 × Rsense (обычно 0.05 Ом). Для NEMA 17 1А ставьте ~0.7–0.8А → Vref ≈ 0.28–0.32В.
- EN, RST, SLP — подтянуты к VCC (включено). STEP/DIR от Arduino.
Программная часть
Два независимых скетча: для UNO (основной + 6ч) и для Nano (3ч + прогноз). Обмен — только импульс «час» от UNO к Nano (пин 13 UNO → пин 3 Nano).
Скетч UNO: BarometerA4988_23.ino (основные функции)
- Библиотеки:
SFE_BMP180,Wire,LiquidCrystal_I2C,AccelStepper. - RTC DS3231: чтение/запись времени (UTC, без летнего), ручная настройка через потенциометр и кнопки на вероборде (режимы: часы/минуты RTC, шаг основной стрелки, шаг 6-ч стрелки, дробный шаг).
- Каждые 10 мин (в 00,10,20,30,40,50 мин:59 сек) — замер давления BMP180, перевод в приведенное к уровню моря.
- Каждый час (в 00:15) — импульс на Nano, шаг 6-ч стрелки на разницу давлений (масштаб: 1 гПа = 160 микрошагов = 1/16 оборота вала 1.8°).
- LCD1: время UTC, текущее давление, 6-ч тренд, часовая дельта.
- Автоподсветка LCD отключается переключателем (экономия).
Скетч Nano: BarometerA4988_3hour__21.ino
- Принимает часовой импульс от UNO → замер своего BMP180 → обновляет кольцевой буфер 5 значений (hour0…hour4).
- Вычисляет 3-ч разницу (hourN - hourN-3), шагает 3-ч стрелкой (0.5 гПа = 80 микрошагов).
- Управляет 8 LEDs прогноза + 2 LEDs расширенного диапазона 3ч шкалы.
- LCD2: текущее давление, 3-ч тренд (с 0.5 гПа), текст прогноза.
- Ручная настройка 3-ч стрелки: 4 кнопки (Slow Fwd/Bwd, Step Fwd/Bwd).
Код (фрагменты, полные файлы в разделе Code)
UNO — ключевые функции
// Замер давления BMP180
status = pressure.startTemperature();
delay(status);
status = pressure.getTemperature(T);
status = pressure.startPressure(3);
delay(status);
status = pressure.getPressure(P, T);
seaPressure = pressure.sealevel(P, ALTITUDE); // ALTITUDE = 118м (Кенли, Саппорт)
// Шаг основной стрелки (1 гПа = 160 шагов 1/16)
stepper.setCurrentPosition(0);
while (stepper.currentPosition() != pressureDiff * 160) {
stepper.setSpeed(400); stepper.runSpeed();
}
// Часовой импульс для Nano
digitalWrite(hourPulse, HIGH); delay(15); digitalWrite(hourPulse, LOW);
Nano — ключевые функции
// В loop(): ожидание импульса hourPulse (HIGH)
getPressure(); // свой BMP180
// Кольцевой буфер hour0..hour4
hourDiff = hourN - hourN-3; // 3-часовая разница
// Шаг 3ч стрелки: 0.5 гПа = 80 шагов
stepper.setCurrentPosition(0);
while (stepper.currentPosition() != hourDiff * 80) { // знак учитывается
stepper.setSpeed(400); stepper.runSpeed();
}
// Прогноз — getForecast() по таблице выше
Схемы
Видео и таймлапс
Доступно 4K таймлапс-видео: radaр дождя + реакция барометра (стрелки + LEDs прогноза) к проходящему фронту.
Это проект уровня «мастер» — требует навыков пайки, вероборда, механики, настройки шаговых драйверов. Результат — точный, автономный, красивый настенный прибор для метеоэнтузиаста.
Производственный процесс
- Анероидный барометр: конструкция, история и будущее измерения давления
- Тонометр: дизайн, производство и будущие тенденции
- Огнетушители: типы, конструкция и будущие тенденции
- Точные манометры для промышленности и безопасности: конструкция, материалы, производство
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Компактная метеостанция: Arduino Nano + ESP8266, BMP280, OLED / Nokia 5110 LCD
- Find Me: Умный поисковик вещей на Arduino и Bluetooth