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

Cara Kerja Rotary Encoder dan Cara Menggunakannya dengan Arduino

Dalam tutorial ini kita akan mempelajari cara kerja rotary encoder dan cara menggunakannya dengan Arduino. Anda dapat menonton video berikut atau membaca tutorial tertulis di bawah ini.

Ringkasan

Rotary encoder adalah jenis sensor posisi yang digunakan untuk menentukan posisi sudut poros yang berputar. Ini menghasilkan sinyal listrik, baik analog atau digital, sesuai dengan gerakan rotasi.

Ada banyak jenis enkoder putar yang diklasifikasikan berdasarkan Sinyal Keluaran atau Teknologi Penginderaan. Rotary encoder khusus yang akan kita gunakan dalam tutorial ini adalah rotary encoder inkremental dan merupakan sensor posisi paling sederhana untuk mengukur rotasi.

Rotary encoder ini juga dikenal sebagai quadrature encoder atau relative rotary encoder dan outputnya adalah serangkaian pulsa gelombang persegi.

Cara Kerja Rotary Encoder

Mari kita lihat lebih dekat encoder dan lihat prinsip kerjanya. Berikut cara pulsa gelombang persegi dihasilkan:Encoder memiliki disk dengan zona kontak yang berjarak sama yang terhubung ke pin umum C dan dua pin kontak terpisah A dan B, seperti yang diilustrasikan di bawah.

Ketika disk akan mulai berputar selangkah demi selangkah, pin A dan B akan mulai membuat kontak dengan pin umum dan dua sinyal keluaran gelombang persegi akan dihasilkan sesuai dengan itu.

Salah satu dari dua output dapat digunakan untuk menentukan posisi yang diputar jika kita hanya menghitung pulsa sinyal. Namun, jika kita ingin menentukan arah rotasi juga, kita perlu mempertimbangkan kedua sinyal secara bersamaan.

Kita dapat melihat bahwa dua sinyal keluaran dipindahkan pada 90 derajat dari fase satu sama lain. Jika encoder berputar searah jarum jam, output A akan mendahului output B.

Jadi jika kita menghitung langkah setiap kali sinyal berubah, dari Tinggi ke Rendah atau dari Rendah ke Tinggi, kita dapat melihat pada saat itu kedua sinyal keluaran memiliki nilai yang berlawanan. Begitu pula sebaliknya, jika encoder berputar berlawanan arah jarum jam, sinyal keluaran memiliki nilai yang sama. Jadi dengan mempertimbangkan hal ini, kita dapat dengan mudah memprogram pengontrol kita untuk membaca posisi encoder dan arah putaran.

Contoh Arduino Rotary Encoder

Mari kita buat contoh praktisnya menggunakan Arduino. Modul khusus yang akan saya gunakan untuk contoh ini hadir pada papan breakout dan memiliki lima pin. Pin pertama adalah output A, pin kedua adalah output B, pin ketiga adalah pin Button dan tentunya dua pin lainnya adalah pin VCC dan GND.

Kami dapat menghubungkan pin output ke pin digital apa pun dari Papan Arduino.

Anda bisa mendapatkan komponen yang diperlukan untuk Tutorial Arduino ini dari link di bawah ini:

  • Modul Rotary Encoder……………….
  • Dewan Arduino ……………………………
  • Breadboard dan Kabel Lompat ……… 

Kode Sumber

Berikut kode Arduino:

/*     Arduino Rotary Encoder Tutorial
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
 #define outputA 6
 #define outputB 7

 int counter = 0; 
 int aState;
 int aLastState;  

 void setup() { 
   pinMode (outputA,INPUT);
   pinMode (outputB,INPUT);
   
   Serial.begin (9600);
   // Reads the initial state of the outputA
   aLastState = digitalRead(outputA);   
 } 

 void loop() { 
   aState = digitalRead(outputA); // Reads the "current" state of the outputA
   // If the previous and the current state of the outputA are different, that means a Pulse has occured
   if (aState != aLastState){     
     // If the outputB state is different to the outputA state, that means the encoder is rotating clockwise
     if (digitalRead(outputB) != aState) { 
       counter ++;
     } else {
       counter --;
     }
     Serial.print("Position: ");
     Serial.println(counter);
   } 
   aLastState = aState; // Updates the previous state of the outputA with the current state
 }Code language: Arduino (arduino)

Deskripsi kode: Jadi pertama-tama kita perlu mendefinisikan pin yang terhubung dengan encoder kita dan mendefinisikan beberapa variabel yang diperlukan untuk program. Di bagian setup kita perlu mendefinisikan dua pin sebagai input, memulai komunikasi serial untuk mencetak hasil pada monitor serial, serta membaca nilai awal dari output A dan memasukkan nilainya ke dalam variabel aLastState.

Kemudian di bagian loop kita membaca output A lagi tetapi sekarang kita memasukkan nilainya ke dalam variabel aState. Jadi jika kita memutar encoder dan pulsa dihasilkan, kedua nilai ini akan berbeda dan pernyataan "jika" pertama akan menjadi benar. Tepat setelah itu menggunakan pernyataan "jika" kedua kami menentukan arah rotasi. Jika keadaan keluaran B berbeda dari keadaan keluaran A penghitung akan bertambah satu, jika tidak maka akan dikurangi. Pada akhirnya, setelah mencetak hasil pada serial monitor, kita perlu mengupdate variabel aLastState dengan variabel aState.

Itu saja yang kita butuhkan untuk contoh ini. Jika mengupload kode, mulai Serial Monitor dan mulai putar encoder, kami akan mulai mendapatkan nilai di monitor serial. Modul khusus yang saya miliki membuat 30 hitungan setiap siklus penuh.

Pelajari lebih lanjut:Sensor Ultrasonik HC-SR04 dan Arduino – Panduan Lengkap

Contoh 2 – Mengontrol Motor Stepper Menggunakan Rotary Encoder

Selain contoh dasar ini, saya membuat satu lagi contoh pengontrolan posisi motor stepper menggunakan rotary encoder.

Berikut kode sumber dari contoh ini:

/*     Stepper Motor using a Rotary Encoder
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

 #include <LiquidCrystal.h> // includes the LiquidCrystal Library 
 LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Creates an LC object. Parameters: (rs, enable, d4, d5, d6, d7) 

// defines pins numbers
 #define stepPin 8 
 #define dirPin  9
 #define outputA 10
 #define outputB 11

 int counter = 0;
 int angle = 0; 
 int aState;
 int aLastState;  
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  pinMode (outputA,INPUT);
  pinMode (outputB,INPUT);
  
  aLastState = digitalRead(outputA);
  lcd.begin(16,2); // Initializes the interface to the LCD screen, and specifies the dimensions (width and height) of the display } 

}
void loop() {

  aState = digitalRead(outputA);
  
  if (aState != aLastState){     
     if (digitalRead(outputB) != aState) { 
       counter ++;
       angle ++;
       rotateCW();  
     }
     else {
       counter--;
       angle --;
       rotateCCW(); 
     }
     if (counter >=30 ) {
      counter =0;
     }
     
     lcd.clear();
     lcd.print("Position: ");
     lcd.print(int(angle*(-1.8)));
     lcd.print("deg"); 
     lcd.setCursor(0,0);
     
   }
  aLastState = aState;
}

void rotateCW() {
  digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(2000); 
}
void rotateCCW() {
  digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(2000);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(2000);   
}
Code language: Arduino (arduino)

Jangan ragu untuk mengajukan pertanyaan apa pun di bagian komentar di bawah.


Proses manufaktur

  1. C# Queue dengan Contoh:Apa itu C# Queue dan Bagaimana Cara Menggunakannya?
  2. Mengontrol Motor Servo dengan Arduino dan MPU6050
  3. Roda Pengukur Sederhana DIY dengan Rotary Encoder
  4. u-blox LEA-6H 02 Modul GPS dengan Arduino dan Python
  5. Cara membaca suhu dan kelembaban di Blynk dengan DHT11
  6. Seberapa Mudah Menggunakan Termistor?!
  7. Cara membuat musik dengan Arduino
  8. Cara Menggunakan NMEA-0183 dengan Arduino
  9. Cara Menggunakan Modbus dengan Arduino
  10. Pengenalan Ucapan dengan Arduino dan Server BitVoicer