Spisu treści:

Ekspres do kawy z obsługą IoT: 9 kroków (ze zdjęciami)
Ekspres do kawy z obsługą IoT: 9 kroków (ze zdjęciami)

Wideo: Ekspres do kawy z obsługą IoT: 9 kroków (ze zdjęciami)

Wideo: Ekspres do kawy z obsługą IoT: 9 kroków (ze zdjęciami)
Wideo: MELITTA LATTESELECT- EKSPRES DO KAWY - IDEALNY DO DOMU - IDEALNY NA PREZENT - 4K 2024, Listopad
Anonim
Image
Image
Potrzebny sprzęt
Potrzebny sprzęt

Ta instrukcja została zgłoszona do konkursu IoT - jeśli Ci się spodoba, zagłosuj na nią

AKTUALIZACJA: Teraz obsługuje dwukierunkową komunikację i aktualizacje OTA

Od jakiegoś czasu mam ekspres do kawy Jura i zawsze chciałem go jakoś zautomatyzować.

Od kilku lat prowadzę podstawowy system automatyki domowej, ale ekspres do kawy nie był czymś łatwym do zmodyfikowania (a przynajmniej tak mi się wydawało). Ekspresy do kawy Jura zazwyczaj mają „port diagnostyczny” i/lub port służący do dodawania systemu płatności do maszyny, jednak nie mogłem znaleźć żadnych informacji o tym, jak można go wykorzystać. Niedawno protokół został poddany inżynierii wstecznej przez niektóre osoby i upubliczniony. Problem polegał na tym, że większość odniesień do dostępnych funkcji dotyczyła znacznie większych maszyn niż moja (Ena 7).

Co więcej, moja maszyna nie ma stałego zasilania w trybie czuwania, jak większe maszyny, zamiast tego ma przełącznik HV, który sprawia, że zasilanie się „zatrzaskuje”. Fizyczny przycisk na urządzeniu faktycznie aktywuje 2 przełączniki - jeden niski wolt (strona logiczna, wyłącz) i jeden wysoki wolt (włączanie). Oba przełączniki są chwilowe.

Musiałem również upewnić się, że maszyna nadal działa w 100% niezależnie od jakiegokolwiek mechanizmu sterującego, tj. Maszyna nadal działa normalnie, jakby nie była włączona IoT.

Automatyzacja urządzenia wymaga dwóch rzeczy: 1) Aby móc kontrolować zasilanie urządzenia 2) Aby móc komunikować się z urządzeniem w celu aktywacji funkcji parzenia kawy, płukania itp.

Krok 1: Jak to zrobimy

Użyjemy modułu ESP8266 'ESP-01', aby połączyć się z domowym Wi-Fi i zasubskrybować serwer/temat MQTT nasłuchujący poleceń. „Front End”, którego użyłem, to OpenHAB2, ale nie ma powodu, dla którego nie można było dodać interfejsu sieciowego na urządzeniu i sterować bezpośrednio, jeśli chcesz, lub za pomocą poleceń HTTP Get.

ESP8266 będzie obsługiwał sterowanie 2 przekaźnikami związanymi z przyciskiem zasilania, a także przetwarzał polecenia szeregowe do/z ekspresu do kawy.

OSTRZEŻENIE - Ta instrukcja opisuje procedurę, której użyłem do zmodyfikowania mojego ekspresu do kawy Jura Ena7, który ma być sterowany za pomocą automatyki domowej. Zajmuje się modyfikacją urządzenia sieciowego, które może być niebezpieczne, jeśli zostanie wykonane nieprawidłowo. Informacje tutaj mogą być niekompletne, niedokładne i niebezpieczne. Postępuj ostrożnie. Nie przyjmujemy żadnej odpowiedzialności.

Krok 2: Potrzebny sprzęt

Potrzebny sprzęt
Potrzebny sprzęt
Potrzebny sprzęt
Potrzebny sprzęt
Potrzebny sprzęt
Potrzebny sprzęt

Części

  • Moduł ESP-01 i sposób jego programowania (Arduino IDE i fizyczny adapter do programowania)
  • 2-drożny moduł przekaźnikowy EBAY
  • Regulator 5v -> 3.3v EBAY
  • Mała ładowarka do telefonu zasilana z sieci 5 V
  • Konwerter poziomów logicznych* Freetronics
  • Różne przewody, nagłówki pinów, termokurczliwe itp. do połączenia tego wszystkiego.

Narzędzia

  • Lutownica z drobną końcówką
  • Lutować
  • Narzędzia do ściągania izolacji są przydatne
  • Sterownik Torx T15
  • Owalne narzędzie zabezpieczające (lub zrób je, zajmuje tylko kilka minut)

*Początkowo używałem arduino UNO w moich testach wszystkich poleceń szeregowych do maszyny i działał bezbłędnie, jednak moduł ESP odmówił pracy. Trzykrotnie sprawdziłem kod i byłem pewien, że polecenia wychodzące z modułu ESP są takie same jak w arduino, jednak nie było to możliwe. Sprowadzam to do modułu ESP pracującego tylko na logice 3.3v a nie 5V. Po włożeniu konwertera logiki działał dobrze. Może to być, ale nie musi być wymagane w innych maszynach.

Idealnie byłoby mieć istniejący system automatyki domowej, który obsługuje protokół MQTT (taki jak openhab), ponieważ jest to cel projektu. Jeśli chcesz sterować nim tylko za pomocą przycisków na stronie internetowej bez żadnych systemów wspierających, będziesz musiał wprowadzić pewne zmiany w osadzonym kodzie strony internetowej. Nie jest to zbyt skomplikowane do osiągnięcia (może rev2..)

Krok 3: Protokół Jury

Protokół Jury
Protokół Jury

Dane do/z maszyny są po prostu seryjne @ 9600, ale Jura też ma w zanadrzu kilka sztuczek. Protokół używa tego do dodatkowego ECC i/lub do zaciemniania komunikacji. Mówiąc najprościej, każdy bajt danych (znak) jest podzielony na bity 2 i 5 z 4 standardowych bajtów szeregowych zakończonych 8ms pauzą. Jeśli chcesz dowiedzieć się, jak to działa, w linkach tutaj znajdziesz mnóstwo informacji.

Informacje o protokole pobrane z:

Kod arduino upraszcza to, umożliwiając przesyłanie standardowych, czytelnych dla człowieka poleceń, które następnie transponuje do protokołu Jura.

Mój kod jest kombinacją kodu z:

Polecenia wymienione w powyższych witrynach nie były dokładne dla mojego komputera, ale dzięki metodzie prób i błędów udało mi się wymyślić poniższe:

FA:01 – Wyłącza się (ale nie spłukuje, nawet w razie potrzeby) FA:02 – Odpowiada „w porządku”, ale nie jest pewien, co robi. FA:03 - Komunikat płukania (Wymusza komunikat „płukanie” na ekranie, naciśnięcie zmywarki rotacyjnej) FA:04 - Działanie płukania - Płukanie po wyświetleniu komunikatu „Naciśnij przycisk obrotowy”, w przeciwnym razie nic nie robi FA:05 - Silne na ekranie (Przypuszczalnie połącz to z zrobieniem mocnej kawy) FA:06 – Mocna na ekranie (Przypuszczalnie połącz to z zrobieniem mocnej kawy) FA:07 – „Specjalne” na ekranie, ale w rzeczywistości nic nie robi, nie jestem pewien, do czego to służy FA:08 – Para FA:09 – Mała kawa FA:0A – Duża kawa

Są inne polecenia, ale to dla mnie dużo…

Zachowaj ostrożność podczas wydawania nieznanych poleceń, na przykład najwyraźniej AN:0A wyczyści pamięć EEPROM komputera.

Krok 4: Demontaż

Samo otwarcie maszyny nie jest zbyt łatwe, ponieważ potrzebujesz trochę specjalnych narzędzi, ale zapalona osoba znajdzie sposób - potrzebujesz bitu Torx T15 i "klucza owalnego" na 2 śruby. Torx, który już miałem, owalne narzędzie, które zrobiłem z 4mm śruby z łbem gniazdowym, wywiercone i spłaszczone trochę młotkiem.

Instrukcje tutaj są dość dobrze przedstawione -

Krok 5: Unieważnienie gwarancji

Unieważnienie gwarancji
Unieważnienie gwarancji
Unieważnienie gwarancji
Unieważnienie gwarancji
Unieważnienie gwarancji
Unieważnienie gwarancji
Unieważnienie gwarancji
Unieważnienie gwarancji

Po wejściu do maszyny zobaczysz główne komponenty. Główne gniazdo zasilania ma pod nim ładne miejsce do podłączenia ładowarki 5V.

Dodałem przewody (ocena sieciowa) do listwy zaciskowej przy wejściu do maszyny i przylutowałem / obkurczyłem je do pinów sieciowych ładowarki 5V. Mój konkretny model nie był typem portu USB, ale takim, który miał podłączony na stałe przewód. Możesz nie mieć wystarczająco dużo miejsca na port USB, aby móc użyć rzeczywistego kabla USB, ale jeśli otworzysz ładowarkę, możesz usunąć port USB i zastąpić go standardowym przewodem do punktów 5V i Gnd.

Możesz zastąpić inny zasilacz sieciowy 5 V, jeśli chcesz. 500mA powinno wystarczyć.

W pobliżu szlifierki jest dużo miejsca na moduł przekaźnika. Musimy okablować oba przekaźniki, aby działały równolegle z głównymi wyłącznikami zasilania. Po prostu przeciąłem istniejące przewody, odizolowałem, ocynowałem, dodałem dodatkowy przewód i ponownie zlutowałem (nie zapomnij o termokurczliwych). Aby to zrobić, było wystarczająco dużo luzu na przewodach.

Moduł przekaźnika mocowany jest za pomocą dobrej jakości taśmy dwustronnej. Przy podłączonych przewodach i ograniczonej przestrzeni na ruch, nawet jeśli taśma straci przyczepność, moduł nie posunie się za daleko i nie będzie mógł zetknąć się z żadnymi metalowymi przedmiotami.

Zbadałem również wstecznie port diagnostyczny na moim komputerze, aby określić lokalizację połączeń wewnętrznych, aby uzyskać całkowicie ukrytą integrację. Używane są tylko przewody tx, rx i Gnd.

Jeśli masz bardziej komercyjną maszynę, która obsługuje napięcie w trybie czuwania i/lub nie chcesz unieważnić gwarancji na swoją maszynę, możesz zamiast tego podłączyć ją bezpośrednio do portu diagnostycznego, ale możesz nie być w stanie włączyć urządzenia za pomocą tego urządzenia.

Moja maszyna używa 7-stykowego złącza. Od lewej do prawej jest to:

NC Tx G Rx NC 5 V NC

Odpowiednie piny na płycie głównej: Czerwony = Gnd Pomarańczowy = Rx Czarny = Tx

Więcej informacji można znaleźć na pinoutach tutaj:

Krok 6: Okablowanie strony logicznej

Okablowanie strony logicznej
Okablowanie strony logicznej
Okablowanie strony logicznej
Okablowanie strony logicznej
Okablowanie strony logicznej
Okablowanie strony logicznej

Przejrzyj diagram - wygląda na zbyt skomplikowany, ale tak naprawdę nie jest.

Zamontowałem konwerter poziomu z tyłu (zdepinanego) regulatora napięcia za pomocą taśmy dwustronnej. Następnie użyłem kilku nóżek komponentów do przylutowania pinów zasilania i uziemienia po obu stronach konwertera poziomu do odpowiednich pinów modułu mocy. Cały ten moduł działa wtedy jak „przejście” dla całej logiki i zasilania dla ESP-01.

Użyłem dwóch środkowych konwerterów do danych szeregowych i dwóch zewnętrznych do sygnałów sterujących przekaźnikiem, ale nie ma znaczenia, którego używasz.

W przypadku tych modułów przekaźnikowych nie jest konieczne uruchamianie logiki 5V, ponieważ są one aktywne na niskim poziomie, ale po prostu działały ładnie, więc i tak to zrobiłem.

Do podłączenia do modułu ESP użyłem żeńskiego złącza 4x2. Pozwala to na łatwe wgranie kodu lub wymianę modułu.

Na schemacie nie pokazane jest wejście 5V - swoje podłączyłem bezpośrednio do modułu przekaźnika (patrz drugie zdjęcie). Czarny przewód w lewym dolnym rogu obrazu to szeregowe dane do płyty głównej. Użyłem części ekranowanego przedłużacza słuchawkowego 3,5 mm, aby zmniejszyć ryzyko zakłóceń w linii danych.

Kod 12f używa oprogramowania SoftwareSerial zamiast sprzętowego serialu - umożliwia to modułowi raportowanie stanu w celu debugowania z powrotem przez normalny serial. Połączenia są realizowane przez piny 4 i 5. Zaadaptowałem ten sam nagłówek, aby ESP12F stał się wtyczką do wymiany dla ESP-01, po prostu zamieniając te piny szeregowe

Krok 7: Programowanie modułu

Programowanie modułu
Programowanie modułu

Kod został skompilowany pod Arduino 1.8.1 z dodatkiem płyty ESP8266 i PubSubClient 2.6.0 (która jest biblioteką MQTT)

Zmodyfikuj kod zgodnie z własnymi wymaganiami i prześlij kod do modułu ESP-01 i połącz się z maszyną. Uważaj na orientację kołków!

Konfiguracja

Opcja 1)

Tylko na kodzie podstawowym w zip. Kiedy moduł ESP uruchamia się po raz pierwszy, przechodzi w tryb AP i ustawia swój adres IP na 192.168.4.1. Następnie możesz połączyć się z modułem i zmienić IP oraz połączyć się z własnym punktem dostępowym. Będziesz także musiał ustawić adres IP dla swojej maszyny w tym zakresie, ponieważ w module nie ma DHCP.

Domyślny SSID AP to „ESPSwitch”, a hasło to „12345678”

Domyślnie pozostaje w trybie AP przez 2 minuty. Możesz zmienić to ustawienie w 'global.h' - nazywa się 'adminTimeout' i jest podane w milisekundach. Zalecam zmianę tego na coś niskiego, gdy masz poprawną konfigurację w EEPROM, ponieważ w przeciwnym razie spowoduje to niepotrzebne opóźnienia w rozruchu urządzenia.

Opcja 2)

Jest to domyślny tryb dla nowszego kodu, który obsługuje komunikację dwukierunkową, opcja 1 jest niedostępna. Możesz również zmienić domyślne ustawienia SSID/hasła w głównym pliku ino (poszukaj '// DEFAULT CONFIG'), aby załadować te ustawienia do EEPROM przy pierwszym uruchomieniu i zmień opóźnienie trybu administratora na coś niskiego w 'global.h'. Pozwala to uniknąć kłopotów z łączeniem się z tymczasowym AP.

Urządzenie automatycznie ustawi swój identyfikator MQTT (i ścieżkę subskrypcji) na 4 ostatnie cyfry numeru seryjnego modułu. Ścieżka domyślna to ha/mod//#, zmień według własnego uznania, ale przeczytaj komentarze w kodzie, aby upewnić się, że odpowiednia tablica ma prawidłową długość.

Robię to, ponieważ oznacza to, że nie muszę generować unikalnego identyfikatora dla każdego modułu w mojej sieci.

Identyfikator urządzenia jest widoczny, a serwer MQTT można ustawić za pośrednictwem strony serwera MQTT na wewnętrznym serwerze WWW

Krok 8: Spraw, aby to robiło…

Polecenia MQTT to

ha/mod/xxxx/ 0 lub 1 = Przełącz moc

Każdy inny ciąg zostanie potraktowany jako polecenie i wysłany przez port szeregowy. Status jest zgłaszany do /ha/kawa w HEX

Z OpenHAB

coffeemachine.items

Number Coffee_Machine_Power "Moc" { mqtt=">[control:ha/mod/8002/:command:*:default]" }Ciąg Coffee_Machine_Status { mqtt="<[control:ha/coffee:state:default]" }

Mapa strony

Group item="Ekspres do kawy" { Switch item=Coffee_Machine_Power label="Power" mappings=[1="Przełącz"] Switch item=Coffee_Machine_Cmd mappings=["FA:09"="Mały"] Switch item= Coffee_Machine_Cmd mappings=["FA:0A"="Duże"] Przełącz item=Coffee_Machine_Cmd mappings=["FA:04"="Płukanie"] Tekst item=Coffee_Status label="Stan [%s]" }

sterowanie głosowe.zasady

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

reguła „Zasady poleceń głosowych”

gdy element VoiceCommand otrzymał polecenie, to var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand otrzymał "+command)

if (command.contains("włącz ekspres") || command.contains("wyłącz ekspres")) {

sendCommand(Coffee_Machine_Power, 1) } if (command.contains("zrób mi małą kawę")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (polecenie.contains("zrób mi dużą kawę")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("opłucz ekspres do kawy")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Reguły (do interpretacji odpowiedzi HEX na „rzeczywiste” wartości):

reguła „Stan automatu do kawy” po otrzymaniu aktualizacji elementu Coffee_Machine_Status 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)).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 cleanerBit = binaryString.substring(6, 7)

if (trayBit == "0") {

postUpdate(Coffee_Status, "Brak tacy") } if (tankBit == "1") { postUpdate(Coffee_Status, "Napełnij zbiornik") } if (rinseBit == "1") { postUpdate(Coffee_Status, "Wciśnij Rotary") } if (trayBit == "1" && tankBit == "0" && płukanieBit == "0") { postUpdate(Coffee_Status, "Gotowy") }

}

if (response == "Off"){ postUpdate(Coffee_Status, "Off") } end

Krok 9: Udoskonalenia/Todo

Uprość początkową konfigurację łączenia z Wi-Fi - gotowe. Porzucił ideę „trybu administratora”, ponieważ był denerwujący. Teraz wystarczy wpisać SSID i hasło w kodzie. Zapisuje w pamięci EEPROM w przypadku aktualizacji/zmiany przez interfejs sieciowy.

Nowszy kod obsługuje również aktualizacje OTA, ale będziesz musiał zaktualizować EEPROM w module ESP-01, aby to zadziałało lub zakomentowało odpowiednie elementy OTA

Dodaj kod do przetwarzania odpowiedzi z maszyny i odczytaj status, taki jak brak tacy, opróżnij fusy i napełnij zbiornik - gotowe. Dodałem kod, aby odczytać status z powrotem i opublikować na ha/coffee. To tylko surowe odpowiedzi i wciąż pracuję nad ich interpretacją, ale jak dotąd brakuje mi Tray i pustego zbiornika. Po włączeniu odpytuje maszynę co 9 sekund i publikuje odpowiedź do MQTT

Odpowiedź jest w postaci HEX, ale poszczególne bity wskazują czujniki

Dodaj kod do stron internetowych, aby uzyskać bezpośrednią kontrolę za pomocą poleceń HTTP GET.

Konkurs Internetu Rzeczy 2017
Konkurs Internetu Rzeczy 2017
Konkurs Internetu Rzeczy 2017
Konkurs Internetu Rzeczy 2017

I nagroda w Konkursie Internetu Rzeczy 2017

Zalecana: