Isi kandungan:

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

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

Video: Mesin Kopi Diaktifkan IoT: 9 Langkah (dengan Gambar)
Video: FENOMENA ANEH DI MASJIDILHARAM 2024, Jun
Anonim
Image
Image
Peralatan Diperlukan
Peralatan Diperlukan

Instruksional ini dimasukkan ke dalam pertandingan IoT - Sekiranya anda suka, sila pilih

DIKEMASKINI: Kini menyokong kemas kini 2 hala dan kemas kini OTA

Untuk beberapa waktu sekarang, saya mempunyai mesin kopi Jura dan saya ingin sentiasa mengautomasikannya.

Saya telah menjalankan sistem automasi rumah asas selama beberapa tahun tetapi mesin kopi bukanlah sesuatu yang mudah diubahsuai (atau saya kira). Mesin kopi Jura biasanya mempunyai 'Diagnostic port' dan / atau port yang digunakan untuk menambahkan sistem pembayaran ke mesin, namun saya tidak dapat menemukan maklumat mengenai bagaimana ia dapat digunakan. Baru-baru ini, protokol ini dibuat semula oleh beberapa individu dan dibuat untuk umum. Masalahnya adalah, sebilangan besar rujukan fungsi yang ada adalah untuk mesin yang jauh lebih besar daripada mesin saya (Ena 7).

Di samping itu, mesin saya tidak mempunyai kuasa sedia tetap seperti mesin yang lebih besar, sebaliknya ia mempunyai suis HV yang menjadikan bekalan kuasa 'mengunci'. Butang fizikal pada mesin sebenarnya mengaktifkan 2 suis - Satu volt rendah (sisi logik, matikan) dan satu Volt Tinggi (Kuasa hidup). Kedua-dua suis sesaat.

Saya juga perlu memastikan bahawa mesin masih beroperasi 100% bebas dari mekanisme kawalan apa pun, iaitu mesin masih berfungsi seperti biasa seolah-olah tidak diaktifkan IoT.

Untuk mengautomasikan mesin memerlukan dua perkara: 1) Mampu mengawal kuasa ke mesin 2) Mampu berkomunikasi dengan mesin untuk mengaktifkan fungsi membuat kopi, bilas dll.

Langkah 1: Bagaimana Kita Akan Melakukannya

Kami akan menggunakan modul ESP8266 'ESP-01' untuk menyambung ke wifi rumah dan melanggan pelayan / topik MQTT untuk mendengar arahan. 'Front End' yang saya gunakan adalah OpenHAB2 tetapi tidak ada alasan anda tidak dapat menambahkan ke antara muka web pada peranti dan mengendalikan secara langsung jika anda mahu atau melalui perintah HTTP Get.

ESP8266 akan mengendalikan 2 relai yang berkaitan dengan butang kuasa dan juga memproses arahan bersiri ke / dari mesin kopi.

PERINGATAN - Petunjuk ini menggariskan prosedur yang saya gunakan untuk mengubah suai mesin kopi Jura Ena7 saya untuk dikawal melalui automasi rumah. Ini berkaitan dengan mengubah suai peranti elektrik utama yang boleh membahayakan jika dilakukan dengan tidak betul. Maklumat di sini mungkin tidak lengkap, tidak tepat dan tidak selamat. Teruskan dengan berhati-hati. Tiada tanggungjawab yang diterima.

Langkah 2: Peralatan Diperlukan

Peralatan Diperlukan
Peralatan Diperlukan
Peralatan Diperlukan
Peralatan Diperlukan
Peralatan Diperlukan
Peralatan Diperlukan

Bahagian

  • Modul ESP-01 dan cara memprogramnya (Arduino IDE dan penyesuai fizikal untuk pengaturcaraan)
  • Modul relay 2 hala EBAY
  • 5v -> 3.3v Regulator EBAY
  • Pengecas telefon berkuasa 5v kecil
  • Penukar tahap logik * Freetronics
  • Lain-lain wayar, pin header, heat shrink dll untuk menghubungkan semuanya.

Alat

  • Besi pematerian hujung halus
  • Pateri
  • Wire Strippers sangat berguna
  • Pemandu Torx T15
  • Alat keselamatan bujur (atau membuatnya, hanya memerlukan beberapa minit)

* Pada mulanya saya menggunakan arduino UNO dalam menguji semua arahan bersiri ke mesin dan ia berfungsi dengan sempurna, namun modul ESP enggan berfungsi. Saya tiga kali memeriksa kod dan saya yakin bahawa perintah yang keluar dari modul ESP adalah sama dengan arduino tetapi ia tidak boleh digunakan. Saya meletakkan ini pada modul ESP yang hanya menggunakan logik 3.3v dan bukan 5V. Sebaik sahaja saya memasukkan penukar Logik, ia berfungsi dengan baik. Ini mungkin atau tidak diperlukan di mesin lain.

Sebaik-baiknya, anda akan mempunyai sistem automasi rumah yang ada yang menyokong protokol MQTT (seperti openhab) kerana inilah tujuan projek ini. Sekiranya anda hanya mahu mengawalnya melalui butang di laman web tanpa sistem sokongan, anda perlu membuat beberapa perubahan pada kod halaman web yang disematkan. Ia tidak terlalu rumit untuk dicapai (mungkin rev2..)

Langkah 3: Protokol Jura

Protokol Jura
Protokol Jura

Data ke / dari mesin hanya bersiri @ 9600 tetapi Jura mempunyai beberapa tip di lengan baju mereka juga. Protokol menggunakan ini untuk ECC tambahan dan / atau untuk mengaburkan komunikasi. Ringkasnya, setiap bait data (watak) dibahagi pada bit 2 dan 5 dari 4 bait bersiri standard yang diikuti oleh jeda 8ms. Sekiranya anda berminat untuk mengetahui cara ini berfungsi, terdapat banyak maklumat dalam pautan di sini.

Maklumat Protokol diambil dari:

Kod arduino mempermudah ini, membolehkan anda menghantar perintah yang boleh dibaca oleh manusia yang kemudiannya dipindahkan ke protokol Jura.

Kod saya adalah gabungan kod dari:

Perintah yang dirujuk di laman web di atas tidak tepat untuk mesin saya tetapi melalui kaedah percubaan dan kesilapan, saya dapat menghasilkan yang berikut:

FA: 01 - Mematikan (tetapi nampaknya tidak membilas, walaupun diperlukan) FA: 02 - Menjawab 'ok' tetapi tidak pasti apa yang dilakukannya. FA: 03 - Bilas Mesej (Memaksa mesej 'bilas' di skrin, menekan mesin bilas putar) FA: 04 - Bilas Tindakan - Bilas apabila mesej 'Tekan Rotary button' muncul, jika tidak, tidak ada yang FA: 05 - Kuat pada skrin (Agaknya menggabungkan ini dengan membuat kopi yang kuat) FA: 06 - Kuat di skrin (Agak boleh menggabungkan ini dengan membuat kopi untuk yang kuat) FA: 07 - 'Istimewa' di skrin tetapi sebenarnya tidak melakukan apa-apa, tidak pasti apa ini untukFA: 08 - Steam FA: 09 - Kopi Kecil FA: 0A - Kopi Besar

Ada arahan lain tetapi ini banyak bagi saya …

Berhati-hati semasa mengeluarkan arahan yang tidak diketahui, misalnya, nampaknya AN: 0A akan menghapus EEPROM mesin …

Langkah 4: Pembongkaran

Membuka mesin dengan sendirinya terlalu mudah kerana anda memerlukan alat yang sedikit khas tetapi orang yang berminat akan mencari jalan - Anda memerlukan bit T15 Torx dan 'kunci bujur' untuk 2 skru. Torx yang sudah saya miliki, alat bujur yang saya buat dari bolt kepala soket 4mm yang digerudi dan diratakan sedikit dengan tukul.

Arahan di sini cukup baik -

Langkah 5: Membatalkan Jaminan

Membatalkan Jaminan
Membatalkan Jaminan
Membatalkan Jaminan
Membatalkan Jaminan
Membatalkan Jaminan
Membatalkan Jaminan
Membatalkan Jaminan
Membatalkan Jaminan

Setelah masuk ke mesin, anda akan melihat komponen utama. Saluran masuk utama mempunyai tempat yang bagus untuk menambahkan pengecas 5v.

Saya menambah kabel (arus utama) ke blok terminal di pintu masuk mesin dan menyolder / memanaskannya ke pin utama pengecas 5v. Model khusus saya bukanlah jenis port USB tetapi model yang mempunyai plumbum terpasang secara kekal. Anda mungkin tidak mempunyai cukup ruang untuk port usb jenis satu untuk dapat menggunakan kabel USB yang sebenarnya tetapi jika anda membuka pengecas, anda boleh mengeluarkan port USB dan mengganti dengan wayar standard ke titik 5v dan Gnd.

Anda boleh mengganti bekalan kuasa 5v yang lain jika anda suka. 500ma mesti banyak.

Terdapat banyak ruang untuk modul geganti di dekat penggiling. Kita mesti memasang dua relay untuk beroperasi selari dengan suis kuasa utama. Saya hanya memotong wayar yang ada, dilucutkan, dilekatkan, dimasukkan wayar tambahan dan disolder kembali bersama (jangan lupa sinki panas). Terdapat cukup kekurangan wayar untuk melakukan ini.

Modul relay dipasang di tempatnya dengan pita dua sisi berkualiti baik. Dengan wayar yang disambungkan dan hanya dengan ruang yang terhad untuk bergerak, walaupun pita itu tidak dapat dicengkam, modul tidak akan terlalu jauh dan tidak boleh bersentuhan dengan objek logam.

Saya juga menyokong port diagnostik pada mesin saya untuk menentukan lokasi sambungan dalaman supaya saya dapat mencapai integrasi yang tersembunyi sepenuhnya. Hanya wayar tx, rx dan Gnd yang digunakan.

Sekiranya anda mempunyai mesin yang lebih komersial yang menyokong voltan siap sedia dan / atau anda tidak mahu membatalkan jaminan pada mesin anda, anda boleh menyambung terus ke port diagnostik tetapi mungkin tidak dapat menghidupkan mesin menggunakan peranti ini.

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

NC Tx G Rx NC 5v NC

Pin yang sesuai di papan utama: Merah = Gnd Orange = Rx Hitam = Tx

Maklumat lebih lanjut boleh didapati di pinout di sini:

Langkah 6: Pendawaian Sisi Logik

Pendawaian Sisi Logik
Pendawaian Sisi Logik
Pendawaian Sisi Logik
Pendawaian Sisi Logik
Pendawaian Sisi Logik
Pendawaian Sisi Logik

Kaji rajah - Ia kelihatan terlalu rumit tetapi sebenarnya tidak.

Saya memasang penukar aras ke belakang pengatur voltan (depinned) dengan pita dua sisi. Saya kemudian menggunakan beberapa kaki komponen untuk menyolder pin kuasa dan ground di kedua-dua sisi penukar aras ke pin modul kuasa yang sesuai. Seluruh modul ini kemudian berfungsi seperti 'jalan masuk' untuk semua logik dan bekalan kuasa untuk ESP-01.

Saya menggunakan dua penukar tengah untuk data bersiri dan dua luaran untuk isyarat pemanduan geganti tetapi tidak menjadi masalah yang anda gunakan.

Sebenarnya tidak diperlukan dengan modul relay ini untuk menjalankan logik 5v kerana mereka aktif RENDAH tetapi ia berfungsi dengan baik jadi saya tetap melakukannya.

Saya menggunakan header wanita 4x2 untuk menyambung ke modul ESP. Ini membolehkan memuat naik kod atau penggantian modul dengan mudah.

Tidak ditunjukkan dalam rajah adalah input 5V - Saya memasang kabel tambang terus ke modul geganti (lihat gambar kedua). Kawat hitam di kiri bawah gambar adalah data bersiri ke papan utama. Saya menggunakan bahagian kabel sambungan fon kepala 3.5mm terlindung hanya untuk membantu mengurangkan kemungkinan gangguan pada baris data.

Kod 12f menggunakan SoftwareSerial dan bukannya siri perkakasan - Ini membolehkan modul melaporkan status untuk debug kembali melalui siri biasa. Sambungan melalui pin 4 dan 5 sebaliknya. Saya mengadaptasi header yang sama untuk menjadikan ESP12F sebagai plug in swap untuk ESP-01, hanya menukar pin bersiri tersebut

Langkah 7: Memprogram Modul

Memprogram Modul
Memprogram Modul

Kod disusun melawan Arduino 1.8.1 dengan addon papan ESP8266 dan PubSubClient 2.6.0 (yang merupakan Perpustakaan MQTT)

Ubah kod mengikut keperluan anda dan muat naik kod ke modul ESP-01 dan sambungkan ke mesin. Berhati-hati dengan orientasi pin!

Konfigurasi

Pilihan 1)

Hanya pada kod asas dalam bentuk zip. Semasa modul ESP mula-mula melakukan boot, ia masuk ke mod AP dan menetapkan IP ke 192.168.4.1. Anda kemudian boleh menyambung ke modul dan menukar IP dan menyambung ke pusat akses anda sendiri. Anda juga perlu menetapkan IP untuk mesin anda dalam julat tersebut kerana tidak ada DHCP pada modul.

AP SSID lalai adalah 'ESPSwitch' dan kata laluan adalah '12345678'

Tetap dalam mod AP selama 2 minit secara lalai. Anda boleh mengubah tetapan ini dalam 'global.h' - Ia disebut 'adminTimeout' dan dalam milisaat. Saya mengesyorkan menukarnya kepada sesuatu yang rendah setelah anda mempunyai konfigurasi yang sah di EEPROM kerana ia akan menyebabkan kelewatan yang tidak perlu dalam boot peranti.

Pilihan 2)

Ini adalah mod lalai untuk kod yang lebih baru yang menyokong koma 2 arah, pilihan 1 tidak tersedia. Anda juga boleh mengubah tetapan SSID / Kata Laluan lalai dalam fail ino utama (cari '// DEFAULT CONFIG') sehingga akan dimuat tetapan tersebut ke dalam EEPROM pada boot pertama dan menukar kelewatan mod admin kepada sesuatu yang rendah di 'global.h'. Ini mengelakkan dari berlakunya gangguan semasa menyambung ke AP sementara.

Peranti akan menetapkan id MQTT (dan jalur langganan) secara automatik ke 4 digit terakhir nombor siri modul. Laluan secara lalai adalah ha / mod // #, ubah sesuai keinginan anda tetapi baca komen dalam kod untuk memastikan susunan yang sesuai mempunyai panjang yang betul.

Saya melakukan ini kerana ini bermaksud saya tidak perlu menghasilkan ID unik untuk setiap modul di rangkaian saya.

ID peranti dapat dilihat dan pelayan MQTT dapat diatur melalui halaman pelayan MQTT di pelayan web dalaman

Langkah 8: Membuatnya Menjadi Perkara …

Perintah MQTT adalah

ha / mod / xxxx / 0 atau 1 = Togol kuasa

Sebarang rentetan lain akan dianggap sebagai perintah dan dihantar melalui port bersiri. Status dilaporkan kepada / ha / kopi dalam HEX

Dengan OpenHAB

coffeemachine.items

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

Peta Laman

Item kumpulan = "Mesin Kopi" {Switch item = Coffee_Machine_Power label = "Power" mappings = [1 = "Toggle"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 09" = "Small"] Tukar item = Coffee_Machine_Cmd label = "" mappings = ["FA: 0A" = "Large"] Switch item = Coffee_Machine_Cmd label = "" mappings = ["FA: 04" = "Bilas"] Item teks = Coffee_Status label = "Status [% s] "}

voicecontrol.rules

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

peraturan "Peraturan arahan suara"

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

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

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

Peraturan (untuk menafsirkan tindak balas HEX menjadi nilai 'nyata'):

peraturan "Status Mesin Kopi" apabila Item Coffee_Machine_Status menerima kemas kini maka var String Respons = Coffee_Machine_Status.state.toString () if (Respons.indexOf ("ic:")> -1) {var String hexString = Respons.substring (3, 5)

var int num = (Integer.parseInt (hexString, 16));

var String binaryString = String.format ("% 8s", Integer.toBinaryString (num)). ganti ('', '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)

jika (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" && rinseBit == "0") {postUpdate (Coffee_Status, "Sedia")}

}

jika (respons == "Mati") {postUpdate (Coffee_Status, "Off")} berakhir

Langkah 9: Penambahbaikan / Todo

Permudahkan penyediaan awal penyambungan ke wifi - Selesai. Meninggalkan idea 'mod admin' kerana ia menjengkelkan. Sekarang masukkan SSID dan kata laluan dalam kod. Menyimpan ke EEPROM jika anda mengemas kini / menukar melalui antara muka web.

Kod yang lebih baru juga menyokong kemas kini OTA tetapi anda perlu meningkatkan EEPROM pada modul ESP-01 agar ini berfungsi atau mengulas item OTA yang sesuai

Tambahkan kod untuk memproses jawapan dari mesin dan baca status seperti tiada dulang, tempat kosong dan tangki pengisian - Selesai. Saya telah menambah kod untuk membaca kembali status dan menerbitkan ke kopi / kopi. Ini hanya tanggapan kasar dan saya masih berusaha untuk menafsirkannya tetapi setakat ini saya masih belum mempunyai Tray dan Tank kosong. Ia membuat tinjauan mesin setiap 9 saat ketika menyala dan menerbitkan respons terhadap MQTT

Tindak balas adalah dalam HEX tetapi bit individu menunjukkan sensor

Tambahkan kod ke laman web untuk kawalan langsung melalui Perintah HTTP GET.

Peraduan Internet of Things 2017
Peraduan Internet of Things 2017
Peraduan Internet of Things 2017
Peraduan Internet of Things 2017

Hadiah Pertama dalam Peraduan Internet of Things 2017

Disyorkan: