Cuprins:

Mașină de cafea activată IoT: 9 pași (cu imagini)
Mașină de cafea activată IoT: 9 pași (cu imagini)

Video: Mașină de cafea activată IoT: 9 pași (cu imagini)

Video: Mașină de cafea activată IoT: 9 pași (cu imagini)
Video: Cum sa faci sa opresti navigatia cand scoti cheia din contact.Essgoo 9 2024, Septembrie
Anonim
Image
Image
Echipament necesar
Echipament necesar

Acest instructable este înscris la competiția IoT - Dacă vă place, vă rugăm să votați pentru ea

ACTUALIZAT: Acum acceptă comunicări bidirecționale și actualizări OTA

De ceva timp am o mașină de cafea Jura și am vrut întotdeauna să o automatizez cumva.

Am rulat un sistem de automatizare de uz casnic de câțiva ani, dar aparatul de cafea nu a fost ceva ușor de modificat (sau cel puțin așa credeam). Aparatele de cafea Jura au, în general, un „port de diagnosticare” și / sau un port utilizat pentru adăugarea unui sistem de plată la aparat, totuși nu am putut găsi nicio informație despre modul în care ar putea fi utilizat. Mai recent, protocolul a fost proiectat invers de unele persoane și făcut public. Problema era că majoritatea referințelor la funcțiile disponibile erau pentru mașini mult mai mari decât ale mele (Ena 7).

Mai mult decât atât, mașina mea nu are o putere de așteptare permanentă ca și mașinile mai mari, în schimb are un comutator HV care face ca sursa de alimentare să fie „blocată”. Butonul fizic de pe aparat activează de fapt 2 comutatoare - Un volt scăzut (partea logică, oprit) și unul de înaltă tensiune (pornire). Ambele comutatoare sunt de moment.

De asemenea, trebuia să mă asigur că mașina funcționează în continuare 100% independent de orice mecanism de control, adică mașina funcționează la fel de normal ca și cum nu ar fi activat IoT.

Pentru a automatiza mașina este nevoie de două lucruri: 1) Pentru a putea controla puterea mașinii 2) Pentru a putea comunica cu mașina pentru a activa funcțiile de preparare a cafelei, clătiți etc.

Pasul 1: Cum o vom face

Vom folosi un modul ESP8266 „ESP-01” pentru a ne conecta la wifi-ul de acasă și pentru a ne abona la serverul / subiectul MQTT ascultând comenzi. „Front End-ul” pe care l-am folosit este OpenHAB2, dar nu există niciun motiv pentru care să nu puteți adăuga la interfața web a dispozitivului și să controlați direct dacă doriți sau prin intermediul comenzilor HTTP Get.

ESP8266 se va ocupa de controlul a 2 relee legate de butonul de alimentare și, de asemenea, va procesa comenzi seriale către / de la aparatul de cafea.

AVERTISMENT - Această instrucțiune prezintă procedura pe care am folosit-o pentru a modifica mașina de cafea Jura Ena7 pentru a fi controlată prin automatizarea casei. Se ocupă cu modificarea unui dispozitiv de energie electrică care poate fi periculos dacă este efectuat incorect. Informațiile de aici pot fi incomplete, inexacte și nesigure. Procedați cu prudență. Nu este acceptată nicio răspundere.

Pasul 2: Echipament necesar

Echipament necesar
Echipament necesar
Echipament necesar
Echipament necesar
Echipament necesar
Echipament necesar

Părți

  • Modul ESP-01 și o modalitate de programare (Arduino IDE și adaptor fizic pentru programare)
  • Modul releu 2 căi EBAY
  • 5v -> 3.3v Regulator EBAY
  • Mic încărcător de telefon alimentat de la rețea de 5V
  • Convertor de nivel logic * Freetronics
  • Sârmă diversă, anteturi de pin, termocontractibil etc. pentru conectarea tuturor.

Instrumente

  • Fier de lipit cu vârf fin
  • Solder
  • Wire Strippers sunt la îndemână
  • Driver Torx T15
  • Instrument de securitate oval (sau creați unul, durează doar câteva minute)

* Am folosit inițial un arduino UNO în testarea tuturor comenzilor seriale ale mașinii și a funcționat perfect, totuși modulul ESP a refuzat să funcționeze. Am verificat triplu codul și am fost sigur că comenzile care ies din modulul ESP erau aceleași ca și arduino, totuși a fost o oprire. Am pus acest lucru la modulul ESP funcționând doar pe logica de 3.3v și nu pe 5V. Odată ce am introdus convertorul Logic, a funcționat bine. Acest lucru poate fi sau nu necesar în alte mașini.

În mod ideal, ați avea un sistem de automatizare a locuinței existent care acceptă protocolul MQTT (cum ar fi openhab) deoarece acesta este obiectivul proiectului. Dacă doriți doar să o controlați prin butoane pe o pagină web fără niciun sistem de suport, va trebui să faceți câteva modificări la codul paginii web încorporate. Nu este prea complicat de realizat (poate rev2..)

Pasul 3: Protocolul Jura

Protocolul Jura
Protocolul Jura

Datele către / de la mașină sunt doar serial @ 9600, dar Jura are și câteva trucuri în mâneci. Protocolul îl folosește fie pentru ECC suplimentar și / fie pentru a confunda comunicarea. Pur și simplu, fiecare octet de date (caracter) este împărțit pe biții 2 și 5 din 4 octeți seriali standard urmăriți de o pauză de 8 ms. Dacă doriți să aflați cum funcționează acest lucru, există o mulțime de informații în linkurile de aici.

Informații despre protocol extrase de pe:

Codul arduino simplifică acest lucru, permițându-vă să transmiteți comenzi standard, lizibile de om, pe care apoi le transpune în protocolul Jura.

Codul meu este o combinație de cod de la:

Comenzile la care se face referire pe site-urile de mai sus nu au fost corecte pentru mașina mea, dar printr-o metodă de încercare și eroare, am reușit să vin cu cele de mai jos:

FA: 01 - Se oprește (dar nu pare să clătească, chiar dacă este necesar) FA: 02 - Răspunde „ok”, dar nu știu sigur ce face. FA: 03 - Mesaj de clătire (forțează un mesaj de „clătire” pe ecran, apăsând mașina de clătire rotativă) FA: 04 - Acțiune de clătire - Clătește când apare mesajul „Apăsați butonul rotativ”, altfel nu face nimic FA: 05 - Putere pe ecran (Probabil combinați acest lucru cu prepararea unei cafele puternice) FA: 06 - Puternic pe ecran (Probabil combinați acest lucru cu prepararea unei cafele puternice) FA: 07 - „Special” pe ecran, dar de fapt nu face nimic, nu sunt sigur pentru ce este acesta: 08 - Steam FA: 09 - Cafea mică FA: 0A - Cafea mare

Există alte comenzi, dar acest lucru este suficient pentru mine …

Aveți grijă când emiteți comenzi necunoscute, de exemplu, aparent AN: 0A va șterge EEPROM-ul mașinii …

Pasul 4: Demontare

Deschiderea mașinii în sine nu este prea ușoară, deoarece aveți nevoie de niște instrumente ușor speciale, dar o persoană dornică va găsi o cale - Aveți nevoie de un bit T15 Torx și o „cheie ovală” pentru 2 șuruburi. Torxul pe care l-am avut deja, instrumentul oval pe care l-am făcut dintr-un șurub cu cap de soclu de 4 mm găurit și aplatizat puțin cu un ciocan.

Instrucțiunile de aici sunt destul de bine prezentate -

Pasul 5: Anularea garanției

Anularea garanției
Anularea garanției
Anularea garanției
Anularea garanției
Anularea garanției
Anularea garanției
Anularea garanției
Anularea garanției

Odată ajuns în aparat, veți vedea componentele principale. Principala priză de alimentare are un loc frumos sub ea pentru adăugarea încărcătorului de 5V.

Am adăugat (la rețea) cabluri la blocul de terminale la intrarea mașinii și le-am lipit / termocontractat la pinii de rețea ai încărcătorului de 5V. Modelul meu special nu era un tip de port USB, ci unul care avea cablul atașat permanent. Este posibil să nu aveți suficient spațiu pentru ca un port USB de tipul unu să poată utiliza un cablu USB real, dar dacă ați deschis încărcătorul, ați putea scoate portul USB și îl puteți înlocui cu un fir standard la punctele 5v și Gnd.

