Оглавление:

Кофемашина с поддержкой Интернета вещей: 9 шагов (с изображениями)
Кофемашина с поддержкой Интернета вещей: 9 шагов (с изображениями)

Видео: Кофемашина с поддержкой Интернета вещей: 9 шагов (с изображениями)

Видео: Кофемашина с поддержкой Интернета вещей: 9 шагов (с изображениями)
Видео: Он ВЫЖИЛ после 1000 чашек капучино за 5 дней! Но всё равно г... Кофемашины Polaris на примере 2045AC 2024, Июль
Anonim
Image
Image
Необходимое оборудование
Необходимое оборудование

Это руководство участвует в конкурсе IoT. Если вам это нравится, пожалуйста, проголосуйте за него

ОБНОВЛЕНО: теперь поддерживает двустороннюю связь и обновления OTA

С некоторых пор у меня есть кофемашина Jura, и я всегда хотел как-то ее автоматизировать.

Я использовал базовую систему домашней автоматизации в течение нескольких лет, но кофемашину было непросто модифицировать (по крайней мере, я так думал). Кофемашины Jura обычно имеют «диагностический порт» и / или порт, используемый для добавления платежной системы к машине, однако я не смог найти никакой информации о том, как это можно использовать. Совсем недавно протокол был реконструирован некоторыми людьми и обнародован. Проблема заключалась в том, что большинство ссылок на доступные функции относились к гораздо более крупным машинам, чем моя (Ena 7).

Вдобавок ко всему, у моей машины нет постоянного резервного источника питания, как у более крупных машин, вместо этого у нее есть выключатель высокого напряжения, который заставляет источник питания «защелкиваться». Физическая кнопка на машине фактически активирует 2 переключателя - одно низкое напряжение (логическая сторона, выключение) и одно высокое напряжение (включение). Оба переключателя мгновенные.

Мне также нужно было убедиться, что машина по-прежнему работает на 100% независимо от какого-либо механизма управления, то есть машина по-прежнему работает как обычно, как если бы на ней не был включен IoT.

Для автоматизации машины требуются две вещи: 1) иметь возможность управлять питанием машины 2) иметь возможность связываться с машиной для активации функций приготовления кофе, полоскания и т. Д.

Шаг 1. Как мы собираемся это сделать

Мы будем использовать модуль ESP8266 ESP-01 для подключения к домашнему Wi-Fi и подписки на сервер / тему MQTT, прослушивающую команды. Я использовал «Front End» - это OpenHAB2, но нет причин, по которым вы не могли бы добавить в веб-интерфейс на устройстве и управлять напрямую, если хотите, или с помощью команд HTTP Get.

ESP8266 будет управлять двумя реле, связанными с кнопкой питания, а также обрабатывать последовательные команды к / от кофемашины.

ВНИМАНИЕ! В этой инструкции описывается процедура, которую я использовал для модификации кофемашины Jura Ena7 для управления с помощью домашней автоматизации. Он касается модификации устройства электроснабжения, которое может быть опасным при неправильном выполнении. Информация здесь может быть неполной, неточной и небезопасной. Действовать с осторожностью. Никакой ответственности.

Шаг 2: необходимое оборудование

Необходимое оборудование
Необходимое оборудование
Необходимое оборудование
Необходимое оборудование
Необходимое оборудование
Необходимое оборудование

Запчасти

  • Модуль ESP-01 и способ его программирования (Arduino IDE и физический адаптер для программирования)
  • 2-позиционный релейный модуль EBAY
  • 5v -> 3.3v регулятор EBAY
  • Маленькое зарядное устройство для телефона с питанием от сети 5 в
  • Преобразователь логических уровней * Freetronics
  • Разные провода, штыревые наконечники, термоусадочные и т. Д. Для подключения всего этого.

Инструменты

  • Паяльник с тонким наконечником
  • Припой
  • Устройства для зачистки проводов удобны
  • Драйвер Torx T15
  • Овальный инструмент безопасности (или сделать его, займет всего несколько минут)

* Первоначально я использовал Arduino UNO при тестировании всех последовательных команд для машины, и он работал безупречно, однако модуль ESP отказывался работать. Я трижды проверил код и был уверен, что команды, выходящие из модуля ESP, были такими же, как и для Arduino, но это было недопустимо. Я объяснил это тем, что модуль ESP работает только с логикой 3,3 В, а не 5 В. Как только я вставил логический преобразователь, он заработал нормально. Это может потребоваться, а может и не потребоваться на других машинах.

В идеале у вас должна быть существующая система домашней автоматизации, поддерживающая протокол MQTT (например, openhab), поскольку именно на это и направлен проект. Если вы просто хотите управлять им с помощью кнопок на веб-странице без каких-либо вспомогательных систем, вам нужно будет внести некоторые изменения во встроенный код веб-страницы. Это не слишком сложно достичь (возможно, rev2..)

Шаг 3: Протокол Джура

Протокол Джура
Протокол Джура

Данные на / от машины - это просто последовательный @ 9600, но у Джуры тоже есть кое-какие хитрости в рукаве. Протокол использует это либо для дополнительного ECC, либо для сокрытия связи. Проще говоря, каждый байт данных (символ) разбивается на биты 2 и 5 из 4 стандартных последовательных байтов, за которыми следует пауза в 8 мс. Если вы хотите узнать, как это работает, по ссылкам можно найти много информации.

Информация протокола извлечена из:

Код arduino упрощает это, позволяя передавать стандартные, удобочитаемые команды, которые затем переносятся в протокол Jura.

Мой код представляет собой комбинацию кода из:

Команды, указанные на сайтах выше, не были точными для моей машины, но методом проб и ошибок я смог придумать следующее:

FA: 01 - Отключается (но, кажется, не смывает, даже если необходимо) FA: 02 - Отвечает «хорошо», но не уверен, что делает. FA: 03 - Сообщение о полоскании (выводит на экран сообщение «полоскание», нажимая на роторную машину для полоскания) FA: 04 - Действие полоскания - Полоскание, когда появляется сообщение «Нажмите поворотную кнопку», в противном случае ничего не делает FA: 05 - На экране сильно отображается (Предположительно, объедините это с приготовлением кофе для крепкого) FA: 06 - Крепкий на экране (предположительно объедините это с приготовлением кофе для крепкого) FA: 07 - «Особый» на экране, но на самом деле ничего не делает, не уверен, что это для: 08 - На пару FA: 09 - Маленький кофе FA: 0A - Большой кофе

Есть и другие команды, но для меня этого достаточно …

Соблюдайте осторожность при вводе неизвестных команд, например, очевидно, AN: 0A сотрет EEPROM машины.

Шаг 4: разборка

Открыть саму машину не так просто, так как вам понадобятся несколько специальных инструментов, но опытный человек найдет способ - вам понадобится бит Torx T15 и «овальный ключ» на 2 винта. Torx, который у меня уже был, овальный инструмент, который я сделал из 4-миллиметрового болта с головкой под торцевой ключ, который высверлил и немного приплюснул с помощью молотка.

Инструкции здесь довольно хорошо представлены -

Шаг 5: аннулирование гарантии

Аннулирование гарантии
Аннулирование гарантии
Аннулирование гарантии
Аннулирование гарантии
Аннулирование гарантии
Аннулирование гарантии
Аннулирование гарантии
Аннулирование гарантии

Попав в машину, вы увидите основные компоненты. Под входом основного питания есть удобное место для подключения зарядного устройства на 5 В.

Я добавил (рассчитанные на сеть) провода к клеммной колодке на входе в машину и припаял / усадил их к сетевым контактам зарядного устройства 5 В. Моя конкретная модель была не с USB-портом, а с постоянно подключенным проводом. Возможно, вам не хватит места для USB-порта первого типа, чтобы можно было использовать настоящий USB-кабель, но если вы откроете зарядное устройство, вы можете удалить USB-порт и заменить его стандартным проводом к точкам 5V и Gnd.

Если хотите, вы можете заменить его другим сетевым блоком питания с напряжением 5 В. 500ма должно хватить.

Рядом с кофемолкой достаточно места для модуля реле. Мы должны подключить два реле, чтобы они работали параллельно с главными выключателями питания. Я просто отрезал существующие провода, зачистил, залудил, добавил дополнительный провод и снова спаял их (не забывайте термоусадку). Провода проводов было достаточно для этого.

Модуль реле удерживается на месте с помощью двусторонней ленты хорошего качества. С подключенными проводами и с ограниченным пространством для движения, даже если лента потеряет сцепление, модуль не уйдет слишком далеко и не сможет соприкоснуться с какими-либо металлическими предметами.

Я также проверил диагностический порт на своей машине, чтобы определить расположение внутренних соединений, чтобы я мог добиться полностью скрытой интеграции. Используются только провода tx, rx и Gnd.

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

В моей машине используется 7-контактный разъем. Слева направо это:

NC Tx G Rx NC 5 В NC

Соответствующие контакты на материнской плате: Красный = Земля Оранжевый = Rx Черный = Tx

Более подробную информацию можно найти на распиновке здесь:

Шаг 6: Подключение логической стороны

Подключение логической стороны
Подключение логической стороны
Подключение логической стороны
Подключение логической стороны
Подключение логической стороны
Подключение логической стороны

Просмотрите схему - она выглядит слишком сложной, но на самом деле это не так.

Я прикрепил преобразователь уровня к задней части регулятора напряжения с помощью двустороннего скотча. Затем я использовал несколько компонентных ножек, чтобы припаять контакты питания и заземления с обеих сторон преобразователя уровня к соответствующим контактам модуля питания. Затем весь этот модуль работает как «сквозное соединение» для всей логики и источника питания ESP-01.

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

На самом деле для этих релейных модулей нет необходимости запускать логику 5 В, поскольку они активны НИЗКИЙ, но он просто отлично работал, поэтому я все равно сделал это.

Я использовал гнездовой разъем 4x2 для подключения к модулю ESP. Это позволяет легко загрузить код или заменить модуль.

На схеме не показан вход 5 В - я подключил свой напрямую к модулю реле (см. Второй рисунок). Черный провод в нижнем левом углу изображения - это последовательные данные, ведущие к основной плате. Я использовал часть экранированного удлинительного кабеля для наушников 3,5 мм, чтобы уменьшить вероятность помех в линии передачи данных.

Код 12f использует SoftwareSerial вместо аппаратного последовательного порта - это позволяет модулю сообщать о состоянии для отладки через обычный последовательный порт. Вместо этого соединения осуществляются через контакты 4 и 5. Я адаптировал тот же заголовок, чтобы сделать ESP12F заменой для ESP-01, просто поменяв местами эти последовательные контакты

Шаг 7: Программирование модуля

Программирование модуля
Программирование модуля

Код был скомпилирован для Arduino 1.8.1 с надстройкой платы ESP8266 и PubSubClient 2.6.0 (это библиотека MQTT)

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

Конфигурация

Опция 1)

Только в базовом коде в zip-архиве. Когда модуль ESP загружается в первый раз, он переходит в режим AP и устанавливает IP-адрес 192.168.4.1. Затем вы можете подключиться к модулю, изменить IP-адрес и подключиться к своей собственной точке доступа. Вам также необходимо будет установить IP-адрес для вашего компьютера в этом диапазоне, поскольку в модуле нет DHCP.

SSID точки доступа по умолчанию - ESPSwitch, пароль - 12345678.

По умолчанию он остается в режиме AP в течение 2 минут. Вы можете изменить этот параметр в global.h - он называется adminTimeout и указывается в миллисекундах. Я рекомендую изменить это значение на что-то низкое, если у вас есть действующая конфигурация в EEPROM, поскольку в противном случае это просто вызовет ненужные задержки при загрузке устройства.

Вариант 2)

Это режим по умолчанию для нового кода, который поддерживает двустороннюю связь, вариант 1 недоступен. Вы также можете изменить настройки SSID / пароля по умолчанию в основном ino-файле (ищите '// DEFAULT CONFIG'), чтобы он загрузился эти настройки в EEPROM при первой загрузке и изменить задержку режима администратора на что-то меньшее в global.h. Это позволяет избежать беспорядка при подключении к временной точке доступа.

Устройство автоматически установит свой идентификатор MQTT (и путь подписки) на последние 4 цифры серийного номера модуля. Путь по умолчанию - ha / mod // #, измените его по своему усмотрению, но прочтите комментарии в коде, чтобы убедиться, что соответствующий массив имеет правильную длину.

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

Идентификатор устройства виден, и сервер MQTT можно настроить через страницу сервера MQTT на внутреннем веб-сервере

Шаг 8. Как заставить его работать…

Команды MQTT:

ha / mod / xxxx / 0 или 1 = Переключить мощность

Любая другая строка будет рассматриваться как команда и отправлена через последовательный порт. Статус отображается в / ha / coffee в HEX

С OpenHAB

coffeemachine.items

Number Coffee_Machine_Power "Power" {mqtt = "> [control: ha / mod / 8002 /: command: *: default]"} Строка Coffee_Machine_Status {mqtt = "<[control: ha / coffee: state: default]"}

Карта сайта

Group item = "Coffee Machine" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Переключить элемент = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Пункт переключения = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Rinse"] Текстовый элемент = Coffee_Status label = "Статус [% s] "}

voicecontrol.rules

import org.openhab.model.script.actions. * import org.openhab.core.library.types. * import java.util. *

правило «Правила голосовых команд»

когда элемент VoiceCommand получил команду, тогда var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand Received" + команда)

if (command.contains ("включить кофемашину") || command.contains ("выключить кофемашину")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("сделай мне небольшой кофе")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("сделай мне большой кофе")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("промыть кофемашину")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} end

Правила (для интерпретации ответов HEX в «реальные» значения):

правило "Статус кофемашины", когда элемент Coffee_Machine_Status получил обновление, тогда var String response = Coffee_Machine_Status.state.toString () if (response.indexOf ("ic:")> -1) {var String hexString = response.substring (3, 5)

var int num = (Integer.parseInt (hexString, 16));

var String binaryString = String.format ("% 8s", Integer.toBinaryString (num)). replace ('', '0')

var int trayBit = binaryString.substring (0, 1)

var int tankBit = binaryString.substring (2, 3) var int heatBit = binaryString.substring (7, 8) var int rinseBit = binaryString.substring (6, 7)

if (trayBit == "0") {

postUpdate (Coffee_Status, "Tray Missing")} if (tankBit == "1") {postUpdate (Coffee_Status, "Fill Tank")} if (rinseBit == "1") {postUpdate (Coffee_Status, "Press Rotary")} if (trayBit == "1" && tankBit == "0" && rinseBit == "0") {postUpdate (Coffee_Status, "Ready")}

}

if (response == "Off") {postUpdate (Coffee_Status, "Off")} конец

Шаг 9: Уточнения / Todo

Упростите первоначальную настройку подключения к Wi-Fi - Готово. Отказался от идеи «режима администратора», так как это раздражало. Теперь просто введите SSID и пароль в код. Сохраняется в EEPROM при обновлении / изменении через веб-интерфейс.

Более новый код также поддерживает обновления OTA, но вам нужно будет обновить EEPROM в модуле ESP-01, чтобы это работало, или закомментировать соответствующие элементы OTA

Добавьте код для обработки ответов от машины и чтения статуса, такого как отсутствие лотка, пустая гуща и заполненный резервуар - Готово. Я добавил код, чтобы прочитать статус и опубликовать его в ha / coffee. Это всего лишь необработанные ответы, и я все еще работаю над их интерпретацией, но пока у меня отсутствует лоток и работает пустой бак. Когда он включен, он опрашивает машину каждые 9 секунд и публикует ответ на MQTT

Ответ в шестнадцатеричном формате, но отдельные биты указывают датчики

Добавьте код на веб-страницы для прямого управления с помощью команд HTTP GET.

Конкурс Интернета вещей 2017
Конкурс Интернета вещей 2017
Конкурс Интернета вещей 2017
Конкурс Интернета вещей 2017

Первое место в конкурсе Интернет вещей 2017

Рекомендуемые: