Anda di halaman 1dari 5

TUGAS ROBOTIK LINE FOLLOWER

ROBY ARDIANSYAH
TEKNIK MEKATRONIKA OTOMASI INDUSTRI
2021
Link 1 : https://youtu.be/ToebhUhxxF4
Link 2 : https://youtu.be/4nPkt8M_Yf0
1. Blok Diagram Robot Line Follower

Motor

Motor ESP 32
Driver

Buck conventer

Lipo Batteray 1100 Mah


Motor

Penjelasan bagian blog diagram


 Sensor tcrt 5000 adalah sensor refleksi inframerah yang digunakan sebagai
pemancar dan penerima. Biasanya, sensor ini sering dipakai untuk membaca suatu
objek. Cara melakukannya tentu saja dengan menggunakan pantulan cahaya yang
kemudian ditangkap oleh dioda.

 Driver motor l298N adalah module driver motor DC yang paling banyak
digunakan atau dipakai di dunia elektronika yang difungsikan untuk mengontrol
kecepatan serta arah perputaran motor DC.

 ESP 32 adalah mikrokontroller berharga rendah dan hemat energi dengan wifi dan
dual-mode bluetooth terintegrasi.

 Buck converter adalah dc-dc converter jenis penurun tegangan atau step down.

 lipo 1100 mah 2 sell adalah sumber energi yang dapat merubah energi kimia yang
disimpannya menjadi energi listrik yang dapat digunakan seperti perangkat
elektronik.
1. Program dan penjelasan per fungsi

const int motka1 = 5;  


const int motka2 = 18;
const int motki1 = 19;   Mendeklerasikan variable motor pada pin GPIO
const int motki2 = 21;
// PWM properties
const int freq = 5000;
const int motkaChannel1 = 0; Mengatur PWM properti, PWM addalah salah satu
const int motkaChannel2 = 1; teknik modulasi yang mengubah lebar pulsa (pulse
const int motkiChannel1 = 2;
width) dengan nilai frekuensi dan amplitudo (tinggi
const int motkiChannel2 = 3;
pulsa) yang tetap.
const int resolution = 8;

void setup() {
  // semua skecth program pada void setup hanya dibaca sekali saja saat menjalankan
program:
 
  Serial.begin(115200); // untuk komunikasi arduino dengan komputer dengan baudrate
115200:
 
  //atur resolusi ke 12 bit (0-4096)
  analogReadResolution(10);
 
  // konfigurasikan fungsionalitas LED PWM
  ledcSetup(motkaChannel1, freq, resolution);
  ledcSetup(motkaChannel2, freq, resolution);
  ledcSetup(motkiChannel1, freq, resolution);
  ledcSetup(motkiChannel2, freq, resolution);
  // lampirkan saluran ke GPIO untuk dikontrol
  ledcAttachPin(motka1, motkaChannel1);
  ledcAttachPin(motka2, motkaChannel2);
  ledcAttachPin(motki1, motkiChannel1);
  ledcAttachPin(motki2, motkiChannel2);
}

void loop()   //sebuah program perulangan atau looping

{
  //baca nilai analog / milivolt untuk pin 2:
    int i,error;
  int analogValue[8];
 int thres [8] ={717,568,450,370,434,536,451,544};
  unsigned char DataSensor;
   
  analogValue[0]= analogRead(34);
  analogValue[1]= analogRead(35);
  analogValue[2]= analogRead(32); Untuk membaca nilai sensor
  analogValue[3]= analogRead(33);
  analogValue[4]= analogRead(25);
  analogValue[5]= analogRead(26);
  analogValue[6]= analogRead(27);
  analogValue[7]= analogRead(14);

  // mencetak nilai yang terbaca bada sensor:


  Serial.printf("%5d ",analogValue[0]);
  Serial.printf("%5d ",analogValue[1]);
  Serial.printf("%5d ",analogValue[2]);
  Serial.printf("%5d ",analogValue[3]);
  Serial.printf("%5d ",analogValue[4]);
  Serial.printf("%5d ",analogValue[5]);
  Serial.printf("%5d ",analogValue[6]);
  Serial.printf("%5d\n ",analogValue[7]);
 
 
  for(i=0;i<8;i++){  
    if (analogValue[i]>thres[i]) {DataSensor=DataSensor | (1<<(7-i));
Serial.printf("%d ",1);}
    else if (analogValue[i]<=thres[i]) {DataSensor=DataSensor & (~1<<(7-i));
Serial.printf("%d ",0);}    
  }
  Serial.printf("\n ");

  Serial.printf("Data Sensor= %d ",DataSensor);

  switch (DataSensor){
    case 0b00011000: error=0; break;
   
    case 0b00010000: error=1; break;
switch adalah kata kunci pengontrol untuk
    case 0b00110000: error=2; break; membuat keputusan pada data sensor yang
    case 0b00100000: error=3; break; sudah di deklerasikan
    case 0b01100000: error=4; break;
    case 0b01000000: error=5; break;
    case 0b11000000: error=6; break;
    case 0b10000000: error=7; break;
   
    case 0b00001000: error=-1; break;
    case 0b00001100: error=-2; break;
    case 0b00000100: error=-3; break;
    case 0b00000110: error=-4; break;
    case 0b00000010: error=-5; break;
    case 0b00000011: error=-6; break;
    case 0b00000001: error=-7; break;

    default: error=0; break;


    }
  Serial.printf("Error= %d\n ",error);

if (error==0){gerak(200,200);}
else if (error==7){gerak(-200,255);}
else if (error==-7){gerak(255,-200);}
else if (error>0){gerak((200-(20*error)),255);}
else if (error<0){gerak(255,(200-(20*error)));}
 
  delay(100);  
}

void gerak(int kiri, int kanan){


  if(kiri<0){
      ledcWrite(motkiChannel1, -kiri);
      ledcWrite(motkiChannel2, 0);
      }
  else{
      ledcWrite(motkiChannel1, 0);
      ledcWrite(motkiChannel2, kiri);
      }
  if(kanan<0){
      ledcWrite(motkaChannel1, 0);
      ledcWrite(motkaChannel2, -kanan);
      }
  else{
      ledcWrite(motkaChannel1, kanan);
      ledcWrite(motkaChannel2, 0);
      }
  }

Anda mungkin juga menyukai