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

Arduino Kitchen Timer

Komponen dan persediaan

Arduino UNO
× 1
Adafruit LCD Standar - 16x2 Putih di Atas Biru
× 1
Sakelar Tombol Tekan SparkFun 12mm
× 4
Resistor 10k ohm
× 4
Resistor 221 ohm
Yah, 220 ohm...
× 2
Potensiometer Putaran Tunggal- 100k ohm
× 1
Buzzer
× 1
Breadboard (generik)
× 1
Kabel jumper (generik)
× 1

Tentang proyek ini

Pada mulanya Tuhan menciptakan langit dan bumi. Dan manusia. Dan manusia menciptakan pengatur waktu dapur digital, seperti ini.

Dan manusia berkata, Keren tapi sedikit suram. Ayo buat yang lebih baik!

Dan Tuhan berkata, saya mendengar panggilan Anda, jadilah Arduino:dan ada Arduino di seluruh bumi, dan itu bagus.

Dan manusia mengambil Arduino dan membuat pengatur waktu dapur yang lebih baik, seperti ini.

Dan Tuhan melihat pengatur waktu dapur yang baru dan berkata:Saya melihat pengatur waktu dapur baru Anda dan kelihatannya mengerikan , tapi sepertinya terlalu menyenangkan ! Dan itu bagus . :-)

Apa yang perlu Anda miliki

Sekarang setelah Anda tahu dari mana semua ini berasal, mari kita bahas lebih dalam.

Semua komponen yang saya gunakan berasal dari Arduino Starter Kit , termasuk papan tempat memotong roti kecil yang Anda lihat di foto dan di video. Jangan ragu untuk mengakomodasi proyek menjadi yang lebih besar , jika Anda mau.

Anda juga memerlukan sumber daya:sambil bermain-main, port USB dan kabel PC sudah cukup.

Apa yang perlu Anda lakukan

Pertama:kumpulkan semua komponen yang diperlukan dari Starter Kit atau nampan komponen pilihan Anda; jika Anda tidak memilikinya, jangan panik. Ada banyak di internet. Anda dapat menemukan daftar komponen di bawah ini.

Dan, yah, Anda juga memerlukan kodenya. Ada di kotaknya, di bawah lagi.

Cara kerjanya

Pada dasarnya, seperti perangkat sejenis lainnya, Anda dapat membeli uang di toko mana pun di dekat Anda. Tapi ini adalah milik Anda . Dan ini akan menunjukkan kepada Anda bagaimana gadget kecil itu benar-benar berfungsi.

Kata kuncinya di sini adalah:mode saat ini . Timer itu sendiri hanya dapat berjalan dalam satu dari empat mode pada satu waktu:

  • IDLE - pengatur waktu menunggu input Anda, menunjukkan jumlah waktu yang saat ini disetel; ini juga mode awal setelah power up atau reset.
  • SETUP - Anda dapat memasuki mode ini dengan menekan lama S4 (dalam kode ini disebut juga "tombol reset"); di sini, dengan menggunakan S3 ("tombol mulai berhenti"), Anda dapat memilih nilai mana yang akan diubah untuk mengatur waktu yang telah berlalu untuk dihitung mundur nanti; terakhir, menggunakan masing-masing S2 ("tombol turun") dan S1 ("tombol atas"), Anda dapat mengurangi atau menambah nilai yang dipilih (jam, menit, atau detik).
  • MENJALANKAN - Anda dapat masuk ke mode ini dengan menekan S3, sementara meninggalkannya akan memerlukan S3 atau S4 (yang akan membawa Anda ke mode IDLE).
  • DERING - Ketika jumlah waktu yang diinginkan telah berlalu, mode ini secara otomatis diaktifkan; Anda dapat membiarkannya (yaitu, membuat anak laki-laki itu berhenti berdering) dengan menekan tombol apa saja.

Kode

Pertama, kita perlu menyertakan perpustakaan yang tepat:

#include 
#include

Jika Anda belum memilikinya, Anda harus mengunduh dan menginstalnya:

  • Paulus Stoffregen's Waktu Perpustakaan (harap unduh ZIP dari tombol hijau "Klon atau unduh")
  • Perpustakaan LiquidCrystal Arduino

Selanjutnya, mari menginisialisasi modul LCD yang bagus itu:

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); 

Silakan mengacak pin sesuka Anda untuk mendapatkan tata letak kabel yang bagus:jangan ikuti saya dalam hal ini, karena saya melakukan rencana pengkabelan yang buruk! :D Misalnya, Anda dapat membalikkan empat pin terakhir dalam pernyataan di atas untuk menghindari persilangan kabel kuning yang dapat Anda lihat pada skema di bawah ini (jelas, Anda harus menyesuaikan konstanta pin tombol yang sesuai, lihat di bawah). Mainkan, bersenang-senanglah! Kehidupan dengan Arduino dimulai tepat setelah salin/tempel itu!

51 baris kode berikutnya berisi deklarasi dan inisialisasi variabel statis. Silakan menelusurinya, nama mereka yang jernih dan beberapa komentar yang tersebar akan memandu Anda memahami semuanya.

Fungsi setup() melakukan langkah-langkah awal yang biasa Anda lihat trilyunan kali dalam sketsa Arduino di luar sana dan sejauh ini. Satu-satunya pernyataan penting adalah yang pertama, yang akan mengatur posisi kursor tampilan LCD awal. Karena, ya:modul ini mengharuskan Anda untuk mengatur posisi di sepanjang baris dan kolomnya dan kemudian "mencetak" sesuatu, yang akan muncul mulai dari posisi itu.

Sekarang mari kita beralih ke fungsi loop().

Pertama-tama, mari temukan status sakelar. Untuk mencapai ini, blok kode berikut digunakan untuk hampir masing-masing:

/*
* Manajemen tombol Start/Stop
*/
startStopButtonPressed =false;
startStopButtonState =digitalRead(startStopButtonPin);
if(startStopButtonState !=startStopButtonPrevState)
{
startStopButtonPressed =startStopButtonState ==HIGH;
startStopButtonPrevState =startStopButtonState;
}

Sebuah digitalRead dikeluarkan terhadap pin terkait dan hasilnya dibandingkan dengan nilai yang dibaca sebelumnya:jika ada sesuatu yang berubah, nilai baru disimpan untuk referensi di masa mendatang dan variabel statis bool "xxxButtonPressed" disetel ke true jika tombol ditekan.

Melihat diagram rangkaian di bawah, Anda akan melihat bahwa setiap pin input dipaksa LOW oleh resistor 10k kecuali sakelar yang sesuai ditekan dan pin itu sendiri terhubung langsung ke +5V. Skenario yang cukup klasik, bukan?

Sebelumnya, saya mengatakan "hampir masing-masing" karena ada satu tombol yang bekerja dengan cara yang berbeda dari yang lain:S4. Blok kodenya mampu mendeteksi penekanan lama yang disebutkan di atas untuk masuk ke mode SETUP.

Berikutnya adalah sakelar blok manajemen mode:setiap kasing melihat pemicu status tombol ("xxxButtonPressed") dan mengalihkan aliran ke status baru yang tepat, atau melakukan tindakan yang tepat.

case MODE_IDLE:
if(resetButtonPressed)
{
Reset();
}
if(resetButtonLongPressed)
{
currentMode =MODE_SETUP;
}
if(startStopButtonPressed)
{
currentMode =currentMode ==MODE_IDLE ? MODE_RUNNING :MODE_IDLE;
if(Mode saat ini ==MODE_RUNNING)
{
// MULAI TIMER!
startTime =now();
}
}
istirahat;

Cuplikan kode sebelumnya menunjukkan bagaimana mode IDLE dikelola, dan itu cukup jelas. Contoh lain menunjukkan bagaimana tombol apa pun yang ditekan saat berdering akan menghentikannya:

case MODE_RINGING:
if(resetButtonPressed || startStopButtonPressed || downButtonPressed || upButtonPressed)
{
currentMode =MODE_IDLE;
}
break;

Terlihat mudah, bukan? :-) Memang.

Blok berikutnya - "Manajemen waktu" - melakukan penghitungan perbedaan waktu yang sebenarnya, memicu mode RINGING dan sebenarnya berdering buzz ketika saatnya untuk melakukannya.

Blok terakhir - "manajemen LCD" - mengelola tampilan LCD untuk setiap mode dengan mencetak string yang tepat di lokasi yang tepat.

Itu dia.

Selesai dan beraksi!

Sekarang anak anjing kecil ini tidak memiliki rahasia lagi untuk Anda, mari kita lihat aksinya. Terima kasih telah menonton, dan selamat bersenang-senang!


Kode

  • ArduinoSketch
ArduinoSketchArduino
/********************************************* **** * Arduino Kitchen Timer v1.0 - 2016/01/27 * Oleh Angelo Fiorillo (Roma, IT) * Karya ini didistribusikan di bawah GNU General * Lisensi Publik versi 3 atau lebih baru (GPL3+) * Harap sertakan kredit ini perhatikan jika Anda ingin * menggunakan kembali bagian mana pun dari sketsa ini. Hormati pekerjaan saya * seperti yang akan saya lakukan dengan pekerjaan Anda. * Jangan ragu untuk menghubungi saya:[email protected] * ************************************* ***********/#include #include // FIX 2018-08-12 Perbaikan ini «'sekarang' tidak dideklarasikan dalam cakupan ini» errorLiquidCrystal lcd( 12, 11, 5, 4, 3, 2);const int buzzerPin =10;const int resetButtonPin =6;const int startStopButtonPin =7;const int downButtonPin =8;const int upButtonPin =9;int setupJam =0; // Berapa jam akan menghitung mundur saat startint setupMinutes =0; // Berapa menit yang akan dihitung mundur saat startint setupSeconds =0; // Berapa detik yang akan dihitung mundur saat waktu mulai_t setupTime =0;int currentHours =0;int currentMinutes =0;int currentSeconds =0;time_t currentTime =0;time_t startTime =0;time_t elapsedTime =0;int resetButtonState =LOW;long resetButtonLongPressCounter =0;int startStopButtonState =LOW;int upButtonState =LOW;int downButtonState =LOW;int resetButtonPrevState =LOW;int startStopButtonPrevState =RENDAH;int upButtonPrevState =RENDAH;int downButtonPrevState =falseLboPrevState =RENDAH;bool startStopButtonPressed =false;bool upButtonPressed =false;bool downButtonPressed =false;const int MODE_IDLE =0;const int MODE_SETUP =1;const int MODE_RUNNING =2;const int MODE_RINGING =3;int currentMode =MODE_IDLE; // 0=idle 1=setup 2=running 3=dering // Power up --> idle // Reset --> idle // Start/Stop --> start atau stop counter // Up / Down --> NOP // Reset (tekan lama) --> masuk ke setup // Start/Stop --> pilih data // Atas --> tambah nilai data saat ini // Bawah --> kurangi nilai data saat ini // Reset --> keluar dari setup (idle)int dataSelection =0; // Data yang dipilih saat ini untuk diedit (mode pengaturan, berubah dengan Start/Stop) // 0=jam (00-99) 1=menit (00-59) 2=detik (00-59)pengaturan batal() { // letakkan kode pengaturan Anda di sini, untuk dijalankan sekali:lcd.begin(16, 2); pinMode(resetButtonPin, INPUT); pinMode(startStopButtonPin, INPUT); pinMode(upButtonPin, INPUT); pinMode(downButtonPin, INPUT); pinMode(buzzerPin, OUTPUT); Serial.begin(9600);}void loop() { // letakkan kode utama Anda di sini, untuk dijalankan berulang kali:startStopButtonPressed =false; upButtonPressed =salah; downButtonPressed =salah; /* * Atur ulang manajemen tombol */ resetButtonPressed =false; resetButtonLongPressed =salah; resetButtonState =digitalRead(resetButtonPin); if(resetButtonState !=resetButtonPrevState) { resetButtonPressed =resetButtonState ==TINGGI; resetButtonPrevState =resetButtonState; } else // Manajemen tekan lama... { if(resetButtonState ==HIGH) { resetButtonLongPressCounter++; if(resetButtonLongPressCounter ==100) { resetButtonPressed =false; resetButtonLongPressed =benar; resetButtonLongPressCounter =0; } } else { resetButtonLongPressCounter =0; resetButtonPressed =salah; resetButtonLongPressed =salah; } } /* * Manajemen tombol Start/Stop */ startStopButtonPressed =false; startStopButtonState =digitalRead(startStopButtonPin); if(startStopButtonState !=startStopButtonPrevState) { startStopButtonPressed =startStopButtonState ==HIGH; startStopButtonPrevState =startStopButtonState; } /* * Manajemen tombol bawah */ downButtonPressed =false; downButtonState =digitalRead(downButtonPin); if(downButtonState !=downButtonPrevState) { downButtonPressed =downButtonState ==HIGH; downButtonPrevState =downButtonState; } /* * Manajemen tombol atas */ upButtonPressed =false; upButtonState =digitalRead(upButtonPin); if(upButtonState !=upButtonPrevState) { upButtonPressed =upButtonState ==HIGH; upButtonPrevState =upButtonState; } /* * Manajemen mode */ switch(Mode saat ini) { case MODE_IDLE:if(resetButtonPressed) { Reset(); } if(resetButtonLongPressed) { currentMode =MODE_SETUP; } if(startStopButtonPressed) { currentMode =currentMode ==MODE_IDLE ? MODE_RUNNING :MODE_IDLE; if(Mode saat ini ==MODE_RUNNING) { // MULAI TIMER! waktu mulai =sekarang(); } } merusak; case MODE_SETUP:if(resetButtonPressed) { // Keluar dari mode penyiapan setupTime =setupSeconds + (60 * setupMinutes) + (3600 * setupHours); jam saat ini =jam penyiapan; saat iniMenit =setupMinutes; currentSeconds =setupSeconds; pemilihan data =0; mode saat ini =MODE_IDLE; } if(startStopButtonPressed) { // Pilih data berikutnya untuk menyesuaikan dataSelection++; if(pilihan data ==3) { pemilihan data =0; } } if(downButtonPressed) { switch(Pemilihan data) { case 0:// jam setupHours--; if(setupHours ==-1) { setupHours =99; } merusak; case 1:// menit setupMinutes--; if(setupMinutes ==-1) { setupMinutes =59; } merusak; case 2:// detik setupSeconds--; if(setupSeconds ==-1) { setupSeconds =59; } merusak; } } if(upButtonPressed) { switch(dataSelection) { case 0:// jam setupHours++; if(setupHours ==100) { setupHours =0; } merusak; kasus 1:// menit setupMinutes++; if(setupMinutes ==60) { setupMinutes =0; } merusak; kasus 2:// detik setupSeconds++; if(setupSeconds ==60) { setupSeconds =0; } merusak; } } merusak; case MODE_RUNNING:if(startStopButtonPressed) { currentMode =MODE_IDLE; } if(resetButtonPressed) { Reset(); mode saat ini =MODE_IDLE; } merusak; case MODE_RINGING:if(resetButtonPressed || startStopButtonPressed || downButtonPressed || upButtonPressed) { currentMode =MODE_IDLE; } merusak; } /* * Manajemen waktu */ switch(Mode saat ini) { case MODE_IDLE:case MODE_SETUP:// NOP break; case MODE_RUNNING:currentTime =setupTime - (now() - startTime); if(Waktu saat ini <=0) { mode saat ini =MODE_RINGING; } merusak; kasus MODE_RINGING:analogWrite(buzzerPin, 20); penundaan (20); analogWrite(pin buzzer, 0); penundaan (40); merusak; } /* * Manajemen LCD */ //lcd.clear(); lcd.setCursor(0, 0); switch(currentMode) { case MODE_IDLE:lcd.print("Timer siap"); lcd.setCursor(0, 1); lcd.print(Jam saat ini); lcd.print(""); lcd.print(Menit saat ini); lcd.print(""); lcd.print(currentSeconds); lcd.print(""); merusak; case MODE_SETUP:lcd.print("Mode penyetelan:"); switch(Pemilihan data) { kasus 0:lcd.print("HRS "); merusak; kasus 1:lcd.print("MINS"); merusak; kasus 2:lcd.print("SECS"); merusak; } lcd.setCursor(0, 1); lcd.print(setupHours); lcd.print(""); lcd.print(setupMinutes); lcd.print(""); lcd.print(setupSeconds); lcd.print(""); merusak; case MODE_RUNNING:lcd.print("Menghitung mundur..."); lcd.setCursor(0, 1); if(jam(waktu saat ini) <10) lcd.print("0"); lcd.print(jam(Waktu saat ini)); lcd.print(":"); if(menit(Waktu saat ini) <10) lcd.print("0"); lcd.print(menit(Waktu saat ini)); lcd.print(":"); if(detik(waktu sekarang) <10) lcd.print("0"); lcd.print(kedua(Waktu saat ini)); merusak; kasus MODE_RINGING:lcd.print(" RING-RING! "); lcd.setCursor(0, 1); lcd.print(""); merusak; } delay(10);}void Reset(){ currentMode =MODE_IDLE; jam saat ini =jam penyiapan; saat iniMenit =setupMinutes; currentSeconds =setupSeconds;}

Skema

Anda dapat menggunakan papan tempat memotong roti untuk keperluan umum, termasuk Starter Kit yang lebih kecil dari yang digambarkan di sini (bel dapat ditempatkan di bawah kabel kuning, lihat video dan foto).

Proses manufaktur

  1. Alarm Tanaman Peringatan Haus
  2. DIY Sederhana 20 kHz Arduino Oscilloscope pada LCD Nokia 5110
  3. Smart Blinds
  4. Jam Kata Italia
  5. Penghitung Waktu Mundur Arduino
  6. Sigfox kWh Meter
  7. Pemantau Suhu Bluetooth
  8. Kunci yang Dikendalikan Gerakan
  9. Input Analog Terisolasi untuk Arduino
  10. Ukur waktu reaksi Anda