Daftar Isi:

Arduino Timer: 8 Proyek: 10 Langkah (dengan Gambar)
Arduino Timer: 8 Proyek: 10 Langkah (dengan Gambar)

Video: Arduino Timer: 8 Proyek: 10 Langkah (dengan Gambar)

Video: Arduino Timer: 8 Proyek: 10 Langkah (dengan Gambar)
Video: Tonton Sampai Habis !!! Belajar Arduino Di Jamin Bisa 2024, Juni
Anonim
Pengatur Waktu Arduino: 8 Proyek
Pengatur Waktu Arduino: 8 Proyek

Arduino Uno atau Nano dapat menghasilkan sinyal digital yang akurat pada enam pin khusus dengan menggunakan tiga timer bawaan. Mereka hanya memerlukan beberapa perintah untuk mengatur dan tidak menggunakan siklus CPU untuk dijalankan!

Menggunakan pengatur waktu dapat menakutkan jika Anda memulai dari lembar data lengkap ATMEGA328, yang memiliki 90 halaman yang didedikasikan untuk deskripsi mereka! Beberapa perintah built-in Arduino sudah menggunakan timer, misalnya milis(), delay(), tone(), AnalogWrite() dan perpustakaan servo. Tetapi untuk menggunakan kekuatan penuhnya, Anda harus mengaturnya melalui register. Saya berbagi di sini beberapa makro dan fungsi untuk membuatnya lebih mudah dan lebih transparan.

Setelah ikhtisar yang sangat singkat tentang penghitung waktu, ikuti 8 proyek keren yang mengandalkan pembangkitan sinyal dengan penghitung waktu.

Langkah 1: Komponen yang Diperlukan

Komponen yang Diperlukan
Komponen yang Diperlukan

Untuk membuat semua 8 proyek yang Anda perlukan:

  • Arduino Uno atau yang kompatibel
  • Perisai prototipe dengan protoboard mini
  • 6 kabel jumper papan tempat memotong roti
  • 6 jumper papan tempat memotong roti pendek (buat sendiri dari kawat hookup inti padat 10cm)
  • 2 ekor buaya
  • 1 putih 5mm LED
  • resistor 220 Ohm
  • resistor 10kOhm
  • potensiometer 10kOhm
  • 2 kapasitor keramik 1muF
  • 1 kapasitor elektrolit 10muF
  • 2 dioda, 1n4148 atau serupa
  • 2 motor servo mikro SG90
  • 1 speaker 8Ohm
  • 20m kawat enamel tipis (0,13mm)

Langkah 2: Ikhtisar Pengatur Waktu Arduino untuk Pembangkitan Sinyal

Timer0 dan timer2 adalah timer 8-bit, artinya mereka dapat menghitung paling banyak dari 0 hingga 255. Timer1 adalah timer 16-bit, sehingga dapat menghitung hingga 65535. Setiap timer memiliki dua pin output terkait: 6 dan 5 untuk timer0, 9 dan 10 untuk timer1, 11 dan 3 untuk timer2. Timer bertambah pada setiap siklus clock Arduino, atau pada tingkat yang dikurangi dengan faktor skala awal, yaitu 8, 64, 256 atau 1024 (32 dan 128 juga diperbolehkan untuk timer2). Penghitung waktu menghitung dari 0 hingga 'TOP' dan kemudian lagi (PWM cepat) atau ke bawah (PWM fase benar). Nilai 'TOP' dengan demikian menentukan frekuensi. Pin output dapat diset, reset, atau flip pada nilai Output Compare Register, sehingga menentukan duty cycle. Hanya timer1 yang memiliki kemampuan untuk mengatur frekuensi dan siklus tugas secara mandiri untuk kedua pin keluaran.

Langkah 3: LED Berkedip

Image
Image
LED berkedip
LED berkedip
LED berkedip
LED berkedip

Frekuensi terendah yang dapat dicapai dengan timer 8-bit adalah 16MHz/(511*1024)=30, 6Hz. Jadi untuk membuat LED berkedip dengan 1Hz, kita membutuhkan timer1, yang bisa mencapai frekuensi 256 kali lebih kecil, 0,12 Hz.

Hubungkan LED dengan anodanya (kaki panjang) ke pin9 dan hubungkan katodanya dengan resistor 220 Ohm ke ground. Unggah kode. LED akan berkedip tepat 1Hz dengan siklus kerja 50%. Fungsi loop() kosong: timer diinisialisasi pada setup() dan tidak memerlukan perhatian lebih lanjut.

Langkah 4: Peredup LED

Image
Image
Peredup LED
Peredup LED
Peredup LED
Peredup LED

Modulasi lebar pulsa adalah cara yang efektif untuk mengatur intensitas LED. Dengan driver yang tepat, ini juga merupakan metode yang disukai untuk mengatur kecepatan motor listrik. Karena sinyalnya 100% aktif atau 100% mati, tidak ada daya yang terbuang pada resistansi seri. Pada dasarnya, ini seperti mem-flash LED lebih cepat daripada yang bisa diikuti mata. 50Hz pada prinsipnya cukup, tetapi mungkin masih tampak sedikit berkedip dan ketika LED atau mata bergerak, 'jejak' non-kontinu yang mengganggu dapat terjadi. Menggunakan prescale 64 dengan timer 8-bit, kita mendapatkan 16MHz/(64*256)=977Hz, yang sesuai dengan tujuannya. Kami memilih timer2, sehingga timer1 tetap tersedia untuk fungsi lain, dan kami tidak mengganggu fungsi waktu () Arduino, yang menggunakan timer0.

Dalam contoh ini siklus kerja, dan dengan demikian intensitasnya, diatur oleh potensiometer. LED kedua dapat diatur secara independen dengan timer yang sama di pin 3.

Langkah 5: Konverter Digital-ke-Analog (DAC)

Image
Image
Konverter Digital-ke-Analog (DAC)
Konverter Digital-ke-Analog (DAC)
Konverter Digital-ke-Analog (DAC)
Konverter Digital-ke-Analog (DAC)

Arduino tidak memiliki output analog yang sebenarnya. Beberapa modul mengambil tegangan analog untuk mengatur parameter (kontras tampilan, ambang deteksi, dll). Dengan hanya satu kapasitor dan resistor, timer1 dapat digunakan untuk membuat tegangan analog dengan resolusi 5mV atau lebih baik.

Filter low-pass dapat 'rata-rata' sinyal PWM ke tegangan analog. Sebuah kapasitor dihubungkan melalui resistor ke pin PWM. Karakteristik ditentukan oleh frekuensi PWM dan nilai resistor dan kapasitor. Resolusi timer 8-bit akan menjadi 5V/256=20mV, jadi kami memilih Timer1 untuk mendapatkan resolusi 10-bit. Sirkuit RC adalah filter low-pass orde pertama dan akan memiliki beberapa riak. Skala waktu sirkuit RC harus jauh lebih besar daripada periode sinyal PWM untuk mengurangi riak. Periode yang kita dapatkan untuk presisi 10-bit adalah 1024/16MHz= 64mus. Jika kita menggunakan kapasitor 1muF dan resistor 10kOhm, RC=10ms. Riak puncak ke puncak paling banyak 5V*0,5*T/(RC)=16mV, yang dianggap cukup di sini.

Perhatikan bahwa DAC ini memiliki impedansi keluaran yang sangat tinggi (10kOhm), sehingga tegangan akan turun secara signifikan jika menarik arus. Untuk menghindarinya, dapat dibuffer dengan opamp, atau kombinasi lain dari R dan C dapat dipilih, misalnya 1kOhm dengan 10muF.

Dalam contoh, output DAC dikemudikan dengan potensiometer. Saluran DAC independen kedua dapat dijalankan dengan timer1 pada pin 10.

Langkah 6: Metronom

Image
Image
Metronom
Metronom
Metronom
Metronom

Metronom membantu melacak ritme saat memutar musik. Untuk pulsa yang sangat pendek, output timer arduino dapat diumpankan langsung ke speaker, yang akan menghasilkan klik yang terdengar jelas. Dengan potensiometer, frekuensi ketukan dapat diatur dari 40 hingga 208 denyut per menit, dalam 39 langkah. Timer1 diperlukan untuk presisi yang dibutuhkan. Nilai 'TOP', yang menentukan frekuensi, dimodifikasi di dalam fungsi loop(), dan itu membutuhkan perhatian! Anda lihat di sini bahwa mode WGM berbeda dari contoh lain yang memiliki frekuensi tetap: mode ini, dengan TOP yang diatur oleh register OCR1A, memiliki buffering ganda dan melindungi dari TOP yang hilang dan mendapatkan kesalahan yang lama. Namun, ini berarti kita hanya dapat menggunakan 1 pin output.

Langkah 7: Spektrum Suara

Image
Image
Spektrum Suara
Spektrum Suara
Spektrum Suara
Spektrum Suara

Manusia dapat mendengar lebih dari 3 kali lipat frekuensi suara, dari 20Hz hingga 20kHz Contoh ini menghasilkan spektrum penuh dengan potensiometer. Kapasitor 10muF diletakkan di antara speaker dan Arduino untuk memblokir arus DC. Timer1 menghasilkan gelombang persegi. Mode generasi bentuk gelombang di sini adalah PWM fase-benar. Dalam mode itu, penghitung mulai menghitung mundur ketika mencapai puncak, yang menghasilkan pulsa yang rata-ratanya tetap, bahkan ketika siklus kerja bervariasi. Namun, itu juga menghasilkan periode yang (hampir) dua kali lipat, dan kebetulan dengan prescale 8, timer1 mencakup spektrum yang dapat didengar secara penuh, tanpa perlu mengubah prescale. Juga di sini, karena nilai TOP sedang diubah saat bepergian, menggunakan OCR1A sebagai top mengurangi gangguan.

Langkah 8: Motor Servo

Image
Image
Motor Servo
Motor Servo
Motor Servo
Motor Servo

Ada perpustakaan servo yang kuat, tetapi jika Anda hanya memiliki dua servo untuk dikendarai, Anda mungkin juga melakukannya secara langsung dengan timer1, dan dengan demikian mengurangi CPU, penggunaan memori, dan menghindari interupsi. Servo SG90 yang populer mengambil sinyal 50Hz, dan panjang pulsa mengkodekan posisinya. Ideal untuk pengatur waktu1. Frekuensinya tetap, sehingga kedua output pada pin9 dan pin 10 dapat digunakan untuk mengarahkan servo secara independen.

Langkah 9: Pengganda dan Inverter Tegangan

Pengganda dan Inverter Tegangan
Pengganda dan Inverter Tegangan
Pengganda dan Inverter Tegangan
Pengganda dan Inverter Tegangan
Pengganda dan Inverter Tegangan
Pengganda dan Inverter Tegangan

Terkadang proyek Anda membutuhkan tegangan yang lebih tinggi dari 5V atau tegangan negatif. Mungkin menjalankan MOSFET, menjalankan elemen piezo, memberi daya pada opamp, atau mereset EEPROM. Jika penarikan arus cukup kecil, hingga ~ 5mA, pompa pengisian mungkin merupakan solusi paling sederhana: hanya 2 dioda dan dua kapasitor yang terhubung ke sinyal berdenyut dari pengatur waktu yang memungkinkan untuk menggandakan arduino 5V menjadi 10V. Dalam prakteknya ada 2 tetes dioda, jadi akan lebih seperti 8.6V dalam prakteknya untuk doubler, atau -3.6V untuk inverter.

Frekuensi gelombang persegi harus cukup untuk memompa muatan yang cukup melalui dioda. Kapasitor 1muF menggerakkan perubahan 5muC ketika tegangan berubah antara 0 dan 5V, jadi untuk arus 10mA, frekuensinya harus minimal 2kHz. Dalam praktiknya, frekuensi yang lebih tinggi lebih baik, karena mengurangi riak. Dengan penghitung waktu2 dari 0 hingga 255 tanpa skala awal, frekuensinya adalah 62.5kHz, yang berfungsi dengan baik.

Langkah 10: Transfer Daya Nirkabel

Image
Image
Transfer Daya Nirkabel
Transfer Daya Nirkabel
Transfer Daya Nirkabel
Transfer Daya Nirkabel

Tidak jarang mengisi daya jam tangan pintar tanpa kabel, tetapi hal yang sama dapat dengan mudah menjadi bagian dari proyek Arduino. Sebuah kumparan dengan sinyal frekuensi tinggi dapat mentransfer daya ke kumparan lain di dekatnya melalui induksi, tanpa kontak listrik.

Pertama siapkan gulungan. Saya menggunakan gulungan kertas berdiameter 8,5 cm dan kawat enamel berdiameter 0,13 mm untuk membuat 2 gulungan: primer dengan 20 putaran, sekunder dengan 50 putaran. Induktansi diri dari koil jenis ini dengan belitan N dan jari-jari R adalah ~5muH * N^2 * R. Jadi untuk N=20 dan R=0,0425 memberikan L=85muH, yang dikonfirmasi dengan penguji komponen. Kami menghasilkan sinyal dengan frekuensi 516kHz, menghasilkan impedansi 2pi*f*L=275Ohm. Ini cukup tinggi sehingga Arduino tidak mengalami arus lebih.

Untuk menjalankan koil dengan paling efektif, kami ingin menggunakan sumber AC yang sebenarnya. Ada trik yang bisa dilakukan: dua output timer dapat dijalankan dalam fase yang berlawanan, dengan membalik salah satu output. Untuk membuatnya lebih mirip dengan gelombang sinus, kami menggunakan PWM fase-benar. Dengan cara ini, antara pin 9 dan 10, tegangan bergantian antara 0V, pin 9 +5V, keduanya 0V, pin 10 +5V. Efeknya ditunjukkan pada gambar dari jejak lingkup (dengan 1024 prescale, lingkup mainan ini tidak memiliki banyak bandwidth).

Hubungkan kumparan primer ke pin 9 dan 10. Hubungkan LED ke kumparan sekunder. Ketika kumparan sekunder didekatkan dengan kumparan primer, LED menyala terang.

Direkomendasikan: