- Bahan yang Diperlukan
- Bagaimana Rotary Encoder Berfungsi?
- Jenis-jenis Rotary Encoder
- Pin dan keterangan Pengekod Rotary Encoder KY-040
- Diagram Litar Arduino Rotary Encoder
- Memprogram Arduino anda untuk Rotary Encoder
- Mengendalikan Rotary Encoder dengan Arduino
A pengekod Rotary adalah alat input yang membantu pengguna untuk berinteraksi dengan sistem. Ia lebih mirip radio potensiometer tetapi menghasilkan rangkaian denyutan yang menjadikan aplikasinya unik. Apabila tombol Encoder diputar, ia berputar dalam bentuk langkah kecil yang membantunya digunakan untuk pengendali motor stepper / Servo, menavigasi melalui urutan menu dan Menambah / menurunkan nilai nombor dan banyak lagi.
Dalam artikel ini kita akan belajar mengenai pelbagai jenis Rotary Encoders dan bagaimana ia berfungsi. Kami juga akan menghubungkannya dengan Arduino dan mengawal nilai bilangan bulat dengan memutar Encoder dan memaparkan nilainya pada layar LCD 16 * 2. Pada akhir tutorial ini, anda akan selesa menggunakan Rotary Encoder untuk projek anda. Oleh itu, mari kita mulakan…
Bahan yang Diperlukan
- Pengekod Putar (KY-040)
- Arduino UNO
- 16 * 2 LCD Alphanumerik
- Potensiometer 10k
- Papan roti
- Menyambung wayar
Bagaimana Rotary Encoder Berfungsi?
Rotary Encoder adalah transduser elektromekanik, yang bermaksud ia menukar pergerakan mekanikal menjadi denyutan elektronik. Ini terdiri dari tombol yang ketika berpusing akan bergerak selangkah demi selangkah dan menghasilkan urutan kereta nadi dengan lebar yang telah ditentukan untuk setiap langkah. Terdapat banyak jenis Encoder masing-masing dengan mekanisme kerjanya sendiri, kita akan belajar tentang jenisnya kemudian tetapi buat masa ini mari kita menumpukan perhatian hanya pada KY040 Incremental Encoder kerana kita menggunakannya untuk tutorial kita.
Struktur mekanikal dalaman untuk Encoder ditunjukkan di bawah. Pada dasarnya terdiri daripada cakera bulat (warna kelabu) dengan pad konduktif (warna tembaga) yang diletakkan di atas cakera bulat ini. Pad konduktif ini diletakkan pada jarak yang sama seperti di bawah. Pin Output dipasang di atas cakera bulat ini, sedemikian rupa sehingga apabila tombol dipusingkan pad konduktif bersentuhan dengan pin output. Di sini terdapat dua pin output, Output A dan Output B seperti yang ditunjukkan pada gambar di bawah.
Bentuk gelombang output yang dihasilkan oleh pin Output A dan Output B masing-masing ditunjukkan dalam warna biru dan hijau. Apabila pad konduktif berada tepat di bawah pin, ia naik tinggi sehingga tepat pada waktunya dan apabila pad konduktif bergerak, pin akan menjadi rendah sehingga mengakibatkan masa gelombang gelombang yang ditunjukkan di atas. Sekarang, jika kita mengira bilangan denyutan kita akan dapat menentukan berapa banyak langkah yang telah dipindahkan oleh Encoder.
Sekarang timbul persoalan bahawa, mengapa kita memerlukan dua isyarat nadi apabila satu cukup untuk mengira bilangan langkah yang diambil semasa memutar tombol. Ini kerana kita perlu mengenal pasti ke arah mana tombol diputar. Sekiranya anda melihat kedua-dua denyut nadi, anda dapat melihat bahawa kedua-duanya berada 90 ° di luar fasa. Oleh itu apabila tombol dipusingkan mengikut arah jam, Output A akan naik tinggi terlebih dahulu dan apabila tombol diputar berlawanan arah jam, Output B akan naik tinggi terlebih dahulu.
Jenis-jenis Rotary Encoder
Terdapat banyak jenis rotary encoder di pasaran yang mana pereka dapat memilihnya mengikut aplikasinya. Jenis yang paling biasa disenaraikan di bawah
- Pengekod Penambahan
- Pengekod mutlak
- Pengekod Magnetik
- Pengekod Optik
- Pengekod Laser
Pengekod ini dikelaskan berdasarkan isyarat Output dan teknologi penginderaan, Encoder Inkremental dan Encoder Mutlak diklasifikasikan berdasarkan isyarat Output dan Encoder Magnetik, Optik dan Laser dikelaskan berdasarkan Teknologi Sensing. The Encoder digunakan di sini adalah jenis pengekod tokokan.
Pin dan keterangan Pengekod Rotary Encoder KY-040
Pinout encoder putar jenis KY-040 ditunjukkan di bawah
Dua pin pertama (Tanah dan Vcc) digunakan untuk memberi kuasa kepada Encoder, biasanya bekalan 5V digunakan. Selain memutar tombol pada arah jam dan arah lawan jam, pengekod juga mempunyai suis (Active low) yang dapat ditekan dengan menekan kenop ke dalam. Isyarat dari suis ini diperoleh melalui pin 3 (Switch). Akhirnya ia mempunyai dua pin output yang menghasilkan bentuk gelombang seperti yang telah dibincangkan di atas. Sekarang mari kita pelajari bagaimana menghubungkannya dengan Arduino.
Diagram Litar Arduino Rotary Encoder
Gambarajah litar lengkap untuk Interfacing Rotary Encoder dengan Arduino ditunjukkan dalam gambar di bawah
Rotary Encoder mempunyai 5 pin mengikut urutan yang ditunjukkan dalam label di atas. Dua pin pertama adalah Ground dan Vcc yang disambungkan ke Ground dan + 5V pin Arduino. Suis pengekod disambungkan ke pin digital D10 dan juga ditarik tinggi walaupun perintang 1k. Kedua-dua pin output disambungkan ke D9 dan D8 masing-masing.
Untuk memaparkan nilai pemboleh ubah yang akan ditingkatkan atau diturunkan dengan memutar pengekod Rotary kita memerlukan modul paparan. Yang digunakan di sini biasanya terdapat paparan LCD berangka Alpha 16 * 2. Kami telah menghubungkan paparan untuk dikendalikan dalam mod 4-bit dan mengaktifkannya menggunakan pin Arduino + 5V. Potentiometer digunakan untuk menyesuaikan kontras paparan LCD. Sekiranya anda ingin mengetahui lebih lanjut mengenai paparan LCD Interfacing dengan Arduino ikuti pautan. Litar lengkap boleh dibina di atas papan roti, saya kelihatan seperti ini di bawah ini setelah semua sambungan selesai.
Memprogram Arduino anda untuk Rotary Encoder
Cukup mudah dan lurus untuk memprogram papan Arduino untuk menghubungkan Rotary Encoder dengannya jika anda memahami prinsip kerja Rotary Encoder. Kita hanya perlu membaca bilangan nadi untuk menentukan berapa putaran pengekod dan membuat pulsa mana yang naik tinggi terlebih dahulu untuk mencari arah mana pengekod diputar. Dalam tutorial ini kita akan memaparkan nombor yang bertambah atau menurun pada baris pertama LCD dan arah Encoder pada baris kedua. Program lengkap untuk melakukan perkara yang sama boleh didapati di bahagian bawah halaman ini dengan Video Demonstrasi, ia tidak memerlukan perpustakaan apa pun. Sekarang, mari kita bahagikan program ini menjadi potongan kecil untuk memahami cara kerjanya.
Oleh kerana kami telah menggunakan paparan LCD, kami memasukkan perpustakaan kristal cair yang secara lalai hadir di Arduino IDE. Kemudian kami menentukan pin untuk menghubungkan LCD dengan Arduino. Akhirnya kami memulakan paparan LCD pada pin tersebut.
#sertakan
Selanjutnya di dalam fungsi penyediaan , kami memaparkan pesan pengantar di layar LCD, dan kemudian menunggu selama 2 saat sehingga pesan itu dapat dibaca pengguna. Ini untuk memastikan LCD berfungsi dengan baik.
lcd.print ("Rotary Encoder"); // Baris Mesej Pengenalan 1 lcd.setCursor (0, 1); lcd.print ("Dengan Arduino"); // Kelewatan barisan intro Mesej 2 (2000); lcd.clear ();
Pengekod Rotary mempunyai tiga pin output yang akan menjadi pin INPUT untuk Arduino. Ketiga-tiga pin ini adalah Switch, Output A dan Output B masing-masing. Ini dinyatakan sebagai Input menggunakan fungsi pinMode seperti gambar di bawah.
// pin mod deklarasi pinMode (Encoder_OuputA, INPUT); pinMode (Encoder_OuputB, INPUT); pinMode (Encoder_Switch, INPUT);
Di dalam fungsi penyediaan kekosongan , kita membaca status pin output untuk memeriksa status pin terakhir. Kami kemudian akan menggunakan maklumat ini untuk membandingkan dengan nilai baru untuk memeriksa pin mana (Output A atau Output B) yang tinggi.
Sebelumnya_Output = digitalRead (Encoder_OuputA); // Baca nilai input Output A
Akhirnya di dalam fungsi gelung utama, kita harus membandingkan nilai Output A dan Output B dengan Output Sebelumnya untuk memeriksa mana yang naik tinggi terlebih dahulu. Ini dapat dilakukan dengan hanya membandingkan nilai output arus A dan B dengan output sebelumnya seperti yang ditunjukkan di bawah.
jika (digitalRead (Encoder_OuputA)! = Previous_Output) { if (digitalRead (Encoder_OuputB)! = Sebelumnya_Output) { Encoder_Count ++; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("mengikut arah jam"); }
Dalam kod di atas , syarat kedua jika dilaksanakan jika Output B telah berubah dari output sebelumnya. Dalam kes itu, nilai pemboleh ubah pengekod meningkat dan LCD menunjukkan bahawa pengekod diputar mengikut arah jam . Begitu juga jika itu jika keadaan gagal, dalam berikutnya pun keadaan kita SUSUTAN yang berubah-ubah dan paparan yang pengekod diputarkan dalam arah lawan jam arah. Kod untuk yang sama ditunjukkan di bawah.
lain { Encoder_Count--; lcd.clear (); lcd.print (Encoder_Count); lcd.setCursor (0, 1); lcd.print ("Anti - mengikut arah jam"); } }
Akhirnya, pada akhir gelung utama kita harus mengemas kini nilai keluaran sebelumnya dengan nilai keluaran semasa supaya gelung dapat diulang dengan logik yang sama. Kod berikut melakukan perkara yang sama
Sebelumnya_Output = digitalRead (Encoder_OuputA);
Perkara pilihan lain adalah memeriksa apakah suis Encoder ditekan. Ini dapat dipantau dengan memeriksa pin suis pada kod putar. Pin ini adalah pin rendah yang aktif, yang bermaksud ia akan menjadi rendah apabila butang ditekan. Jika tidak ditekan pin tetap tinggi, kami juga telah menggunakan pull up resistor untuk memastikan tetap tinggi ketika suis tidak ditekan sehingga mengelakkan keadaan titik terapung.
if (digitalRead (Encoder_Switch) == 0) {lcd.clear (); lcd.setCursor (0, 1); lcd.print ("Switch ditekan"); }
Mengendalikan Rotary Encoder dengan Arduino
Setelah perkakasan dan kod siap, muat naik kod tersebut ke papan Arduino dan hidupkan Arduino Board. Anda boleh menghidupkannya melalui kabel USB atau menggunakan penyesuai 12V. Semasa dihidupkan LCD harus memaparkan mesej intro dan kemudian kosongkan. Sekarang putar pengekod putar dan anda akan melihat nilainya mulai meningkat atau dikurangkan berdasarkan arah yang anda putar. Baris kedua akan menunjukkan kepada anda jika pengekod diputar mengikut arah jam atau arah lawan jam. Gambar di bawah menunjukkan perkara yang sama
Juga apabila butang ditekan, baris kedua akan menunjukkan bahawa butang ditekan. Kerja yang lengkap boleh didapati dalam video di bawah. Ini hanyalah contoh program untuk menghubungkan Encoder dengan Arduino dan periksa apakah ia berfungsi seperti yang diharapkan. Sebaik sahaja anda sampai di sini, anda seharusnya dapat menggunakan pengekod untuk projek dan program anda dengan sewajarnya.
Harap anda memahami tutorial dan perkara-perkara yang berfungsi sebagaimana mestinya. Sekiranya anda mempunyai masalah, gunakan bahagian komen atau forum untuk mendapatkan bantuan teknikal.