Съдържание:

Кафемашина с активиран IoT: 9 стъпки (със снимки)
Кафемашина с активиран IoT: 9 стъпки (със снимки)

Видео: Кафемашина с активиран IoT: 9 стъпки (със снимки)

Видео: Кафемашина с активиран IoT: 9 стъпки (със снимки)
Видео: Фермата 9 - 100 хил. причини за Подкаст с Коко Еп.18 2024, Юли
Anonim
Image
Image
Необходимо оборудване
Необходимо оборудване

Тази инструкция е включена в състезанието за IoT - Ако ви харесва, моля, гласувайте за нея

АКТУАЛИЗИРАНО: Сега поддържа двупосочни комуникации и OTA актуализации

От известно време имам кафе машина Jura и винаги съм искал по някакъв начин да я автоматизирам.

Работя с основна система за домашна автоматизация от няколко години, но кафе машината не беше нещо, което беше лесно да се модифицира (или поне така си мислех). Кафемашините Jura обикновено имат „диагностичен порт“и/или порт, използван за добавяне на платежна система към машината, но не успях да намеря никаква информация за това как може да се използва. Съвсем наскоро протоколът беше променен обратно от някои лица и беше оповестен публично. Проблемът беше, че повечето от препратките към наличните функции бяха за много по -големи машини от моята (Ena 7).

На всичкото отгоре, моята машина няма постоянна мощност в режим на готовност като по -големите машини, вместо това има HV превключвател, който прави захранването "заключено". Физическият бутон на машината всъщност активира 2 превключвателя - един нисковолтов (логическа страна, изключване) и един висок волт (включване). И двата превключвателя са моментни.

Също така трябваше да се уверя, че машината все още работи 100% независимо от който и да е механизъм за управление, т.е. машината все още функционира нормално, сякаш не е активирана IoT.

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

Стъпка 1: Как ще го направим

Ще използваме модул ESP8266 „ESP-01“, за да се свържем с домашния wifi и да се абонираме за MQTT сървър/тема за слушане на команди. „Предният край“, който използвах, е OpenHAB2, но няма причина да не можете да добавите към уеб интерфейса на устройството и да контролирате директно, ако искате или чрез HTTP Get команди.

ESP8266 ще управлява управление на 2 релета, свързани с бутона за захранване, а също така ще обработва серийни команди към/от кафе машината.

ПРЕДУПРЕЖДЕНИЕ - Тази инструкция очертава процедурата, която използвах, за да променя моята кафемашина Jura Ena7, за да се управлява чрез домашна автоматизация. Той се занимава с промяна на мрежово електрическо устройство, което може да бъде опасно, ако се извърши неправилно. Информацията тук може да е непълна, неточна и опасна. Продължете внимателно. Не се приема отговорност.

Стъпка 2: Необходимо оборудване

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

Части

  • Модул ESP-01 и начин за неговото програмиране (Arduino IDE и физически адаптер за програмиране)
  • 2 -пътен релеен модул EBAY
  • 5v -> 3.3v регулатор EBAY
  • Малко 5V зарядно устройство за захранване от мрежата
  • Конвертор на логическо ниво* Freetronics
  • Разни проводници, щифтове, термосвиваеми и т.н. за свързване на всичко.

Инструменти

  • Поялник с фини накрайници
  • Припой
  • Машините за отстраняване на тел са удобни
  • Драйвер за torx t15
  • Овален инструмент за сигурност (или направете такъв, отнема само няколко минути)

*Първоначално използвах arduino UNO при тестването на всички серийни команди към машината и той работеше безупречно, но модулът ESP отказа да работи. Проверих тройно кода и бях сигурен, че командите, които излизат от ESP модула, са същите като arduino, но това беше невъзможно. Записах това на ESP модула, работещ само на 3.3v логика, а не на 5V. След като сложих конвертора на Logic, той работи добре. Това може или не може да се изисква при други машини.

В идеалния случай бихте имали съществуваща система за домашна автоматизация, която поддържа протокола MQTT (като openhab), тъй като това е целта на проекта. Ако просто искате да го управлявате чрез бутони на уеб страница без никакви поддържащи системи, ще трябва да направите някои промени в кода на вградената уеб страница. Не е прекалено сложно за постигане (може би rev2..)

Стъпка 3: Протоколът Jura

Протоколът Jura
Протоколът Jura

Данните към/от машината са само серийни @ 9600, но Jura също има някои трикове. Протоколът или използва това за допълнителен ECC и/или за да замъгли комуникацията. Просто казано, всеки байт от данни (символ) се разделя на битове 2 и 5 от 4 стандартни серийни байта, прекъснати от пауза от 8 ms. Ако искате да научите как работи това, има много информация в връзките тук.

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

Кодът arduino опростява това, като ви дава възможност да предавате стандартни, четими от човека команди, които след това той транспонира в протокола Jura.

Моят код е комбинация от код от:

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

FA: 01 - Изключва се (но не изглежда да се изплаква, дори ако е необходимо) FA: 02 - Отговаря „добре“, но не е сигурен какво прави. FA: 03 - Съобщение за изплакване (Принуждава съобщение „изплакване“на екрана, натискане на въртяща се машина за изплакване) FA: 04 - Действие на изплакване - Изплаква се, когато се появи съобщението „Натиснете въртящ се бутон“, в противен случай не прави нищо FA: 05 - Силно на екрана (Предполага се, че това се комбинира с приготвяне на силно кафе: 08 - Steam FA: 09 - Small Coffee FA: 0A - Large Coffee

Има и други команди, но това е достатъчно за мен …

Бъдете внимателни при издаване на неизвестни команди, например, очевидно AN: 0A ще изтрие EEPROM на машината …

Стъпка 4: Разглобяване

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

Инструкциите тук са доста добре представени-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

Стъпка 5: Отмяна на гаранцията

Отмяна на гаранцията
Отмяна на гаранцията
Отмяна на гаранцията
Отмяна на гаранцията
Отмяна на гаранцията
Отмяна на гаранцията
Отмяна на гаранцията
Отмяна на гаранцията

След като влезете в машината, ще видите основните компоненти. Основният вход за захранване има хубаво място под него за добавяне на 5v зарядно устройство.

Добавих проводници (с номинална мрежа) към клемния блок на входа на машината и ги запоявах/затоплях към захранващите щифтове на 5v зарядното устройство. Моят конкретен модел не беше тип USB порт, а такъв, който имаше трайно прикрепен кабел. Може да нямате достатъчно място за USB порт тип един, за да можете да използвате действителен USB кабел, но ако отворите зарядното устройство, можете да премахнете USB порта и да го замените със стандартен проводник към точките 5v и Gnd.

Можете да замените друго захранване с 5v захранване, ако желаете. 500ma трябва да е достатъчно.

Има много място за релейния модул близо до мелницата. Трябва да свържем двете релета, за да работят паралелно с главните превключватели на захранването. Просто отрязах съществуващите проводници, оголих, калайдисах, добавих допълнителен проводник и го запоявам отново (не забравяйте радиатор). Имаше достатъчно провисване на проводниците за това.

Релейният модул се държи на място с висококачествена двустранна лента. При свързване на проводниците и само с ограничено пространство за движение, дори ако лентата загуби сцепление, модулът няма да отиде твърде далеч и не може да влезе в контакт с метални предмети.

Също така проверих диагностичния порт на моята машина, за да определя местоположението на вътрешните връзки, за да мога да постигна напълно скрита интеграция. Използват се само проводници tx, rx и Gnd.

Ако имате по -търговска машина, която поддържа напрежение в режим на готовност и/или не искате да анулирате гаранцията за вашата машина, можете вместо това да се свържете директно към диагностичния порт, но може да не успеете да включите устройството с това устройство.

Моята машина използва 7 -пинов конектор. От ляво на дясно е:

NC Tx G Rx NC 5v NC

Съответните щифтове на дънната платка: Червено = Gnd Оранжево = Rx Черно = Tx

Повече информация можете да намерите на разпилките тук:

Стъпка 6: Окабеляване на логическата страна

Окабеляване на логическата страна
Окабеляване на логическата страна
Окабеляване на логическата страна
Окабеляване на логическата страна
Окабеляване на логическата страна
Окабеляване на логическата страна

Прегледайте диаграмата - Изглежда прекалено сложно, но всъщност не е така.

Монтирах преобразувателя на нивото към задната част на (депресирания) регулатор на напрежението с някаква двустранна лента. След това използвах някои компонентни крака за запояване на щифтовете за захранване и заземяване от двете страни на преобразувателя на нивото към съответните щифтове на захранващия модул. След това целият този модул работи като „преминаване“за цялата логика и захранване за ESP-01.

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

Всъщност не е необходимо с тези релейни модули да се изпълнява 5v логика, тъй като те са активни НИСКИ, но просто работи добре, така че все пак го направих.

Използвах женска заглавка 4x2 за свързване към ESP модула. Това позволява лесно качване на код или подмяна на модула.

Не е показан на диаграмата 5V вход - свързах моята директно към релейния модул (вижте втората снимка). Черният проводник в долния ляв ъгъл на картината е серийните данни, изключени към основната платка. Използвах част от екраниран 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 на модула.

По подразбиране AP SSID е „ESPSwitch“и паролата е „12345678“

Той остава в режим на достъп 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

Номер 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" = "Малък"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Превключване на елемент = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Изплакване"] Текстов елемент = Coffee_Status label = "Състояние [%s] "}

voicecontrol.ru

import org.openhab.model.script.actions.* импортиране org.openhab.core.library.types.* импортиране на java.util.*

правило "Правила за гласови команди"

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

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")}} край

Правила (за тълкуване на 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 изплакванеBit = binaryString.substring (6, 7)

if (trayBit == "0") {

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

}

if (response == "Off") {postUpdate (Coffee_Status, "Off")} край

Стъпка 9: Усъвършенстване/Тодо

Опростете първоначалната настройка, свързвайки се с wifi - Готово. Изостави идеята за „административен режим“, тъй като беше досадна. Сега просто въведете SSID и парола в кода. Запазва се в EEPROM, ако актуализирате/промените чрез уеб интерфейс.

По-новият код също поддържа OTA актуализации, но ще трябва да надстроите EEPROM на модула ESP-01, за да работи или коментира съответните OTA елементи

Добавете код за обработка на отговорите от машината и прочетете състоянието като без тава, празни основи и пълнене на резервоара - Готово. Добавих код, за да прочета състоянието обратно и да го публикувам в ха/кафе. Това са само необработените отговори и все още работя върху тълкуването им, но засега ми липсва Тава и празният резервоар работи. Той оглежда машината на всеки 9 секунди, когато е включен, и публикува отговора на MQTT

Отговорът е в HEX, но отделните битове показват сензорите

Добавете код към уеб страниците за директен контрол чрез HTTP GET команди.

Конкурс „Интернет на нещата“2017 г
Конкурс „Интернет на нещата“2017 г
Конкурс „Интернет на нещата“2017 г
Конкурс „Интернет на нещата“2017 г

Първа награда в конкурса за Интернет на нещата 2017

Препоръчано: