0% found this document useful (0 votes)
41 views

Human Following Robot Code

The document defines constants and pin assignments for controlling the motors and sensors of a robot. It includes an ultrasonic sensor to measure distance, infrared sensors on each side to detect obstacles, and motor drivers connected to pins to control the speed of left and right motors independently. The main loop reads the sensors, determines if it should turn or go straight based on the sensor values, and calls functions to set the motor speeds accordingly.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
41 views

Human Following Robot Code

The document defines constants and pin assignments for controlling the motors and sensors of a robot. It includes an ultrasonic sensor to measure distance, infrared sensors on each side to detect obstacles, and motor drivers connected to pins to control the speed of left and right motors independently. The main loop reads the sensors, determines if it should turn or go straight based on the sensor values, and calls functions to set the motor speeds accordingly.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 5

#include <NewPing.

h>

#define ULTRASONIC_SENSOR_TRIG 11

#define ULTRASONIC_SENSOR_ECHO 12

#define MAX_FORWARD_MOTOR_SPEED 250

#define MAX_MOTOR_TURN_SPEED_ADJUSTMENT 120

#define MIN_DISTANCE 10

#define MAX_DISTANCE 30

#define IR_SENSOR_RIGHT 2

#define IR_SENSOR_LEFT 3

//Right motor

int enableRightMotor=5;

int rightMotorPin1=7;

int rightMotorPin2=8;

//Left motor

int enableLeftMotor=6;

int leftMotorPin1=9;

int leftMotorPin2=10;

NewPing mySensor(ULTRASONIC_SENSOR_TRIG, ULTRASONIC_SENSOR_ECHO, 400);


void setup()

Serial.begin(9600);

// put your setup code here, to run once:

pinMode(enableRightMotor, OUTPUT);

pinMode(rightMotorPin1, OUTPUT);

pinMode(rightMotorPin2, OUTPUT);

pinMode(enableLeftMotor, OUTPUT);

pinMode(leftMotorPin1, OUTPUT);

pinMode(leftMotorPin2, OUTPUT);

pinMode(IR_SENSOR_RIGHT, INPUT);

pinMode(IR_SENSOR_LEFT, INPUT);

rotateMotor(0,0);

void loop()

int distance = mySensor.ping_cm();

int rightIRSensorValue = digitalRead(IR_SENSOR_RIGHT);

int leftIRSensorValue = digitalRead(IR_SENSOR_LEFT);

Serial.print("Dis=");
Serial.print(distance);

Serial.print(" ,");

Serial.print(" L=");

Serial.print(leftIRSensorValue);

Serial.print(" ,");

Serial.print(" R=");

Serial.println(rightIRSensorValue);

//NOTE: If IR sensor detects the hand then its value will be LOW else the value will be HIGH

//If right sensor detects hand, then turn right. We increase left motor speed and decrease the right
motor speed to turn towards right

if (rightIRSensorValue == LOW && leftIRSensorValue == HIGH )

{ rotateMotorLeft(200,250);

//If left sensor detects hand, then turn left. We increase right motor speed and decrease the left motor
speed to turn towards left

else if (rightIRSensorValue == HIGH && leftIRSensorValue == LOW )

rotateMotorRight(250, 200);

//If distance is between min and max then go straight

else if (distance >= MIN_DISTANCE && distance <= MAX_DISTANCE)

rotateMotor(MAX_FORWARD_MOTOR_SPEED, MAX_FORWARD_MOTOR_SPEED);

}
//stop the motors

else

rotateMotor(0, 0);

void rotateMotorLeft(int rightMotorSpeed, int leftMotorSpeed)

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,HIGH);

digitalWrite(leftMotorPin1,HIGH);

digitalWrite(leftMotorPin2,LOW);

analogWrite(enableRightMotor, abs(rightMotorSpeed));

analogWrite(enableLeftMotor, abs(leftMotorSpeed));

void rotateMotorRight(int rightMotorSpeed, int leftMotorSpeed)

{
digitalWrite(rightMotorPin1,HIGH);

digitalWrite(rightMotorPin2,LOW);

digitalWrite(leftMotorPin1,LOW);

digitalWrite(leftMotorPin2,HIGH);

analogWrite(enableRightMotor, abs(rightMotorSpeed));

analogWrite(enableLeftMotor, abs(leftMotorSpeed));

void rotateMotor(int rightMotorSpeed, int leftMotorSpeed)

digitalWrite(rightMotorPin1,HIGH);

digitalWrite(rightMotorPin2,LOW);

digitalWrite(leftMotorPin1,HIGH);

digitalWrite(leftMotorPin2,LOW);

analogWrite(enableRightMotor, abs(rightMotorSpeed));

analogWrite(enableLeftMotor, abs(leftMotorSpeed));

You might also like