İçindekiler:

IoT Etkin Kahve Makinesi: 9 Adım (Resimlerle)
IoT Etkin Kahve Makinesi: 9 Adım (Resimlerle)

Video: IoT Etkin Kahve Makinesi: 9 Adım (Resimlerle)

Video: IoT Etkin Kahve Makinesi: 9 Adım (Resimlerle)
Video: Efekan Karne Alsaydı 2024, Temmuz
Anonim
Image
Image
Gerekli Ekipman
Gerekli Ekipman

Bu talimat, IoT yarışmasına girildi - Beğendiyseniz, lütfen oy verin

GÜNCELLENDİ: Artık 2 yönlü iletişimi ve OTA güncellemelerini destekliyor

Bir süredir bir Jura kahve makinem var ve her zaman onu bir şekilde otomatikleştirmek istemişimdir.

Birkaç yıldır temel bir ev otomasyon sistemi çalıştırıyorum ama kahve makinesi modifiye edilmesi kolay bir şey değildi (ya da ben öyle sanıyordum). Jura kahve makinelerinde genellikle bir 'Diyagnostik bağlantı noktası' ve/veya makineye ödeme sistemi eklemek için kullanılan bir bağlantı noktası bulunur, ancak bunun nasıl kullanılacağına dair herhangi bir bilgi bulamadım. Daha yakın zamanlarda, protokol bazı kişiler tarafından tersine mühendislik uygulandı ve halka açıldı. Sorun şu ki, mevcut fonksiyonlara yapılan referansların çoğu benimkinden çok daha büyük makineler içindi (Ena 7).

Bunun da ötesinde, makinemin daha büyük makineler gibi kalıcı bir bekleme gücü yok, bunun yerine güç kaynağını 'mandallı' hale getiren bir HV anahtarı var. Makinedeki fiziksel düğme aslında 2 anahtarı etkinleştirir - Bir düşük volt (mantık tarafı, kapatma) ve bir Yüksek Volt (Güç açık). Her iki anahtar da anlık.

Ayrıca makinenin herhangi bir kontrol mekanizmasından %100 bağımsız olarak çalıştığından, yani makinenin hala IoT etkin değilmiş gibi normal şekilde çalıştığından emin olmam gerekiyordu.

Makineyi otomatikleştirmek için iki şey gerekir: 1) Makineye giden gücü kontrol edebilmek 2) Kahve yapma, durulama vb. fonksiyonları etkinleştirmek için makine ile iletişim kurabilmek.

Adım 1: Nasıl Yapacağız?

Ev wifi'sine bağlanmak ve komutlar için MQTT sunucusuna/konu dinlemeye abone olmak için bir ESP8266 'ESP-01' modülü kullanacağız. Kullandığım 'Front End' OpenHAB2 ama cihaz üzerindeki web arayüzüne ekleyememeniz ve isterseniz doğrudan veya HTTP Get komutları ile kontrol edememeniz için hiçbir neden yok.

ESP8266, güç düğmesiyle ilgili 2 röleyi kontrol edecek ve ayrıca kahve makinesine/makinesinden gelen seri komutları işleyecektir.

UYARI - Bu talimat, Jura Ena7 kahve makinemi ev otomasyonu ile kontrol edilecek şekilde değiştirmek için kullandığım prosedürü özetlemektedir. Yanlış yapıldığında tehlikeli olabilecek bir ana elektrik cihazının değiştirilmesi ile ilgilidir. Buradaki bilgiler eksik, yanlış ve güvensiz olabilir. Dikkatle ilerle. Hiçbir sorumluluk kabul edilmez.

2. Adım: Gerekli Ekipman

Gerekli Ekipman
Gerekli Ekipman
Gerekli Ekipman
Gerekli Ekipman
Gerekli Ekipman
Gerekli Ekipman

Parçalar

  • ESP-01 modülü ve onu programlamanın bir yolu (Arduino IDE ve programlama için fiziksel adaptör)
  • 2 yollu röle modülü EBAY
  • 5v -> 3.3v Regülatör EBAY
  • Küçük 5v elektrikle çalışan telefon şarj cihazı
  • Mantık seviye dönüştürücü* Freetronics
  • Hepsini bağlamak için çeşitli tel, pin başlıkları, ısıyla daralan vb.

Aletler

  • İnce uçlu havya
  • Lehim
  • Tel Sıyırıcılar kullanışlıdır
  • Torx T15 Sürücü
  • Oval güvenlik aracı (veya bir tane yapın, yalnızca birkaç dakika sürer)

*Makinedeki tüm seri komutları test ederken başlangıçta bir arduino UNO kullandım ve kusursuz çalıştı, ancak ESP modülü çalışmayı reddetti. Kodu üç kez kontrol ettim ve ESP modülünden çıkan komutların arduino ile aynı olduğundan emindim, ancak hareketsizdi. Bunu, 5V değil, yalnızca 3.3v mantığı üzerinde çalışan ESP modülüne indirdim. Mantık dönüştürücüyü taktığımda iyi çalıştı. Bu, diğer makinelerde gerekli olabilir veya olmayabilir.

İdeal olarak, projenin amacı bu olduğundan MQTT protokolünü (openhab gibi) destekleyen mevcut bir ev otomasyon sisteminiz olacaktır. Herhangi bir destekleyici sistem olmadan sadece bir web sayfasındaki düğmeler aracılığıyla kontrol etmek istiyorsanız, gömülü web sayfası kodunda bazı değişiklikler yapmanız gerekecektir. Elde edilmesi aşırı karmaşık değildir (belki rev2..)

Adım 3: Jura Protokolü

Jura Protokolü
Jura Protokolü

Makineden gelen/makineden gelen veriler sadece seri @ 9600'dür ancak Jura'nın da bazı hileleri vardır. Protokol bunu ya fazladan ECC için ve/veya iletişimi karartmak için kullanır. Basitçe söylemek gerekirse, her veri baytı (karakter), 8 ms'lik bir duraklama ile takip edilen 4 standart seri baytın 2 ve 5 bitlerine bölünür. Bunun nasıl çalıştığını öğrenmek istiyorsanız, buradaki bağlantılarda bol miktarda bilgi var.

Protokol Bilgileri şu adresten alınmıştır:

Arduino kodu bunu basitleştirir ve daha sonra Jura protokolüne aktardığı standart, insan tarafından okunabilir komutları iletmenizi sağlar.

Kodum, https://github.com/oliverk71/Coffeemaker-Payment-… https://github.com/psct/sharespresso adresindeki kodun bir kombinasyonudur.

Yukarıdaki sitelerde atıfta bulunulan komutlar makinem için doğru değildi, ancak bir deneme yanılma yöntemiyle aşağıdakileri bulabildim:

FA:01 - Kapanıyor (ancak gerekirse bile durulamıyor gibi görünüyor) FA:02 - 'Tamam' yanıtını veriyor ancak ne yaptığından emin değil. FA:03 - Durulama Mesajı (Döner durulama makinesine basarak ekranda bir 'durulama' mesajını zorlar) FA:04 - Durulama Eylemi - 'Döner düğmeye basın' mesajı göründüğünde durular, aksi takdirde hiçbir şey yapmaz FA:05 - Ekranda güçlü (Muhtemelen bunu güçlü bir kahve yapmakla birleştirin) FA:06 - Ekranda güçlü (Muhtemelen bunu güçlü bir kahve yapmakla birleştirin) FA:07 - Ekranda 'Özel' ama aslında hiçbir şey yapmıyor, bunun ne için olduğundan emin değilimFA:08 - Buhar FA:09 - Küçük Kahve FA:0A - Büyük Kahve

Başka komutlar da var ama bana bu kadarı yeter…

Bilinmeyen komutlar verirken dikkatli olun, örneğin AN:0A makinenin EEPROM'unu silecektir…

Adım 4: Sökme

Biraz özel aletlere ihtiyacınız olduğu için makinenin kendisini açmak aşırı kolay değil, ancak meraklı bir kişi bir yolunu bulacaktır - 2 vida için bir T15 Torx ucuna ve bir 'oval anahtara' ihtiyacınız var. Zaten sahip olduğum Torx, 4 mm lokma başlı cıvatadan yaptığım oval alet bir çekiçle delindi ve biraz düzleştirildi.

Buradaki talimatlar oldukça iyi sunulmuştur -

Adım 5: Garantiyi İptal Etme

Garantiyi İptal Etme
Garantiyi İptal Etme
Garantiyi İptal Etme
Garantiyi İptal Etme
Garantiyi İptal Etme
Garantiyi İptal Etme
Garantiyi İptal Etme
Garantiyi İptal Etme

Makineye girdikten sonra ana bileşenleri göreceksiniz. Ana güç girişinin altında 5v şarj cihazı eklemek için güzel bir yer var.

Makinenin girişindeki terminal bloğuna (şebeke dereceli) teller ekledim ve bunları 5v şarj cihazının şebeke pinlerine lehimledim/ısı büzüştürdüm. Özel modelim bir USB bağlantı noktası türü değil, ucu kalıcı olarak takılı olan bir modeldi. Gerçek bir USB kablosunu kullanabilmek için bir usb bağlantı noktası türü için yeterli alanınız olmayabilir, ancak şarj cihazını açtıysanız, USB bağlantı noktasını çıkarabilir ve 5v ve Gnd noktalarına standart bir kablo ile değiştirebilirsiniz.

İsterseniz, 5v olarak derecelendirilmiş başka bir şebeke güç kaynağını değiştirebilirsiniz. 500ma yeterli olacaktır.

Öğütücünün yanında röle modülü için bolca yer var. Ana güç anahtarlarıyla paralel çalışacak iki röleyi kablolamamız gerekiyor. Ben sadece mevcut kabloları kestim, soydum, kalayladım, fazladan bir kablo ekledim ve tekrar lehimledim (ısı büzüşmesini unutmayın). Bunu yapmak için tellerde yeterince gevşeklik vardı.

Röle modülü, kaliteli çift taraflı bantla yerinde tutulur. Kablolar bağlı ve sınırlı hareket alanı ile, bant tutuşunu kaybetse bile, modül çok uzağa gitmeyecek ve herhangi bir metal nesne ile temas etmeyecektir.

Ayrıca, tamamen gizli bir entegrasyon elde edebilmek için dahili bağlantıların yerini belirlemek için makinemdeki tanılama bağlantı noktasını geri sorguladım. Sadece tx, rx ve Gnd telleri kullanılır.

Bekleme voltajını destekleyen daha ticari bir makineniz varsa ve/veya makinenizin garantisini geçersiz kılmak istemiyorsanız, bunun yerine doğrudan tanılama bağlantı noktasına bağlanabilir, ancak bu aygıtı kullanarak makineyi açamayabilirsiniz.

Makinem 7 pinli bir konektör kullanıyor. Soldan sağa şöyledir:

NC Tx G Rx NC 5v NC

Anakart üzerindeki ilgili pinler: Red = Gnd Orange = Rx Black = Tx

Buradaki pinoutlar hakkında daha fazla bilgi bulunabilir:

Adım 6: Mantık Tarafını Kablolama

Mantık Tarafını Kablolama
Mantık Tarafını Kablolama
Mantık Tarafını Kablolama
Mantık Tarafını Kablolama
Mantık Tarafını Kablolama
Mantık Tarafını Kablolama

Diyagramı gözden geçirin - Aşırı karmaşık görünüyor ama gerçekten değil.

Seviye dönüştürücüyü (belirlenmiş) voltaj regülatörünün arkasına çift taraflı bantla monte ettim. Daha sonra seviye dönüştürücünün her iki tarafındaki güç ve topraklama pinlerini ilgili güç modülü pinlerine lehimlemek için bazı bileşen ayakları kullandım. Bu modülün tamamı daha sonra ESP-01 için tüm mantık ve güç kaynağı için bir 'geçiş' gibi çalışır.

Ortadaki iki dönüştürücüyü seri veriler için, dıştaki ikisini ise röle sürüş sinyalleri için kullandım ama hangisini kullandığınızın bir önemi yok.

Aktif DÜŞÜK oldukları için bu röle modüllerinde 5v mantığı çalıştırmaları aslında gerekli değil ama sadece güzel çalıştı, ben yine de yaptım.

ESP modülüne bağlanmak için 4x2 dişi başlık kullandım. Bu, kodun kolayca yüklenmesini veya modülün değiştirilmesini sağlar.

Şemada gösterilmeyen 5V giriştir - Madeni doğrudan röle modülüne bağladım (ikinci resme bakın). Resmin sol alt tarafındaki siyah kablo, ana karta giden seri veridir. Veri hattında parazit olasılığını azaltmaya yardımcı olmak için korumalı 3,5 mm kulaklık uzatma kablosunun bir parçasını kullandım.

12f kodu, donanım dizisi yerine SoftwareSerial kullanır - Bu, modülün normal seri yoluyla hata ayıklama için durumu rapor etmesine olanak tanır. Bağlantılar bunun yerine pin 4 ve 5 üzerinden yapılır. Aynı başlığı ESP12F'yi ESP-01 için bir fiş takası yapmak için uyarladım, sadece bu seri pinleri değiştirdim

Adım 7: Modülün Programlanması

Modülün Programlanması
Modülün Programlanması

Kod, ESP8266 kart eklentisi ve PubSubClient 2.6.0 (MQTT Kitaplığı olan) ile Arduino 1.8.1'e karşı derlendi

Kodu gereksinimlerinize göre değiştirin ve kodu ESP-01 modülüne yükleyin ve makineye bağlayın. Pimlerin yönüne dikkat edin!

Yapılandırma

Seçenek 1)

Sadece zip'teki temel kodda. ESP modülü ilk başlatıldığında, AP moduna girer ve IP'sini 192.168.4.1 olarak ayarlar. Daha sonra modüle bağlanabilir ve IP'yi değiştirebilir ve kendi erişim noktanıza bağlanabilirsiniz. Modülde DHCP olmadığından makineniz için de bu aralıkta bir IP ayarlamanız gerekecektir.

Varsayılan AP SSID'si 'ESPSwitch' ve parolası '12345678'

Varsayılan olarak 2 dakika AP modunda kalır. Bu ayarı 'global.h' içinde değiştirebilirsiniz - Buna 'adminTimeout' denir ve milisaniye cinsindendir. EEPROM'da geçerli bir konfigürasyona sahip olduğunuzda bunu düşük bir değere değiştirmenizi tavsiye ederim, aksi halde bu sadece cihazın açılışında gereksiz gecikmelere neden olur.

Seçenek 2)

Bu, 2 yönlü iletişimi destekleyen yeni kod için varsayılan moddur, seçenek 1 mevcut değildir. Ana ino dosyasındaki varsayılan SSID/Parola ayarlarını da değiştirebilirsiniz ('// VARSAYILAN YAPILANDIRMA'yı arayın) böylece yüklenecektir. bu ayarları ilk açılışta EEPROM'a ekleyin ve yönetici modu gecikmesini 'global.h'de düşük bir değere değiştirin. Bu, geçici AP'ye bağlanmak için uğraşmaktan kaçınır.

Cihaz, MQTT kimliğini (ve abonelik yolunu) modüllerin seri numarasının son 4 hanesine otomatik olarak ayarlayacaktır. Varsayılan yol ha/mod//# şeklindedir, uygun gördüğünüz gibi değiştirin ancak uygun dizinin doğru uzunluğa sahip olduğundan emin olmak için koddaki yorumları okuyun.

Bunu yapıyorum çünkü ağımdaki her modül için benzersiz bir kimlik oluşturmam gerekmiyor.

Cihaz kimliği görülebilir ve MQTT sunucusu, dahili web sunucusundaki MQTT sunucu sayfası aracılığıyla ayarlanabilir

Adım 8: Bir Şeyler Yapmak…

MQTT komutları şunlardır:

ha/mod/xxxx/ 0 veya 1 = Gücü değiştir

Diğer tüm dizeler komut olarak kabul edilecek ve seri bağlantı noktası aracılığıyla gönderilecektir. Durum HEX'te /ha/kahveye bildirilir

OpenHAB ile

kahve makinesi.öğeler

Numara Coffee_Machine_Power "Güç" { mqtt=">[kontrol:ha/mod/8002/:command:*:varsayılan]" }String Coffee_Machine_Status { mqtt="<[control:ha/coffee:state:default]" }

Site Haritası

Grup öğesi="Kahve Makinesi" { Öğeyi değiştir=Kahve_Makinesi_Güç etiketi="Güç" eşlemeleri=[1="Geçiş"] Öğeyi değiştir=Kahve_Machine_Cmd eşlemeleri=["FA:09"="Küçük"] Öğeyi değiştir= Coffee_Machine_Cmd mappings=["FA:0A"="Large"] Öğeyi değiştir=Coffee_Machine_Cmd mappings=["FA:04"="Durulama"] Metin öğesi=Kahve_Status label="Durum [%s]" }

ses kontrolü.kurallar

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

kural "Sesli komut Kuralları"

Öğe VoiceCommand komutu aldığında, var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand "+command alındı)

if (command.contains("kahve makinesini açın") || command.contains("kahve makinesini kapatın")) {

sendCommand(Coffee_Machine_Power, 1) } if (command.contains("bana küçük bir kahve yap")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (command.contains("bana büyük bir kahve yap")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("kahve makinesini durulayın")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Kurallar (HEX yanıtlarını 'gerçek' değerlere yorumlamak için):

"Kahve Makinesi Durumu" kuralı Öğe Coffee_Machine_Status güncelleme aldığında var String yanıtı = 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 tepsiBit = binaryString.substring(0, 1)

var int tankBit = binaryString.substring(2, 3) var int heatBit = binaryString.substring(7, 8) var int durulamaBit = ikiliString.substring(6, 7)

if (trayBit == "0") {

postUpdate(Coffee_Status, "Tepsi Eksik") } if (tankBit == "1") { postUpdate(Coffee_Status, "Tank Doldur") } if (rinseBit == "1") { postUpdate(Coffee_Status, "Döner Basın") } if (trayBit == "1" && tankBit == "0" && durulamaBit == "0") { postUpdate(Coffee_Status, "Hazır") }

}

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

9. Adım: İyileştirmeler/Yapılacaklar

Wi-Fi'ye bağlanmak için ilk kurulumu basitleştirin - Tamamlandı. Can sıkıcı olduğu için 'yönetici modu' fikrini terk etti. Şimdi sadece SSID ve şifreyi koda girin. Web arayüzü üzerinden güncelleme/değişiklik yaparsanız EEPROM'a kaydeder.

Daha yeni kod ayrıca OTA güncellemelerini de destekler, ancak bunun çalışması veya ilgili OTA öğelerini yorumlaması için ESP-01 modülündeki EEPROM'u yükseltmeniz gerekir

Makineden gelen yanıtları işlemek için kod ekleyin ve tepsi yok, boş alan ve dolum tankı gibi durumu okuyun - Tamamlandı. Durumu geri okumak ve ha/kahveye yayınlamak için kod ekledim. Bu sadece ham yanıtlar ve hala onları yorumlamaya çalışıyorum ama şu ana kadar Tepsi eksik ve Tank boş çalışıyor. Açıkken her 9 saniyede bir makineyi yoklar ve yanıtı MQTT'ye yayınlar

Yanıt HEX'tedir ancak ayrı bitler sensörleri gösterir

HTTP GET Komutları aracılığıyla doğrudan kontrol için web sayfalarına kod ekleyin.

Nesnelerin İnterneti Yarışması 2017
Nesnelerin İnterneti Yarışması 2017
Nesnelerin İnterneti Yarışması 2017
Nesnelerin İnterneti Yarışması 2017

2017 Nesnelerin İnterneti Yarışmasında Birincilik Ödülü

Önerilen: