Когда Arduino и Raspberry Pi выпустили первые версии, я купил по одной каждой. Будучи любителем гаджетов и… ну, мужчиной, я немного поиграл со своими новыми игрушками и оставил их в ящике стола.

Прошло время, и ни с одним из них ничего особенного не произошло. По мере того, как я становился все более недовольным контроллером центрального отопления в моем нынешнем доме, я решил достать из ящика стола Ino и Pi и построить контроллер центрального отопления, который я бы быть счастливым с.

Этап проектирования

Первым требованием к новой системе управления отоплением была наименее навязчивая установка.

Циферблатный термостат, который есть у меня дома, работает как простой переключатель: включает отопление, когда температура падает ниже заданной; и отключение нагрева при повышении температуры выше другого заданного значения. Я решил использовать эту простоту в своем дизайне. Все, что мне нужно было сделать, это подключить один кабель 230 В к этому термостату (230 В, черт возьми).

Разобравшись с точкой входа, я перешел к биту контроллера. Плата Arduino будет управлять реле, которое будет просто включать/выключать нагрев. Для измерения температуры я выбрал цифровой термометр, который давал более стабильные показания, чем аналоговый (входит в стартовый комплект Arduino Uno). Я также добавил светодиод для индикации включения нагрева.

Используя последовательный порт, используемый для программирования Arduino, я решил, что плата будет отправлять обновления температуры и получать команду настройки от Pi через USB-соединение. Он также будет получать питание через то же самое. Это также решило проблему двух отдельных адаптеров питания для Arduino и Raspberry Pi.

Этап сборки

Я пробовал несколько вещей, прежде чем пришел к следующему решению.

Электроника

Схема Arduino очень проста.

Три элемента, подключенные к Arduino с парой резисторов, немного.

Светодиод не нужен, он должен показывать, когда обогрев включен.

Окончательный прототип выглядит не очень привлекательно, но многое спрятано под мебелью и торчат только датчики температуры и немного светодиода.

Программное обеспечение

Мне пришлось написать три отдельных части программного обеспечения:

Ардуино

Для датчика температуры я включил две дополнительные библиотеки: библиотеку протокола OneWire и библиотеку датчиков DallasTemperature. Я использую аппроксимацию 0,5 градуса по Цельсию для показания температуры.

Показания температуры отправляются через последовательный порт на каждом цикле. Arduino также ожидает число с плавающей запятой на последовательном порту. Полученное число указывает на желаемую комнатную температуру для Arduino.

Чтобы ограничить колебания показаний датчика, управление реле меняется после как минимум 10 успешных последовательных считываний одной и той же температуры с датчика.

Raspberry Pi

Программное обеспечение, работающее на Raspberry Pi, делает следующее:

  • Он ожидает обновлений температуры от Arduino и сохраняет обновления в памяти (для последних обновлений) и в простой файловой базе данных H2 (для исторических данных),
  • Он предоставляет REST API для пользовательского интерфейса, чтобы получить информацию о температуре и получить новые настройки,
  • Он планирует изменения температуры в соответствии с расписанием, хранящимся в файле JSON.

Я запустил код на Python, но он работал медленно. Я провел простое сравнение времени выполнения алгоритмов простых чисел, и Java 8 превзошла Python. На одноядерном Raspberry Pi 1 был хороший стимул сменить платформу. Я выбрал язык программирования Kotlin, так как он был для меня новым и я хотел его изучить.

В качестве фреймворка для событийного приложения я выбираю Vert.x 3. Для связи через последовательный порт используется немного устаревшая библиотека RXTX.

Приложение пользовательского интерфейса/контроллера телефона

Веб-приложение, которое я создаю, работает как на компьютерах, так и на мобильных устройствах. Я выбрал React в качестве UI-фреймворка с компонентами Material UI. Лот собран с помощью Webpack в небольшой набор файлов html/js.

Этап тестирования

На этапе тестирования я соединил все воедино, запустил и надеялся, что не почувствую запаха горящей электрики и не испытаю взрывов. Другими словами, стандартный научный и инженерный подход :) .

Я запускаю установку в течение 4 недель непрерывно, и до сих пор она не подвела.

Резюме

Это первый раз, когда я использовал свои навыки для создания чего-то, что взаимодействует с физическим миром. Это дало мне чувство достижения и удовлетворения. Я знаю, что мог бы купить что-то, что выглядело бы намного лучше и, вероятно, работало бы лучше, но я многому научился в процессе.

Raspberry Pi 3 был выпущен, пока я создавал свой дизайн, и я переключился на него. Вы можете увидеть это на фотографиях. Я также хочу переключить макетную плату Arduino Uno на Arduino Nano.

Весь код и более подробное техническое описание доступны для вас из моего репозитория GitHub по адресу https://github.com/greggigon/Home-Temperature-Controller.