Ați putea înlocui o altă sursă de alimentare de 5v, dacă doriți. 500ma ar trebui să fie din belșug.

Există o mulțime de spațiu pentru modulul de releu în apropierea polizorului. Trebuie să conectăm cele două relee pentru a funcționa în paralel cu întrerupătoarele principale. Pur și simplu am tăiat firele existente, am dezbrăcat, conservat, am adăugat un fir suplimentar și am lipit din nou împreună (nu uitați de termorezistență). Era suficientă slăbiciune în fire pentru a face acest lucru.

Modulul releu este ținut în poziție cu bandă dublă de bună calitate. Cu firele conectate și cu spațiu limitat pentru mișcare, chiar dacă banda pierde aderența, modulul nu va merge prea departe și nu poate intra în contact cu obiecte metalice.

De asemenea, am confirmat înapoi portul de diagnosticare de pe mașina mea pentru a determina locația conexiunilor interne, astfel încât să reușesc o integrare complet ascunsă. Se folosesc doar firele tx, rx și Gnd.

Dacă aveți o mașină mai comercială care acceptă o tensiune de așteptare și / sau nu doriți să anulați garanția pe mașina dvs., vă puteți conecta direct la portul de diagnosticare, dar este posibil să nu puteți alimenta mașina folosind acest dispozitiv.

Mașina mea utilizează un conector cu 7 pini. De la stânga la dreapta este:

NC Tx G Rx NC 5v NC

Pinii corespunzători de pe placa principală: Roșu = Gnd Portocaliu = Rx Negru = Tx

Mai multe informații pot fi găsite pe pinouts aici:

Pasul 6: Cablarea laturii logice

Cablarea laturii logice
Cablarea laturii logice
Cablarea laturii logice
Cablarea laturii logice
Cablarea laturii logice
Cablarea laturii logice

Examinați diagrama - Pare prea complicat, dar chiar nu este.

Am montat convertorul de nivel în partea din spate a regulatorului de tensiune (depinned) cu o bandă dublă. Apoi am folosit câteva picioare componente pentru a lipi pinii de putere și împământare de pe fiecare parte a convertorului de nivel la pinii corespunzători ai modulului de putere. Tot acest modul funcționează apoi ca un „passthrough” pentru toată logica și sursa de alimentare pentru ESP-01.

Am folosit cele două convertoare de mijloc pentru datele seriale și cele două exterioare pentru semnalele de conducere a releului, dar nu contează pe care le utilizați.

De fapt, nu este necesar ca aceste module de releu să ruleze o logică de 5V, deoarece acestea sunt active LOW, dar a funcționat frumos, așa că am făcut-o oricum.

Am folosit un antet feminin 4x2 pentru conectarea la modulul ESP. Acest lucru permite încărcarea ușoară a codului sau înlocuirea modulului.

Nu este prezentată în diagramă intrarea de 5V - am conectat-o pe a mea direct la modulul de releu (vezi a doua imagine). Firul negru din partea stângă jos a imaginii este datele seriale de pe placa principală. Am folosit o parte dintr-un cablu de extensie pentru căști ecranat de 3,5 mm doar pentru a ajuta la reducerea șanselor de interferență în linia de date.

Codul 12f folosește SoftwareSerial în locul serialului hardware - Acest lucru permite modulului să raporteze starea pentru depanare înapoi prin serial normal. Conexiunile se fac prin intermediul pinilor 4 și 5. Am adaptat același antet pentru a face din ESP12F un plug in swap pentru ESP-01, schimbând doar acei pini seriali

Pasul 7: Programarea modulului

Programarea modulului
Programarea modulului

Codul a fost compilat împotriva Arduino 1.8.1 cu addon pentru placa ESP8266 și PubSubClient 2.6.0 (care este biblioteca MQTT)

Modificați codul conform cerințelor dvs. și încărcați codul în modulul ESP-01 și conectați-vă la aparat. Aveți grijă la orientarea știfturilor!

Configurare

Opțiunea 1)

Numai pe codul de bază în zip. Când pornește primul modul ESP, acesta intră în modul AP și își setează IP-ul la 192.168.4.1. Apoi vă puteți conecta la modul și puteți schimba adresa IP și vă puteți conecta la propriul punct de acces. De asemenea, va trebui să setați un IP pentru aparatul dvs. în acest interval, deoarece nu există DHCP pe modul.

SSID AP implicit este „ESPSwitch” și parola este „12345678”

Rămâne în modul AP timp de 2 minute în mod implicit. Puteți modifica această setare în „global.h” - Se numește „adminTimeout” și este în milisecunde. Vă recomandăm să schimbați acest lucru la ceva scăzut odată ce aveți o configurare validă în EEPROM, deoarece altfel va provoca întârzieri inutile la pornirea dispozitivului.

Opțiunea 2)

Acesta este modul implicit pentru noul cod care acceptă comunicări bidirecționale, opțiunea 1. Nu este disponibilă. De asemenea, puteți modifica setările implicite SSID / Parolă în fișierul principal ino (căutați „// DEFAULT CONFIG”), astfel încât acesta să se încarce aceste setări în EEPROM la prima pornire și modificarea întârzierii modului de administrare la ceva scăzut în „global.h”. Acest lucru evită să fie nevoie să vă deranjați conectându-vă la AP temporar.

Dispozitivul va seta automat ID-ul MQTT (și calea abonamentului) la ultimele 4 cifre ale numărului de serie al modulelor. Calea în mod implicit este ha / mod // #, modificați după cum doriți, dar citiți comentariile din cod pentru a vă asigura că matricea corespunzătoare are lungimea corectă.

Fac asta pentru că înseamnă că nu trebuie să generez un ID unic pentru fiecare modul din rețeaua mea.

ID-ul dispozitivului este vizibil, iar serverul MQTT poate fi setat prin pagina serverului MQTT de pe serverul web intern

Pasul 8: Fă-l să facă lucruri …

Comenzile MQTT sunt

ha / mod / xxxx / 0 sau 1 = Comută puterea

Orice alt șir va fi tratat ca o comandă și trimis prin portul serial. Starea este raportată la / ha / cafea în HEX

Cu OpenHAB

coffeemachine.items

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

Sitemap

Element de grup = "Mașină de cafea" {Comutare element = Coffee_Machine_Power label = "Putere" mapări = [1 = "Comutare"] Comutare element = Coffee_Machine_Cmd label = "" mapări = ["FA: 09" = "Mic"] Comutare element = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Clătiți"] Item text = Coffee_Status label = "Status [% s] "}

voicecontrol.rules

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

regula "Reguli de comandă vocală"

când Item VoiceCommand a primit comanda, apoi var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand primit" + comanda)

if (command.contains ("porniți mașina de cafea") || command.contains ("opriți mașina de cafea")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("face-mi o cafea mică")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("make me a large coffee")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("clătiți mașina de cafea")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} end

Reguli (pentru interpretarea răspunsurilor HEX în valori „reale”):

regula „Starea mașinii de cafea” când elementul Coffee_Machine_Status a primit actualizare, apoi 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")} se termină

Pasul 9: Rafinări / Todo

Simplificați configurarea inițială conectarea la wifi - Efectuat. A abandonat ideea de „mod de administrare”, deoarece era enervant. Acum trebuie doar să introduceți SSID și parola în cod. Salvează în EEPROM dacă actualizați / modificați prin intermediul interfeței web.

Codul mai nou acceptă, de asemenea, actualizări OTA, dar va trebui să faceți upgrade EEPROM pe modulul ESP-01 pentru ca acest lucru să funcționeze sau să comenteze articolele OTA corespunzătoare

Adăugați cod pentru prelucrarea răspunsurilor de la mașină și citiți starea ca fără tavă, terenuri goale și rezervor de umplere - Gata. Am adăugat cod pentru a citi înapoi starea și a publica în ha / cafea. Acesta este doar răspunsurile brute și încă lucrez la interpretarea lor, dar până acum am lipsit Tray și Tank gol. Interogă aparatul la fiecare 9 secunde când este pornit și publică răspunsul la MQTT

Răspunsul este în HEX, dar biții individuali indică senzorii

Adăugați cod la paginile web pentru control direct prin comenzi HTTP GET.

Concurs Internet of Things 2017
Concurs Internet of Things 2017
Concurs Internet of Things 2017
Concurs Internet of Things 2017

Premiul I în cadrul concursului Internet of Things 2017

Recomandat: