Turinys:

„IoT“įgalintas kavos aparatas: 9 žingsniai (su nuotraukomis)
„IoT“įgalintas kavos aparatas: 9 žingsniai (su nuotraukomis)

Video: „IoT“įgalintas kavos aparatas: 9 žingsniai (su nuotraukomis)

Video: „IoT“įgalintas kavos aparatas: 9 žingsniai (su nuotraukomis)
Video: Трактористы (комедия, реж. Иван Пырьев, 1939 г.) 2024, Liepa
Anonim
Image
Image
Reikalinga įranga
Reikalinga įranga

Ši pamoka įtraukta į „IoT“konkursą - jei jums tai patinka, balsuokite už tai

ATNAUJINTA: Dabar palaiko dvikrypčius pranešimus ir OTA atnaujinimus

Jau kurį laiką turiu kavos aparatą „Jura“ir visada norėjau jį kažkaip automatizuoti.

Jau keletą metų naudoju pagrindinę namų automatizavimo sistemą, tačiau kavos aparatas nebuvo toks, kurį būtų paprasta modifikuoti (arba aš taip maniau). „Jura“kavos aparatai paprastai turi „diagnostikos prievadą“ir (arba) prievadą, naudojamą mokėjimo sistemai pridėti prie aparato, tačiau neradau jokios informacijos apie tai, kaip ji galėtų būti naudojama. Visai neseniai kai kurie asmenys protokolą pakeitė atvirkščiai ir paviešino. Problema buvo ta, kad dauguma nuorodų į turimas funkcijas buvo skirtos daug didesnėms mašinoms nei mano (Ena 7).

Be to, mano mašina neturi nuolatinės budėjimo galios, kaip didesnės mašinos, vietoj to ji turi HV jungiklį, kuris maitinimo šaltinį „įjungia“. Fizinis mašinos mygtukas iš tikrųjų įjungia 2 jungiklius - vieną žemos įtampos (loginė pusė, išjunkite) ir vieną didelės įtampos (įjungta). Abu jungikliai yra trumpalaikiai.

Taip pat turėjau įsitikinti, kad mašina vis tiek veikė 100% nepriklausomai nuo jokio valdymo mechanizmo, t. Y. Mašina vis dar veikia kaip įprasta, tarsi nebūtų įjungtas daiktų internetas.

Norint automatizuoti aparatą, reikia dviejų dalykų: 1) turėti galimybę valdyti mašinos maitinimą; 2) mokėti bendrauti su aparatu ir įjungti kavos ruošimo, skalavimo ir kt.

1 žingsnis: kaip mes tai padarysime

Mes naudosime modulį ESP8266 „ESP-01“, kad prisijungtume prie namų „Wi-Fi“ir užsiprenumeruotume MQTT serverio/temos klausymo komandas. Naudojamas „Front End“yra „OpenHAB2“, tačiau nėra jokios priežasties, dėl kurios negalėtumėte pridėti prie įrenginio žiniatinklio sąsajos ir tiesiogiai valdyti, jei to norėtumėte arba naudodami HTTP gavimo komandas.

ESP8266 valdys 2 reles, susijusias su maitinimo mygtuku, taip pat apdoros nuoseklias komandas į/iš kavos aparato.

ĮSPĖJIMAS - šioje instrukcijoje aprašoma procedūra, kurią naudoju modifikuodama kavos aparatą „Jura Ena7“, kad jis būtų valdomas naudojant namų automatiką. Tai susiję su elektros tinklo įrenginio modifikavimu, kuris gali būti pavojingas, jei jis atliekamas neteisingai. Čia pateikta informacija gali būti neišsami, netiksli ir nesaugi. Tęskite atsargiai. Atsakomybė neprisiimama.

2 žingsnis: reikalinga įranga

Reikalinga įranga
Reikalinga įranga
Reikalinga įranga
Reikalinga įranga
Reikalinga įranga
Reikalinga įranga

Dalys

  • ESP-01 modulis ir jo programavimo būdas („Arduino IDE“ir fizinis programavimo adapteris)
  • 2 krypčių relės modulis EBAY
  • 5v -> 3.3v reguliatorius EBAY
  • Mažas 5 V tinklo maitinimo telefono įkroviklis
  • Loginio lygio keitiklis* Freetronics
  • Įvairūs laidai, kaiščių antgaliai, šilumos susitraukimas ir tt, norint visa tai sujungti.

Įrankiai

  • Lituoklis su smulkiu galu
  • Lituoklis
  • Vielos nuėmikliai yra patogūs
  • Torx T15 vairuotojas
  • Ovalus apsaugos įrankis (arba sukurkite jį, užtrunka tik kelias minutes)

*Iš pradžių naudojau „arduino UNO“, bandydamas visas serijines komandas mašinai, ir jis veikė nepriekaištingai, tačiau ESP modulis atsisakė veikti. Aš trigubai patikrinau kodą ir buvau tikras, kad komandos, išeinančios iš ESP modulio, yra tokios pačios kaip ir arduino, tačiau tai buvo neleidžiama. Įdėjau tai į ESP modulį, veikiantį tik su 3.3V logika, o ne su 5V. Įdėjęs „Logic“keitiklį, jis veikė gerai. Kitose mašinose to gali prireikti arba nereikalauti.

Idealiu atveju turėtumėte esamą namų automatizavimo sistemą, palaikančią MQTT protokolą (pvz., „Openhab“), nes tai yra projekto tikslas. Jei norite jį valdyti naudodami tinklalapio mygtukus be jokių palaikančių sistemų, turėsite atlikti įterpto tinklalapio kodo pakeitimus. Tai nėra pernelyg sudėtinga pasiekti (galbūt rev2..)

3 žingsnis: „Jura“protokolas

Jura protokolas
Jura protokolas

Duomenys į mašiną ir iš jos yra tik serijiniai @ 9600, tačiau „Jura“taip pat turi keletą gudrybių. Protokolas arba naudoja tai papildomam ECC ir (arba) užmaskuoti ryšį. Paprasčiau tariant, kiekvienas duomenų baitas (simbolis) yra padalintas į 2 ir 5 bitus iš 4 standartinių serijinių baitų, kuriuos nutraukia 8 ms pertrauka. Jei norite sužinoti, kaip tai veikia, čia esančiose nuorodose yra daug informacijos.

Informacija apie protokolą išgauta iš:

„Arduino“kodas tai supaprastina, leisdamas jums perduoti standartines, žmonėms suprantamas komandas, kurias jis perkelia į „Jura“protokolą.

Mano kodas yra kodo derinys iš: https://github.com/oliverk71/Coffeemaker-Payment- …

Aukščiau pateiktose svetainėse nurodytos komandos nebuvo tikslios mano mašinai, tačiau bandymų ir klaidų metodu galėjau sugalvoti šiuos dalykus:

FA: 01 - išsijungia (bet neatrodo, kad skalauja, net jei reikia) FA: 02 - atsako „gerai“, bet nėra tikras, ką daro. FA: 03 - skalavimo pranešimas (priverčia „skalavimo“pranešimą ekrane, paspaudžiant sukamąjį skalavimo aparatą) FA: 04 - skalavimo veiksmas - skalauja, kai pasirodo pranešimas „Paspauskite sukamąjį mygtuką“, kitaip nieko neveikia FA: 05 - stiprus ekrane (Tikėtina, kad tai derinama su kavos ruošimu stipriam) FA: 06 - Stiprus ekrane (tikėtina, kad tai derinama su kavos ruošimu stipriam) FA: 07 - „Specialus“ekrane, bet iš tikrųjų nieko nedaro, nesu tikras, kam tai skirtas: 08 - Garo FA: 09 - Maža kava FA: 0A - Didelė kava

Yra ir kitų komandų, bet man to pakanka …

Būkite atsargūs išduodami nežinomas komandas, pavyzdžiui, matyt, AN: 0A nuvalys mašinos EEPROM …

4 žingsnis: išmontavimas

Atidaryti pačią mašiną nėra pernelyg paprasta, nes jums reikia šiek tiek specialių įrankių, tačiau įžvalgus žmogus ras būdą - jums reikia „T15 Torx“antgalio ir „ovalo rakto“2 varžtams. „Torx“, kurį jau turėjau, ovalus įrankis, kurį padariau iš 4 mm lizdo galvutės varžto, išgręžtas ir šiek tiek suplotas plaktuku.

Instrukcijos čia yra gana gerai pateiktos-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

5 žingsnis: Garantijos panaikinimas

Garantijos panaikinimas
Garantijos panaikinimas
Garantijos panaikinimas
Garantijos panaikinimas
Garantijos panaikinimas
Garantijos panaikinimas
Garantijos panaikinimas
Garantijos panaikinimas

Įėję į mašiną pamatysite pagrindinius komponentus. Pagrindiniame maitinimo lizde yra gera vieta po 5v įkrovikliu.

Prie gnybtų bloko prie mašinos įvado pridėjau (tinkamas tinklui) laidus ir litavau/sutraukiau juos prie 5v įkroviklio maitinimo kaiščių. Mano konkretus modelis nebuvo USB prievado tipas, bet tas, kurio laidas buvo nuolat prijungtas. Galbūt neturite pakankamai vietos vieno tipo USB prievadui, kad galėtumėte naudoti tikrą USB kabelį, bet jei atidarėte įkroviklį, galite išimti USB prievadą ir pakeisti standartiniu 5v ir Gnd taškais.

Jei norite, galite pakeisti kitą 5 V maitinimo šaltinį. 500 m turėtų pakakti.

Netoli malūnėlio yra daug vietos relės moduliui. Turime prijungti abi relės, kad jos veiktų lygiagrečiai su pagrindiniais maitinimo jungikliais. Aš tiesiog perpjoviau esamus laidus, nuplėšiau, alavo, pridėjau papildomą laidą ir lituosiu atgal (nepamirškite šiluminio susitraukimo). Tam buvo pakankamai laisvų laidų.

Relės modulis tvirtinamas geros kokybės dvipuse juosta. Prijungę laidus ir turėdami tik ribotą judėjimo erdvę, net jei juosta netenka sukibimo, modulis nenueis per toli ir nesilies prie metalinių daiktų.

Aš taip pat patikrinau savo kompiuterio diagnostikos prievadą, kad nustatyčiau vidinių jungčių vietą, kad galėčiau pasiekti visiškai paslėptą integraciją. Naudojami tik tx, rx ir Gnd laidai.

Jei turite labiau komercinę mašiną, palaikančią budėjimo režimo įtampą ir (arba) nenorite panaikinti savo įrenginio garantijos, galite prisijungti tiesiai prie diagnostikos prievado, bet gali nepavykti įjungti įrenginio naudojant šį įrenginį.

Mano mašina naudoja 7 kontaktų jungtį. Iš kairės į dešinę yra:

NC Tx G Rx NC 5v NC

Atitinkami smeigtukai pagrindinėje plokštėje: Raudona = Gnd Oranžinė = Rx Juoda = Tx

Daugiau informacijos rasite „pinouts“čia:

6 žingsnis: loginės pusės prijungimas

Loginės pusės prijungimas
Loginės pusės prijungimas
Loginės pusės prijungimas
Loginės pusės prijungimas
Loginės pusės prijungimas
Loginės pusės prijungimas

Peržiūrėkite diagramą - atrodo pernelyg sudėtinga, bet tai tikrai nėra.

Aš pritvirtinau lygio keitiklį prie (nuleisto) įtampos reguliatoriaus galinės dalies su kokia nors dvipuse juosta. Tada aš naudoju kai kurias komponentų kojas, kad lituosiu maitinimo ir įžeminimo kaiščius abiejose lygio keitiklio pusėse prie atitinkamų maitinimo modulio kaiščių. Visas šis modulis veikia kaip „praėjimas“visai ESP-01 logikai ir maitinimo šaltiniui.

Aš naudoju du vidurinius keitiklius serijiniams duomenims ir išorinius du - relės vairavimo signalams, tačiau nesvarbu, kurį naudojate.

Šiems relės moduliams iš tikrųjų nebūtina paleisti 5V logikos, nes jie yra aktyvūs LOW, tačiau tai tiesiog puikiai veikė, todėl vis tiek tai padariau.

Prisijungimui prie ESP modulio naudoju 4x2 moterų antraštę. Tai leidžia lengvai įkelti kodą arba pakeisti modulį.

Diagramoje nėra pavaizduota 5 V įvestis - mano laidą prijungiau tiesiai prie relės modulio (žr. Antrą paveikslėlį). Juoda viela apatiniame kairiajame paveikslėlio kampe yra serijos duomenys, išjungti į pagrindinę plokštę. Aš naudoju ekranuoto 3,5 mm ausinių prailginimo kabelio dalį, kad sumažintų trikdžių duomenų linijoje tikimybę.

12f kodas naudoja „SoftwareSerial“, o ne aparatinę seriją - tai leidžia moduliui pranešti apie derinimo būseną naudojant įprastą seriją. Vietoj to jungtys yra per 4 ir 5 kaiščius. Aš pritaikiau tą pačią antraštę, kad ESP12F būtų prijungtas prie ESP-01, tiesiog pakeisdamas tuos serijinius kaiščius

7 žingsnis: modulio programavimas

Modulio programavimas
Modulio programavimas

Kodas buvo sudarytas prieš „Arduino 1.8.1“su ESP8266 plokštės priedu ir „PubSubClient 2.6.0“(tai yra MQTT biblioteka)

Pakeiskite kodą pagal savo reikalavimus ir įkelkite kodą į ESP-01 modulį ir prisijunkite prie įrenginio. Būkite atsargūs su kaiščių orientacija!

Konfigūracija

1 variantas)

Tik pagal pagrindinį kodą ZIP. Kai pirmą kartą paleidžiamas ESP modulis, jis pereina į AP režimą ir nustato jo IP 192.168.4.1. Tada galite prisijungti prie modulio, pakeisti IP ir prisijungti prie savo prieigos taško. Taip pat turėsite nustatyti savo įrenginio IP tame diapazone, nes modulyje nėra DHCP.

Numatytasis AP SSID yra „ESPSwitch“, o slaptažodis - „12345678“

Pagal numatytuosius nustatymus jis veikia AP režimu 2 minutes. Šį nustatymą galite pakeisti „global.h“- jis vadinamas „adminTimeout“ir rodomas milisekundėmis. Rekomenduoju pakeisti tai į kažką žemo, kai turėsite galiojančią konfigūraciją EEPROM, nes priešingu atveju prietaisas bus paleistas be reikalo.

2 variantas)

Tai yra numatytasis naujesnio kodo režimas, palaikantis dvipusius komus, 1 parinktis nepasiekiama. Taip pat galite pakeisti numatytuosius SSID/slaptažodžio nustatymus pagrindiniame ino faile (ieškokite „// DEFAULT CONFIG“), kad jis būtų įkeliamas tuos nustatymus į EEPROM pirmą kartą paleidus ir administratoriaus režimo delsą pakeisti į kažką mažo „global.h“. Taip išvengiama netvarkos prisijungiant prie laikinojo AP.

Įrenginys automatiškai nustatys savo MQTT ID (ir prenumeratos kelią) į paskutinius 4 modulių serijos numerio skaitmenis. Kelias pagal numatytuosius nustatymus yra ha/mod //#, keiskite, kaip jums atrodo tinkama, tačiau perskaitykite kodo komentarus, kad įsitikintumėte, jog tinkamas masyvas yra tinkamo ilgio.

Aš tai darau, nes tai reiškia, kad neturiu sugeneruoti unikalaus ID kiekvienam savo tinklo moduliui.

Įrenginio ID yra matomas, o MQTT serverį galima nustatyti per vidinio žiniatinklio serverio MQTT serverio puslapį

8 veiksmas: priverskite tai daryti …

MQTT komandos yra

ha/mod/xxxx/0 arba 1 = perjungti galią

Bet kuri kita eilutė bus laikoma komanda ir siunčiama per nuoseklųjį prievadą. Apie būseną pranešama /ha /kava HEX

Su „OpenHAB“

coffeemachine.items

Skaičius Coffee_Machine_Power "Power" {mqtt = "> [control: ha/mod/8002/: command:*: default]"} Stygos Coffee_Machine_Status {mqtt = "<[control: ha/coffee: state: default]"}

Svetainės schema

Group item = "Kavos aparatas" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Perjungti elementą = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Skalavimas"] Teksto elementas = Coffee_Status label = "Būsena [%s"] "}

balso valdymas. taisyklės

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

taisyklė „Balso komandų taisyklės“

kai elementas „VoiceCommand“gavo komandą, tada komanda „Var String“= VoiceCommand.state.toString.toLowerCase logInfo („Voice. Rec“, „VoiceCommand gavo“+komanda)

if (command.contains ("įjungti kavos aparatą") || command.contains ("išjungti kavos aparatą")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("padaryk man mažą kavą")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("padaryk man didelę kavą")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("skalauti kavos aparatą")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} end

Taisyklės (aiškinant HEX atsakymus į „tikras“vertes):

taisyklė „Kavos aparato būsena“, kai elementas Coffee_Machine_Status gavo atnaujinimą, tada 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)). pakeisti ('', '0')

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

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

if (trayBit == "0") {

postUpdate (Coffee_Status, "Tray 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")} pabaiga

9 žingsnis: patobulinimai/užduotis

Supaprastinkite pradinę sąranką prisijungdami prie „Wi -Fi“- Atlikta. Atsisakiau „administratoriaus režimo“idėjos, nes tai erzino. Dabar tiesiog įveskite SSID ir slaptažodį į kodą. Išsaugoma EEPROM, jei atnaujinate/keičiate per žiniatinklio sąsają.

Naujesnis kodas taip pat palaiko OTA atnaujinimus, tačiau jums reikės atnaujinti EEPROM ESP-01 modulyje, kad tai veiktų, arba pakomentuoti atitinkamus OTA elementus

Pridėkite kodą, skirtą apdoroti atsakymus iš aparato, ir skaitykite būseną, pvz., Be dėklo, tuščių tirščių ir pripildykite baką - Atlikta. Pridėjau kodą, kad galėčiau perskaityti būseną ir paskelbti „ha/coffee“. Tai tik neapdoroti atsakymai ir aš vis dar stengiuosi juos interpretuoti, tačiau kol kas trūksta dėklo, o bakas tuščias. Jis apklausia mašiną kas 9 sekundes, kai įjungtas, ir paskelbia atsakymą į MQTT

Atsakymas yra HEX, bet atskiri bitai rodo jutiklius

Pridėkite kodą prie tinklalapių, kad galėtumėte tiesiogiai valdyti naudodami HTTP GET komandas.

Daiktų interneto konkursas 2017 m
Daiktų interneto konkursas 2017 m
Daiktų interneto konkursas 2017 m
Daiktų interneto konkursas 2017 m

Pirmasis prizas daiktų interneto konkurse 2017 m

Rekomenduojamas: