Hi BDX-ian!
Untuk tutorial kali ini kita akan belajar macam mana nak Kawal Servo Motor menggunakan Rotary Encoder Module. Rotary encoder adalah sejenis position sensor yang digunakan untuk menentukan kedudukan sudut rotating shaft. Module ini menjana signal elektrik dalam bentuk digital berdasarkan pergerakkan putaran (rotational movement). Ia juga dikenali sebagai quadrature encoder atau relative rotary encoder dan output yang terhasil adalah dalam bentuk square wave pulses.
Rotary encoders ini juga digunakan dalam banyak aplikasi yang memerlukan precise shaft unlimited rotation seperti industrial controls, robotics, computer input devices, kawal stress rheometers dan rotating radar platforms.
Jom kita tengok pinouts yang terdapat pada rotary encoder module ini.
Peralatan yang diperlukan
- Rotary Encoder
- Arduino Uno dan USB
- Servo Motor
- LED
- Breadboard
- 220 Ohm resistor
- Jumper wire
- Software Arduino IDE
Litar
Rotary Encoder
- CLK → pin 2 Arduino
- DT → pin 3 Arduino
- SW → pin 11 Arduino
- + pin → 5V Arduino
- GND → GND Arduino
LED
- -ve terminal LED → GND Arduino
- +ve terminal LED → 220 Ohm resistor → pin 4 Arduino
Servo Motor
- Signal pin → pin 8 Arduino
- Vcc pin → +5V Arduino
- GND → GND Arduino
Code
Setelah selesai penyediaan litar dan komponen yang terlibat. Anda boleh upload code yang disediakan di bawah ke dalam Arduino IDE anda.
#include <Servo.h> #define inputCLK 2 #define inputDT 3 Servo myservo; int counter = 0; int LED = 4; int currentStateCLK; int previousStateCLK; int switchPin = 11; // button pin bool switchState = HIGH; // button value String encdir = ""; //encoder direction void setup() { pinMode(inputCLK, INPUT); pinMode(inputDT, INPUT); pinMode(LED,OUTPUT); pinMode (switchPin, INPUT_PULLUP); Serial.begin(9600); myservo.attach(8); previousStateCLK = digitalRead(inputCLK); } void loop() { // BUTTON switchState = digitalRead(switchPin); //apabila suis ditekan(pressed)(LOW), print message //LED menyala if (switchState =! switchState) { digitalWrite(LED,HIGH); Serial.print("Switch pressed : "); Serial.println("LED ON"); Serial.println(); delay(1000); } else { digitalWrite(LED,LOW); } //Rotary encoder dan Servo
currentStateCLK = digitalRead(inputCLK); if (currentStateCLK != previousStateCLK) { if (digitalRead(inputDT) != currentStateCLK) { counter --; encdir = "clockwise"; if (counter < 0) { counter = 0; } } else { counter ++; encdir = "anticlockwise"; if (counter > 180) { counter = 180; } }
myservo.write(counter); Serial.print("Servo Position: "); Serial.print(counter); Serial.println(" degree"); Serial.print("Encoder Rotary Direction: "); Serial.println(encdir); Serial.println(); } previousStateCLK = currentStateCLK; }
|
Output
Apabila switch ditekan LED akan menyala.
Output daripada rotatory encoder module apabila dipusingkan anticlockwise dan clockwise dapat dilihat melalui serial monitor dan di Servo motor.
Output Serial Monitor
Itu sahaja untuk tutorial kali ini. Jika anda terlepas blog pada minggu lepas, anda boleh klik di pautan ini. Diharapkan dalam blog kali ini dapat membantu anda faham macam mana rotatory encoder module ini berfungsi. Jika anda suka dengan perkongsian tutorial dan topik dalam blog ini, jangan lupa untuk follow Facebook dan Instagram kami untuk mendapatkan update ddan info terkini yang akan kami kongsikan kepada anda semua. Selamat mencuba!