Kucing Pavlov: Timer Makan IoT untuk Melatih Kucing Anda
Komponen dan Perlengkapan
Arduino MKR IoT Bundle – 1 unit
Aplikasi dan Layanan Online
Telegram
Tentang Proyek Ini
Catatan: Tutorial ini mungkin sudah ketinggalan zaman, silakan pergi di sini untuk versi yang lebih terkini.
Jika Anda pernah mencoba melatih kucing, Anda tahu betapa sulitnya. Kucing adalah tuan rumah mereka sendiri, tetapi sekarang Anda memiliki kesempatan untuk membiarkan kucing melakukan permintaan Anda menggunakan perangkat IoT ini.
Selamat Datang di Percobaan Kucing Pavlov!
Dalam proyek ini, Anda akan mempelajari cara mengajari kucing Anda kapan saatnya (dan bukan saatnya) makan malam hanya menggunakan komponen dalam MKR IoT Bundle dan beberapa kardus.
Dan kita semua tahu bahwa kucing sudah suka kotak kardus!
Setiap kali kucing mendengar melodi tertentu, kucing menerima makanan. Sensor cahaya mendeteksi kehadiran kucing. Melodi lain tidak melakukan apa-apa. Lihat bagaimana ini akan bekerja?
Anda akan dapat memantau kemajuan kucing Anda dari waktu ke waktu, dan mengatur laju pengeluaran makanan dari ponsel Anda. Setelah Anda mencapai statistik yang memuaskan, saatnya untuk mengubah fungsi sensor menjadi wearable. Kucing Anda dari saat itu harus mengikuti Anda jika Anda membuat suara bip itu.
Penafian: Tidak ada kucing yang terluka dalam pengembangan percobaan ini. Juga, tidak ada jaminan bahwa kucing akan makan makanan, tapi Anda paham kan, kan?
Singkatnya
Anda akan dapat membuat pemisah makanan Anda sendiri dengan mengikuti instruksi langkah demi langkah yang sederhana ini. Pemisahnya pada dasarnya hanya beberapa kardus dan servo motor dengan sedikit ajaib Arduino.
Menggunakan layanan pesan bernama Telegram, Anda dapat mengatur jumlah makanan yang akan dikeluarkan dan memicu melodi yang diputar dengan buzzer.
Sensor cahaya digunakan untuk mendeteksi apakah kucing bereaksi terhadap melodi dan sampai ke makanan.
Pro Tip: Anda dapat meng-host halaman web pada MKR1000 dan menampilkan data yang dikumpulkan dalam tabel yang praktis.
Komponen
Servo motor
Phototransistor
Resistor 220 ohm
Buzzer
Tujuan Pembelajaran
Dalam percobaan ini Anda akan mempelajari cara:
Mengelola Bot Telegram dengan keyboard kustom
Menyiapkan dan mengelola fungsionalitas web server dari MKR1000 itu sendiri. #ProTip
Pro Tips berguna tetapi tidak secara ketat langkah-langkah yang diperlukan yang menambahkan lapisan kompleksitas pada proyek.
Ingin Tahu Lebih Banyak?
Tutorial ini adalah bagian dari serangkaian percobaan yang mempersiapkan Anda dengan MKR1000 dan IoT. Semua percobaan dapat dibuat menggunakan komponen yang terkandung dalam MKR IoT Bundle.
I Love You Pillow
Puzzle Box
Pavlov's Cat
The Nerd
Plant Communicator
Telegram dan Arduino
Telegram adalah aplikasi pesan populer untuk seluler dan desktop. Selain membiarkan kita obrolan dengan teman-teman itu juga memungkinkan kita untuk membuat chat-bot yang praktis dan kuat!
Library TelegramBot untuk Arduino memberikan cara mudah untuk mengimplementasikan logika di balik chat-bot.
Untuk mempelajari cara membuat Bot dan mengelola fungsionalitas dasar lihat tutorial I Love You Pillow.
Buat Keyboard Kustom Anda
Telegram memungkinkan kita untuk membuat keyboard kustom untuk balasan cepat. Itu berarti ketika Anda berbicara dengan bot sekumpulan tombol tertentu akan ditampilkan sebagai ganti keyboard default. Anda dapat dengan mudah menyesuaikan tombol tersebut dan meningkatkan pengalaman pengguna perangkat Anda.
Keyboard kustom kami terlihat seperti ini:
Kami akan menggunakan baris pertama tombol untuk memutar melodi dan mengeluarkan makanan, sementara baris kedua tombol akan digunakan untuk mengatur kecepatan servo motor dan oleh karena itu jumlah makanan yang akan dikeluarkan.
Untuk membuat keyboard kustom kita perlu mendeklarasikannya terlebih dahulu:
Sayangnya cara bot mengirim emoji tidak sama dengan cara menerima mereka. Menggunakan contoh EchoBot adalah cara mudah untuk melihat bagaimana bot menerima emoji.
Misalnya emoji yang akan kita gunakan diterima seperti ini:
Untuk mendeteksi kehadiran kucing kita akan menggunakan phototransistor, yang dapat mengukur intensitas cahaya dan oleh karena itu apakah seseorang telah melewati dekatnya.
Perhatikan bahwa kami menggunakan resistor 220 ohm.
Untuk membaca nilai dari sensor kita hanya membutuhkan analogRead(A6).
Karena kita tertarik untuk mendeteksi kehadiran kucing hanya setelah melodi, dan hanya untuk waktu tertentu kita dapat menggunakan logika berikut:
unsigned long timer; bool startDetecting = true; int threshold=200; // nilai arbitrari void setup(){ timer=millis() Serial.begin(9600); } void loop(){ if (startDetecting) { int value = analogRead(A6); if (value < threshold) { Serial.println("cat detected!"); startDetecting = false; } else if (millis() - timer > 120000) { Serial.println("no cat detected in the past two minutes"); startDetecting = false; } } }
Perhatikan bahwa kami menggunakan fungsi millis() untuk mengatur timer. Millis() memberi kita waktu dalam milidetik sejak papan nyala. Kita dapat menggunakannya untuk mengatur timer dan memicu peristiwa setelah waktu tertentu.
Kami juga menggunakan ambang untuk menentukan apakah kucing terdeteksi. Ambang tersebut arbitrari, Anda dapat mengaturnya sesuai kondisi cahaya Anda.
Putar Lagu
Untuk memutar lagu kita akan menggunakan buzzer dan fungsi tone() .
Kita akan menggunakan versi yang sedikit dimodifikasi dari contoh standar toneMelody. Anda dapat menemukannya dalam menu dropdown:
examples > digital > toneMelody.
Tambahkan Servo Motor
Servo digunakan untuk membuka kotak dan mengirimkan makanan.
Perhatikan bahwa kita menggunakan variabel int PortionAmount = 1; untuk mengatur jumlah waktu servo harus tetap diputar 90 derajat. Kita akan dapat mengubah nilainya melalui Telegram.
Pasang servo ke pin 7 dan unggah skets ini untuk melihatnya bekerja.
Salah satu fungsionalitas paling kuat dari MKR1000 adalah Access Point Mode.
Itu memungkinkan kita untuk meng-host halaman web pada MKR1000 yang dapat kita akses dengan menggunakan alamat IP papan dan terhubung ke jaringan yang sama.
Kita akan menggunakan alat ini untuk mencetak data yang dikumpulkan oleh pemisah makanan.
Langkah ini memerlukan pengetahuan dasar HTML dan CSS (atau banyak kepercayaan pada skets contoh. Anda dapat memeriksa contoh web server dasar di:
> example > WiFi101 > AP_SimpleWebServer
Kita akan memicu mode access point dengan mengirimkan kata tertentu ke Bot Telegram kami, yang akan membalas dengan tautan untuk mencapai halaman web. Lalu klien telegram akan terputus dan web-server dimulai.
else if(m.text == "Server"){ IPAddress ip = WiFi.localIP(); web_server_mode=true; String message = "To see the webpage go to https://"+IpToString(ip); bot.sendMessage(m.chat_id, message , keyboard_one); telegram_client.stop(); delay(1000); server.begin(); // start the web server on port 80 }
Halaman web memiliki sebuah tombol yang akan mematikan mode web server dan kembali sebagai klien telegram:
if (currentLine.endsWith("GET /BACKBUTTON")) { // if button pressed web_server_mode=false; client.stop(); delay(1000); bot.begin(); bot.sendMessage(OldChatId, "Back online !", keyboard_one); }
Setiap kali deteksi kucing selesai sel sel baru dari tabel ditambahkan dengan data yang dikumpulkan: apakah makanan dikirimkan, apakah kucing muncul dalam dua menit dan berapa waktu yang dibutuhkan untuk mencapai pemisah.
AddTableCell(food/noFood, Yes/No, TimeValue);
Lalu String yang berisi semua sel tabel diperbarui dan diintegrasikan dalam sisa html utama.
table_cells+=cell; // add new cell html = html_1 + table_cells + html_2; // add cells to main html
Periksa contoh Pro akhir untuk melihat cara mengintegrasikan semua fungsionalitas baru ini!
Tip: jika Anda ingin data Anda bertahan setelah reset papan perhatikan library Flash Storage atau periksa proyek Nerd!