Kazalo:

Kavni avtomat z omogočenim IoT: 9 korakov (s slikami)
Kavni avtomat z omogočenim IoT: 9 korakov (s slikami)

Video: Kavni avtomat z omogočenim IoT: 9 korakov (s slikami)

Video: Kavni avtomat z omogočenim IoT: 9 korakov (s slikami)
Video: How To Do Stable Diffusion XL (SDXL) DreamBooth Training For Free - Utilizing Kaggle - Easy Tutorial 2024, November
Anonim
Image
Image
Potrebna oprema
Potrebna oprema

To navodilo je vključeno v natečaj IoT - če vam je všeč, ga glasujte

Posodobljeno: Zdaj podpira dvosmerne komunikacije in posodobitve OTA

Že nekaj časa imam aparat za kavo Jura in vedno sem ga želel nekako avtomatizirati.

Že nekaj let vodim osnovni sistem avtomatizacije doma, a kavni aparat ni bil enostaven za spreminjanje (ali sem si tako mislil). Kavni aparati Jura imajo na splošno "diagnostična vrata" in/ali vrata, ki se uporabljajo za dodajanje plačilnega sistema v aparat, vendar nisem našel nobenih informacij o tem, kako bi jih lahko uporabili. V zadnjem času so protokol nekateri posamezniki obrnili in objavili. Težava je bila v tem, da se je večina sklicevanj na razpoložljive funkcije nanašala na veliko večje stroje od mojih (Ena 7).

Poleg tega moj stroj nima stalnega stanja pripravljenosti kot večji stroji, namesto tega ima visokonapetostno stikalo, zaradi katerega se napajanje "zaklene". Fizični gumb na stroju dejansko aktivira 2 stikala - eno nizkonapetostno (logična stran, izklop) in eno visokonapetostno (vklop). Oba stikala sta trenutna.

Prav tako sem se moral prepričati, da stroj še vedno deluje 100% neodvisno od katerega koli nadzornega mehanizma, to je, da stroj še vedno deluje normalno, kot da ni omogočen IoT.

Za avtomatizacijo aparata sta potrebni dve stvari: 1) da lahko upravljate napajanje aparata; 2) da komunicirate z aparatom, da aktivirate funkcije za pripravo kave, izpiranje itd.

1. korak: Kako bomo to storili

Za povezavo z domačim wifi-jem in naročanje na strežnik/temo MQTT, ki posluša ukaze, bomo uporabili modul ESP8266 'ESP-01'. "Sprednji konec", ki sem ga uporabil, je OpenHAB2, vendar ni razloga, da ga ne bi mogli dodati v spletni vmesnik na napravi in neposredno upravljati, če želite ali prek ukazov HTTP Get.

ESP8266 bo upravljal z upravljanjem dveh relejev, povezanih z gumbom za vklop, obdeloval pa bo tudi serijske ukaze do/iz aparata za kavo.

OPOZORILO - V tem navodilu je opisan postopek, ki sem ga uporabil za spreminjanje svojega aparata za kavo Jura Ena7 za nadzor preko avtomatizacije doma. Ukvarja se s spreminjanjem omrežne električne naprave, ki je lahko nevarna, če je izvedena nepravilno. Tu so lahko informacije nepopolne, netočne in nevarne. Nadaljuj previdno. Odgovornost ni sprejeta.

2. korak: Potrebna oprema

Potrebna oprema
Potrebna oprema
Potrebna oprema
Potrebna oprema
Potrebna oprema
Potrebna oprema

Deli

  • Modul ESP-01 in način njegovega programiranja (Arduino IDE in fizični adapter za programiranje)
  • 2 -smerni relejni modul EBAY
  • 5v -> 3.3v regulator EBAY
  • Majhen 5V napajalnik za omrežno napajanje
  • Pretvornik logične ravni* Freetronics
  • Razna žica, zatiči, toplotni skrči itd. Za povezovanje.

Orodja

  • Spajkalnik s finim vrhom
  • Spajkanje
  • Odstranjevalci žice so priročni
  • Gonilnik Torx T15
  • Ovalno varnostno orodje (ali ga naredite, traja le nekaj minut)

*Sprva sem uporabil arduino UNO pri testiranju vseh serijskih ukazov na stroju in je deloval brezhibno, vendar je modul ESP zavrnil delovanje. Trikrat sem preveril kodo in bil prepričan, da so ukazi, ki zapuščajo modul ESP, enaki kot arduino, vendar ni šlo. To sem dal v modul ESP, ki deluje samo na 3.3v logiki in ne na 5V. Ko sem dal v pretvornik Logic, je deloval dobro. To se lahko zahteva ali ne zahteva pri drugih strojih.

V idealnem primeru bi imeli obstoječ sistem za avtomatizacijo doma, ki podpira protokol MQTT (na primer openhab), saj je temu namenjen projekt. Če ga želite upravljati samo z gumbi na spletni strani brez podpornih sistemov, boste morali v kodo vdelane spletne strani narediti nekaj sprememb. Doseganje ni preveč zapleteno (morda rev2..)

3. korak: Jura protokol

Protokol Jura
Protokol Jura

Podatki do/iz stroja so le serijski @ 9600, vendar ima Jura tudi nekaj trikov v rokavih. Protokol to uporablja za dodaten ECC in/ali za zameglitev komunikacije. Preprosto povedano, vsak bajt podatkov (znak) je razdeljen na bita 2 in 5 od 4 standardnih zaporednih bajtov, ki jim sledi premor 8 ms. Če želite izvedeti, kako to deluje, je na povezavah tukaj veliko informacij.

Informacije o protokolu, pridobljene s:

Koda arduino to poenostavi in vam omogoča prenos standardnih, berljivih ukazov, ki jih nato prenese v protokol Jura.

Moja koda je kombinacija kode iz: https://github.com/oliverk71/Coffeemaker-Payment-…

Ukazi, omenjeni na zgornjih mestih, za moj stroj niso bili točni, vendar sem s pomočjo metode poskusov in napak lahko prišel do naslednjega:

FA: 01 - Izklopi se (vendar se zdi, da se ne izpira, tudi če je potrebno) FA: 02 - Odgovarja "v redu", vendar ni prepričan, kaj počne. FA: 03 - Sporočilo o izpiranju (Na zaslonu se prikaže sporočilo "izpiranje", s pritiskom na vrtljivi stroj za izpiranje) FA: 04 - Ukrep izpiranja - Izpere, ko se prikaže sporočilo "Pritisnite gumb za vrtenje", sicer ne naredi nič FA: 05 - Močno na zaslonu (Verjetno to združite s pripravo močne kave) FA: 06 - Močno na zaslonu (Verjetno to združite s pripravo močne kave) FA: 07 - "Posebno" na zaslonu, vendar dejansko ne naredi ničesar, ne vem, kaj je to za FA: 08 - Steam FA: 09 - Mala kava FA: 0A - Velika kava

Obstajajo še drugi ukazi, vendar je to zame dovolj …

Bodite previdni pri izdajanju neznanih ukazov, na primer AN: 0A bo izbrisalo EEPROM naprave …

4. korak: Demontaža

Odpiranje samega stroja ni pretirano preprosto, saj potrebujete nekaj rahlo posebnih orodij, a navdušena oseba bo našla pot - potrebujete bit T15 Torx in 'ovalni ključ' za 2 vijaka. Torx, ki sem ga že imel, ovalno orodje, ki sem ga naredil iz 4 mm vijaka z glavo, sem izvrtal in nekoliko spravil s kladivom.

Navodila so precej dobro predstavljena-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

5. korak: razveljavitev garancije

Razveljavitev garancije
Razveljavitev garancije
Razveljavitev garancije
Razveljavitev garancije
Razveljavitev garancije
Razveljavitev garancije
Razveljavitev garancije
Razveljavitev garancije

Ko vstopite v stroj, boste videli glavne komponente. Glavni napajalnik ima pod seboj lepo mesto za dodajanje 5v polnilnika.

Na priključni blok ob vhodu v stroj sem dodal (ocenjeno omrežje) žice in jih spajkal/toplotno prilepil na napajalne zatiče 5V polnilnika. Moj poseben model ni bil tip vrat USB, ampak tisti, ki je imel trajno pritrjen vodnik. Morda nimate dovolj prostora za vrata USB tipa ena, da bi lahko uporabila dejanski kabel USB, če pa odprete polnilnik, lahko odstranite vrata USB in jih zamenjate s standardno žico do točk 5v in Gnd.

Če želite, lahko zamenjate drug napajalnik z nazivno močjo 5 V. 500m bi moralo biti dovolj.

V bližini brusilnika je dovolj prostora za relejski modul. Oba releja moramo priključiti, da delujeta vzporedno z glavnimi stikali za napajanje. Preprosto sem prerezal obstoječe žice, jih ogolil, pokosil, dodal dodatno žico in jih spet spajal (ne pozabite na hladilnik). Za to je bilo dovolj ohlapnih žic.

Relejni modul je pritrjen s kakovostnim dvostranskim trakom. S priključenimi žicami in z omejenim prostorom za premikanje, tudi če trak izgubi oprijem, modul ne bo šel predaleč in ne bo prišel v stik s kovinskimi predmeti.

Preizkusil sem tudi diagnostična vrata na svojem računalniku, da bi določil lokacijo notranjih povezav, da bi lahko dosegel popolnoma skrito integracijo. Uporabljajo se samo žice tx, rx in Gnd.

Če imate bolj komercialni stroj, ki podpira napetost v stanju pripravljenosti in/ali ne želite razveljaviti garancije za svojo napravo, se lahko namesto tega povežete neposredno z diagnostičnimi vrati, vendar morda ne boste mogli vklopiti naprave s to napravo.

Moj stroj uporablja 7 -polni konektor. Od leve proti desni je:

NC Tx G Rx NC 5v NC

Ustrezni zatiči na matični plošči: rdeča = Gnd oranžna = Rx črna = Tx

Več informacij o pinoutih najdete tukaj:

6. korak: Ožičenje logične strani

Ožičenje logične strani
Ožičenje logične strani
Ožičenje logične strani
Ožičenje logične strani
Ožičenje logične strani
Ožičenje logične strani

Preglejte diagram - Izgleda preveč zapleteno, v resnici pa ni.

Pretvornik nivoja sem namestil na zadnjo stran (depiniranega) regulatorja napetosti z nekaj dvostranskim trakom. Nato sem uporabil nekaj sestavnih nog za spajkanje napajalnih in ozemljitvenih zatičev na obeh straneh pretvornika nivoja na ustrezne zatiče modula moči. Celoten modul nato deluje kot "prehod" za vso logiko in napajanje za ESP-01.

Dva serijska pretvornika sem uporabil za serijske podatke, dva zunanja pa za relejske pogonske signale, vendar ni pomembno, katero uporabljate.

S temi relejskimi moduli dejansko ni potrebno izvajati 5 -voltne logike, saj so aktivni NIZKO, vendar je delovalo lepo, tako da sem to vseeno storil.

Za povezavo z modulom ESP sem uporabil žensko glavo 4x2. To omogoča enostavno nalaganje kode ali zamenjavo modula.

Na diagramu ni prikazanega vhoda 5V - svojega sem ožičil neposredno na relejni modul (glej drugo sliko). Črna žica spodaj levo na sliki je serijski podatek na glavni plošči. Del zaščitenega 3,5 -milimetrskega podaljška za slušalke sem uporabil samo za zmanjšanje možnosti motenj v podatkovni liniji.

Koda 12f uporablja SoftwareSerial namesto serijske opreme strojne opreme - to omogoča modulu, da poroča o stanju za odpravljanje napak nazaj prek običajnega zaporedja. Namesto tega so povezave prek zatičev 4 in 5. Enako glavo sem prilagodil, da je bil ESP12F vtičnik v zamenjavi za ESP-01, samo zamenjal sem te serijske zatiče

7. korak: Programiranje modula

Programiranje modula
Programiranje modula

Koda je bila sestavljena proti Arduinu 1.8.1 z dodatkom za ploščo ESP8266 in PubSubClient 2.6.0 (ki je knjižnica MQTT)

Kodo spremenite glede na vaše zahteve in jo naložite v modul ESP-01 in se povežite z napravo. Bodite previdni pri usmerjanju zatičev!

Konfiguracija

Možnost 1)

Samo pri osnovni kodi v zip. Ko se modul ESP prvič zažene, preide v način AP in nastavi svoj IP na 192.168.4.1. Nato se lahko povežete z modulom in spremenite IP ter se povežete s svojo dostopno točko. V tem območju boste morali nastaviti tudi IP za svojo napravo, saj v modulu ni DHCP.

Privzeti SSID AP je "ESPSwitch" in geslo je "12345678"

Privzeto ostane v načinu AP 2 minuti. To nastavitev lahko spremenite v 'global.h' - imenuje se 'adminTimeout' in je v milisekundah. Priporočam, da to spremenite na nekaj nizkega, ko boste imeli veljavno konfiguracijo v EEPROM -u, saj bo to sicer povzročilo nepotrebne zamude pri zagonu naprave.

Možnost 2)

To je privzeti način za novejšo kodo, ki podpira dvosmerno komunikacijo, možnost 1. Ni na voljo. Privzete nastavitve SSID/gesla lahko spremenite tudi v glavni datoteki ino (poiščite »// DEFAULT CONFIG«), da se naloži te nastavitve v EEPROM ob prvem zagonu in spremenijo zakasnitev skrbniškega načina na nekaj nizkega v 'global.h'. S tem se izognete težavam pri povezovanju z začasno AP.

Naprava bo samodejno nastavila svoj ID MQTT (in naročninsko pot) na zadnje 4 števke serijske številke modulov. Privzeta pot je ha/mod //#, spremenite, kot se vam zdi primerno, vendar preberite komentarje v kodi, da se prepričate, da ima ustrezna matrika pravilno dolžino.

To počnem, ker to pomeni, da mi ni treba ustvariti edinstvenega ID -ja za vsak modul v svojem omrežju.

ID naprave je viden, strežnik MQTT pa lahko nastavite prek strani strežnika MQTT na notranjem spletnem strežniku

8. korak: Naj bodo stvari…

Ukazi MQTT so

ha/mod/xxxx/0 ali 1 = Preklopi moč

Vsak drug niz bo obravnavan kot ukaz in poslan prek serijskih vrat. O stanju se poroča /ha /coffee v HEX

Z OpenHAB

coffeemachine.items

Število Coffee_Machine_Power "Power" {mqtt = "> [control: ha/mod/8002/: command:*: default]"} String Coffee_Machine_Status {mqtt = "<[control: ha/coffee: stanje: privzeto]"}

Zemljevid mesta

Element skupine = "Aparat za kavo" {Switch item = Coffee_Machine_Power label = "Power" preslikave = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Stikalni element = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Izpiranje"] Besedilni element = Coffee_Status label = "Stanje [%s] "}

voicecontrol.rules

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

pravilo "Pravila glasovnih ukazov"

ko je element VoiceCommand prejel ukaz, potem ukaz var String = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand prejeto"+ukaz)

if (command.contains ("vklopi aparat za kavo") || command.contains ("izklopi aparat za kavo")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("naredi mi majhno kavo")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("skuhaj mi veliko kave")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("sperite aparat za kavo")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} konec

Pravila (za razlago odzivov HEX v "prave" vrednosti):

pravilo "Stanje aparata za kavo", ko je element Coffee_Machine_Status prejel posodobitev, potem je niz 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 izpiranjeBit = 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")} konec

9. korak: Izboljšave/Todo

Poenostavite začetno nastavitev povezovanja z wifi - Končano. Opustil je idejo o "administratorskem načinu", saj je bil nadležen. Zdaj v kodo vnesite SSID in geslo. Shrani v EEPROM, če posodobite/spremenite prek spletnega vmesnika.

Novejša koda podpira tudi posodobitve OTA, vendar boste morali nadgraditi EEPROM na modulu ESP-01, da bo deloval ali komentiral ustrezne elemente OTA

Dodajte kodo za obdelavo odgovorov s stroja in preberite stanje, kot da ni pladnja, prazne podlage in napolnite rezervoar - Končano. Dodal sem kodo za ponovno branje stanja in objavo v ha/coffee. To so samo surovi odzivi in še vedno delam na njihovi razlagi, vendar zaenkrat manjka pladenj, rezervoar pa prazen. Ko je vklopljen, pozove napravo vsakih 9 sekund in objavi odgovor na MQTT

Odziv je v šestnajstiški vrednosti, vendar posamezni deli označujejo senzorje

Spletnim stranem dodajte kodo za neposreden nadzor prek ukazov HTTP GET.

Natečaj za internet stvari 2017
Natečaj za internet stvari 2017
Natečaj za internet stvari 2017
Natečaj za internet stvari 2017

Prva nagrada na natečaju Internet of Things 2017

Priporočena: