Indholdsfortegnelse:

IoT -aktiveret kaffemaskine: 9 trin (med billeder)
IoT -aktiveret kaffemaskine: 9 trin (med billeder)

Video: IoT -aktiveret kaffemaskine: 9 trin (med billeder)

Video: IoT -aktiveret kaffemaskine: 9 trin (med billeder)
Video: Nastya and funny Collection of New Stories for Kids 2024, Juli
Anonim
Image
Image
Udstyr påkrævet
Udstyr påkrævet

Denne instruktør deltager i IoT -konkurrencen - Hvis du kan lide den, skal du stemme på den

OPDATERET: Understøtter nu tovejskommunikationer og OTA -opdateringer

Jeg har i nogen tid haft en Jura kaffemaskine, og jeg har altid ønsket at automatisere den på en eller anden måde.

Jeg har kørt et grundlæggende hjemmeautomatiseringssystem i nogle år, men kaffemaskinen var ikke noget, der var let at ændre (eller det troede jeg). Jura kaffemaskiner har generelt en 'diagnostisk port' og/eller en port, der bruges til at tilføje et betalingssystem til maskinen, men jeg kunne ikke finde oplysninger om, hvordan det kunne bruges. For nylig blev protokollen reverse-manipuleret af nogle enkeltpersoner og offentliggjort. Problemet var, at de fleste henvisninger til de tilgængelige funktioner var til meget større maskiner end mine (Ena 7).

Oven i det har min maskine ikke en permanent standby -effekt som de større maskiner, i stedet har den en HV -switch, der får strømforsyningen til at 'låse' sig. Den fysiske knap på maskinen aktiverer faktisk 2 kontakter - En lav volt (logisk side, sluk) og en højspænding (tændt). Begge kontakter er øjeblikkelige.

Jeg var også nødt til at sikre mig, at maskinen stadig kører 100% uafhængigt af enhver kontrolmekanisme, dvs. maskinen fungerer stadig som normalt, som om den ikke var IoT aktiveret.

For at automatisere maskinen kræver to ting: 1) For at kunne styre strømmen til maskinen 2) At kunne kommunikere med maskinen for at aktivere funktionerne til fremstilling af kaffe, skylning osv.

Trin 1: Hvordan vi skal gøre det

Vi vil bruge et ESP8266 'ESP-01' -modul til at oprette forbindelse til hjemmets wifi og abonnere på MQTT-server/emne, der lytter efter kommandoer. Den 'Front End', jeg brugte, er OpenHAB2, men der er ingen grund til, at du ikke kunne føje til webgrænsefladen på enheden og styre direkte, hvis du ville eller via HTTP Get -kommandoer.

ESP8266 håndterer styring af 2 relæer relateret til tænd/sluk -knappen og behandler også serielle kommandoer til/fra kaffemaskinen.

ADVARSEL - Denne instruktion beskriver den procedure, jeg brugte til at ændre min Jura Ena7 kaffemaskine, så den kunne styres via hjemmeautomatisering. Det handler om at ændre en netforsyning, der kan være farlig, hvis den udføres forkert. Oplysningerne her kan være ufuldstændige, unøjagtige og usikre. Fortsæt med forsigtighed. Intet ansvar accepteres.

Trin 2: Udstyr påkrævet

Udstyr påkrævet
Udstyr påkrævet
Udstyr påkrævet
Udstyr påkrævet
Udstyr påkrævet
Udstyr påkrævet

Dele

  • ESP-01 modul og en måde at programmere det på (Arduino IDE og fysisk adapter til programmering)
  • 2 -vejs relæmodul EBAY
  • 5v -> 3.3v Regulator EBAY
  • Lille 5v strømforsynet telefon oplader
  • Konverter til logisk niveau* Freetronics
  • Diverse ledninger, pinhoveder, varmekrymp osv. Til tilslutning af det hele.

Værktøjer

  • Fintippet loddejern
  • Lodde
  • Wire Strippers er praktisk
  • Torx T15 driver
  • Oval sikkerhedsværktøj (eller lav et, tager kun et par minutter)

*Jeg brugte oprindeligt en arduino UNO i min test af alle de serielle kommandoer til maskinen, og det fungerede upåklageligt, men ESP -modulet nægtede at fungere. Jeg tredobbelt kontrollerede koden, og jeg var sikker på, at kommandoerne, der forlod ESP-modulet, var de samme som arduinoen, men det var en no-go. Jeg lagde dette ned til ESP -modulet, der kun arbejdede på 3.3v logik og ikke 5V. Da jeg først satte Logic converter i, fungerede det fint. Dette kan være nødvendigt i andre maskiner.

Ideelt set ville du have et eksisterende hjemmeautomatiseringssystem, der understøtter MQTT -protokollen (f.eks. Openhab), da det er det, projektet er rettet mod. Hvis du bare vil styre det via knapper på en webside uden understøttende systemer, skal du foretage nogle ændringer af den integrerede websidekode. Det er ikke overdrevent kompliceret at opnå (måske rev2..)

Trin 3: Jura -protokollen

Juraprotokollen
Juraprotokollen

Dataene til/fra maskinen er bare serielle @ 9600, men Jura har også nogle tricks i ærmerne. Protokollen bruger enten dette til ekstra ECC og/eller til at tilsløre kommunikationen. Kort sagt, hver byte med data (tegn) er delt over bit 2 og 5 af 4 standard serielle bytes, der er efterfulgt af en pause på 8 ms. Hvis du er interesseret i at lære, hvordan dette fungerer, er der masser af information i linkene her.

Protokoloplysninger hentet fra:

Arduino -koden forenkler dette, så du kan sende standard, menneskeligt læselige kommandoer, som den derefter transponerer til Jura -protokollen.

Min kode er en kombination af kode fra:

De kommandoer, der refereres til på ovenstående steder, var ikke nøjagtige for min maskine, men gennem en metode til forsøg og fejl kunne jeg komme frem til nedenstående:

FA: 01 - Slukker (men skyller ikke ud, selvom det er nødvendigt) FA: 02 - Svarer 'ok', men ved ikke, hvad den gør. FA: 03 - Skyl besked (Tvinger en 'skyl' besked på skærmen, tryk på roterende skyllemaskine) FA: 04 - Skyl handling - Skylles, når 'Tryk på roterende knap' meddelelse vises, ellers gør ingenting FA: 05 - Stærkt på skærmen (Formentlig kombineres dette med at lave en kaffe til stærk) FA: 06 - Stærk på skærmen (Kombiner formodentlig dette med at lave en kaffe til stærk) FA: 07 - 'Special' på skærmen, men gør faktisk ikke noget, ved ikke hvad dette er tilFA: 08 - Steam FA: 09 - Lille kaffe FA: 0A - Stor kaffe

Der er andre kommandoer, men det er rigeligt for mig …

Vær forsigtig, når du udsender ukendte kommandoer, f.eks. Tilsyneladende vil AN: 0A tørre maskinens EEPROM …

Trin 4: Demontering

At få selve maskinen åben er ikke alt for let, da du har brug for nogle lidt specielle værktøjer, men en ivrig person finder en vej - Du skal bruge en T15 Torx -bit og en 'oval nøgle' til 2 skruer. Den Torx, jeg allerede havde, det ovale værktøj, jeg lavede af en 4 mm sokkelbolt, borede ud og fladede lidt med en hammer.

Instruktionerne her er ret godt præsenteret-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

Trin 5: Ophævelse af garantien

Ophævelse af garantien
Ophævelse af garantien
Ophævelse af garantien
Ophævelse af garantien
Ophævelse af garantien
Ophævelse af garantien
Ophævelse af garantien
Ophævelse af garantien

Når du er kommet ind i maskinen, ser du hovedkomponenterne. Hovedstrømindgangen har et godt sted under tilføjelse af 5v oplader.

Jeg tilføjede (netværksmæssige) ledninger til terminalblokken ved maskinens indgang og loddet/varmekrympede disse til netstifterne på 5v -opladeren. Min særlige model var ikke en USB -porttype, men en der havde ledningen permanent fastgjort. Du har muligvis ikke plads nok til en usb -port type en til at kunne bruge et egentligt USB -kabel, men hvis du åbnede opladeren, kunne du fjerne USB -porten og erstatte med en standardledning til 5v- og Gnd -punkterne.

Du kan erstatte en anden 5V strømforsyning, hvis du vil. 500ma burde være rigeligt.

Der er god plads til relæmodulet tæt på kværnen. Vi skal koble de to relæer til at fungere parallelt med hovedafbryderne. Jeg skar simpelthen de eksisterende ledninger af, fjernede, fortinde, tilføjede en ekstra ledning og loddet sammen igen (glem ikke varmekrymp). Der var slap nok i ledningerne til at gøre dette.

Relæmodulet holdes på plads med dobbeltsidet tape af god kvalitet. Med ledningerne tilsluttet og med kun begrænset bevægelsesplads, selvom tapen mister grebet, går modulet ikke for langt og kan ikke komme i kontakt med metalgenstande.

Jeg tilbagegav også diagnoseporten på min maskine for at bestemme placeringen af de interne forbindelser, så jeg kunne opnå en helt skjult integration. Der bruges kun tx-, rx- og Gnd -ledninger.

Hvis du har en mere kommerciel maskine, der understøtter en standby -spænding, og/eller du ikke vil annullere garantien på din maskine, kan du i stedet tilslutte direkte til diagnoseporten, men muligvis ikke kunne tænde maskinen ved hjælp af denne enhed.

Min maskine bruger et 7 -polet stik. Fra venstre mod højre er det:

NC Tx G Rx NC 5v NC

De tilsvarende stifter på bundkortet: Rød = Gnd Orange = Rx Sort = Tx

Mere info kan findes på pinouts her:

Trin 6: Tilslutning af den logiske side

Tilslutning af den logiske side
Tilslutning af den logiske side
Tilslutning af den logiske side
Tilslutning af den logiske side
Tilslutning af den logiske side
Tilslutning af den logiske side

Gennemgå diagrammet - Det ser for kompliceret ud, men det er det virkelig ikke.

Jeg monterede niveauomformeren på bagsiden af den (depinnede) spændingsregulator med noget dobbeltsidet tape. Jeg brugte derefter nogle komponentben til at lodde strøm- og jordstiftene på hver side af niveauomformeren til de tilsvarende effektmodulstifter. Hele dette modul fungerer derefter som et "gennemløb" for al logik og strømforsyning til ESP-01.

Jeg brugte de to midterste omformere til de serielle data og de ydre to til relæets drivsignaler, men det er ligegyldigt, hvilken du bruger.

Det er faktisk ikke nødvendigt med disse relæmoduler at køre en 5v logik, da de er aktive LAVE, men det fungerede bare fint, så jeg gjorde det alligevel.

Jeg brugte en 4x2 kvindelig header til tilslutning til ESP -modulet. Dette gør det let at uploade kode eller udskifte modulet.

5V -indgangen er ikke afbildet i diagrammet - jeg tilsluttede min direkte til relæmodulet (se andet billede). Den sorte ledning nederst til venstre på billedet er de serielle data til hovedkortet. Jeg brugte en del af et afskærmet 3,5 mm forlængerkabel til hovedtelefoner bare for at reducere chancerne for interferens i datalinjen.

12f -koden bruger SoftwareSerial i stedet for hardware seriel - Dette giver modulet mulighed for at rapportere status for fejlfinding tilbage via normal seriel. Forbindelser sker via ben 4 og 5 i stedet. Jeg tilpassede den samme header for at gøre ESP12F til en plug-in swap til ESP-01, bare bytte de serielle ben

Trin 7: Programmering af modulet

Programmering af modulet
Programmering af modulet

Koden blev kompileret mod Arduino 1.8.1 med ESP8266 board addon og PubSubClient 2.6.0 (som er MQTT Library)

Rediger koden i henhold til dine krav, og upload koden til ESP-01-modulet, og opret forbindelse til maskinen. Vær forsigtig med stifternes orientering!

Konfiguration

Mulighed 1)

Kun på basiskode i zip -kode. Når ESP -modulet først starter, går det over i AP -tilstand og indstiller dets IP til 192.168.4.1. Du kan derefter oprette forbindelse til modulet og ændre IP'en og oprette forbindelse til dit eget adgangspunkt. Du skal også indstille en IP for din maskine i dette område, da der ikke er nogen DHCP på modulet.

Standard AP SSID er 'ESPSwitch' og adgangskoden er '12345678'

Det forbliver som standard i AP -tilstand i 2 minutter. Du kan ændre denne indstilling i 'global.h' - Den kaldes 'adminTimeout' og er i millisekunder. Jeg anbefaler at ændre dette til noget lavt, når du har en gyldig konfiguration i EEPROM, da det ellers bare vil forårsage unødvendige forsinkelser i opstart af enheden.

Mulighed 2)

Dette er standardtilstand for den nyere kode, der understøtter 2 -vejs -kommandoer, valgmulighed 1 er ikke tilgængelig. Du kan også ændre standardindstillingerne for SSID/adgangskode i hovedino -filen (se efter '// DEFAULT CONFIG'), så den indlæses disse indstillinger i EEPROM ved første opstart, og skift admin mode forsinkelse til noget lavt i 'global.h'. Dette undgår at skulle rode rundt i forbindelse med den midlertidige AP.

Enheden indstiller automatisk sit MQTT -id (og abonnementssti) til de sidste 4 cifre i modulernes serienummer. Stien er som standard ha/mod //#, skift som du finder passende, men læs kommentarerne i koden for at sikre, at det relevante array har den korrekte længde.

Jeg gør dette, fordi det betyder, at jeg ikke behøver at generere et unikt ID for hvert modul på mit netværk.

Enheds -id'et er synligt, og MQTT -serveren kan indstilles via MQTT -serversiden på den interne webserver

Trin 8: Gør det til noget …

MQTT -kommandoerne er

ha/mod/xxxx/0 eller 1 = Skift strøm

Enhver anden streng behandles som en kommando og sendes via en seriel port. Status rapporteres til /ha /kaffe i HEX

Med OpenHAB

kaffemaskine. varer

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

Sitemap

Gruppepost = "Kaffemaskine" {Skift element = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Skift element = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Skift element = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Skift element = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Skyl"] Tekst element = Coffee_Status label = "Status [%s] "}

stemmestyringsregler

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

regel "Stemmekommando -regler"

når element VoiceCommand modtog kommando derefter var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand modtaget"+kommando)

hvis (command.contains ("tænd for kaffemaskinen") || command.contains ("sluk for kaffemaskinen")) {

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")} if (command.contains ("skyl kaffemaskinen")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} ende

Regler (for fortolkning af HEX -svar i 'reelle' værdier):

regel "Kaffemaskinestatus", når varen Coffee_Machine_Status modtog opdatering derefter 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)). erstat ('', '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)

hvis (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")} end

Trin 9: Forbedringer/Todo

Forenkle den første opsætning af forbindelse til wifi - Udført. Forladt ideen om 'admin mode', da det var irriterende. Indtast nu bare SSID og adgangskode i koden. Gemmer til EEPROM, hvis du opdaterer/ændrer via webinterface.

Nyere kode understøtter også OTA-opdateringer, men du skal opgradere EEPROM på ESP-01-modulet for at dette kan fungere eller kommentere de tilsvarende OTA-elementer

Tilføj kode til behandling af svar fra maskinen og læs status som ingen bakke, tom grund og påfyldningstank - Udført. Jeg har tilføjet kode for at læse status tilbage og udgive til ha/kaffe. Dette er bare de rå svar, og jeg arbejder stadig på at fortolke dem, men indtil videre mangler jeg bakke og Tank er tom. Den afstemmer maskinen hvert 9. sekund, når den er tændt og offentliggør svaret på MQTT

Svaret er i HEX, men individuelle bits angiver sensorerne

Tilføj kode til websiderne for direkte kontrol via HTTP GET -kommandoer.

Tingenes internetkonkurrence 2017
Tingenes internetkonkurrence 2017
Tingenes internetkonkurrence 2017
Tingenes internetkonkurrence 2017

Første præmie i tingenes internetkonkurrence 2017

Anbefalede: