Innehållsförteckning:

IoT -aktiverad kaffemaskin: 9 steg (med bilder)
IoT -aktiverad kaffemaskin: 9 steg (med bilder)

Video: IoT -aktiverad kaffemaskin: 9 steg (med bilder)

Video: IoT -aktiverad kaffemaskin: 9 steg (med bilder)
Video: ЛЮБОВЬ С ДОСТАВКОЙ НА ДОМ (2020). Романтическая комедия. Хит 2024, Juli
Anonim
Image
Image
Utrustning behövs
Utrustning behövs

Denna instruerbara är med i IoT -tävlingen - Om du gillar det, vänligen rösta på det

UPPDATERAD: Stöder nu tvåvägskommando och OTA -uppdateringar

Sedan en tid tillbaka har jag haft en Jura kaffemaskin och jag har alltid velat automatisera den på något sätt.

Jag har kört ett grundläggande hemautomatiseringssystem i några år men kaffemaskinen var inte något som var enkelt att modifiera (eller så trodde jag). Jura kaffemaskiner har i allmänhet en "Diagnostisk port" och/eller en port som används för att lägga till ett betalningssystem till maskinen, men jag kunde inte hitta någon information om hur den skulle kunna användas. På senare tid har protokollet omvandlats av vissa individer och offentliggjorts. Problemet var att de flesta referenser till tillgängliga funktioner var för mycket större maskiner än mina (Ena 7).

Utöver det har min maskin inte permanent standby -effekt som de större maskinerna, istället har den en HV -omkopplare som gör att strömförsörjningen "låses". Den fysiska knappen på maskinen aktiverar faktiskt 2 omkopplare - En låg volt (logisk sida, stäng av) och en högspänning (Power on). Båda omkopplarna är tillfälliga.

Jag behövde också se till att maskinen fortfarande fungerade 100% oberoende av någon kontrollmekanism, dvs maskinen fungerar fortfarande som vanligt som om den inte var IoT -aktiverad.

För att automatisera maskinen krävs två saker: 1) För att kunna styra strömmen till maskinen 2) Att kunna kommunicera med maskinen för att aktivera funktionerna för att göra kaffe, sköljning etc.

Steg 1: Hur vi ska göra det

Vi kommer att använda en ESP8266 'ESP-01' -modul för att ansluta till hemmets wifi och prenumerera på MQTT-server/ämneslyssning för kommandon. 'Front End' jag använde är OpenHAB2 men det finns ingen anledning att du inte kan lägga till webbgränssnittet på enheten och styra direkt om du vill eller via HTTP Get -kommandon.

ESP8266 hanterar kontroll av 2 reläer relaterade till strömbrytaren och behandlar även seriella kommandon till/från kaffemaskinen.

VARNING - Denna instruktion beskriver proceduren som jag använde för att ändra min Jura Ena7 kaffemaskin för att styras via hemautomation. Det handlar om att ändra en elnät som kan vara farlig om den utförs felaktigt. Informationen här kan vara ofullständig, felaktig och osäker. Fortsätt med försiktighet. Inget ansvar accepteras.

Steg 2: Utrustning behövs

Utrustning behövs
Utrustning behövs
Utrustning behövs
Utrustning behövs
Utrustning behövs
Utrustning behövs

Delar

  • ESP-01-modul och ett sätt att programmera den (Arduino IDE och fysisk adapter för programmering)
  • 2 -vägs relämodul EBAY
  • 5v -> 3.3v Regulator EBAY
  • Liten 5v nätadapter med laddare
  • Logisk nivåomvandlare* Freetronics
  • Övriga trådar, stifthuvuden, värmekrympning etc för att ansluta allt.

Verktyg

  • Fintippad lödkolv
  • Löda
  • Wire Strippers är praktiska
  • Torx T15 drivrutinen
  • Oval säkerhetsverktyg (eller gör ett, tar bara några minuter)

