Taula de continguts:

Màquina de cafè activada per IoT: 9 passos (amb imatges)
Màquina de cafè activada per IoT: 9 passos (amb imatges)

Vídeo: Màquina de cafè activada per IoT: 9 passos (amb imatges)

Vídeo: Màquina de cafè activada per IoT: 9 passos (amb imatges)
Vídeo: Coffee Vending Machine Guide Video 2------Open the Door 2024, De novembre
Anonim
Image
Image
Es necessita equipament
Es necessita equipament

Aquest instructiu s’inscriu al concurs IoT. Si us agrada, voteu-lo

ACTUALITZAT: ara admet comunicacions de dues vies i actualitzacions OTA

Ja fa temps que tinc una màquina de cafè Jura i sempre he volgut automatitzar-la d’alguna manera.

Fa alguns anys que utilitzo un sistema domòtic bàsic, però la màquina de cafè no era una cosa senzilla de modificar (o això em pensava). Les màquines de cafè Jura solen tenir un "port de diagnòstic" i / o un port que s'utilitza per afegir un sistema de pagament a la màquina, però no he pogut trobar cap informació sobre com es podria utilitzar. Més recentment, el protocol va ser dissenyat inversament per algunes persones i es va fer públic. El problema era que la majoria de les referències a les funcions disponibles eren per a màquines molt més grans que les meves (Ena 7).

A més, la meva màquina no té una potència d'espera permanent com les màquines més grans, sinó que té un commutador d'alta tensió que fa que la font d'alimentació estigui "tancada". El botó físic de la màquina realment activa 2 interruptors: un de baix voltatge (costat lògic, apagat) i un alt voltatge (encès). Tots dos commutadors són momentanis.

També calia assegurar-me que la màquina continués funcionant al 100% independentment de qualsevol mecanisme de control, és a dir, que la màquina continués funcionant amb normalitat com si no estigués habilitada per l'IoT.

Per automatitzar la màquina es necessiten dues coses: 1) Poder controlar la potència de la màquina 2) Poder comunicar-se amb la màquina per activar les funcions de preparació de cafè, esbandida, etc.

Pas 1: Com ho farem

Utilitzarem un mòdul ESP8266 'ESP-01' per connectar-nos al wifi domèstic i subscriure-us al servidor / tema MQTT escoltant ordres. El "Front End" que he fet servir és OpenHAB2, però no hi ha cap raó per la qual no es pugui afegir a la interfície web del dispositiu i controlar directament si volia o mitjançant ordres HTTP Get.

L'ESP8266 gestionarà el control de 2 relés relacionats amb el botó d'engegada i també processarà ordres en sèrie des de / cap a la màquina de cafè.

ADVERTÈNCIA: aquest instructiu descriu el procediment que he utilitzat per modificar la màquina de cafè Jura Ena7 per controlar-la mitjançant la domòtica. Es tracta de modificar un dispositiu d’electricitat que pot resultar perillós si es realitza incorrectament. La informació aquí pot ser incompleta, inexacta i insegura. Procediu amb precaució. No s’accepta cap responsabilitat.

Pas 2: Equip necessari

Es necessita equipament
Es necessita equipament
Es necessita equipament
Es necessita equipament
Es necessita equipament
Es necessita equipament

Parts

  • Mòdul ESP-01 i una manera de programar-lo (ID Arduino i adaptador físic per a la programació)
  • Mòdul de relé de 2 vies EBAY
  • 5v -> 3.3v Regulador EBAY
  • Petit carregador de telèfon de 5V alimentat per xarxa
  • Convertidor de nivell lògic * Freetronics
  • Filferro divers, capçaleres de pins, encongiment, etc. per connectar-ho tot.

Eines

  • Soldador de punta fina
  • Soldar
  • Els separadors de filferro són útils
  • Controlador Torx T15
  • Eina de seguretat ovalada (o fer-ne una, només triga uns quants minuts)

* Inicialment vaig utilitzar un arduino UNO en la prova de totes les ordres serials de la màquina i va funcionar perfectament, tot i que el mòdul ESP es va negar a funcionar. Vaig comprovar el codi per tres vegades i tenia la certesa que les ordres que sortien del mòdul ESP eren les mateixes que les de l’arduino, tot i que era inutilitzable. Ho poso al mòdul ESP només treballant en lògica de 3.3v i no de 5V. Un cop vaig posar el convertidor lògic, va funcionar bé. Això pot ser necessari o no en altres màquines.

L’ideal seria que tinguéssiu un sistema domòtic existent que admeti el protocol MQTT (com ara openhab), ja que a això s’orienta el projecte. Si només voleu controlar-lo mitjançant botons d'una pàgina web sense cap sistema de suport, haureu de fer alguns canvis al codi de pàgina web incrustat. No és massa complicat d'aconseguir (potser rev2..)

Pas 3: el protocol del Jura

El Protocol del Jura
El Protocol del Jura

Les dades cap a / des de la màquina només són el serial @ 9600, però Jura també té alguns trucs a la màniga. El protocol el fa servir per a ECC addicional i / o per confondre la comunicació. En poques paraules, cada byte de dades (caràcter) es divideix entre els bits 2 i 5 de 4 bytes sèrie estàndard arrossegats per una pausa de 8 ms. Si us interessa saber com funciona, hi ha molta informació als enllaços aquí.

Informació del protocol extreta de:

El codi arduino ho simplifica, cosa que us permet transmetre ordres estàndards llegibles per humans que després transmet al protocol Jura.

El meu codi és una combinació de codi de:

Les ordres a què es fa referència als llocs anteriors no eren exactes per a la meva màquina, però mitjançant un mètode d'assaig i error, vaig poder arribar a fer el següent:

FA: 01 - Apaga (però sembla que no esbandida, fins i tot si cal) FA: 02 - Respon "bé" però no sé ben bé què fa. FA: 03 - Missatge d'esbandida (Força un missatge "Esbandida" a la pantalla, prement la màquina d'esbandida rotativa) FA: 04 - Acció d'esbandida - Esbandida quan apareix el missatge "Premeu el botó giratori", en cas contrari no fa res FA: 05 - Fort a la pantalla (Presumiblement, combineu-ho amb fer un cafè per a forts) FA: 06 - Fort a la pantalla (presumiblement, combineu-ho amb fer un cafè per fer forts) FA: 07 - "Especial" a la pantalla, però en realitat no fa res, no estic segur de què serveix FA: 08 - Steam FA: 09 - Cafè petit FA: 0A - Cafè gran

Hi ha altres ordres, però això és molt per a mi …

Tingueu precaució quan emeteu ordres desconegudes, per exemple, aparentment AN: 0A netejarà la EEPROM de la màquina.

Pas 4: desmuntatge

Obrir la màquina en si no és massa fàcil, ja que necessiteu eines una mica especials, però una persona entusiasta trobarà la manera de fer-ho: necessiteu una broca Torx T15 i una "clau ovalada" per a 2 cargols. El Torx que ja tenia, l’eina oval que vaig fabricar amb un pern de cap de femella de 4 mm perforat i aplanat una mica amb un martell.

Les instruccions aquí estan força ben presentades:

Pas 5: anul·lació de la garantia

Anul·lació de la garantia
Anul·lació de la garantia
Anul·lació de la garantia
Anul·lació de la garantia
Anul·lació de la garantia
Anul·lació de la garantia
Anul·lació de la garantia
Anul·lació de la garantia

Un cop a la màquina, veureu els components principals. La presa d’alimentació principal té un bonic lloc per afegir el carregador de 5 V.

Vaig afegir cables (classificats a la xarxa) al bloc de terminals a l'entrada de la màquina i els heu soldat / encongit als passadors de xarxa del carregador de 5V. El meu model particular no era un port USB, sinó que tenia el cable connectat permanentment. És possible que no tingueu prou espai perquè un port USB tipus un pugui utilitzar un cable USB real, però si obriu el carregador, podeu treure el port USB i substituir-lo per un cable estàndard als punts 5v i Gnd.

Si voleu, podeu substituir una altra font d'alimentació de 5 V 500ma haurien de ser abundants.

Hi ha molt espai per al mòdul de relés a prop del molinet. Hem de connectar els dos relés per funcionar en paral·lel amb els interruptors d’alimentació principals. Simplement he tallat els cables existents, els he despullat, estanyat, he afegit un cable addicional i he tornat a soldar junts (no oblideu la contracció de calor). Hi havia prou folgància als cables per fer-ho.

El mòdul de relé es manté al seu lloc amb cinta de doble cara de bona qualitat. Amb els cables connectats i amb només un espai limitat per al moviment, fins i tot si la cinta perd l'adherència, el mòdul no anirà massa lluny i no podrà entrar en contacte amb cap objecte metàl·lic.

També he tornat a provar el port de diagnòstic de la meva màquina per determinar la ubicació de les connexions internes i així aconseguir una integració totalment oculta. Només s’utilitzen cables tx, rx i Gnd.

Si teniu una màquina més comercial que admet un voltatge d’espera i / o no voleu anul·lar la garantia a la vostra màquina, podeu connectar-vos directament al port de diagnòstic, però pot ser que no pugueu engegar la màquina mitjançant aquest dispositiu.

La meva màquina utilitza un connector de 7 pins. D'esquerra a dreta és:

NC Tx G Rx NC 5v NC

Els pins corresponents a la placa principal: vermell = Gnd taronja = Rx negre = Tx

Podeu trobar més informació als pinouts aquí:

Pas 6: Connexió del costat lògic

Cablatge del costat lògic
Cablatge del costat lògic
Cablatge del costat lògic
Cablatge del costat lògic
Cablatge del costat lògic
Cablatge del costat lògic

Reviseu el diagrama: sembla massa complicat, però realment no ho és.

Vaig muntar el convertidor de nivell a la part posterior del regulador de tensió (depinned) amb una cinta de doble cara. Aleshores vaig utilitzar algunes potes de components per soldar els pins d’alimentació i de terra a banda i banda del convertidor de nivell als pins corresponents del mòdul de potència. Tot aquest mòdul funciona com un "passthrough" per a tota la lògica i font d'alimentació de l'ESP-01.

He utilitzat els dos convertidors mitjans per a les dades de sèrie i els dos externs per als senyals de conducció del relé, però no importa el que utilitzeu.

En realitat, no és necessari amb aquests mòduls de relé executar una lògica de 5 V, ja que estan actius BAIX, però simplement va funcionar molt bé, així que ho vaig fer de totes maneres.

Vaig utilitzar una capçalera femella 4x2 per connectar-me al mòdul ESP. Això permet carregar fàcilment el codi o substituir el mòdul.

No apareix al diagrama l’entrada de 5V: he connectat la meva directament al mòdul de relé (vegeu la segona imatge). El cable negre situat a la part inferior esquerra de la imatge mostra les dades de sèrie que apareixen al tauler principal. He utilitzat una part d’un cable d’extensió d’auriculars blindat de 3,5 mm per ajudar a reduir les possibilitats d’interferències a la línia de dades.

El codi 12f utilitza SoftwareSerial en lloc de sèrie de maquinari: permet al mòdul informar de l'estat de depuració mitjançant sèrie normal. Les connexions es fan mitjançant els pins 4 i 5. Vaig adaptar la mateixa capçalera per fer de l'ESP12F un intercanvi d'endoll per l'ESP-01, només canviant els pins de sèrie

Pas 7: Programació del mòdul

Programació del mòdul
Programació del mòdul

El codi es va compilar contra Arduino 1.8.1 amb el complement ESP8266 i PubSubClient 2.6.0 (que és la biblioteca MQTT)

Modifiqueu el codi segons els vostres requisits i pengeu-lo al mòdul ESP-01 i connecteu-vos a la màquina. Vés amb compte amb l’orientació dels passadors!

Configuració

Opció 1)

Només al codi base en zip. Quan el mòdul ESP s’engega per primer cop, entra al mode AP i estableix la seva IP a 192.168.4.1. A continuació, podeu connectar-vos al mòdul i canviar la IP i connectar-vos al vostre propi punt d'accés. També haureu d’establir una IP per a la vostra màquina en aquest interval, ja que no hi ha DHCP al mòdul.

El SSID AP per defecte és "ESPSwitch" i la contrasenya és "12345678"

Per defecte, es manté en mode AP durant 2 minuts. Podeu canviar aquesta configuració a 'global.h': s'anomena "adminTimeout" i és en mil·lisegons. Recomano canviar-ho per una cosa baixa un cop tingueu una configuració vàlida a EEPROM, ja que en cas contrari provocarà retards innecessaris en l'arrencada del dispositiu.

Opció 2)

Aquest és el mode per defecte per al codi més recent que admet comunicacions bidireccionals, l'opció 1. No està disponible. També podeu canviar la configuració predeterminada SSID / Contrasenya al fitxer principal ino (busqueu '// DEFAULT CONFIG'), de manera que es carregarà aquests paràmetres a l'EEPROM al primer arrencada i canvien el retard del mode d'administrador a alguna cosa baixa a 'global.h'. D'aquesta manera s'evita haver de desordenar la connexió a l'AP temporal.

El dispositiu configurarà automàticament el seu identificador MQTT (i el camí de subscripció) als darrers 4 dígits del número de sèrie dels mòduls. El camí per defecte és ha / mod // #, canvieu com convingueu, però llegiu els comentaris del codi per assegurar-vos que la matriu adequada tingui la longitud correcta.

Ho faig perquè vol dir que no he de generar un identificador únic per a cada mòdul de la meva xarxa.

L'identificador del dispositiu és visible i el servidor MQTT es pot configurar a través de la pàgina del servidor MQTT del servidor web intern

Pas 8: fer que faci coses …

Les ordres MQTT són

ha / mod / xxxx / 0 o 1 = Commuta la potència

Qualsevol altra cadena es tractarà com una ordre i s'enviarà a través del port sèrie. L'estat es comunica a / ha / cafè a HEX

Amb OpenHAB

coffeemachine.items

Número Coffee_Machine_Power "Power" {mqtt = "> [control: ha / mod / 8002 /: command: *: default]"} String Coffee_Machine_Status {mqtt = "<[control: ha / coffee: state: default]"}

Mapa del lloc

Group item = "Cafetera" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Canvia item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Petit"] Canvia item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Canvia element = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Esbandida"] Element de text = Coffee_Status label = "Estat [% s] "}

voicecontrol.rules

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

regla "Regles d'ordres de veu"

quan Item VoiceCommand ha rebut l'ordre, llavors var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand Received" + ordre)

if (command.contains ("encendre la màquina de cafè") || command.contains ("apagar la màquina de cafè")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("make me a small coffee")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("make me a large coffee")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} si (command.contains ("esbandida la màquina de cafè")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} final

Regles (per interpretar les respostes HEX a valors "reals"):

regla "Estat de la màquina de cafè" quan l'element Coffee_Machine_Status ha rebut l'actualització de var 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 (answer == "Off") {postUpdate (Coffee_Status, "Off")} finalitza

Pas 9: refinaments / Tot

Simplifiqueu la configuració inicial de connexió a wifi - Fet. S'ha abandonat la idea de "mode d'administrador", ja que era molesta. Ara només cal introduir SSID i contrasenya al codi. Es desa a EEPROM si actualitzeu / canvieu mitjançant la interfície web.

El codi més recent també admet actualitzacions OTA, però haureu d'actualitzar l'EEPROM al mòdul ESP-01 perquè funcioni o comenteu els elements OTA corresponents

Afegiu codi per processar les respostes de la màquina i llegiu l'estat com si no hi ha safata, sòl buit i empleneu el dipòsit - Fet. He afegit codi per tornar a llegir l’estat i publicar-lo a ha / coffee. Aquestes són només les respostes crues i encara estic treballant en la seva interpretació, però fins ara em falta Tray i Tank buit. Sondeja la màquina cada 9 segons quan està activada i publica la resposta a MQTT

La resposta és en HEX, però els bits individuals indiquen els sensors

Afegiu codi a les pàgines web per obtenir un control directe mitjançant ordres HTTP GET.

Concurs Internet de les Coses 2017
Concurs Internet de les Coses 2017
Concurs Internet de les Coses 2017
Concurs Internet de les Coses 2017

Primer premi al concurs Internet de les coses 2017

Recomanat: