Translate

Membuat Deteksi Kecepatan / Gerak (RPM) Menggunakan Sensor Rotary Encoder dan Arduino

Membuat Deteksi Kecepatan / Gerak (RPM) Menggunakan Sensor Rotary Encoder dan Arduino


          Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang bisa digunakan untuk mendeteksi kecepatan atau gerakan dari sebuah roda, yang aplikasinya memang untuk mendeteksi apakah sepeda motor berjalan atau berhenti dengan menggunakan sensor rotary encoder, pada contoh digunakan motor dc sebagai aktuator untuk penggeraknya, kemudian sensor limit switch sebagai sensor batas dari gerakan motor. untuk lebih jelasnya berikut adalah skema dan programnya.




a. Arduino Uno






b. Sensor Rotary Encoder





c. Sensor Limit Switch





d. Motor DC





e. Relay 5v






f. Program Arduino IDE

volatile byte half_revolutions;
unsigned int rpm;
unsigned long timeold;

int relay1 = 3;
int relay2 = 4;
int sw1 = 5;
int sw2 = 6;
int mark = 0;

void setup(){
pinMode(relay1,OUTPUT);
pinMode(relay2,OUTPUT);
pinMode(sw1,INPUT);
pinMode(sw2,INPUT);
digitalWrite(sw1,HIGH);
digitalWrite(sw2,HIGH);
Serial.begin(9600);

 attachInterrupt(0, rpm_fun, RISING);
 half_revolutions = 0;
 rpm = 0;
 timeold = 0;
 
digitalWrite(relay1,HIGH);
digitalWrite(relay2,LOW);

}


void loop(){

//if (half_revolutions >= 10) {
     //Update RPM every 20 counts, increase this for better RPM resolution,
     //decrease for faster update
     rpm = 30*1000/(millis() - timeold)*half_revolutions;
     timeold = millis();
     half_revolutions = 0;
     Serial.println(rpm,DEC);
//}

delay(200);

if((rpm == 0)&&(mark == 0)){
  mark = 1;
  rpm = 0;
  timeold = 0;
  half_revolutions = 0;
turun();
}

if((rpm > 100)&&(mark == 1)){
  mark = 0;
 // rpm = 0;
 // timeold = 0;
 // half_revolutions = 0;
naik();
}


}


void rpm_fun()
 {
   half_revolutions++;
 }


void turun(){

int sw1x = digitalRead(sw1); 
 
digitalWrite(relay1,LOW);
digitalWrite(relay2,LOW);

if(sw1x == LOW){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,LOW);
delay(1000);
return;
}

turun();
}



void naik(){
int sw2x = digitalRead(sw2); 

digitalWrite(relay1,HIGH);
digitalWrite(relay2,HIGH);

if(sw2x == LOW){
digitalWrite(relay1,HIGH);
digitalWrite(relay2,LOW);
delay(1000);
return;
}

naik();
}




 
g. VIDEO HASILNYA












No comments:

Post a Comment