Sommario:

Macchina da caffè abilitata per IoT: 9 passaggi (con immagini)
Macchina da caffè abilitata per IoT: 9 passaggi (con immagini)

Video: Macchina da caffè abilitata per IoT: 9 passaggi (con immagini)

Video: Macchina da caffè abilitata per IoT: 9 passaggi (con immagini)
Video: Rendiamo Smart una macchina da caffè con Arduino - Alessio Balbo 2024, Luglio
Anonim
Image
Image
Attrezzatura necessaria
Attrezzatura necessaria

Questo istruttore è iscritto al concorso IoT - Se ti piace, votalo

AGGIORNATO: ora supporta comunicazioni bidirezionali e aggiornamenti OTA

Da tempo possiedo una macchina da caffè Jura e ho sempre voluto automatizzarla in qualche modo.

Gestisco da alcuni anni un sistema domotico di base ma la macchina del caffè non era qualcosa di semplice da modificare (o almeno così credevo). Le macchine da caffè Jura generalmente hanno una "porta diagnostica" e/o una porta utilizzata per aggiungere un sistema di pagamento alla macchina, tuttavia non sono riuscito a trovare alcuna informazione su come potrebbe essere utilizzata. Più recentemente, il protocollo è stato decodificato da alcuni individui e reso pubblico. Il problema era che la maggior parte dei riferimenti alle funzioni disponibili erano per macchine molto più grandi della mia (Ena 7).

Inoltre, la mia macchina non ha un'alimentazione di standby permanente come le macchine più grandi, ma ha un interruttore HV che fa "bloccare" l'alimentatore. Il pulsante fisico sulla macchina attiva effettivamente 2 interruttori: uno a bassa tensione (lato logico, spegni) e uno ad alta tensione (accensione). Entrambi gli interruttori sono momentanei.

Dovevo anche assicurarmi che la macchina continuasse a funzionare al 100% indipendentemente da qualsiasi meccanismo di controllo, ovvero che la macchina funzioni ancora normalmente come se non fosse abilitata per l'IoT.

Per automatizzare la macchina sono necessarie due cose: 1) Poter controllare l'alimentazione alla macchina 2) Poter comunicare con la macchina per attivare le funzioni per fare il caffè, risciacquo ecc.

Passaggio 1: come lo faremo?

Utilizzeremo un modulo ESP8266 "ESP-01" per connetterci al wifi di casa e iscriverci al server/argomento MQTT in ascolto dei comandi. Il "Front End" che ho usato è OpenHAB2, ma non c'è motivo per cui non si possa aggiungere all'interfaccia web sul dispositivo e controllare direttamente se lo si desidera o tramite i comandi HTTP Get.

L'ESP8266 gestirà il controllo di 2 relè relativi al pulsante di accensione ed elaborerà anche i comandi seriali da/verso la macchina da caffè.

ATTENZIONE - Questa istruzione descrive la procedura che ho utilizzato per modificare la mia macchina da caffè Jura Ena7 per essere controllata tramite la domotica. Si tratta di modificare un dispositivo elettrico di rete che può essere pericoloso se eseguito in modo non corretto. Le informazioni qui possono essere incomplete, imprecise e non sicure. Procedi con cautela. Nessuna responsabilità accettata.

Passaggio 2: attrezzatura necessaria

Attrezzatura necessaria
Attrezzatura necessaria
Attrezzatura necessaria
Attrezzatura necessaria
Attrezzatura necessaria
Attrezzatura necessaria

Parti

  • Modulo ESP-01 e un modo per programmarlo (IDE Arduino e adattatore fisico per la programmazione)
  • Modulo relè a 2 vie EBAY
  • Regolatore 5v -> 3.3v EBAY
  • Piccolo caricatore del telefono alimentato da rete 5v
  • Convertitore di livello logico* Freetronics
  • Cavi vari, intestazioni pin, termoretraibile ecc. per collegare il tutto.

Utensili

  • Saldatore a punta fine
  • Saldare
  • Gli spelafili sono utili
  • Driver Torx T15
  • Strumento di sicurezza ovale (o creane uno, richiede solo pochi minuti)

* Inizialmente ho usato un arduino UNO nei miei test di tutti i comandi seriali sulla macchina e ha funzionato perfettamente, tuttavia il modulo ESP si è rifiutato di funzionare. Ho ricontrollato tre volte il codice ed ero certo che i comandi in uscita dal modulo ESP fossero gli stessi dell'arduino, tuttavia era un no-go. L'ho attribuito al modulo ESP che funziona solo su logica 3.3v e non 5V. Una volta inserito il convertitore Logic, ha funzionato bene. Questo può essere richiesto o meno in altre macchine.

Idealmente, avresti un sistema di automazione domestica esistente che supporti il protocollo MQTT (come openhab) poiché questo è lo scopo del progetto. Se vuoi semplicemente controllarlo tramite i pulsanti su una pagina web senza alcun sistema di supporto, dovrai apportare alcune modifiche al codice della pagina web incorporata. Non è eccessivamente complicato da ottenere (forse rev2..)

Fase 3: Il protocollo Jura

Il protocollo del Giura
Il protocollo del Giura

I dati da/verso la macchina sono solo serial @ 9600 ma anche Jura ha qualche asso nella manica. Il protocollo lo usa per ECC extra e/o per offuscare la comunicazione. In poche parole, ogni byte di dati (carattere) è suddiviso tra i bit 2 e 5 di 4 byte seriali standard seguiti da una pausa di 8 ms. Se ti interessa sapere come funziona, ci sono molte informazioni nei link qui.

Informazioni sul protocollo estratte da:

Il codice arduino semplifica questo, consentendo di trasmettere comandi standard leggibili dall'uomo che poi traspone nel protocollo Jura.

Il mio codice è una combinazione del codice di:

I comandi a cui si fa riferimento nei siti sopra non erano accurati per la mia macchina, ma attraverso un metodo di tentativi ed errori, sono stato in grado di ottenere quanto segue:

FA:01 - Si spegne (ma non sembra risciacquare, anche se necessario) FA:02 - Risponde "ok" ma non è sicuro di cosa faccia. FA:03 - Messaggio di risciacquo (Forza un messaggio di "risciacquo" sullo schermo, premendo la macchina per il risciacquo rotativo) FA:04 - Azione di risciacquo - Risciacqua quando viene visualizzato il messaggio "Premere il pulsante rotante", altrimenti non fa nulla FA:05 - Forte sullo schermo (Presumibilmente combinare questo con la preparazione di un caffè forte) FA:06 - Forte sullo schermo (presumibilmente combinare questo con la preparazione di un caffè forte) FA:07 - "Speciale" sullo schermo ma in realtà non fa nulla, non sono sicuro di cosa servaFA:08 - Vapore FA:09 - Caffè piccolo FA:0A - Caffè grande

Ci sono altri comandi ma questo è abbastanza per me…

Prestare attenzione quando si impartiscono comandi sconosciuti, ad esempio, apparentemente AN:0A cancellerà l'EEPROM della macchina…

Passaggio 4: smontaggio

Aprire la macchina stessa non è eccessivamente facile in quanto sono necessari alcuni strumenti leggermente speciali, ma una persona appassionata troverà un modo: è necessaria una punta Torx T15 e una "chiave ovale" per 2 viti. Il Torx che avevo già, lo strumento ovale che ho ricavato da un bullone a brugola da 4 mm forato e appiattito un po' con un martello.

Le istruzioni qui sono presentate abbastanza bene -

Passaggio 5: annullamento della garanzia

Annullamento della garanzia
Annullamento della garanzia
Annullamento della garanzia
Annullamento della garanzia
Annullamento della garanzia
Annullamento della garanzia
Annullamento della garanzia
Annullamento della garanzia

Una volta nella macchina, vedrai i componenti principali. La presa di alimentazione principale ha un bel punto sotto per aggiungere il caricabatterie da 5 V.

Ho aggiunto i cavi (preferiti alla rete) alla morsettiera all'ingresso della macchina e li ho saldati/termorizzati ai pin di rete del caricatore 5v. Il mio modello particolare non era un tipo di porta USB, ma uno con il cavo collegato in modo permanente. Potresti non avere abbastanza spazio per una porta USB di tipo uno per poter utilizzare un vero cavo USB, ma se aprissi il caricabatterie, potresti rimuovere la porta USB e sostituirla con un cavo standard ai punti 5v e Gnd.

Se lo desideri, puoi sostituire un altro alimentatore da 5 V con tensione di rete. 500mA dovrebbero essere sufficienti.

C'è molto spazio per il modulo relè vicino al macinino. Dobbiamo cablare i due relè per funzionare in parallelo con gli interruttori di alimentazione principali. Ho semplicemente tagliato i fili esistenti, spellato, stagnato, aggiunto un filo in più e saldato di nuovo insieme (non dimenticare il termoretraibile). C'era abbastanza gioco nei fili per farlo.

Il modulo relè è tenuto in posizione con nastro biadesivo di buona qualità. Con i fili collegati e con uno spazio di movimento limitato, anche se il nastro perde aderenza, il modulo non andrà troppo lontano e non potrà entrare in contatto con oggetti metallici.

Ho anche eseguito il backprobe della porta diagnostica sulla mia macchina per determinare la posizione delle connessioni interne in modo da poter ottenere un'integrazione completamente nascosta. Vengono utilizzati solo fili tx, rx e Gnd.

Se si dispone di una macchina più commerciale che supporta una tensione di standby e/o non si desidera annullare la garanzia sulla macchina, è possibile collegarsi direttamente alla porta diagnostica ma potrebbe non essere possibile accendere la macchina utilizzando questo dispositivo.

La mia macchina utilizza un connettore a 7 pin. Da sinistra a destra è:

NC Tx G Rx NC 5v NC

I pin corrispondenti sulla scheda madre: Rosso = Gnd Arancione = Rx Nero = Tx

Maggiori informazioni possono essere trovate sui pinout qui:

Passaggio 6: cablaggio del lato logico

Cablaggio del lato logico
Cablaggio del lato logico
Cablaggio del lato logico
Cablaggio del lato logico
Cablaggio del lato logico
Cablaggio del lato logico

Rivedere il diagramma - Sembra eccessivamente complicato ma in realtà non lo è.

Ho montato il convertitore di livello sul retro del regolatore di tensione (definito) con del nastro biadesivo. Ho quindi utilizzato alcune gambe dei componenti per saldare i pin di alimentazione e di massa su entrambi i lati del convertitore di livello ai corrispondenti pin del modulo di alimentazione. L'intero modulo funziona quindi come un "passthrough" per tutta la logica e l'alimentazione dell'ESP-01.

Ho usato i due convertitori centrali per i dati seriali e i due esterni per i segnali di pilotaggio del relè, ma non importa quale usi.

In realtà non è necessario con questi moduli relè eseguire una logica 5v poiché sono attivi LOW ma ha funzionato bene, quindi l'ho fatto comunque.

Ho usato un'intestazione femmina 4x2 per il collegamento al modulo ESP. Ciò consente un facile caricamento del codice o la sostituzione del modulo.

Non mostrato nello schema è l'ingresso 5V - ho collegato il mio direttamente al modulo relè (vedi seconda immagine). Il filo nero in basso a sinistra dell'immagine è i dati seriali sulla scheda principale. Ho usato una parte di un cavo di prolunga per cuffie schermato da 3,5 mm solo per ridurre le possibilità di interferenze nella linea dati.

Il codice 12f utilizza SoftwareSerial anziché hardware seriale - Ciò consente al modulo di segnalare lo stato per il debug tramite seriale normale. I collegamenti sono invece tramite i pin 4 e 5. Ho adattato la stessa intestazione per rendere ESP12F un plug in swap per ESP-01, semplicemente scambiando quei pin seriali

Passaggio 7: programmazione del modulo

Programmazione del modulo
Programmazione del modulo

Il codice è stato compilato su Arduino 1.8.1 con l'addon della scheda ESP8266 e PubSubClient 2.6.0 (che è la libreria MQTT)

Modifica il codice secondo le tue esigenze e carica il codice sul modulo ESP-01 e connettiti alla macchina. Fare attenzione con l'orientamento dei perni!

Configurazione

Opzione 1)

Solo sul codice base in zip. Quando il modulo ESP si avvia per la prima volta, entra in modalità AP e imposta il suo IP su 192.168.4.1. È quindi possibile connettersi al modulo e modificare l'IP e connettersi al proprio punto di accesso. Dovrai anche impostare un IP per la tua macchina in quell'intervallo poiché non c'è DHCP sul modulo.

L'SSID dell'AP predefinito è "ESPSwitch" e la password è "12345678"

Rimane in modalità AP per 2 minuti per impostazione predefinita. Puoi modificare questa impostazione in 'global.h' - Si chiama 'adminTimeout' ed è in millisecondi. Raccomando di cambiarlo in qualcosa di basso una volta che hai una configurazione valida in EEPROM poiché altrimenti causerebbe solo inutili ritardi nell'avvio del dispositivo.

Opzione 2)

Questa è la modalità predefinita per il codice più recente che supporta le comunicazioni a 2 vie, l'opzione 1 non è disponibile. È inoltre possibile modificare le impostazioni SSID/Password predefinite nel file ino principale (cercare '// DEFAULT CONFIG') in modo che venga caricato quelle impostazioni nella EEPROM al primo avvio e modifica il ritardo della modalità amministratore in qualcosa di basso in "global.h". Ciò evita di dover perdere tempo a connettersi all'AP temporaneo.

Il dispositivo imposterà automaticamente il suo ID MQTT (e il percorso di sottoscrizione) sulle ultime 4 cifre del numero di serie dei moduli. Il percorso di default è ha/mod//#, cambia come ritieni opportuno ma leggi i commenti nel codice per assicurarti che l'array appropriato abbia la lunghezza corretta.

Lo faccio perché significa che non devo generare un ID univoco per ogni modulo sulla mia rete.

L'ID del dispositivo è visibile e il server MQTT può essere impostato tramite la pagina del server MQTT sul server web interno

Passaggio 8: fargli fare le cose…

I comandi MQTT sono

ha/mod/xxxx/ 0 o 1 = Attiva/disattiva alimentazione

Qualsiasi altra stringa verrà trattata come un comando e inviata tramite porta seriale. Lo stato viene segnalato a /ha/coffee in HEX

Con OpenHAB

macchina del caffè.oggetti

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

Mappa del sito

Group item = "Coffee Machine" { Switch item=Coffee_Machine_Power label="Power" mapping=[1="Toggle"] Switch item=Coffee_Machine_Cmd mapping=["FA:09"="Piccolo"] Switch item= Coffee_Machine_Cmd mappings=["FA:0A"="Large"] Switch item=Coffee_Machine_Cmd mappings=["FA:04"="Risciacquo"] Text item=Coffee_Status label="Stato [%s]" }

voicecontrol.rules

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

regola "Regole dei comandi vocali"

quando Item VoiceCommand ha ricevuto il comando allora var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand ha ricevuto "+command)

if (command.contains("accendi la macchina del caffè") || command.contains("spegni la macchina del caffè")) {

sendCommand(Coffee_Machine_Power, 1) } if (command.contains("fammi un caffè piccolo")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (command.contains("fammi un caffè grande")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("sciacquare la macchina del caffè")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Regole (per interpretare le risposte HEX in valori "reali"):

regola "Stato macchina da caffè"quando l'elemento Coffee_Machine_Status ha ricevuto l'aggiornamento, quindi 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 risciacquoBit = 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" && risciacquoBit == "0") { postUpdate(Coffee_Status, "Ready") }

}

if (risposta == "Off"){ postUpdate(Coffee_Status, "Off") } end

Passaggio 9: perfezionamenti/cose da fare

Semplifica la configurazione iniziale della connessione al Wi-Fi - Fatto. Abbandonato l'idea della "modalità amministratore" perché era fastidiosa. Ora inserisci SSID e password nel codice. Salva in EEPROM se si aggiorna/modifica tramite interfaccia web.

Il codice più recente supporta anche gli aggiornamenti OTA, ma sarà necessario aggiornare la EEPROM sul modulo ESP-01 affinché funzioni o commentare gli elementi OTA corrispondenti

Aggiungi il codice per l'elaborazione delle risposte dalla macchina e leggi lo stato come nessun vassoio, fondo vuoto e riempimento del serbatoio - Fatto. Ho aggiunto il codice per rileggere lo stato e pubblicare su ha/coffee. Queste sono solo le risposte grezze e sto ancora lavorando per interpretarle, ma finora ho il vassoio mancante e il serbatoio vuoto funzionante. Quando è acceso, interroga la macchina ogni 9 secondi e pubblica la risposta su MQTT

La risposta è in HEX ma i singoli bit indicano i sensori

Aggiungi codice alle pagine web per il controllo diretto tramite i comandi HTTP GET.

Concorso Internet delle cose 2017
Concorso Internet delle cose 2017
Concorso Internet delle cose 2017
Concorso Internet delle cose 2017

Primo Premio al Concorso Internet of Things 2017

Consigliato: