IHDRCE Practical Notes

Lesson 01

Introduction to ESP32

Introduction to ESP32 Dev Board.pdf

Lesson 02

Preparing PC to Program ESP32

Introduction to ESP32 Dev Board 02 - Preparing the IDE.pdf

Lesson 03

Test Web Server using ESP32

IHDRCE-ESP32.pdf

Lesson 04

Basic 4WD Robo Program using Different Sensors.

Using IR Sensors for Arduino Board

int mr1=8;  //motor right 1

int mr2=9;  //motor right 2

int ml1=10;  //motor left 1

int ml2=11; //motor left 2

int sr=6;   //sensor right

int sl=7;   //sensor left

int svr=0; // right sensor value

int svl=0; // left sensor value

int led=13; //buitn in led to test

int enr=3; //enable right motor

int enl=5; //enable left motor


int vspeed=100;    

int tspeed=255;

int tdelay=20;


void  setup()

{

 pinMode(mr1,OUTPUT);

 pinMode(mr2,OUTPUT);

 pinMode(ml1,OUTPUT);

  pinMode(ml2,OUTPUT);

 pinMode(led,OUTPUT);

 pinMode(sr,INPUT);

 pinMode(sl,INPUT);

  

 delay(5000);

}


void loop()

{

 svr=digitalRead(sr);

 svl=digitalRead(sl);

  

  if(svl==LOW && svr==LOW)

  {

  forward(); //maju

  }


  if(svl==HIGH  && svr==LOW)

  {

  left(); //belok kiri

  }

 

  if(svl==LOW && svr==HIGH)

  { 

  right(); //belok kanan

  }

  

  if(svl==HIGH && svr==HIGH)

  {

  stop(); //berhenti

  }

}


void forward()

 {

  digitalWrite(mr1,HIGH);

  digitalWrite(mr2,LOW);

  digitalWrite(ml1,HIGH);

  digitalWrite(ml2,LOW);

  analogWrite (enr,vspeed);

  analogWrite (enl,vspeed);

 } 


void backward()

  {

  digitalWrite(mr1,LOW);

  digitalWrite(mr2,HIGH);

  digitalWrite(ml1,LOW);

  digitalWrite(ml2,HIGH);

  analogWrite (enr,vspeed);

  analogWrite (enl,vspeed);

  }


void right()

 {

  digitalWrite(mr1,LOW);

  digitalWrite(mr2,HIGH);

  digitalWrite(ml1,HIGH);

  digitalWrite(ml2,LOW);

  analogWrite (enr,tspeed);

  analogWrite (enl,tspeed);

  delay(tdelay);

 } 


void left()

 {

  digitalWrite(mr1,HIGH);

  digitalWrite(mr2,LOW);

  digitalWrite(ml1,LOW);

  digitalWrite(ml2,HIGH);

  analogWrite (enr,tspeed);

  analogWrite (enl,tspeed);

  delay(tdelay);

}  


void stop()

 {

  analogWrite (enr,0);

  analogWrite  (enl,0);

 }

Using IR Sensors and US Sensor for Arduino Board


#define enA 10//Enable1 L298 Pin enA 

#define in1 9 //Motor1  L298 Pin in1 

#define in2 8 //Motor1  L298 Pin in1 

#define in3 7 //Motor2  L298 Pin in1 

#define in4 6 //Motor2  L298 Pin in1 

#define enB 5 //Enable2 L298 Pin enB 


#define L_S A0 //ir sensor Left

#define R_S A1 //ir sensor Right


#define echo A2    //Echo pin

#define trigger A3 //Trigger pin


#define servo A5


int Set=15;

int distance_L, distance_F, distance_R; 


void setup(){ // put your setup code here, to run once


Serial.begin(9600); // start serial communication at 9600bps


pinMode(R_S, INPUT); // declare if sensor as input  

pinMode(L_S, INPUT); // declare ir sensor as input


pinMode(echo, INPUT );// declare ultrasonic sensor Echo pin as input

pinMode(trigger, OUTPUT); // declare ultrasonic sensor Trigger pin as Output  


pinMode(enA, OUTPUT); // declare as output for L298 Pin enA 

pinMode(in1, OUTPUT); // declare as output for L298 Pin in1 

pinMode(in2, OUTPUT); // declare as output for L298 Pin in2 

pinMode(in3, OUTPUT); // declare as output for L298 Pin in3   

pinMode(in4, OUTPUT); // declare as output for L298 Pin in4 

pinMode(enB, OUTPUT); // declare as output for L298 Pin enB 


analogWrite(enA, 200); // Write The Duty Cycle 0 to 255 Enable Pin A for Motor1 Speed 

analogWrite(enB, 200); // Write The Duty Cycle 0 to 255 Enable Pin B for Motor2 Speed 


pinMode(servo, OUTPUT);


 for (int angle = 70; angle <= 140; angle += 5)  {

   servoPulse(servo, angle);  }

 for (int angle = 140; angle >= 0; angle -= 5)  {

   servoPulse(servo, angle);  }


 for (int angle = 0; angle <= 70; angle += 5)  {

   servoPulse(servo, angle);  }


distance_F = Ultrasonic_read();


delay(500);

}



void loop(){  

//==============================================

//     Line Follower and Obstacle Avoiding

//==============================================  


distance_F = Ultrasonic_read();

Serial.print("D F=");Serial.println(distance_F);



//if Right Sensor and Left Sensor are at White color then it will call forword function

 if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 0)){

  if(distance_F > Set){forword();}

                  else{Check_side();}  

 }  

 

//if Right Sensor is Black and Left Sensor is White then it will call turn Right function

else if((digitalRead(R_S) == 1)&&(digitalRead(L_S) == 0)){turnRight();}  


//if Right Sensor is White and Left Sensor is Black then it will call turn Left function

else if((digitalRead(R_S) == 0)&&(digitalRead(L_S) == 1)){turnLeft();} 

    

delay(10);

}


void servoPulse (int pin, int angle){

int pwm = (angle*11) + 500;      // Convert angle to microseconds

 digitalWrite(pin, HIGH);

 delayMicroseconds(pwm);

 digitalWrite(pin, LOW);

 delay(50); // Refresh cycle of servo

}



//**********************Ultrasonic_read****************************

long Ultrasonic_read(){

  digitalWrite(trigger, LOW);

  delayMicroseconds(2);

  digitalWrite(trigger, HIGH);

  delayMicroseconds(10);

  long time = pulseIn (echo, HIGH);

  return time / 29 / 2;

}


void compareDistance(){

    if(distance_L > distance_R){

  turnLeft();

  delay(500);

  forword();

  delay(600);

  turnRight();

  delay(500);

  forword();

  delay(600);

  turnRight();

  delay(400);

  }

  else{

  turnRight();

  delay(500);

  forword();

  delay(600);

  turnLeft();

  delay(500);

  forword();

  delay(600);  

  turnLeft();

  delay(400);

  }

}


void Check_side(){

    Stop();

    delay(100);

 for (int angle = 70; angle <= 140; angle += 5)  {

   servoPulse(servo, angle);  }

    delay(300);

    distance_R = Ultrasonic_read();

    Serial.print("D R=");Serial.println(distance_R);

    delay(100);

  for (int angle = 140; angle >= 0; angle -= 5)  {

   servoPulse(servo, angle);  }

    delay(500);

    distance_L = Ultrasonic_read();

    Serial.print("D L=");Serial.println(distance_L);

    delay(100);

 for (int angle = 0; angle <= 70; angle += 5)  {

   servoPulse(servo, angle);  }

    delay(300);

    compareDistance();

}


void forword(){  //forword

digitalWrite(in1, LOW); //Left Motor backword Pin 

digitalWrite(in2, HIGH); //Left Motor forword Pin 

digitalWrite(in3, HIGH); //Right Motor forword Pin 

digitalWrite(in4, LOW); //Right Motor backword Pin 

}


void backword(){ //backword

digitalWrite(in1, HIGH); //Left Motor backword Pin 

digitalWrite(in2, LOW); //Left Motor forword Pin 

digitalWrite(in3, LOW); //Right Motor forword Pin 

digitalWrite(in4, HIGH); //Right Motor backword Pin 

}


void turnRight(){ //turnRight

digitalWrite(in1, LOW); //Left Motor backword Pin 

digitalWrite(in2, HIGH); //Left Motor forword Pin 

digitalWrite(in3, LOW); //Right Motor forword Pin 

digitalWrite(in4, HIGH); //Right Motor backword Pin 

}


void turnLeft(){ //turnLeft

digitalWrite(in1, HIGH); //Left Motor backword Pin 

digitalWrite(in2, LOW); //Left Motor forword Pin 

digitalWrite(in3, HIGH); //Right Motor forword Pin 

digitalWrite(in4, LOW); //Right Motor backword Pin 

}


void Stop(){ //stop

digitalWrite(in1, LOW); //Left Motor backword Pin 

digitalWrite(in2, LOW); //Left Motor forword Pin 

digitalWrite(in3, LOW); //Right Motor forword Pin 

digitalWrite(in4, LOW); //Right Motor backword Pin 

}