Daftar Isi:
- Langkah 1: Rotary Encoder Di Dalam
- Langkah 2: Kesengsaraan yang Menyebabkan Kesakitan Nyata bagi Banyak Orang
- Langkah 3: Solusi Finite State Machine (FSM)
- Langkah 4: Kode Arduino
- Langkah 5: Integrasi Sempurna
Video: Solusi Rotary Arduino Lengkap: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Rotary encoder adalah tombol kontrol yang dapat diputar untuk proyek elektronik, sering digunakan dengan mikrokontroler keluarga Arduino. Mereka dapat digunakan untuk menyempurnakan parameter, menavigasi menu, memindahkan objek di layar, mengatur nilai apa pun. Mereka adalah pengganti umum untuk potensiometer, karena mereka dapat diputar lebih akurat dan tak terbatas, mereka menambah atau mengurangi satu nilai diskrit pada satu waktu, dan sering terintegrasi dengan sakelar yang dapat didorong untuk fungsi jenis pemilihan. Mereka datang dalam berbagai bentuk dan ukuran, tetapi kisaran harga terendah sulit untuk digunakan seperti yang dijelaskan di bawah ini.
Ada banyak artikel tentang detail kerja dan mode penggunaan encoder Rotary, dan banyak contoh kode dan pustaka tentang cara menggunakannya. Satu-satunya masalah adalah tidak satupun dari mereka bekerja 100% akurat dengan kisaran harga terendah modul putar Cina.
Langkah 1: Rotary Encoder Di Dalam
Bagian putar encoder memiliki tiga pin (dan dua lagi untuk bagian sakelar opsional). Salah satunya adalah kesamaan (GND hitam), dua lainnya untuk menentukan arah saat kenop diputar (sering disebut CLK biru dan DT merah). Keduanya dilampirkan ke pin input PULLUP dari mikrokontroler, menjadikan level HIGH sebagai pembacaan default mereka. Saat kenop diputar ke depan (atau searah jarum jam), pertama CLK biru turun ke level LOW, kemudian DT merah mengikuti. Beralih lebih jauh, CLK biru naik kembali ke HIGH, kemudian saat patch GND umum meninggalkan kedua pin koneksi, DT merah juga naik kembali ke HIGH. Dengan demikian menyelesaikan satu FWD centang penuh (atau searah jarum jam). Sama halnya dengan arah lain BWD (atau berlawanan arah jarum jam), tetapi sekarang merah turun lebih dulu, dan biru naik kembali terakhir seperti yang ditunjukkan masing-masing pada dua gambar tingkat.
Langkah 2: Kesengsaraan yang Menyebabkan Kesakitan Nyata bagi Banyak Orang
Masalah umum untuk penggemar Arduino, modul encoder Rotary yang murah memantulkan perubahan ekstra pada tingkat output, menyebabkan pembacaan hitungan arah yang salah dan ekstra. Ini mencegah penghitungan sempurna dan membuat modul ini tidak mungkin diintegrasikan ke dalam proyek putar yang akurat. Pantulan ekstra ini disebabkan oleh gerakan mekanis tambalan di atas pin sambungan, dan bahkan menerapkan kapasitor tambahan tidak dapat menghilangkannya sepenuhnya. Pantulan dapat muncul di mana saja dalam siklus centang penuh, dan diilustrasikan oleh skenario kehidupan nyata pada gambar.
Langkah 3: Solusi Finite State Machine (FSM)
Gambar menunjukkan ruang status penuh dari kemungkinan perubahan level untuk dua pin (CLK biru dan DT merah), baik untuk pantulan yang benar dan salah. Berdasarkan mesin negara ini solusi lengkap dapat diprogram yang selalu bekerja 100% akurat. Karena tidak ada penundaan penyaringan yang diperlukan dalam solusi ini, ini juga merupakan yang tercepat. Manfaat lain dari memisahkan ruang status pin dari mode kerja adalah bahwa seseorang dapat menerapkan mode polling atau interupsi sesuai keinginannya. Polling atau interupsi dapat mendeteksi perubahan level pada pin dan rutin terpisah akan menghitung status baru berdasarkan status saat ini dan peristiwa aktual dari perubahan level.
Langkah 4: Kode Arduino
Kode di bawah ini menghitung kutu FWD dan BWD pada monitor serial dan juga mengintegrasikan fungsi sakelar opsional.
// Peter Csurgay 2019-04-10
// Pin dari mesin putar dipetakan ke port Arduino
#define SW 21 #define CLK 22 #define DT 23
// Nilai saat ini dan sebelumnya dari penghitung yang disetel oleh putaran
int curVal = 0; int prevVal = 0;
// Tujuh keadaan FSM (mesin keadaan terbatas)
#define IDLE_11 0 #define SCLK_01 1 #define SCLK_00 2 #define SCLK_10 3 #define SDT_10 4 #define SDT_00 5 #define SDT_01 6 int state = IDLE_11;
batalkan pengaturan() {
Serial.begin(250000); Serial.println("Mulai…"); // Level HIGH akan menjadi default untuk semua pin PinMode(SW, INPUT_PULLUP); pinMode(CLK, INPUT_PULLUP); pinMode(DT, INPUT_PULLUP); // CLK dan DT akan memicu interupsi untuk semua perubahan level attachInterrupt(digitalPinToInterrupt(CLK), rotaryCLK, CHANGE); attachInterrupt(digitalPinToInterrupt(DT), rotaryDT, CHANGE); }
lingkaran kosong() {
// Penanganan sakelar opsional yang terintegrasi ke dalam beberapa enkoder putar if (digitalRead(SW)==LOW) { Serial.println("Pressed"); while(!digitalRead(SW)); } // Setiap perubahan nilai penghitung ditampilkan di Serial Monitor if (curVal != prevVal) { Serial.println(curVal); prevVal = curVal; } }
// Transisi State Machine untuk perubahan level CLK
void rotaryCLK() { if (digitalRead(CLK)==LOW) { if (state==IDLE_11) state = SCLK_01; else if (state==SCLK_10) state = SCLK_00; else if (status==SDT_10) status = SDT_00; } else { if (status==SCLK_01) status = IDLE_11; else if (state==SCLK_00) state = SCLK_10; else if (status==SDT_00) status = SDT_10; else if (status==SDT_01) { status = IDLE_11; curVal--; } } }
// Transisi State Machine untuk perubahan level DT
void rotaryDT() { if (digitalRead(DT)==LOW) { if (state==IDLE_11) state = SDT_10; else if (status==SDT_01) status = SDT_00; else if (state==SCLK_01) state = SCLK_00; } else { if (status==SDT_10) status = IDLE_11; else if (status==SDT_00) status = SDT_01; else if (status==SCLK_00) status = SCLK_01; else if (status==SCLK_10) { status = IDLE_11; curVal++; } } }
Langkah 5: Integrasi Sempurna
Anda dapat memeriksa dalam video terlampir bahwa solusi FSM bekerja secara akurat dan cepat bahkan dalam kasus enkoder putar rentang rendah dengan berbagai efek pantulan sporadis.
Direkomendasikan:
DeskOrganizer(Solusi Konyol): 7 Langkah
DeskOrganizer (Solusi Konyol): Meja saya yang berantakan adalah masalah terbesar saya saat ujian: Jadi saya membuat pengatur meja untuk pensil dan telepon saya. Karena saya MENCINTAI elektronik, saya menambahkan dua port USB 2 speaker dan beberapa Neopiksel di bagian bawah juga saya tambahkan colokan micro USB untuk mengisi
Hubungkan dan Perkuat Solusi Terhubung Anda Dengan Hologram Nova dan Ubidots: 9 Langkah
Hubungkan dan Perkuat Solusi Anda yang Terhubung Dengan Hologram Nova dan Ubidots: Gunakan Hologram Nova Anda untuk memperbaiki infrastruktur. Setup Hologram Nova menggunakan Raspberry Pi untuk mengirim data (suhu) ke Ubidots. Dalam panduan berikut, Ubidots akan mendemonstrasikan cara men-setup Hologram Nova menggunakan Raspberry Pi dan menampilkan
Solusi Polusi Ringan - Artemis: 14 Langkah
Solusi Polusi Cahaya - Artemis: Polusi cahaya adalah sesuatu yang mempengaruhi kita semua di seluruh dunia. Sejak bola lampu ditemukan, lampu menjadi jauh lebih populer dan secara khusus telah digunakan di kota-kota besar seperti New York City dan Chicago. Semua cahaya ini dapat mempengaruhi
Proyek Arduino: Rentang Uji Modul LoRa RF1276 untuk Solusi Pelacakan GPS: 9 Langkah (dengan Gambar)
Proyek Arduino: Rentang Uji Modul LoRa RF1276 untuk Pelacakan GPS Solusi: Koneksi: USB - SerialKebutuhan: Browser Chrome Kebutuhan: 1 X Arduino Mega Kebutuhan: 1 X GPS Perlu: 1 X kartu SD Perlu: 2 X LoRa Modem RF1276Fungsi: Arduino Kirim nilai GPS to main base - Basis utama menyimpan data di Dataino Server Lora Module: Jarak sangat jauh
Solusi Penglihatan Terjangkau Dengan Lengan Robot Berbasis Arduino: 19 Langkah (dengan Gambar)
Solusi Visi Terjangkau Dengan Lengan Robot Berbasis Arduino: Ketika kita berbicara tentang visi mesin, selalu terasa tidak terjangkau bagi kita. Sementara kami membuat demo visi sumber terbuka yang akan sangat mudah dibuat untuk semua orang. Dalam video ini, dengan kamera OpenMV, di mana pun kubus merah berada, robot