Innholdsfortegnelse:

IoT -aktivert kaffemaskin: 9 trinn (med bilder)
IoT -aktivert kaffemaskin: 9 trinn (med bilder)

Video: IoT -aktivert kaffemaskin: 9 trinn (med bilder)

Video: IoT -aktivert kaffemaskin: 9 trinn (med bilder)
Video: Штукатурка стен - самое полное видео! Переделка хрущевки от А до Я. #5 2024, Juli
Anonim
Image
Image
Utstyr nødvendig
Utstyr nødvendig

Denne instruksen er med i IoT -konkurransen - Hvis du liker den, kan du stemme på den

OPPDATERT: Støtter nå toveis -kommandoer og OTA -oppdateringer

For en stund nå har jeg hatt en Jura kaffemaskin, og jeg har alltid ønsket å automatisere den på en eller annen måte.

Jeg har kjørt et grunnleggende hjemmeautomatiseringssystem i noen år, men kaffemaskinen var ikke noe som var enkelt å modifisere (eller så tenkte jeg). Jura kaffemaskiner har vanligvis en 'diagnostisk port' og/eller en port som brukes for å legge til et betalingssystem i maskinen, men jeg kunne ikke finne informasjon om hvordan den kan brukes. Mer nylig ble protokollen omvendt konstruert av noen individer og offentliggjort. Problemet var at de fleste referansene til tilgjengelige funksjoner var for mye større maskiner enn min (Ena 7).

På toppen av det har ikke maskinen min permanent standby -effekt som de større maskinene, i stedet har den en HV -bryter som gjør at strømforsyningen låses. Den fysiske knappen på maskinen aktiverer faktisk 2 brytere - En lav volt (logisk side, slå av) og en High Volt (Power on). Begge bryterne er øyeblikkelige.

Jeg trengte også å sørge for at maskinen fremdeles opererte 100% uavhengig av noen kontrollmekanisme, det vil si at maskinen fremdeles fungerer som normalt som om den ikke var IoT aktivert.

For å automatisere maskinen krever to ting: 1) For å kunne kontrollere strømmen til maskinen 2) For å kunne kommunisere med maskinen for å aktivere funksjonene for å lage kaffe, skylle etc.

Trinn 1: Hvordan vi skal gjøre det

Vi vil bruke en ESP8266 'ESP-01' -modul for å koble til hjemmets wifi og abonnere på MQTT-server/emne for å lytte etter kommandoer. 'Front End' jeg brukte er OpenHAB2, men det er ingen grunn til at du ikke kan legge til webgrensesnittet på enheten og kontrollere direkte om du vil eller via HTTP Get -kommandoer.

ESP8266 vil håndtere kontroll av 2 releer relatert til strømknappen og også behandle serielle kommandoer til/fra kaffemaskinen.

ADVARSEL - Denne instruksjonen beskriver fremgangsmåten jeg brukte for å endre min Jura Ena7 kaffemaskin for å bli styrt via hjemmeautomatisering. Den handler om å endre en strømnett som kan være farlig hvis den utføres feil. Informasjonen her kan være ufullstendig, unøyaktig og usikker. Fortsett forsiktig. Ingen ansvar godtas.

Trinn 2: Utstyr nødvendig

Utstyr nødvendig
Utstyr nødvendig
Utstyr nødvendig
Utstyr nødvendig
Utstyr nødvendig
Utstyr nødvendig

Deler

  • ESP-01-modul og en måte å programmere den på (Arduino IDE og fysisk adapter for programmering)
  • 2 -veis relémodul EBAY
  • 5v -> 3.3v Regulator EBAY
  • Liten 5v strømadapter med telefon
  • Logisk nivåomformer* Freetronics
  • Diverse ledninger, pinhoder, varmekrymping osv. For å koble det hele sammen.

Verktøy

  • Loddetinn med fint tupp
  • Lodding
  • Wire Strippers er praktiske
  • Torx T15 driver
  • Ovalt sikkerhetsverktøy (eller lag et, tar bare noen få minutter)

*Jeg brukte opprinnelig en arduino UNO i min testing av alle de serielle kommandoene til maskinen, og den fungerte feilfritt, men ESP -modulen nektet å fungere. Jeg trippel sjekket koden, og jeg var sikker på at kommandoene som forlot ESP-modulen var de samme som arduinoen, men det var en no-go. Jeg la dette ned til ESP -modulen og jobbet bare med 3.3v logikk og ikke 5V. Når jeg satte inn Logic converter, fungerte det fint. Dette kan være nødvendig i andre maskiner.

Ideelt sett ville du ha et eksisterende hjemmeautomatiseringssystem som støtter MQTT -protokollen (for eksempel openhab), da dette er hva prosjektet er rettet mot. Hvis du bare vil kontrollere den via knapper på en webside uten noen støttende systemer, må du gjøre noen endringer i den innebygde websidekoden. Det er ikke altfor komplisert å oppnå (kanskje rev2..)

Trinn 3: Jura -protokollen

Juraprotokollen
Juraprotokollen

Dataene til/fra maskinen er bare seriell @ 9600, men Jura har noen triks i ermene også. Protokollen bruker enten dette for ekstra ECC og/eller for å skjule kommunikasjonen. Enkelt sagt, hver byte med data (tegn) er delt over biter 2 og 5 av 4 standard serielle byte etter en 8 ms pause. Hvis du vil lære hvordan dette fungerer, er det mye informasjon i koblingene her.

Protokollinformasjon hentet fra:

Arduino -koden forenkler dette, slik at du kan overføre standard, menneskelig lesbare kommandoer som den deretter overfører til Jura -protokollen.

Koden min er en kombinasjon av kode fra:

Kommandoene som er referert til på nettstedene ovenfor var ikke nøyaktige for maskinen min, men gjennom en metode for prøving og feiling kunne jeg komme opp med følgende:

FA: 01 - Slås av (men ser ikke ut til å skylle, selv om det er nødvendig) FA: 02 - Svarer "ok", men er usikker på hva den gjør. FA: 03 - Skyllemelding (tvinger frem en 'skyllemelding' på skjermen, ved å trykke på maskinen for skylling) FA: 04 - Skylling - Skylles når meldingen 'Trykk på rotasjonsknappen' vises, ellers gjør ingenting FA: 05 - Sterkt på skjermen (Antagelig kombinere dette med å lage en kaffe for sterk) FA: 06 - Sterk på skjermen (Antagelig kombinere dette med å lage en kaffe for sterk) FA: 07 - 'Spesiell' på skjermen, men gjør faktisk ingenting, ikke sikker på hva dette er forFA: 08 - Steam FA: 09 - Small Coffee FA: 0A - Large Coffee

Det er andre kommandoer, men dette er nok for meg …

Vær forsiktig når du utsteder ukjente kommandoer, for eksempel, tilsynelatende vil AN: 0A tørke maskinens EEPROM …

Trinn 4: Demontering

Å få selve maskinen åpen er ikke altfor lett, ettersom du trenger noen litt spesielle verktøy, men en ivrig person vil finne en måte - Du trenger en T15 Torx -bit og en "oval nøkkel" for 2 skruer. Torxen jeg allerede hadde, det ovale verktøyet jeg laget av en 4 mm sokkelbolt boret ut og flatet litt ut med en hammer.

Instruksjonene her er ganske godt presentert-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

Trinn 5: Oppheve garantien

Oppheve garantien
Oppheve garantien
Oppheve garantien
Oppheve garantien
Oppheve garantien
Oppheve garantien
Oppheve garantien
Oppheve garantien

Når du er kommet inn i maskinen, vil du se hovedkomponentene. Hovedstrøminntaket har et fint sted under det å legge til 5v -laderen.

Jeg la til (nettvurderte) ledninger til rekkeklemmen ved inngangen til maskinen og loddet/varmekrympet disse til nettpinnene på 5v -laderen. Min spesielle modell var ikke en USB -porttype, men en som hadde ledningen permanent festet. Du har kanskje ikke nok plass til en usb -port type en til å kunne bruke en faktisk USB -kabel, men hvis du åpnet laderen, kan du fjerne USB -porten og erstatte med en standard ledning til 5v og Gnd -punktene.

Du kan bytte ut en annen 5V strømforsyning hvis du vil. 500ma burde være rikelig.

Det er god plass til relemodulen i nærheten av kvernen. Vi må koble de to reléene for å fungere parallelt med hovedstrømbryterne. Jeg klippet rett og slett de eksisterende ledningene, strippet, fortynnet, la til en ekstra ledning og loddet sammen igjen (ikke glem varmekrymping). Det var nok slakk i ledningene for å gjøre dette.

Relemodulen holdes på plass med dobbeltsidig tape av god kvalitet. Med ledningene tilkoblet og med begrenset bevegelsesplass, selv om tapen mister grepet, vil ikke modulen gå for langt og kan ikke komme i kontakt med noen metallgjenstander.

Jeg tilbakestilte også diagnostikkporten på maskinen min for å bestemme plasseringen av de interne tilkoblingene, slik at jeg kunne oppnå en helt skjult integrasjon. Bare tx-, rx- og Gnd -ledninger brukes.

Hvis du har en mer kommersiell maskin som støtter standby -spenning og/eller du ikke vil oppheve garantien på maskinen din, kan du i stedet koble direkte til diagnoseporten, men kanskje ikke slå på maskinen ved hjelp av denne enheten.

Maskinen min bruker en 7 -pinners kontakt. Fra venstre til høyre er det:

NC Tx G Rx NC 5v NC

De tilsvarende pinnene på hovedkortet: Rød = Gnd Oransje = Rx Svart = Tx

Mer informasjon finnes på pinoutene her:

Trinn 6: Koble til logikksiden

Kabling av logikksiden
Kabling av logikksiden
Kabling av logikksiden
Kabling av logikksiden
Kabling av logikksiden
Kabling av logikksiden

Gjennomgå diagrammet - Det ser altfor komplisert ut, men det er det virkelig ikke.

Jeg monterte nivåomformeren på baksiden av (avspent) spenningsregulator med litt dobbeltsidig tape. Jeg brukte deretter noen komponentben for å lodde strøm- og jordpinnene på hver side av nivåomformeren til de tilhørende effektmodulpinnene. Hele denne modulen fungerer da som en "passsthrough" for all logikk og strømforsyning for ESP-01.

Jeg brukte de to midtre omformerne for serielle data og de to ytterste for relékjøringssignalene, men det spiller ingen rolle hvilken du bruker.

Det er faktisk ikke nødvendig med disse relemodulene for å kjøre en 5v logikk ettersom de er aktive LAVE, men det fungerte bare bra, så jeg gjorde det uansett.

Jeg brukte en 4x2 kvinnelig topptekst for å koble til ESP -modulen. Dette gjør det enkelt å laste opp kode eller bytte ut modulen.

5V -inngangen er ikke avbildet i diagrammet - jeg koblet min direkte til relemodulen (se det andre bildet). Den svarte ledningen nederst til venstre på bildet er serielle data til hovedkortet. Jeg brukte en del av en skjermet 3,5 mm forlengelseskabel for hodetelefoner bare for å redusere sjansen for forstyrrelser i datalinjen.

12f -koden bruker SoftwareSerial i stedet for maskinvareseriell - Dette gjør at modulen kan rapportere status for feilsøking tilbake via vanlig serie. Tilkoblinger skjer via pinne 4 og 5 i stedet. Jeg tilpasset den samme overskriften for å gjøre ESP12F til en plug-in bytte for ESP-01, bare bytte de serielle pinnene

Trinn 7: Programmering av modulen

Programmering av modulen
Programmering av modulen

Koden ble kompilert mot Arduino 1.8.1 med ESP8266 board addon og PubSubClient 2.6.0 (som er MQTT Library)

Endre koden i henhold til dine krav, og last opp koden til ESP-01-modulen og koble til maskinen. Vær forsiktig med pinnenes orientering!

Konfigurasjon

Valg 1)

Bare på basiskoden i zip. Når ESP -modulen først starter, går den inn i AP -modus og setter IP -adressen til 192.168.4.1. Du kan deretter koble til modulen og endre IP -en og koble til ditt eget tilgangspunkt. Du må også angi en IP for maskinen din i dette området, siden det ikke er noen DHCP på modulen.

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

Den forblir i AP -modus i 2 minutter som standard. Du kan endre denne innstillingen i 'global.h' - Den kalles 'adminTimeout' og er i millisekunder. Jeg anbefaler å endre dette til noe lavt når du har en gyldig konfigurasjon i EEPROM, da det bare vil føre til unødvendige forsinkelser i oppstart av enheten ellers.

Alternativ 2)

Dette er standardmodus for den nyere koden som støtter 2 -veis kommandoer, alternativ 1 er ikke tilgjengelig. Du kan også endre standard SSID/passordinnstillinger i hovedinofilen (se etter '// DEFAULT CONFIG') så den lastes inn disse innstillingene i EEPROM ved første oppstart og endre administrasjonsmodusforsinkelse til noe lavt i 'global.h'. Dette unngår å måtte rote rundt tilkoblingen til den midlertidige AP -en.

Enheten vil automatisk sette MQTT -ID (og abonnementsbane) til de siste 4 sifrene i modulenes serienummer. Banen er som standard ha/mod //#, endre etter eget skjønn, men les kommentarene i koden for å sikre at riktig matrise har riktig lengde.

Jeg gjør dette fordi det betyr at jeg ikke trenger å generere en unik ID for hver modul på nettverket mitt.

Enhets -ID -en er synlig, og MQTT -serveren kan angis via MQTT -serversiden på den interne webserveren

Trinn 8: Få det til å gjøre ting …

MQTT -kommandoene er

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

Enhver annen streng blir behandlet som en kommando og sendt via seriell port. Status rapporteres til /ha /kaffe i HEX

Med OpenHAB

kaffemaskin. varer

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

Nettkart

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

regler for stemmestyring

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

regelen "Regler for talekommando"

når elementet VoiceCommand mottok kommandoen da var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand mottatt"+kommando)

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

Regler (for å tolke HEX -svar til "virkelige" verdier):

regel "Kaffemaskinstatus" når elementet Coffee_Machine_Status mottok oppdatering da 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)). Erstatt ('', '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")} slutten

Trinn 9: Forbedringer/Todo

Forenkle det første oppsettet å koble til wifi - Ferdig. Forlot ideen om 'admin -modus', da det var irriterende. Bare skriv inn SSID og passord i koden. Lagres i EEPROM hvis du oppdaterer/endrer via webgrensesnitt.

Nyere kode støtter også OTA-oppdateringer, men du må oppgradere EEPROM på ESP-01-modulen for at dette skal fungere eller kommentere de tilsvarende OTA-elementene

Legg til kode for behandling av svar fra maskinen og les status som ingen skuff, tom bakke og påfyllingstank - Ferdig. Jeg har lagt til kode for å lese statusen tilbake og publisere til ha/kaffe. Dette er bare de rå svarene, og jeg jobber fremdeles med å tolke dem, men så langt har jeg mangler skuff og tanken er tom. Den undersøker maskinen hvert 9. sekund når den er på og publiserer svaret på MQTT

Svaret er i HEX, men individuelle biter indikerer sensorene

Legg til kode på nettsidene for direkte kontroll via HTTP GET -kommandoer.

Tingenes internettkonkurranse 2017
Tingenes internettkonkurranse 2017
Tingenes internettkonkurranse 2017
Tingenes internettkonkurranse 2017

Førstepremie i tingenes internettkonkurranse 2017

Anbefalt: