Предисловие
Если вы читали мою предыдущую статью (Бегущая строка на Arduino), то наверняка уже знаете, что у нас в университете есть возможность делать аппаратные курсовые проекты. И я, вдохновлённый предыдущей своей работой, решил ещё раз попробовать сделать что-нибудь своими руками. Только теперь тема должна была быть посерьёзнее. Кстати, думать о том, что сделать, я начал ещё на зимних каникулах, то есть до начала семестра. Хотелось сделать что-нибудь интересное и полезное одновременно.
Поиск идеи
Однажды на паре по Основам защиты информации у нас была тема, связанная с интеллектуальной собственностью и патентами. Преподаватель дал нам задание оформить по всем требованиям патент на какое-нибудь устройство и в качестве примера привёл wifi чайник.
Сказал — и забыл. И все забыли, а у меня в голове эта тема осталась. И когда пришло время думать над тем, что делать в качестве курсового в следующем семестре, я вспомнил про этот чайник.
Первым делом решил посмотреть, что же уже сделано. И каково было моё удивление, когда я увидел, что в продаже есть только три модели чайников с поддержкой управления по WiFi, и то два их них принадлежать одной компании. Это были Smarter iKettle 1.0 и 2.0 и российский Polaris PWK 1792CGL.
Интересно, что обычные электрические чайники есть почти в каждом доме, а умных так мало. Сравнив функции, предлагаемые производителями iKettle и Polaris, я составил список самых необходимых. Вот, что получилось:
- включение/выключение со смартфона;
- установка любой температуры нагрева воды;
- возможность узнать текущую температуру;
- отслеживание текущего объёма воды в чайнике;
- предупреждение и защита от включения при малом объёме воды;
- установка времени автовключения;
- уведомление о готовности;
Вроде выглядит реально, пора приступать к делу.
Поиск необходимых компонентов
Так как сделать полностью новый чайник не представлялось возможным, то было решено модифицировать уже готовый обычный электрический. Как раз дома был бесхозный чайник со сломанным выключателем.
«Так, основа уже есть» — подумал я.
Теперь нужно было заняться поиском компонентов для аппаратной части. Так как уже был небольшой опыт работы с Ардуино, решил всё реализовывать на ней. Тем более что сама Ардуина и модули для неё стоят недорого.
Так как мне всю часть управления чайником надо было вставить внутрь чайника, то выбор пал на Arduino Nano. Она маленькая и у неё есть интерфейс для подключения кабеля, в отличии от Pro Mini, которую нужно прошивать через UART.
Главной составляющей wifi чайника является, конечно же, wifi модуль. Поискав в Интернете что-нибудь доступное и по чему много туториалов, напоролся на ESP8266. А именно на версию 01. Посмотрел, что стоит недорого (в районе 2$) и вроде много инструкций по подключению. Остановился на нём. Что касается самого модуля, то тут хорошо подходит фраза: дёшево и сердито. Но об этом чуть позже.
Для контроля температуры нужен был какой-нибудь водонепроницаемый термодатчик. Нашёл на алиэкспресс водонепроницаемый NTC термистор, который выдерживает температуру больше 100 градусов. Нашёл и пример работы с ним, так что и тут быстро определился.
Надо было решить, как же сделать включение чайника в заданный момент времени, можно, конечно, было сделать программные часы на Ардуино и при совпадении времени включать чайник, но это работало бы нестабильно, и произойди случайно сброс программы, всё собьётся. Поэтому здесь на помощь пришли часы реального времени. А именно DS1307. Они имеют независимое питание (от батарейки на 3 В), да и ещё на модуле, на котором я остановился, была микросхема памяти EEPROM на 32K bit, которую я использовал для сохранения времени включения.
Ах да, так как чайник теперь должен включаться программно, то ещё понадобилось 1-канальное реле.
Что касается датчика уровня жидкости, то его пришлось делать вручную. Подробности ниже.
Из остального ещё понадобилось несколько резисторов разных номиналов, макетная плата для тестов, монтажная плата для собственно монтажа, проводки, паяльник с флюсом и припоем и львиная доля терпения.
Начало разработки
Так как проект представляет собой wifi чайник, то первым делом хотелось и надо было разобраться с модулем wifi. Как только пришла послыка, тут же распаковал и начал подключать.
Нашёл кучу примеров в Интернете. Всё как надо, стабилизатор напряжения на 3.3 В, делители напряжения для RX и TX. Собрал всё по примеру, подключаю – не полетело! В мониторе COM порта выводилась куча текста, как оказалось, происходил постоянный сброс модуля. На отправляемые АТ команды не реагирует. У автора статьи работает, у меня нет.
В чём же дело? Пробовал и другие схемы подключения искать, и так, и сяк, а модуль всё равно либо сбрасывается, либо ничего не выводит. А везде же написано красным шрифтом: «Не подавать на модуль 5 В, а то выйдет из строя». Так поиски решений иногда длились вечерами, уже думал покупать другой модуль, но решил проверить напряжение мультиметром.
Оказалось, что при подключении модуля к 3.3 В происходит падение напряжения ниже 3.2 В. Вроде бы, ну и ладно, падает и падает. Решил запитать от другого источника питания и оказалось, что модуль работает нормально при напряжении на нём выше 3.2 В, а ниже ему недостаточно и он постоянно сбрасывается.
В итоге, на свой страх и риск, подключил к 5 В и всё работало и работает до сих пор нормально.
С остальными компонентами таких проблем не было.
После того, как разобрался с wifi, надо было решить, что делать с датчиком уровня жидкости. Погуглив, нашёл статью, в которой автор делал датчик влажности почвы. При высыхании почвы сопротивление датчика увеличивается и напряжение на аналоговом порту Ардуино растёт. Отлавливая изменение напряжения, можно фиксировать появление жидкости. Для определения уровня жидкости в моём проекте вместо двух контактов использовалось 6. Один из них подключён к 5 В выходу, а остальные к аналоговым входам и через 10 кОм резисторы к GND.
Вот фото тестов.
Вот какой датчик уровня получился в результате.
Следующее, что тестировал, — это часы реального времени. Но с ними работа в принципе проста. Для установки времени и получения информации о нём я использовал исключительно примеры, которые идут в комплекте с библиотекой для работы с DS1307.
В результате, когда всё собрал на макетной плате, получился вот такая помесь проводов и модулей. Кстати, на этих фото пока стоит другой датчик температуры.
Приступаем к монтажу
Теперь всё это нужно было распаять на монтажной плате. Здесь комментировать особо нечего, поэтому только фото. Как видно, ещё добавилась кнопка, чтобы можно было включать чайник не только со смартфона, а ещё и обычным способом.
Далее необходимо всё расположить внутри чайника.
Для защиты всех внутренностей от перегрева была добавлена асбестовая вставка.
Правда, корпус пришлось немного приподнять с помощью дополнительной пластиковой вставки.
Теперь переходим к мобильной части.
Что касается приложения, то, так как оно разрабатывалось под ОС Android, то изначально планировалось использовать Android Studio. Но в целях изучения новых технологий было решено использовать готовую платформу для разработки программ в области Интернета вещей. В результате выбор пал на продукт компании Evothings – Evothings Studio.
Вот её основные достоинства:
— большое количество стандартных примеров по работе с различными модулями (Wifi, Bluetooth);
— разработка приложений с использованием JS, HTML, CSS, что позволяет писать один код, который будет одинаково работать на ОС Android и iOS, т.е. пропадает привязка только к одной платформе;
— простота тестирования приложения: на смартфон устанавливается приложение для предпросмотра своей разработки, а все тестовые сообщения и сообщения об ошибках выводятся в программе на компьютере;
— большое количество информации в Интернете о разработке с использованием JS, HTML, CSS;
В этой Evothings Studio был пример включения светодиода, передавая запрос на включение через ESP8266. Я решил взять этот пример за основу, как раз там было самое ценное для меня – связь с модулем WiFi через tcp socket. И аналогично тому, как передавался запрос на включение светодиода, сделал передачу запроса на обновление датчиков чайника, на установку времени включения, установку температуры и т.д.
Потом прикрутил уведомления о готовности и малом количестве воды, благо, что всё в наше время легко гуглится. В результате получилось такое вот приложение (приятная штука делать интерфейс приложения с помощью CSS):
Краткое описание взаимодействия смартфона и чайника
Общение между серверной и клиентской частью осуществляется с помощью модуля WiFi. При включении модуля управления чайником, модуль WiFi начинает раздавать сеть под названием artKettle. Это делается с помощью AT команд на серверной части. Так, например, чтобы перевести модуль в режим точки доступа, ему необходимо отправить команду AT+CWMODE=2. Далее с помощью подобных команд необходимо назначить параметры сети, разрешить подключение нескольких устройств и получить ip адрес самого wifi.
Со стороны клиента подключение происходит через определённый порт и по ip адресу модуля wifi с использованием chrome.tcp.socket.
После подключения клиента к серверу можно управлять чайником со смартфона. Рассмотрим пример включения чайника.
При нажатии на кнопку включения в приложении artKettle происходит вызов соответствующей функции включения app.kettleOn(). Внутри этой функции происходит передача двух строк на серверную часть:
app.sendString('H');
app.sendString('U');
Далее идёт работа уже на стороне Ардуино. После прихода первой строки с символом ‘H’ выполняется следующая часть кода:
if(message.indexOf("H") >= 0 && waterDetected()) {
digitalWrite(POWER_PIN, LOW);
IS_ON = true;
Serial.println("ON");
sendCIPData(0, "ON");
}
Сначала идёт проверка, есть ли в чайнике вода с помощью вызова метода waterDetected(). Рассмотрим вариант, когда вода в чайнике присутствует.
На пин управления реле подаётся низкий уровень напряжения, что соответствует его включению, т.е. цепь питания замыкается:
digitalWrite(POWER_PIN, LOW);
Затем идёт установка флага того, что чайник включён, и вывод в монитор последовательного порта сообщения о включении.
После этого вызывается функция, передающая ответное сообщение клиентской стороне о том, что всё включение прошло успешно:
sendCIPData(0, "ON");
На клиентской стороне после проверки пришедшего сообщения производится установка кнопки включения в состояние On:
if (buf.substr(0, 2) == "ON") {
app.setButtonOn();
}
После этого идёт обработка текстового сообщения с символом ‘U’, отправленного со стороны клиента на сервер. Здесь аналогичным включению образом происходит обновление информации о текущей температуре и объёме жидкости в чайнике.
Таким образом организована двухсторонняя связь клиента и сервера, так что любой из них знает о состоянии другого в любой момент времени.
Заключение
В результате курсового проекта была разработана модификация для обычного электрического чайника, позволяющая управлять им со смартфона по wifi. Теперь этот чайник вполне можно отнести к представителям Интернета вещей. Все функции удалось реализовать полностью, так что теперь этот чайник имеет следующие возможности:
— включение/выключение со смартфона;
— установка любой температуры нагрева воды;
— возможность узнать текущую температуру;
— отслеживание текущего объёма воды в чайнике;
— предупреждение и защита от включения при малом объёме воды;
— установка времени автовключения;
— уведомление о готовности;
Достоинствами реализованного проекта является доступность элементной базы, потому как всё необходимое можно найти в магазинах радиоэлектронных компонентов, расширяемость проекта. Так как в чайнике установлены все необходимые датчики, то его можно дорабатывать программно и сделать не хуже, чем аналоги. Учитывая многофункциональность используемого модуля wifi, можно подключить его к сети Интернет и организовать управление чайником, находясь в любой точке мира, а с использование онлайн сервиса обработки SMS сообщений можно организовать включение по SMS. Т.е. проект ещё очень расширяем, возможности для этого есть, но они не были реализованы, так как не входили в цели разрабатываемого проекта.
Конечно же есть и недостатки проекта. Первый из них – это нестабильная работа модуля Wifi. Модуль иногда просто так теряет сеть, начинает сбрасывать настройки или просто не обрабатывает пришедшие сигналы. Причём это популярные проблемы у пользователей данного модуля. Второй недостаток – это отсутствие механического выключения чайника. Выключение реализовано программно, при достижении температуры кипения происходит разрыв цепи с помощью реле. Если вдруг в программе произойдёт сбой, то чайник может не отключиться. Третий недостаток – проблема отслеживания температуры нагрева. Так, например, если чайник отключить при температуре 60 градусов, то нагревательный тен продолжит отдавать тепло, и через некоторое время температура воды уже будет около 70 градусов. Но это исправляется путём внесения корректировок в программу.
Автор: artvlad96