0% found this document useful (0 votes)
20 views6 pages

Robot Semovente Line Following

Uploaded by

Giacomo Reale
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)
20 views6 pages

Robot Semovente Line Following

Uploaded by

Giacomo Reale
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/ 6

Robot Semovente

Modalità di movimento: Line following (AGV)

Questa tipologia di robot si basa sull’inseguimento di un determinato percorso definito sul terreno
attraverso scotch, vernici ad alto contrasto rispetto al colore del terreno stesso. Viene utilizzata la
tecnologia ad infrarossi per riconoscere il percorso.

Componenti elettrici principali:

 Arduino Uno;
 Sensori ad infrarossi (IR) x2;
 Sensore ad ultrasuoni;
 Modulo controllore dei motori elettrici;
 Scotch nero.

Schema Circuitale:

Sensore
ultrasuoni

Sensori IR
Codice Arduino:

#define IR_SENSOR_RIGHT 11

#define IR_SENSOR_LEFT 12

#define MOTOR_SPEED 180

//Right motor

int enableRightMotor=6;

int rightMotorPin1=7;

int rightMotorPin2=8;

//Left motor

int enableLeftMotor=5;

int leftMotorPin1=9;

int leftMotorPin2=10;

void setup()

//The problem with TT gear motors is that, at very low pwm value it does not even rotate.

//If we increase the PWM value then it rotates faster and our robot is not controlled in that speed
and goes out of line.

//For that we need to increase the frequency of analogWrite.

//Below line is important to change the frequency of PWM signal on pin D5 and D6

//Because of this, motor runs in controlled manner (lower speed) at high PWM value.

//This sets frequecny as 7812.5 hz.

TCCR0B = TCCR0B & B11111000 | B00000010 ;

// 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 rightIRSensorValue = digitalRead(IR_SENSOR_RIGHT);

int leftIRSensorValue = digitalRead(IR_SENSOR_LEFT);

//If none of the sensors detects black line, then go straight

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

rotateMotor(MOTOR_SPEED, MOTOR_SPEED);

//If right sensor detects black line, then turn right

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

{
rotateMotor(-MOTOR_SPEED, MOTOR_SPEED);

//If left sensor detects black line, then turn left

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

rotateMotor(MOTOR_SPEED, -MOTOR_SPEED);

//If both the sensors detect black line, then stop

else

rotateMotor(0, 0);

void rotateMotor(int rightMotorSpeed, int leftMotorSpeed)

if (rightMotorSpeed < 0)

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,HIGH);

else if (rightMotorSpeed > 0)

digitalWrite(rightMotorPin1,HIGH);

digitalWrite(rightMotorPin2,LOW);

}
else

digitalWrite(rightMotorPin1,LOW);

digitalWrite(rightMotorPin2,LOW);

if (leftMotorSpeed < 0)

digitalWrite(leftMotorPin1,LOW);

digitalWrite(leftMotorPin2,HIGH);

else if (leftMotorSpeed > 0)

digitalWrite(leftMotorPin1,HIGH);

digitalWrite(leftMotorPin2,LOW);

else

digitalWrite(leftMotorPin1,LOW);

digitalWrite(leftMotorPin2,LOW);

analogWrite(enableRightMotor, abs(rightMotorSpeed));

analogWrite(enableLeftMotor, abs(leftMotorSpeed));

Vantaggi:

 Semplice;
 Economico;
 Non richiede manutenzione.
Svantaggi:

 Necessita di attaccare lo scotch per terra;


 Bisogna implementare un codice per quando fermarlo e farlo ripartire.

You might also like