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

Pewaktu Cuci Tangan Musik Tanpa Sentuhan

Komponen dan persediaan

Arduino UNO
× 1
Enklosur ProtoStax untuk Arduino
× 1
Enklosur ProtoStax untuk Breadboard/Papan Kustom
× 1
Perangkat Penumpukan Horizontal ProtoStax
× 1
Sensor Ultrasonik - HC-SR04 (Generik)
× 1
Kit ProtoStax untuk Sensor Ultrasonik HC-SR04
× 1
Adafruit 0.56" 4-Digit 7-Segment Display w/I2C Ransel - Biru
× 1
Adafruit Piezo Buzzer - PS1240
× 1
Ukuran Setengah Papan Tempat Memotong Roti Tanpa Solder
× 1

Aplikasi dan layanan online

Arduino IDE

Tentang proyek ini

Sementara mencuci tangan selalu menjadi senjata penting dalam pencegahan penyakit dan kesehatan secara keseluruhan, itu telah mengambil keunggulan baru sebagai tindakan pencegahan untuk mengekang penyebaran pandemi COVID-19.

Pedoman CDC untuk mencuci tangan yang baik menyatakan bahwa seseorang harus menggosok tangan secara ideal selama 20 detik. https://www.cdc.gov/handwashing/when-how-handwashing.html

** Barang tambahan ** Ini dia beberapa ilmu dibalik cuci tangan jika kamu tertarik! - https://www.cdc.gov/handwashing/show-me-the-science-handwashing.html

Dalam reduks timer cuci tangan ini, timer cuci tangan musik kami diaktifkan dengan melambaikan tangan di depan sensor ultrasonik, dan menampilkan hitungan mundur pada layar 7 segmen. Untuk membuatnya lebih menarik, ia juga memainkan pilihan jingle 20 detik yang berputar dari daftar jingle yang telah diprogram. Anda dapat menambahkan musik Anda sendiri dengan mudah dengan menyalin notasi lembaran musik apa pun yang Anda miliki!

Berikut adalah tampilan Musik Tanpa Sentuhan Pengatur Waktu Cuci Tangan beraksi, menunjukkan semua 4 jingle yang saya program di

  • Selamat Ulang Tahun
  • Do-Re-Mi (Suara Musik)
  • Kami Akan Mengguncangmu (Ratu)
  • Musik Tema Jeopardy

Wah, tanganku super-duper bersih pada akhirnya! 😊

** Barang tambahan ** Sekarang, kita semua tahu bahwa menyanyikan "Happy Birthday to You", dua kali, membutuhkan waktu sekitar 20 detik, dan itu telah menjadi standar de facto untuk waktu mencuci tangan, bahkan dinyanyikan oleh Perdana Menteri Kanada Justin Trudeau! Dr. Theresa Tam, Kepala Petugas Kesehatan Masyarakat Kanada, memiliki favoritnya sendiri seperti We Will We Will Wash You ! 😊Tonton wawancara menarik berikut ini oleh kontributor CBC Kids News, Arjun Ram.

Saya menampilkan kedua lagu di Pengatur Waktu Cuci Tangan Musik Tanpa Sentuh , ditambah beberapa lagi! 😊

Langkah 1 - Skema

Proyek ini menggunakan Arduino Uno, 7-Segment LED Backpack (I2C), Sensor Ultrasonik HC-SR04 dan Piezo Buzzer. Lihat skema di bawah ini.

Langkah 2 - Merencanakan dan Menyiapkan

Di luar skema dan pemrograman, saya juga ingin memikirkan "produk jadi" dan bagaimana membuatnya dapat digunakan - oleh karena itu memasukkannya ke dalam selungkup dan merencanakannya.

Saya menggunakan ProtoStax Enclosures - mereka dapat ditumpuk, dan dilengkapi dengan dukungan untuk Arduino, Raspberry Pi, dan Breadboard. Karena saya menggunakan Arduino dengan sirkuit Breadboard, saya memilih ProtoStax Enclosure untuk Arduino dan ProtoStax Enclosure untuk Breadboard/Custom Board. Saya juga ingin agar sensor Ultrasonik dapat diakses dari luar dan oleh karena itu dipasang pada enklosur - saya menggunakan ProtoStax Kit untuk Sensor Ultrasonik HC-SR04.

Saya mulai dengan menumpuk platform dasar Arduino dan Breadboard secara horizontal menggunakan konektor susun horizontal untuk memfasilitasi pembuatan prototipe:

Setelah saya memiliki platform prototyping saya, saya bisa mulai mengisi komponen sesuai skema. Saya memasang Sensor Ultrasonik HC-SR04 ke dinding samping dari ProtoStax Kit untuk Sensor Ultrasonik HC-SR04 agar dapat diakses setelah enklosur disatukan setelah prototipe selesai. Dinding samping dengan sensor masuk ke slot platform dasar seperti yang ditunjukkan:

Langkah 3 - Pemrograman dan Pengujian

Sekarang setelah saya memiliki platform prototyping yang berfungsi, saya dapat mengembangkan kode untuk itu. Saya akan mempelajari lebih lanjut fungsionalitas dan tata letak kode di bagian terpisah di bawah ini. Berikut adalah video pengujiannya. Sungguh gila bahwa iPhone 11 yang saya gunakan untuk merekam video benar-benar mengambil ping sonar yang berbeda dari sensor ultrasonik, yang dapat didengar dengan sangat jelas di video di bawah ini (meskipun denyut ultrasonik hampir tidak dapat direkam sebaliknya dengan klik yang tidak berbahaya- klik-klik) ! 😊

Setelah semuanya dipastikan berfungsi, saya melanjutkan dan menambahkan dinding samping serta konektor dan bagian atas yang tersisa untuk menyelesaikan enklosur saya:

Video di atas menunjukkan "produk" terakhir yang digunakan! 😊

Memahami Kode

Inisialisasi komponen:

Kami menggunakan kelas Adafruit_7segment dari perpustakaan Ransel LED untuk menginisialisasi dan berkomunikasi dengan tampilan 7-segmen kami.

Adafruit_7segment matrix =Adafruit_7segment(); 

Kami juga menginisialisasi pin trigonometri dan gema pada HC-SR04 sebagai output dan input masing-masing

 pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); matrix.begin(0x70); 

Di loop utama, inilah yang dilakukan pada level tinggi:

1) Periksa pembacaan jarak sensor ultrasonik untuk melihat apakah Timer Cuci Tangan telah dipicu.

2) Jika ya, catat waktu saat ini, inisialisasi penghitung waktu mundur (saya setel ke 20 selama 20 detik), dan juga pilih jingle musik berikutnya untuk dimainkan. Saya pertama kali menggunakan random() untuk memilih melodi acak, tetapi saya mengubahnya menjadi "round-robin" di atas susunan melodi (berputar kembali ke yang pertama), dan mengatur startMusic ke 1 (untuk mengatur hitung mundur dan pemutaran musik bergerak .

 if (jarak <10 &&!startMusic) { startMusic =1; // inisialisasiTimer1(); hitung mundur =20; saat iniWaktu =milis(); melodiNum =(melodiNum+1)%(NUM_MELODIES(melodi)); } 

Lihat Ma Tidak ada penundaan()!

Di sini kami melakukan dua hal secara bersamaan - kami ingin memperbarui jam hitung mundur secara berkala yang menunjukkan berapa detik tersisa untuk mencuci tangan. Kami juga ingin memproses jingle dan memainkannya tepat waktu dengan benar.

Kami tidak bisa gunakan delay() oleh karena itu.

Contoh tipikal memainkan musik menggunakan fungsi tone() dari perpustakaan Tone, dan menunggu penundaan yang sesuai sebelum beralih ke not berikutnya untuk dimainkan. Itu tidak akan berhasil, karena kami masih ingin memperbarui jam hitung mundur!

tone() adalah panggilan non-blocking. Ini menggunakan Timer2 untuk mengirim sinyal untuk jangka waktu yang ditentukan, yang berarti untuk sementara, kami bebas melakukan pemrosesan lainnya.

Kami menggunakan milis() dan variabel lokal untuk mengetahui berapa banyak waktu yang telah berlalu, alih-alih menggunakan delay(), dan dapat melanjutkan untuk melakukan pemeriksaan lain dan melakukan operasi lain sementara itu. Kami akan melihat kode yang tepat sedikit lebih jauh ke bawah.

Mentranskripsi Musik dengan Cara Mudah - Catatan Utuh, Catatan Seperempat, dll

Kami ingin memainkan melodi tertentu, dan juga ingin membuatnya mudah untuk mentranskripsikan lebih banyak melodi. Contoh musik Arduino biasanya menyimpan dua larik berbeda, satu untuk not, dan satu larik untuk durasi nada (dalam milidetik).

Untuk menyederhanakan banyak hal, saya telah membuat struct untuk mengaitkan catatan dan durasi yang diberikan. Dan alih-alih menggunakan durasi absolut, saya menggunakan durasi relatif yang telah saya buat #defines untuk

typedef struct Catatan { int frekuensi; durasi mengambang; } Catatan;#define NOTE_SELURUH 1#define NOTE_HALF 0.5f#define NOTE_QUARTER 0.25f#define NOTE_EIGHTH 0.125f#define NOTE_SIXTEENTH 0.0625f#define DOTTED(X) (X * 1.5f)  

Mari kita ambil contoh Selamat Ulang Tahun.

Ini dapat ditranskripsikan sebagai berikut, cukup banyak catatan untuk catatan. Jika Anda tidak dapat membaca lembaran musik, cari saja not yang sebenarnya untuk digunakan. Tetapi belajar membaca lembaran musik selalu merupakan keterampilan yang bagus untuk dimiliki, dan Anda tidak harus sangat ahli dalam hal itu - cukup dengan mengetahui apa nadanya akan memungkinkan Anda melakukan hal yang diperlukan untuk mentranspos musik ke Anda Arduino!

// Selamat Ulang TahunCatatan melodi[] ={ {NOTE_G6, DOTTED(NOTE_EIGHTH)}, {NOTE_G6, NOTE_SIXTEENTH}, {NOTE_A6, NOTE_QUARTER}, {NOTE_G6, NOTE_QUARTER}, {NOTE_C7, NOTE_QUARTER}, {NOTE_B6 , CATATAN_HALF}, {NOTE_G6, DOTTED(NOTE_EIGHTH)}, {NOTE_G6, NOTE_SIXTEENTH}, {NOTE_A6, NOTE_QUARTER}, {NOTE_G6, NOTE_QUARTER}, {NOTE_D7, NOTE_QUARTER}, {NOTE_C7, {NOTE_HALFH} }, {NOTE_G6, NOTE_SIXTEENTH}, {NOTE_E7, NOTE_QUARTER}, {NOTE_D7, NOTE_QUARTER}, {NOTE_C7, NOTE_QUARTER}, {NOTE_B6, NOTE_QUARTER}, {NOTE_A6, NOTE_HLF}, {NOTE_F7, {NOTE_F7, DOTTED_F7_ NOTE_SIXTEENTH}, {NOTE_E7, NOTE_QUARTER}, {NOTE_C7, NOTE_QUARTER}, {NOTE_D7, NOTE_QUARTER}, {NOTE_C7, NOTE_HALF}, }; 

Catatan (permainan kata-kata yang dimaksudkan!) bahwa saya tidak menggunakan durasi sebenarnya di sini, saya menentukan durasi relatif dari not sebagai not seperempat, not kedelapan, not keenam belas, dll. Saya bahkan memiliki makro DOTTED() untuk mewakili not bertitik (1,5 x durasi nada apa pun yang mendahuluinya).

Melodi itu sendiri terdiri dari larik ini, serta informasi tambahan tentang durasi yang harus diwakili oleh seluruh nada.

typedef struct Melody { Catatan *catatan; int numCatatan; int wholeNoteDurationMs; } Melodi; 

Karena array C tidak dapat diukur dengan menggunakan pointer ke array, saya menambahkan numNotes sebagai ukuran array Note. Ini dapat dengan mudah diinisialisasi menggunakan makro MELODY_LENGTH - jadi Anda tidak perlu khawatir tentang berapa banyak nada yang Anda buat di larik Note saat Anda menyalin lagu favorit Anda!

Saya kemudian mendefinisikan array Melody tersebut untuk digunakan dalam program saya.

Melodi melodi[] ={ {melodi, MELODY_LENGTH(melodi), 1250}, {melody3, MELODY_LENGTH(melodi3), 1000}, {melody4, MELODY_LENGTH(melodi4), 1000}}; 

Dalam pengulangan, saat memulai penghitung waktu mundur dan musik, saya menggunakan informasi nada di atas, durasi relatif, dan durasi sebenarnya dari seluruh nada, untuk mengetahui cara memainkan musik. Di sela-sela memutar musik, saya juga memeriksa dan memperbarui penghitung waktu mundur dan menampilkan nomor pada tampilan 7-segmen.

Karena saya membayangkan bahwa orang ingin menyelesaikan mendengarkan seluruh jingle, saya terus memainkan jingle sampai selesai, bahkan jika 20 detik sudah habis (hitungan Mundur akan berubah menjadi negatif sampai lagu berakhir). Setelah jingle selesai, jingle akan berhenti sampai dipicu lebih lanjut dengan melambaikan tangan Anda di depan sensor ultrasonik sekali lagi. Jika jingle terlalu pendek, maka jingle akan diputar ulang sekali lagi, hingga 20 detik berlalu DAN musik telah selesai diputar! Sederhana.

 if (startMusic) { // Pilih melodi yang akan dimainkan Melody mel =melodies[melodyNum]; Catatan *m =mel.catatan; int mSize =mel.numNotes; // speedUp adalah cara mudah untuk mempercepat pemutaran not. Cara terbaik adalah dengan // mengatur seluruhNoteDurationMs dengan tepat. int speedUp =1; tidakNada(TONE_PIN); // Mulai dengan awal yang bersih untuk (int thisNote =0; thisNote  

Seluruh kode dapat ditemukan di GitHub dan tautan ke repositori disertakan. Saya akan merekomendasikan mengambil kode dari sana, daripada menyalin dan menempelkan kode dari sini.

Mengambil Proyek Lebih Jauh

Setelah Anda merasa nyaman bermain-main dengan contoh kode dan memahami kodenya, selalu menyenangkan untuk mencoba memperluas pembelajaran Anda dengan melakukan lebih banyak.

Berikut adalah beberapa saran tentang bagaimana Anda dapat memajukan proyek ini:

1) Anda dapat menemukan lagu favorit Anda lalu menyalinnya menggunakan CATATAN dan CATATAN durasi makro seperti yang saya jelaskan di atas. Ingatlah untuk mengomentari satu atau lebih jingle lain yang sudah ditentukan, untuk menjaga penggunaan memori tetap rendah (kecuali jika Anda melanjutkan dan memindahkan array Note dan Melody ke PROGMEM dengan sukses seperti yang dijelaskan di bawah ini! 😊)

2) Melodi menempati ruang di SRAM dan dapat dengan cepat menghabiskan memori yang tersedia. Misalnya, saya menyalin 4 melodi (Selamat Ulang Tahun, Do-Re-Mi, We Will Rock You, dan Jeopardy!). Namun, ini mendorong penggunaan SRAM hingga 96%, tidak cukup untuk berfungsinya pustaka tampilan 7-segmen, dan tidak diperbarui dengan benar! Saya harus mengecualikan salah satu melodi dari array Melody agar semuanya berfungsi dengan baik.

Arduino Uno dilengkapi dengan 2k SRAM, tetapi 32k memori Flash (tempat program berada). Jika Anda dapat memindahkan beberapa variabel global ke memori Flash, Anda tidak hanya dapat mengosongkan SRAM untuk sisa program, tetapi Anda juga memiliki lebih banyak ruang untuk menyimpan lebih banyak lagu! Cobalah untuk memindahkan array Note dan Melody ke Flash dengan mendefinisikannya sebagai PROGMEM. [Catatan:ini adalah upaya lanjutan dan tidak sepele. Anda akan jadi mengurangi yang susunan dari struktur ke PROGEM dan lalu memiliki ke baca yang program ke akses yang data.]

Untuk menghargai perbedaannya, program ini (dengan 3 melodi) menghabiskan 31% penyimpanan program dan 76% memori dinamis pada Uno. Dengan variabel-variabel di atas yang didefinisikan dalam PROGMEM, ia menempati 32% dari ruang program (itu hanya sedikit peningkatan dalam penggunaan memori Flash dengan lebih banyak lagi yang tersedia) dan hanya 22% (turun dari 76%) dari memori dinamis! Itu berarti Anda dapat dengan mudah menambahkan banyak lagu untuk Pengatur Waktu Cuci Tangan Musik Tanpa Sentuh . ini setelah Anda memindahkan sesuatu ke PROGMEM! 😊

Dapatkah Anda memikirkan cara lain untuk memperpanjang proyek ini? Bagikan dengan kami di bawah ini! 😊

Selamat Membuat! 😊

Kode

Demo Timer Pencucian Tangan Musik ProtoStax Touchless
Demo Timer Pencuci Tangan Musik Tanpa Sentuh ProtoStaxhttps://github.com/protostax/ProtoStax_Touchless_Musical_Handwash_Timer

Skema

Ini menunjukkan skema untuk sirkuit yang digunakan dalam penghitung waktu mundur Touchless Musical Hand Wash

Proses manufaktur

  1. Arduino Spybot
  2. FlickMote
  3. TV Buatan Sendiri B-Gone
  4. Apa itu Watchdog Timer ?
  5. Jam Master
  6. Temukan Saya
  7. Arduino Power
  8. Tech-TicTacToe
  9. Arduino Quadruped
  10. Praktik Terbaik untuk Memeriksa Tempat Cuci Tangan