*Jag använde inledningsvis en arduino UNO i min testning av alla seriekommandon till maskinen och det fungerade felfritt, men ESP -modulen vägrade att fungera. Jag trippelkollade koden och jag var säker på att kommandona som lämnade ESP-modulen var desamma som arduino men det var en no-go. Jag lägger ner detta till ESP -modulen som bara arbetar med 3.3v logik och inte 5V. När jag väl lade in logikomvandlaren fungerade det bra. Detta kan eventuellt krävas i andra maskiner.

Helst skulle du ha ett befintligt hemautomatiseringssystem som stöder MQTT -protokollet (t.ex. openhab) eftersom detta är vad projektet syftar till. Om du bara vill styra det via knappar på en webbsida utan stödsystem måste du göra några ändringar av den inbäddade webbsidans kod. Det är inte alltför komplicerat att uppnå (kanske rev2..)

Steg 3: Jura -protokollet

Juraprotokollet
Juraprotokollet

Data till/från maskinen är bara seriell @ 9600 men Jura har några knep i ärmarna också. Protokollet använder antingen detta för extra ECC och/eller för att dölja kommunikationen. Enkelt uttryckt, varje byte med data (tecken) är uppdelad över bitarna 2 och 5 av 4 standard seriella byte efter en 8 ms paus. Om du vill lära dig hur detta fungerar, finns det gott om information i länkarna här.

Protokollinformation extraherad från:

Arduino -koden förenklar detta, så att du kan överföra vanliga, mänskligt läsbara kommandon som den sedan överför till Jura -protokollet.

Min kod är en kombination av kod från: https://github.com/oliverk71/Coffeemaker-Payment-…

Kommandona som hänvisas till på platserna ovan var inte korrekta för min maskin men genom en metod för försök och fel kunde jag komma fram till nedanstående:

FA: 01 - Stängs av (men verkar inte sköljas, även om det behövs) FA: 02 - Svarar "ok" men är inte säker på vad det gör. FA: 03 - Sköljmeddelande (tvingar fram ett sköljmeddelande på skärmen genom att trycka på roterande sköljmaskin) FA: 04 - Sköljåtgärd - Sköljs när meddelandet "Tryck på vridknappen" visas, annars gör ingenting FA: 05 - Stark på skärmen (Förmodligen kombinera detta med att göra en kaffe för stark) FA: 06 - Stark på skärmen (Förmodligen kombinera detta med att göra en kaffe för stark) FA: 07 - 'Special' på skärmen men gör faktiskt ingenting, är inte säker på vad detta är förFA: 08 - Steam FA: 09 - Small Coffee FA: 0A - Large Coffee

Det finns andra kommandon men det här är gott för mig …

Var försiktig vid utfärdande av okända kommandon, till exempel, tydligen kommer AN: 0A att torka maskinens EEPROM …

Steg 4: Demontering

Att få själva maskinen öppen är inte alltför lätt eftersom du behöver några lite speciella verktyg men en ivrig person hittar ett sätt - Du behöver en T15 Torx -bit och en "oval nyckel" för två skruvar. Torxen jag redan hade, det ovala verktyget jag gjorde av en 4 mm hylsbult borrade ut och plattade lite med en hammare.

Instruktionerna här presenteras ganska bra-https://marius.me.uk/blog/2015/03/open-jura-ena-5/

Steg 5: ogiltigförklara garantin

Garantin upphör att gälla
Garantin upphör att gälla
Garantin upphör att gälla
Garantin upphör att gälla
Garantin upphör att gälla
Garantin upphör att gälla
Garantin upphör att gälla
Garantin upphör att gälla

Väl inne i maskinen ser du huvudkomponenterna. Huvudanslutningen har en bra plats under den för att lägga till 5V -laddaren.

Jag lade till (nätspännings) ledningar till kopplingsplinten vid ingången till maskinen och lödde/värmekrympade dessa till nätstiften på 5v -laddaren. Min speciella modell var inte en USB -porttyp utan en som hade kabeln permanent ansluten. Du kanske inte har tillräckligt med utrymme för en usb -port av typ en för att kunna använda en faktisk USB -kabel, men om du öppnade laddaren kan du ta bort USB -porten och ersätta med en standardkabel till 5v- och Gnd -punkterna.

Du kan byta ut en annan 5V nätaggregat om du vill. 500ma borde vara gott.

Det finns gott om plats för relämodulen nära kvarnen. Vi måste koppla de två reläerna för att fungera parallellt med huvudströmbrytarna. Jag klippte helt enkelt de befintliga trådarna, avskalade, tennade, lade till en extra tråd och lödde ihop igen (glöm inte värmekrymp). Det var tillräckligt med slack i trådarna för att göra detta.

Relämodulen hålls på plats med dubbelsidig tejp av god kvalitet. Med trådarna anslutna och med endast begränsat utrymme för rörelse, även om bandet tappar greppet, kommer modulen inte att gå för långt och kan inte komma i kontakt med några metallföremål.

Jag backprobade också diagnosporten på min maskin för att bestämma platsen för de interna anslutningarna så att jag kunde uppnå en helt dold integration. Endast tx-, rx- och Gnd -trådar används.

Om du har en mer kommersiell maskin som stöder standby -spänning och/eller du inte vill ogiltigförklara garantin på din maskin kan du istället ansluta direkt till diagnosporten men kanske inte kunna slå på maskinen med den här enheten.

Min maskin använder en 7 -polig kontakt. Från vänster till höger är det:

NC Tx G Rx NC 5v NC

Motsvarande stift på moderkortet: Röd = Gnd Orange = Rx Svart = Tx

Mer information finns på pinouts här:

Steg 6: Anslut den logiska sidan

Anslutning av den logiska sidan
Anslutning av den logiska sidan
Anslutning av den logiska sidan
Anslutning av den logiska sidan
Anslutning av den logiska sidan
Anslutning av den logiska sidan

Granska diagrammet - Det ser alltför komplicerat ut men det är det verkligen inte.

Jag monterade nivåomvandlaren på baksidan av den (avgränsade) spänningsregulatorn med lite dubbelsidig tejp. Jag använde sedan några komponentben för att löda kraft- och jordstiftet på vardera sidan av nivåomvandlaren till motsvarande effektmodulstift. Hela den här modulen fungerar sedan som ett "genombrott" för all logik och strömförsörjning för ESP-01.

Jag använde de två mittomvandlarna för seriedata och de yttre två för reläets drivsignaler men det spelar ingen roll vilken du använder.

Det är faktiskt inte nödvändigt med dessa relämoduler för att köra en 5v -logik eftersom de är aktiva LÅG men det fungerade bara bra så jag gjorde det ändå.

Jag använde en 4x2 hona för att ansluta till ESP -modulen. Detta gör det enkelt att ladda upp kod eller byta ut modulen.

5V -ingången visas inte i diagrammet - jag kopplade min direkt till relämodulen (se andra bilden). Den svarta ledningen längst ner till vänster på bilden är seriell data till huvudkortet. Jag använde en del av en skärmad 3,5 mm hörlursförlängningskabel bara för att minska risken för störningar i datalinjen.

12f -koden använder SoftwareSerial istället för hårdvaruseriell - Detta gör att modulen kan rapportera status för felsökning via normal serie. Anslutningar sker via stift 4 och 5 istället. Jag anpassade samma rubrik för att göra ESP12F till en plug-in swap för ESP-01, bara byta de seriella stiften

Steg 7: Programmering av modulen

Programmering av modulen
Programmering av modulen

Koden kompilerades mot Arduino 1.8.1 med ESP8266 board addon och PubSubClient 2.6.0 (som är MQTT Library)

Ändra koden enligt dina krav och ladda upp koden till ESP-01-modulen och anslut till maskinen. Var försiktig med riktningen på stiften!

Konfiguration

Alternativ 1)

Endast på baskod i zip. När ESP -modulen startar först går den in i AP -läge och ställer in dess IP till 192.168.4.1. Du kan sedan ansluta till modulen och ändra IP och ansluta till din egen åtkomstpunkt. Du måste också ange en IP -adress för din maskin i det intervallet eftersom det inte finns någon DHCP på modulen.

Standard AP SSID är 'ESPSwitch' och lösenordet är '12345678'

Den stannar i AP -läge i 2 minuter som standard. Du kan ändra den här inställningen i 'global.h' - Den kallas 'adminTimeout' och är i millisekunder. Jag rekommenderar att du ändrar detta till något lågt när du har en giltig konfiguration i EEPROM, eftersom det annars bara kommer att orsaka onödiga förseningar i starten av enheten.

Alternativ 2)

Detta är standardläget för den nyare koden som stöder tvåvägskommunikationer, alternativ 1 är inte tillgängligt. Du kan också ändra standardinställningarna för SSID/lösenord i huvudfilen (leta efter '// DEFAULT CONFIG') så laddas det dessa inställningar i EEPROM vid första uppstarten och ändra administrationslägesfördröjning till något lågt i 'global.h'. Detta undviker att behöva krångla till att ansluta till den tillfälliga AP.

Enheten ställer automatiskt in sitt MQTT -id (och prenumerationsväg) till de fyra sista siffrorna i modulernas serienummer. Sökvägen är som standard ha/mod //#, ändra som du tycker men läs kommentarerna i koden för att se till att rätt matris har rätt längd.

Jag gör detta för att det betyder att jag inte behöver generera ett unikt ID för varje modul i mitt nätverk.

Enhets -ID är synligt och MQTT -servern kan ställas in via MQTT -serversidan på den interna webbservern

Steg 8: Få det att göra saker …

MQTT -kommandona är

ha/mod/xxxx/0 eller 1 = Växla ström

Alla andra strängar kommer att behandlas som ett kommando och skickas via serieport. Status rapporteras till /ha /kaffe i HEX

Med OpenHAB

kaffemaskin. varor

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

Webbplatskarta

Gruppartikel = "Kaffemaskin" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Byt objekt = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Skölj"] Textobjekt = Coffee_Status label = "Status [%s] "}

regler för röstkontroll

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

regel "Röstkommandoregler"

när Item VoiceCommand mottog kommando då var String command = VoiceCommand.state.toString.toLowerCase logInfo ("Voice. Rec", "VoiceCommand mottaget"+kommando)

if (command.contains ("slå på kaffemaskinen") || command.contains ("stäng av kaffemaskinen")) {

sendCommand (Coffee_Machine_Power, 1)} if (command.contains ("gör mig ett litet kaffe")) {sendCommand (Coffee_Machine_Cmd, "FA: 09")} if (command.contains ("make me a large coffee")) { sendCommand (Coffee_Machine_Cmd, "FA: 0A")} if (command.contains ("skölj kaffemaskinen")) {sendCommand (Coffee_Machine_Cmd, "FA: 04")}} slutet

Regler (för att tolka HEX -svar till "verkliga" värden):

regel "Kaffemaskinstatus" när artikel Coffee_Machine_Status fick uppdatering då 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)). Ersätt ('', '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")} slutet

Steg 9: Förfiningar/Todo

Förenkla den första installationen för att ansluta till wifi - Klar. Övergav tanken på 'admin -läge' eftersom det var irriterande. Ange nu bara SSID och lösenord i koden. Sparar till EEPROM om du uppdaterar/ändrar via webbgränssnitt.

Nyare kod stöder också OTA-uppdateringar men du måste uppgradera EEPROM på ESP-01-modulen för att detta ska fungera eller kommentera motsvarande OTA-objekt

Lägg till kod för bearbetning av svar från maskinen och läs status som inget fack, tom mark och fylltank - Klar. Jag har lagt till kod för att läsa tillbaka statusen och publicera till ha/kaffe. Detta är bara de råa svaren och jag arbetar fortfarande med att tolka dem men hittills har jag facket saknat och tanken tom. Den undersöker maskinen var 9: e sekund när den är på och publicerar svaret på MQTT

Svaret är i HEX men enskilda bitar indikerar sensorerna

Lägg till kod på webbsidorna för direkt kontroll via HTTP GET -kommandon.

Tävlingen Internet of Things 2017
Tävlingen Internet of Things 2017
Tävlingen Internet of Things 2017
Tävlingen Internet of Things 2017

Första priset i tingenas tävling 2017

Rekommenderad: