Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Kucing Pavlovs

Komponen dan persediaan

Arduino MKR IoT Bundle
× 1

Aplikasi dan layanan online

Telegram

Tentang proyek ini

Catatan:Tutorial ini mungkin sudah usang, silakan buka di sini untuk versi yang lebih baru.

Jika Anda pernah mencoba melatih kucing, Anda tahu betapa sulitnya itu. Kucing adalah tuannya sendiri, tetapi sekarang Anda memiliki kesempatan untuk membiarkan kucing melakukan permintaan Anda menggunakan perangkat berkemampuan IoT ini.

Selamat datang di Eksperimen Kucing Pavlov!

Dalam proyek ini, Anda akan belajar cara mengajari kucing Anda saat (dan tidak) waktu makan malam hanya dengan menggunakan komponen dalam Bundel MKR IoT dan beberapa karton.

Dan kita semua tahu bahwa kucing sudah menyukai kotak kardus!

Setiap kali kucing mendengar melodi tertentu, ia menerima makanan. Sensor cahaya mendeteksi keberadaan kucing. Melodi lain tidak melakukan apa-apa. Lihat bagaimana ini akan bekerja?

Anda akan dapat memantau perkembangan kucing Anda dari waktu ke waktu, dan mengatur tingkat pengeluaran makanan dari ponsel Anda. Setelah Anda mencapai statistik yang memuaskan, sekarang saatnya untuk menggunakan kembali sensor menjadi perangkat yang dapat dikenakan. Sejak saat itu, kucing Anda harus mengikuti Anda jika Anda mengeluarkan bunyi bip itu.

Penafian:Tidak ada kucing yang terluka dalam pengembangan eksperimen ini. Juga, tidak ada jaminan bahwa kucing akan memakan makanannya, tetapi Anda mendapatkan gambarannya, bukan?

Singkatnya

Anda akan dapat membuat dispenser makanan Anda sendiri dengan mengikuti petunjuk langkah demi langkah sederhana ini. Dispenser pada dasarnya hanya beberapa kardus dan motor servo dengan beberapa keajaiban Arduino tambahan.

Menggunakan layanan perpesanan yang disebut Telegram, Anda dapat mengatur jumlah makanan yang akan dibagikan dan memicu melodi yang dimainkan dengan bel.

Sensor cahaya digunakan untuk mendeteksi jika kucing bereaksi terhadap melodi dan mendapatkan makanan.

Kiat Pro: Anda dapat meng-host halaman web di MKR1000 dan menampilkan data yang dikumpulkan dalam tabel praktis.

Komponen

  • Motor servo
  • Fototransistor
  • resistor 220 ohm
  • Buzzer

Tujuan Pembelajaran

Dalam eksperimen ini, Anda akan mempelajari cara:

  • Kelola Bot Telegram dengan keyboard khusus
  • Siapkan dan kelola fungsionalitas server web dari MKR1000 itu sendiri. #Kiat Pro

Kiat Pro berguna tetapi tidak sepenuhnya merupakan langkah yang diperlukan yang menambah lapisan kompleksitas pada proyek.

Ingin Tahu Lebih Banyak?

Tutorial ini adalah bagian dari serangkaian eksperimen yang membiasakan Anda dengan MKR1000 dan IoT. Semua eksperimen dapat dibuat menggunakan komponen yang terdapat dalam Bundel MKR IoT.

  • Aku Mencintaimu Bantal
  • Kotak Teka-teki
  • Kucing Pavlov
  • Si kutu buku
  • Komunikasi Tumbuhan

Telegram dan Arduino

Telegram adalah aplikasi perpesanan populer untuk seluler dan desktop. Selain memungkinkan kami mengobrol dengan teman, kami juga dapat membuat bot obrolan yang berguna dan kuat!

Library TelegramBot untuk Arduino memberi kita cara mudah untuk menerapkan logika di balik chat-bot.

Untuk mempelajari cara membuat Bot dan mengelola fungsi dasar, lihat tutorial I Love You Pillow.

Buat Keyboard Kustom Anda

Telegram memungkinkan kami membuat papan ketik khusus untuk balasan cepat. Ini berarti bahwa ketika Anda berbicara dengan bot, pilihan tombol tertentu akan ditampilkan, bukan keyboard default. Anda dapat dengan mudah menyesuaikan tombol tersebut dan meningkatkan pengalaman pengguna perangkat Anda.

Keyboard kustom kami terlihat seperti ini:

Baris pertama tombol akan digunakan untuk memainkan melodi dan mengeluarkan makanan, sedangkan tombol baris kedua akan digunakan untuk mengatur kecepatan motor servo dan jumlah makanan yang akan dikeluarkan.

Untuk membuat keyboard khusus, pertama-tama kita harus mendeklarasikannya:

TelegramKeyboard keyboard_one;  

Kemudian tentukan barisnya:

 const char* row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={Satu Porsi, Dua Porsi, Tiga Porsi};  

Dan terakhir, tetapkan baris ke keyboard:

keyboard_one.addRow(row_one, 2); // menetapkan baris ke satu atau lebih keyboard keyboard_one.addRow(row_two, 3); // argumen kedua adalah panjang baris  

Ingat bahwa emoji perlu dikirim menggunakan UNICODE. Misalnya untuk mengirim emoji hati kita akan menggunakan:\U00002764

Anda dapat melihat daftar lengkap kode emoji unicode di sini. Ini berarti bahwa untuk mendefinisikan tombol kita, kita akan menggunakan ini:

 const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Catatan + Cookie const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // Catatan NO Cookie const char* OnePortion ="\U0001F408"; // CAT const char* Dua Porsi ="\U0001F408 \U0001F408"; // 2 CATS const char* Tiga Porsi ="\U0001F408 \U0001F408 \U0001F408"; // 3 KUCING  

Ini sketsa lengkapnya:

#include  #include  #include  const char* ssid =SECRET_SSID; // SSID jaringan Anda (nama) const char* kata sandi =SECRET_PSWD; // kata sandi jaringan Anda const char BotToken[] =SECRET_BOT_TOKEN; Klien WiFiSSLClien; Bot TelegramBot (BotToken, klien); TelegramKeyboard keyboard_one; String OldChatId =""; void setup() { Serial.begin(115200); penundaan(3000); // mencoba menyambung ke jaringan Wifi:Serial.print("Menghubungkan Wifi:"); Serial.println(ssid); while (WiFi.begin(ssid, password) !=WL_CONNECTED) { Serial.print("."); penundaan (500); } Serial.println(""); Serial.println("WiFi terhubung"); // pilih emoji yang kamu suka menggunakan UNICODE // ini dia daftarnya https://unicode.org/emoji/charts/full-emoji-list.html const char* MusicAndFood ="\U0001F3B6 + \U0001F36A"; // Catatan + Cookie const char* MusicNoFood ="\U0001F3B6 NO \U0001F36A"; // Catatan NO Cookie const char* OnePortion ="\U0001F408"; // CAT const char* Dua Porsi ="\U0001F408 \U0001F408"; // 2 CATS const char* Tiga Porsi ="\U0001F408 \U0001F408 \U0001F408"; // 3 CATS // tentukan karakter const baris Anda* row_one[] ={MusicAndFood, MusicNoFood}; const char* row_two[] ={Satu Porsi, Dua Porsi, Tiga Porsi}; keyboard_one.addRow(row_one, 2); // menetapkan baris ke satu atau lebih keyboard keyboard_one.addRow(row_two, 3); // argumen kedua adalah panjang baris bot.begin(); } void loop() { pesan m =bot.getUpdates(); // Membaca pesan baru if ( m.chat_id !=0 ) { // Memeriksa apakah ada pembaruan OldChatId =m.chat_id; Serial.println(m.teks); bot.sendMessage(m.chat_id, "Halo !", keyboard_one); } penundaan(1000); }  

Sayangnya cara bot mengirim emoji tidak sama dengan yang digunakan untuk menerimanya. Menggunakan contoh EchoBot adalah cara mudah untuk melihat bagaimana bot menerima emoji.

Misalnya emoji yang akan kita gunakan diterima seperti ini:

ud83cudfb6 // Melodi ud83cudf6a // Cookieud83dudc08 // Cat 

Deteksi Kucing!

Untuk mendeteksi keberadaan kucing, kami akan menggunakan fototransistor, yang dapat mengukur intensitas cahaya dan jika seseorang lewat di dekatnya.

Perhatikan bahwa kami menggunakan resistor 220 ohm.

Untuk membaca nilai dari sensor, kita hanya memerlukan analogRead(A6).

Karena kami tertarik untuk mendeteksi keberadaan kucing hanya setelah melodi, dan hanya untuk waktu tertentu kami dapat menggunakan logika berikut:

pengatur waktu lama yang tidak ditandatangani;bool startDetecting =true;int threshold=200; // nilai arbitrervoid setup(){timer=millis()Serial.begin(9600);} void loop(){if (startDetecting) { nilai int =analogRead(A6); if (nilai  120000) { Serial.println("tidak ada kucing yang terdeteksi dalam dua menit terakhir"); startDetecting =salah; } } } 

Perhatikan bahwa kami menggunakan milis() berfungsi untuk menyetel timer . Millis() memberi kita waktu dalam milidetik sejak papan aktif dan berjalan. Kita dapat menggunakannya untuk menyetel timer dan memicu peristiwa setelah jangka waktu tertentu.

Kami juga menggunakan ambang untuk menentukan apakah kucing itu terdeteksi. Ambang batas itu sewenang-wenang, Anda dapat mengaturnya sesuai dengan kondisi cahaya Anda.

Mainkan Lagunya

Untuk memainkan lagu kita akan menggunakan buzzer dan tone() fungsi.

Kami akan menggunakan versi yang sedikit dimodifikasi dari contoh standar toneMelody. Anda dapat menemukannya di menu tarik-turun:

contoh> digital> toneMelody. 

Tambahkan Motor Servo

Servo digunakan untuk membuka kotak dan mengantarkan makanan.

Perhatikan bahwa kita menggunakan variabel int PortionAmount =1; untuk mengatur jumlah waktu servo harus tetap berputar 90 derajat. Kami akan dapat mengubah nilainya melalui Telegram.

Pasang servo ke pin 7 dan unggah sketsa ini agar berfungsi.

#include  Servo myservo; // buat objek servo untuk mengontrol servo int pos =0; // variabel untuk menyimpan posisi servo int PortionAmount =1; // Atur jumlah makanan default menjadi 1 porsi void setup() { myservo.attach(7); // menempelkan servo pada pin 6 ke objek servo } void loop() { moveServo(); penundaan(2000); } void moveServo() { Serial.println("moving servo"); for (pos =0; pos <=90; pos +=1) { // berubah dari 0 derajat ke 90 derajat myservo.write(pos); // memberitahu servo untuk pergi ke posisi dalam variabel 'pos' delay(15); // menunggu 15 ms sampai servo mencapai posisi } delay(PortionAmount * 300); // biarkan kotak terbuka untuk interval waktu berdasarkan jumlah makanan yang ingin Anda kirim (pos =90; pos>=0; pos -=1) { // berubah dari 90 derajat ke 0 derajat myservo.write( pos); / memberitahu servo untuk pergi ke posisi dalam variabel 'pos' delay(15); // menunggu 15 ms sampai servo mencapai posisi } }  

#ProTip:Tambahkan Server Web

Salah satu fungsi paling kuat dari MKR1000 adalah Mode Titik Akses.

Ini memungkinkan kami untuk meng-host halaman web di MKR1000 yang dapat kami akses dengan menggunakan alamat IP papan dan terhubung ke jaringan yang sama .

Kami akan menggunakan alat ini untuk mencetak data yang dikumpulkan oleh dispenser makanan.

Langkah ini membutuhkan pengetahuan dasar tentang HTML dan CSS (atau banyak yang percaya pada sketsa contoh. Anda dapat memeriksa contoh server web dasar di:

> contoh> WiFi101> AP_SimpleWebServer 

Kami akan memicu mode titik akses dengan mengirimkan kata tertentu ke Bot Telegram kami, yang akan membalas dengan tautan untuk mencapai halaman web. Kemudian klien telegram akan terputus dan server web dimulai.

else if(m.text =="Server"){ IPaddress ip =WiFi.localIP(); web_server_mode=benar; String message ="Untuk melihat halaman web, buka http://"+IpToString(ip); bot.sendMessage(m.chat_id, pesan , keyboard_one); telegram_client.stop(); penundaan (1000); server.mulai(); // memulai server web pada port 80 }  

Laman web menyertakan tombol yang akan mematikan mode server web dan kembali sebagai klien telegram:

if (currentLine.endsWith("GET /BACKBUTTON")) { // jika tombol ditekan web_server_mode=false; klien.berhenti(); penundaan (1000); bot.mulai(); bot.sendMessage(OldChatId, "Kembali online !", keyboard_one); }  

Setiap kali deteksi kucing berakhir, sel baru dari tabel ditambahkan dengan data yang dikumpulkan:jika makanan dikirim, jika kucing muncul dalam dua menit dan berapa lama untuk mencapai dispenser.

AddTableCell(makanan/tidakMakanan, Ya/Tidak, Nilai Waktu);  

Kemudian String yang berisi semua sel tabel diperbarui dan diintegrasikan ke dalam html utama lainnya.

 table_cells+=sel; // tambahkan sel baru html =html_1 + table_cells + html_2; // tambahkan sel ke html utama 

Lihat contoh Pro terakhir untuk melihat cara mengintegrasikan semua fungsi baru ini!

Kiat: jika Anda ingin data Anda bertahan dari reset papan, lihat perpustakaan Penyimpanan Flash atau periksa proyek Nerd!

Kode

Sketsa lengkap
#ProTips menyelesaikan sketsa

Suku cadang dan penutup khusus

karton 2 mm pavlovcase_ShVm1OJRIF.dxf

Skema


Proses manufaktur

  1. Sayur Beku
  2. Makan Malam TV
  3. CAT Scanner
  4. Kotoran Kucing
  5. Makanan Kering Beku
  6. Makanan Hewan
  7. Panduan Anda untuk Shop.Cat.Com
  8. Memulai My.Cat.com
  9. Mesin Penjual Makanan Otomatis – Keserbagunaan Produk
  10. Makanan Semakin Cepat