Daftar Isi:

Mesin Kopi Berkemampuan IoT: 9 Langkah (dengan Gambar)
Mesin Kopi Berkemampuan IoT: 9 Langkah (dengan Gambar)

Video: Mesin Kopi Berkemampuan IoT: 9 Langkah (dengan Gambar)

Video: Mesin Kopi Berkemampuan IoT: 9 Langkah (dengan Gambar)
Video: Berjuang Untuk Rakyat? Ahhh Yang Bener? 2024, Juli
Anonim
Image
Image
Peralatan yang Dibutuhkan
Peralatan yang Dibutuhkan

Instruksi ini dimasukkan ke dalam kompetisi IoT - Jika Anda menyukainya, silakan pilih

DIPERBARUI: Sekarang mendukung komunikasi 2 arah dan pembaruan OTA

Untuk beberapa waktu sekarang saya memiliki mesin kopi Jura dan saya selalu ingin mengotomatiskannya.

Saya telah menjalankan sistem otomatisasi rumah dasar selama beberapa tahun tetapi mesin kopi bukanlah sesuatu yang mudah untuk dimodifikasi (atau begitulah menurut saya). Mesin kopi Jura umumnya memiliki 'Port Diagnostik' dan/atau port yang digunakan untuk menambahkan sistem pembayaran ke mesin, namun saya tidak dapat menemukan informasi tentang cara menggunakannya. Baru-baru ini, protokol tersebut direkayasa ulang oleh beberapa individu dan dipublikasikan. Masalahnya adalah, sebagian besar referensi untuk fungsi yang tersedia adalah untuk mesin yang jauh lebih besar daripada milik saya (Ena 7).

Selain itu, mesin saya tidak memiliki daya siaga permanen seperti mesin yang lebih besar, melainkan memiliki sakelar HV yang membuat catu daya 'terkunci'. Tombol fisik pada mesin sebenarnya mengaktifkan 2 sakelar - Satu volt rendah (sisi logika, matikan) dan satu Volt Tinggi (Daya hidup). Kedua sakelar bersifat sesaat.

Saya juga perlu memastikan bahwa mesin masih beroperasi 100% terlepas dari mekanisme kontrol apa pun, yaitu mesin masih berfungsi seperti biasa seolah-olah tidak diaktifkan IoT.

Untuk mengotomatisasi mesin membutuhkan dua hal: 1) Untuk dapat mengontrol daya ke mesin 2) Untuk dapat berkomunikasi dengan mesin untuk mengaktifkan fungsi untuk membuat kopi, bilas dll.

Langkah 1: Bagaimana Kami Akan Melakukannya

Kami akan menggunakan modul ESP8266 'ESP-01' untuk terhubung ke wifi rumah dan berlangganan ke server/topik MQTT untuk mendengarkan perintah. 'Front End' yang saya gunakan adalah OpenHAB2 tetapi tidak ada alasan Anda tidak dapat menambahkan antarmuka web pada perangkat dan mengontrol secara langsung jika Anda ingin atau melalui perintah Get

ESP8266 akan menangani pengontrolan 2 relai yang terkait dengan tombol daya dan juga memproses perintah serial ke/dari mesin kopi.

PERINGATAN - Instruksi ini menguraikan prosedur yang saya gunakan untuk memodifikasi mesin kopi Jura Ena7 saya untuk dikontrol melalui otomatisasi rumah. Ini berkaitan dengan memodifikasi perangkat listrik utama yang dapat berbahaya jika dilakukan secara tidak benar. Informasi di sini mungkin tidak lengkap, tidak akurat, dan tidak aman. Lanjutkan dengan hati hati. Tidak ada kewajiban yang diterima.

Langkah 2: Peralatan yang Dibutuhkan

Peralatan yang Dibutuhkan
Peralatan yang Dibutuhkan
Peralatan yang Dibutuhkan
Peralatan yang Dibutuhkan
Peralatan yang Dibutuhkan
Peralatan yang Dibutuhkan

Bagian

  • Modul ESP-01 dan cara memprogramnya (Arduino IDE dan adaptor fisik untuk pemrograman)
  • Modul relai 2 arah EBAY
  • 5v -> 3.3v Regulator EBAY
  • Pengisi daya telepon bertenaga listrik 5v kecil
  • Konverter level logika* Freetronics
  • Kabel lain-lain, pin header, heat shrink dll untuk menghubungkan semuanya.

Peralatan

  • Besi solder berujung halus
  • Pateri
  • Wire Stripper berguna
  • Pengemudi Torx T15
  • Alat keamanan oval (atau buat satu, hanya perlu beberapa menit)

*Saya awalnya menggunakan arduino UNO dalam pengujian saya dari semua perintah serial ke mesin dan bekerja dengan sempurna, namun modul ESP menolak untuk bekerja. Saya memeriksa tiga kali kode dan saya yakin bahwa perintah yang keluar dari modul ESP sama dengan arduino namun itu tidak boleh dilakukan. Saya meletakkan ini ke modul ESP hanya bekerja pada logika 3.3v dan bukan 5V. Setelah saya memasukkan konverter Logika, itu berfungsi dengan baik. Ini mungkin atau mungkin tidak diperlukan di mesin lain.

Idealnya, Anda akan memiliki sistem otomatisasi rumah yang mendukung protokol MQTT (seperti openhab) karena inilah tujuan proyek. Jika Anda hanya ingin mengontrolnya melalui tombol di halaman web tanpa sistem pendukung apa pun, Anda perlu membuat beberapa perubahan pada kode halaman web yang disematkan. Ini tidak terlalu rumit untuk dicapai (mungkin rev2..)

Langkah 3: Protokol Jura

Protokol Jura
Protokol Jura

Data ke/dari mesin hanya serial @ 9600 tetapi Jura juga memiliki beberapa trik. Protokol menggunakan ini untuk ECC ekstra dan/atau untuk mengaburkan komunikasi. Sederhananya, setiap byte data (karakter) dibagi menjadi bit 2 dan 5 dari 4 byte serial standar yang diikuti oleh jeda 8 ms. Jika Anda ingin mempelajari cara kerjanya, ada banyak informasi di tautan di sini.

Informasi Protokol diambil dari:

Kode arduino menyederhanakan ini, memungkinkan Anda untuk mengirimkan perintah standar yang dapat dibaca manusia yang kemudian ditransposisikan ke dalam protokol Jura.

Kode saya adalah kombinasi kode dari:

Perintah yang dirujuk di situs di atas tidak akurat untuk mesin saya tetapi melalui metode coba-coba, saya dapat menemukan yang di bawah ini:

FA:01 - Mematikan (tetapi sepertinya tidak membilas, meskipun diperlukan) FA:02 - Merespon 'ok' tetapi tidak yakin apa fungsinya. FA:03 - Pesan Bilas (Memaksa pesan 'bilas' di layar, menekan mesin bilas putar) FA:04 - Tindakan Bilas - Membilas saat pesan 'Tekan tombol Putar' muncul, jika tidak maka tidak melakukan apa-apa FA:05 - Kuat di layar (Agaknya gabungkan ini dengan membuat kopi untuk strong) FA:06 - Kuat di layar (Agaknya gabungkan ini dengan membuat kopi untuk strong) FA:07 - 'Spesial' di layar tapi sebenarnya tidak melakukan apa-apa, tidak yakin ini untuk apaFA:08 - Steam FA:09 - Kopi Kecil FA:0A - Kopi Besar

Ada perintah lain tetapi ini banyak untuk saya …

Berhati-hatilah saat mengeluarkan perintah yang tidak dikenal, misalnya, ternyata AN:0A akan menghapus EEPROM mesin…

Langkah 4: Pembongkaran

Membuka mesin itu sendiri tidak terlalu mudah karena Anda memerlukan beberapa alat yang sedikit khusus tetapi orang yang jeli akan menemukan cara - Anda memerlukan bit Torx T15 dan 'kunci oval' untuk 2 sekrup. Torx yang sudah saya miliki, alat oval yang saya buat dari baut kepala soket 4mm dibor dan diratakan sedikit dengan palu.

Instruksi di sini disajikan dengan cukup baik -

Langkah 5: Membatalkan Garansi

Membatalkan Garansi
Membatalkan Garansi
Membatalkan Garansi
Membatalkan Garansi
Membatalkan Garansi
Membatalkan Garansi
Membatalkan Garansi
Membatalkan Garansi

Begitu masuk ke mesin, Anda akan melihat komponen utama. Saluran masuk daya utama memiliki tempat yang bagus di bawahnya untuk menambahkan pengisi daya 5v.

Saya menambahkan kabel (berperingkat listrik) ke blok terminal di pintu masuk mesin dan menyolder/menyusutnya ke pin listrik pengisi daya 5v. Model khusus saya bukanlah tipe port USB tetapi yang memiliki kabel yang terpasang secara permanen. Anda mungkin tidak memiliki cukup ruang untuk jenis port usb untuk dapat menggunakan kabel USB yang sebenarnya, tetapi jika Anda membuka pengisi daya, Anda dapat melepas port USB dan menggantinya dengan kabel standar ke titik 5v dan Gnd.

Anda dapat mengganti catu daya 5v dengan tegangan listrik lain jika Anda mau. 500ma seharusnya banyak.

Ada banyak ruang untuk modul relai di dekat penggiling. Kita harus memasang dua relai untuk beroperasi secara paralel dengan sakelar daya utama. Saya cukup memotong kabel yang ada, dilucuti, dikalengkan, menambahkan kabel ekstra dan disolder kembali (jangan lupa heatshrink). Ada cukup kendur di kabel untuk melakukan ini.

Modul relai ditahan di tempatnya dengan pita dua sisi berkualitas baik. Dengan kabel yang terhubung dan dengan ruang gerak yang terbatas, bahkan jika pita kehilangan pegangan, modul tidak akan bergerak terlalu jauh dan tidak dapat bersentuhan dengan benda logam apa pun.

Saya juga memeriksa port diagnostik pada mesin saya untuk menentukan lokasi koneksi internal sehingga saya dapat mencapai integrasi yang sepenuhnya tersembunyi. Hanya kabel tx, rx dan Gnd yang digunakan.

Jika Anda memiliki mesin yang lebih komersial yang mendukung tegangan siaga dan/atau Anda tidak ingin membatalkan garansi pada mesin Anda, Anda dapat menghubungkan langsung ke port diagnostik tetapi mungkin tidak dapat menghidupkan mesin menggunakan perangkat ini.

Mesin saya menggunakan konektor 7 pin. Dari kiri ke kanan adalah:

NC Tx G Rx NC 5v NC

Pin yang sesuai pada mainboard: Merah = Gnd Oranye = Rx Hitam = Tx

Info lebih lanjut dapat ditemukan di pinouts di sini:

Langkah 6: Menghubungkan Sisi Logika

Menghubungkan Sisi Logika
Menghubungkan Sisi Logika
Menghubungkan Sisi Logika
Menghubungkan Sisi Logika
Menghubungkan Sisi Logika
Menghubungkan Sisi Logika

Tinjau diagram - Kelihatannya terlalu rumit tetapi sebenarnya tidak.

Saya memasang konverter level ke bagian belakang pengatur tegangan (ditentukan) dengan selotip dua sisi. Saya kemudian menggunakan beberapa kaki komponen untuk menyolder pin daya dan ground di kedua sisi konverter level ke pin modul daya yang sesuai. Seluruh modul ini kemudian bekerja seperti 'passthrough' untuk semua logika dan catu daya untuk ESP-01.

Saya menggunakan dua konverter tengah untuk data serial dan dua terluar untuk sinyal penggerak relai tetapi tidak masalah yang Anda gunakan.

Sebenarnya tidak perlu dengan modul relai ini untuk menjalankan logika 5v karena aktif RENDAH tetapi hanya berfungsi dengan baik jadi saya tetap melakukannya.

Saya menggunakan header perempuan 4x2 untuk menghubungkan ke modul ESP. Ini memungkinkan pengunggahan kode atau penggantian modul dengan mudah.

Tidak digambarkan dalam diagram adalah input 5V - saya menghubungkan kabel saya langsung ke modul relai (lihat gambar kedua). Kabel hitam di kiri bawah gambar adalah data serial ke papan utama. Saya menggunakan bagian dari kabel ekstensi headphone 3.5mm berpelindung hanya untuk membantu mengurangi kemungkinan gangguan pada jalur data.

Kode 12f menggunakan SoftwareSerial alih-alih serial perangkat keras - Ini memungkinkan modul melaporkan status untuk debugging kembali melalui serial normal. Koneksi melalui pin 4 dan 5 sebagai gantinya. Saya mengadaptasi header yang sama untuk menjadikan ESP12F sebagai plug in swap untuk ESP-01, hanya menukar pin serial tersebut

Langkah 7: Memprogram Modul

Memprogram Modul
Memprogram Modul

Kode dikompilasi terhadap Arduino 1.8.1 dengan addon papan ESP8266 dan PubSubClient 2.6.0 (yang merupakan Perpustakaan MQTT)

Ubah kode sesuai kebutuhan Anda dan unggah kode ke modul ESP-01 dan sambungkan ke mesin. Hati-hati dengan orientasi pin!

Konfigurasi

Pilihan 1)

Hanya pada kode dasar dalam zip. Ketika modul ESP pertama kali boot, modul ini masuk ke mode AP dan menyetel IP ke 192.168.4.1. Anda kemudian dapat terhubung ke modul dan mengubah IP dan terhubung ke titik akses Anda sendiri. Anda juga perlu mengatur IP untuk mesin Anda dalam kisaran itu karena tidak ada DHCP pada modul.

SSID AP default adalah 'ESPSwitch' dan kata sandinya adalah '12345678'

Itu tetap dalam mode AP selama 2 menit secara default. Anda dapat mengubah pengaturan ini di 'global.h' - Ini disebut 'adminTimeout' dan dalam milidetik. Saya sarankan mengubah ini ke sesuatu yang rendah setelah Anda memiliki konfigurasi yang valid di EEPROM karena itu hanya akan menyebabkan penundaan yang tidak perlu dalam boot perangkat.

Pilihan 2)

Ini adalah mode default untuk kode yang lebih baru yang mendukung komunikasi 2 arah, opsi 1 tidak tersedia. Anda juga dapat mengubah pengaturan SSID/Kata Sandi default di file ino utama (cari '// DEFAULT CONFIG') sehingga akan memuat pengaturan tersebut ke EEPROM pada boot pertama dan ubah penundaan mode admin ke sesuatu yang rendah di 'global.h'. Ini menghindari harus dipusingkan menghubungkan ke AP sementara.

Perangkat akan secara otomatis mengatur id MQTT (dan jalur berlangganan) ke 4 digit terakhir dari nomor seri modul. Jalur secara default adalah ha/mod//#, ubah sesuai keinginan Anda tetapi baca komentar dalam kode untuk memastikan array yang sesuai memiliki panjang yang benar.

Saya melakukan ini karena itu berarti saya tidak perlu membuat ID unik untuk setiap modul di jaringan saya.

ID perangkat terlihat dan server MQTT dapat diatur melalui halaman server MQTT di server web internal

Langkah 8: Membuatnya Berhasil…

Perintah MQTT adalah

ha/mod/xxxx/ 0 atau 1 = Toggle power

String lainnya akan diperlakukan sebagai perintah dan dikirim melalui port serial. Status dilaporkan ke /ha/kopi di HEX

Dengan OpenHAB

mesin kopi. item

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

Peta Situs

Item grup="Mesin Kopi" { Switch item=Coffee_Machine_Power label="Power" mappings=[1="Toggle"] Switch item=Coffee_Machine_Cmd mappings=["FA:09"="Kecil"] Ganti item= Coffee_Machine_Cmd mappings=["FA:0A"="Besar"] Ganti item=Coffee_Machine_Cmd mappings=["FA:04"="Bilas"] Item teks=Kopi_Status label="Status [%s]" }

kontrol suara.rules

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

aturan "Aturan perintah suara"

ketika Item VoiceCommand menerima perintah maka var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand menerima "+perintah)

if (command.contains("nyalakan mesin kopi") || command.contains("matikan mesin kopi")) {

sendCommand(Coffee_Machine_Power, 1) } if (command.contains("buatkan saya kopi kecil")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (command.contains("buatkan saya kopi besar")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("bilas mesin kopi")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end

Aturan (untuk menafsirkan respons HEX ke dalam nilai 'nyata'):

rule "Status Mesin Kopi"ketika Item Coffee_Machine_Status menerima pembaruan maka 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 bilasBit = 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, "Tekan Rotary") } if (trayBit == "1" && tankBit == "0" && bilasBit == "0") { postUpdate(Coffee_Status, "Ready") }

}

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

Langkah 9: Penyempurnaan/Hal yang Harus Dilakukan

Menyederhanakan pengaturan awal menghubungkan ke wifi - Selesai. Meninggalkan gagasan 'mode admin' karena mengganggu. Sekarang cukup masukkan SSID dan kata sandi dalam kode. Menyimpan ke EEPROM jika Anda memperbarui/mengubah melalui antarmuka web.

Kode yang lebih baru juga mendukung pembaruan OTA tetapi Anda perlu memutakhirkan EEPROM pada modul ESP-01 agar ini berfungsi atau mengomentari item OTA yang sesuai

Tambahkan kode untuk memproses respons dari mesin dan baca status seperti tidak ada baki, lahan kosong, dan tangki isi - Selesai. Saya telah menambahkan kode untuk membaca status kembali dan mempublikasikan ke ha/kopi. Ini hanya tanggapan mentah dan saya masih berusaha menafsirkannya tetapi sejauh ini saya memiliki Baki yang hilang dan Tangki kosong berfungsi. Ini melakukan polling mesin setiap 9 detik saat aktif dan menerbitkan respons ke MQTT

Responsnya dalam HEX tetapi bit individual menunjukkan sensor

Tambahkan kode ke halaman web untuk kontrol langsung melalui HTTP GET Commands.

Kontes Internet of Things 2017
Kontes Internet of Things 2017
Kontes Internet of Things 2017
Kontes Internet of Things 2017

Juara Pertama dalam Kontes Internet of Things 2017

Direkomendasikan: