Loading...
OUR BLOG

Kawal Servo Motor dan LED menggunakan Rotary Encoder Module

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 

 

Litar

 

Rotary Encoder

LED

Servo Motor

 

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!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Unsure Whether You Need Our Help?

Have you got an awesome new idea or project that you want to talk about? We're here to talk you through it. Flick us an email or give us a call to get started.