Disusun Oleh:
Reka Sabrina 160536612018
Tri Setyo Adi N 160536612036
Wildan Ahmad 160536612055
B. Desain Mekanik
C. Blok Diagram
Driver motor
GearBox
L298N
Sensor
Arduino UNO
Optokopler
LCD 16X2
D. Algoritma Pengukuran Kecepatan
𝟔𝟎 𝐝𝐞𝐭𝐢𝐤
𝐤𝐞𝐜𝐞𝐩𝐚𝐭𝐚𝐧 = 𝐑𝐏𝐌 𝐱 𝐤𝐞𝐥𝐢𝐥𝐢𝐧𝐠 𝐠𝐞𝐫𝐢𝐠𝐢 𝐱
𝟏𝟎𝟔 𝒌𝒎/𝒉
E. Listing Program
/*Control Motor*/
#define dirR 7 //mendefinisikan pin untuk driver motor
bagian kanan
#define pwmR 6 //mendefinisikan pin untuk input pwm ke
motor
void motion() //
{
digitalWrite(dirR, LOW); //menjadikan dirR berlogika
LOW
analogWrite (pwmR, 100); //pin pwmR diberi pwm sebesar
100
}
void setup(){
lcd.begin(16, 2); //definisi lcd 16x2
Serial.begin(9600); // Konfigurasi
port serial
pinMode(encoder_pin, INPUT); // Konfigurasi
pin sbg input
pinMode (5, OUTPUT); //pin 5 sebagai output
pinMode (6, OUTPUT);//pin 6 sebagai output
attachInterrupt(0, counter, RISING); // Konfigurasi
interrupt 0, saat terhubung.
pulses = 0;//nilai awal dari pulses = 0
rpm = 0;//nilai awal dari rpm = 0
timeold = 0;//nilai awal dari timeold = 0
Serial.println("Time(s) RPM Pulses Velocity(km/h)");
//menampilkan tulisan pada serial monitor
}
void loop(){
motion();//memanggil program motor berjalan
if (millis() - timeold >= 1000){ //bila kondisi if
terpenuhi maka akan menjalankan program di bawahnya
noInterrupts();
rpm = ((60 * 1000 / pulsesperturn )/ (millis() -
timeold))* pulses; //menghitung nilai rpm
velocity = rpm * 3.14 * wheel_diameter * 60 /
1000000; //menghitung nilai kecepatan
timeold = millis(); //waktu milisecond = koefisien
timeold
Serial.print(" ");
Serial.print(millis()/1000);//menampilan nilai waktu
sekarang di serial monitor
Serial.print(" ");
Serial.print(rpm,DEC); Serial.print("
");//menampilan nilai rpm sekarang di serial monitor
Serial.print(pulses,DEC); Serial.print(" ");
Serial.println(velocity,2); //menampilan nilai
kecepatan sekarang di serial monitor
lcd.clear();
lcd.print("R=");
lcd.print(rpm);
lcd.setCursor (8,0);//menampilkan nilai rpm di lcd
lcd.print("P=");
lcd.print(pulses);
lcd.setCursor (0,1);//menampilkan nilai pulsa di
lcd
lcd.print("T=");
lcd.print(millis()/1000);
lcd.print("s");
lcd.setCursor (8,1);
lcd.print("V=");
lcd.print(velocity);//menampilkan nilai kecepanatan
pada lcd
pulses = 0;
interrupts();
}
}
// Program rebounce
void counter(){//untuk mengcounter nilai pulsa
if( digitalRead (encoder_pin) && (micros()-debounce >
500) && digitalRead (encoder_pin) ) {
debounce = micros();
pulses++;}
else ; }
F. Hasil Pengujian
675,2 63 677.4 70
678.2 77 593.5 77
593 84 525.4 77
677.9 77 676.6 77
672 77 675.2 77
671 77 678.2 77
689.9 84 593 84
570.4 77 677 77
675.7 77 672 77
385.6 84 689.9 77
422.6 63 570.4 77
675.7 77 385.6 77
610 77 422 84
675.4 77 675 77