Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
Компоненты и материалы
| Компонент | Количество |
|---|---|
| SparkFun Arduino Pro Mini 328 — 5V/16MHz | 1 |
| Arduino UNO | 1 |
| Датчик температуры (LM35DZ) | 1 |
| Транзистор PN2907A (PNP) | 1 |
| Фоторезистор (LDR) | 1 |
| Резистор 10 кОм | 1 |
| Резистор 1 кОм | 1 |
| Солнечная панель 5V 1.5W | 1 |
| DC-DC преобразователь повышающий (5V) | 1 |
| Модуль зарядки LiPo | 1 |
| Разъемы JST | 1 комплект |
| Корпус для 4×АА батарей | 1 |
| Сервопривод (Tower Pro MG996R или аналогичный) | 1 |
| Литий-ионный аккумулятор 3.6V (18650) | 1 |
| Муфта сервопривода | 1 |
| Конденсатор 100 нФ | 1 |
| Печатная плата (OSH Park или аналогичная) | 1 |
| Монтажные провода | 1 комплект |
Необходимые инструменты
- Паяльник
- Дрель
- Припой
- Кусачки
- Обезжириватель/стреппер для проводов
- Мультиметр
- Дремель или мини-шлифмашина
- Макетная плата / печатная плата
- Термоусадка
Приложения и сервисы
- Arduino IDE
О проекте
Этот проект представляет улучшенную версию моих первых автоматизированных солнечных горизонтальных штор. Оригинальный дизайн работал почти 4 месяца, прежде чем выявились конструктивные недостатки.
Задачи штор
- Открываются (поворот на 85°) утром для впускания света.
- Закрываются (0° — ламели вниз) вечером для приватности.
- Закрываются (165° — ламели вверх, против солнца) при температуре выше 30 °C (~86 °F) — порог настраиваемый.
- Работают полностью автономно: без внешних проводов, коробок и устройств (проходят «тест жены» — Wife Acceptance Factor).
- Достаточно устойчивы, чтобы не требовать частой замены батарей.
- Стоимость ~$50 (без учета инструментов и времени).
Окно находится на втором этаже над входной дверью, ориентировано на юг-юго-восток. Зимой солнце освещает его большую часть дня — хорошо для солнечной зарядки. Летом солнце уходит за крышу к полудню, а панель в окне затенена утром — зарядки не хватает.
Выявленные проблемы и решения
- Проблема: дом не ориентирован строго на юг. Решение: лучшее размещение солнечной панели.
- Проблема: сервопривод потребляет 13 мА в режиме ожидания. Решение: высоковольтный ключ на PNP-транзисторе (High-Side Switch).
- Проблема: 6-вольтовая солнечная панель выдавала >6 В на солнце, модуль зарядки (4.5–5.5 В) отключался. Решение: панель 5 В.
- Проблема: отсутствие логирования — сложная диагностика. Решение: запись в EEPROM.
- Проблема: нет разъемов для отключения панели/аккумулятора. Решение: разъемы JST между батареей/панелью и схемой.
- Проблема: измерения температуры/света делались от нестабильного 5 В DC-DC, а не от стабильного VCC Arduino. Решение: использовать стабилизированный 5 В с Arduino Pro Mini.
Шаг 1: Список деталей
Использую Arduino — знакомая платформа. Заказываю у SparkFun (локально, можно забрать в день заказа) и на banggood.com / taydaelectronics.com (дешево, но долгая доставка).
- Arduino Pro Mini ($10 — SparkFun)
- Arduino Uno — для прошивки Mini (специальные кабели не понадобятся)
- LM35DZ ($1.23 — Tayda)
- PN2907A ($0.05 — Tayda)
- LDR ($1.24 за 10 шт — banggood)
- Резистор 10 кОм ($0.01 — Tayda)
- Резистор 1 кОм
- Солнечная панель 5V 1.5W ($4.07 — banggood)
- DC-DC Booster 5V ($1.38 — banggood)
- Модуль зарядки LiPo ($2.89 за 3 шт — banggood)
- Разъемы JST ($3.33 за 60 шт — banggood)
- Литий-ионный аккумулятор 3.6V ($15.39 за 4 шт с зарядкой — Amazon)
- Корпус 18650 ($1 — SparkFun)
- Сервопривод (Hitec HS-325HB из местного магазина, момент подбирался экспериментально)
- Муфта сервопривода ($5 — SparkFun)
- Конденсатор 100 мкФ ($0.03 — Tayda)
- Монтажные провода ($17.79 — Amazon)
- Печатная плата ($2.74 за 10 шт — Amazon)
Шаг 2: Инструменты
- Дрель, паяльник, припой, кусачки, стреппер, мультиметр, дремель, макетная плата, термоусадка
Шаг 3: Прототипирование
Собрал схему на макетной плате для написания кода и замеров тока/напряжения.
- Подключите модуль зарядки к аккумулятору и солнечной панели (плюс к плюсу, минус к минусу).
- Плюс панели — на аналоговый вход A0 (логирование напряжения панели).
- Аккумулятор — на вход DC-DC бустера.
- Плюс аккумулятора — на A1 (логирование напряжения батареи).
- Выход бустера 5 В — на RAW Arduino.
- Земля бустера — общая земля.
- Вывод VCC Arduino (стабильные 5 В) — ко всем датчикам.
- Сервопривод питание — через PNP-транзистор от выхода бустера.
- LDR + 10 кОм к земле, точка соединения — на A3 (освещенность).
- LM35DZ: питание 5 В (VCC Arduino), земля — общая, выход — на A2 (температура).
- PN2907A: эмиттер — 5 В от бустера, база через 1 кОм на pin 11 (управление), коллектор — питание сервопривода.
- Земля сервопривода — общая земля.
- Сигнальный провод сервопривода — pin 10 (PWM).
При прототипировании солнечную панель и модуль зарядки можно не подключать.
Важное открытие: простое подключение сервопривода добавило 14 мА тока покоя. Низковольтный ключ (Low-Side Switch) на NPN не помог — ток оставался высоким. PNP в схеме High-Side Switch решил проблему: в покое ток стал таким, будто сервопривода нет.
Шаг 4: Программирование
Для прошивки Pro Mini использовал Arduino Uno как программатор (снял микроконтроллер с Uno, соединил 5V, GND, TX→TX0, RX→RXI, RESET→RST). В Arduino IDE выбираю «Arduino Pro or Pro Mini». Можно перепрошивать без разборки.
Скетч SmartBlinds доступен на GitHub (ссылки в разделе Code). Используется библиотека LowPower (rocketlabs) для сна и класс EEPROMLog для логирования.
Шаг 5: Начало сборки
Припаял твердые провода к разъемам JST для удлинения и удобства отключения. Солнечной панели добавил ~60 см провода для оптимального размещения в окне. Печатную плату подрезал под размер вертикальной рейки штор. Компоновку делал максимально компактной, учитывая высоту разъема сервопривода. Снял дорожку к индикаторному LED на DC-DC бустере (экономия ~1 мА). Желательно отодвинуть датчик температуры от сервопривода/транзистора — у меня он рядом, что может влиять на показания.
Шаг 6: Финальная сборка и прошивка
Раскомментировал логирование в EEPROM (Pro Mini имеет 1 Кбайт EEPROM, ~42 записи по 22 байта — менее месяца при 2 действиях в день). Последний замер тока покоя — ~1.5 мА. При батарее 900 мАч — ~600 часов без зарядки. В активном режиме 25 мА, при движении штор 200–500+ мА. Компромисс: оставил индикацию LED для визуального контроля.
Шаг 7: Установка
- Удалите спиральный привод шнура (если есть) — он создает слишком большое сопротивление для сервопривода.
- Сверлите отверстие для LDR (наружной стороне рейки).
- Дремелем вырежьте отверстие под сервопривод (наружной стороне, чтобы не было видно изнутри).
- Зашлифуйте/заклейте края скотчем.
- Вставьте плату в рейку, выведите LDR в отверстие.
- Установите сервопривод на вал штор, затяните зажимной винт. Скетч при старте двигает серво в 90° на 10 сек — в это время вручную выставьте шторы в 90° и зафиксируйте.
- Повесьте шторы на место.
- Солнечную панель закрепите в верхней трети центрального стекла, провода проложите по перегородкам, закрепите скотчем.
- Подключите панель к схеме (JST).
- Подключите аккумулятор, быстро вставьте рейку на место. Шторы сдвинутся в центр, через 10 сек — в рабочее положение.
- Установите декоративную накладку.
- Расслабьтесь с любимым напитком.
Шаг 8: Наслаждайтесь!
Шторы работают плавно и автоматически. Через несколько месяцев эксплуатации — поведение идеальное. Интересная особенность: если включен свет на втором этаже и в прихожей внизу, шторы остаются открытыми после темноты — отлично для демонстрации гостям. В жаркие дни шторы закрываются от перегрева еще когда в доме комфортные 70°F (~21°C), так как у окна температуру выше.
Код
Библиотеки и скетчи на GitHub:
Схемы
Схема в формате Fritzing: SmartBlinds.fzz
Производственный процесс
- Умный бармен: создайте свою Raspberry Pi-станцию для коктейлей
- Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Умные самозавязывающиеся туфли с встроенной сборкой энергии
- IoT-солнечный трекер на Arduino: умное управление энергией с мониторингом через Cayenne
- Умная робо-рука на Arduino: простое DIY-руководство
- Умная система мониторинга температуры для школ: точно, в реальном времени, безопасно
- Умная перчатка для перевода жестов в текст (язык жестов)
- Умный зарядный мультиплексор для 6 батареек на Arduino Uno с LCD и ультразвуковым управлением
- Гальванически разделённый аналоговый вход для Arduino на LM331 и оптопаре 4N25