Robot 2WD Roboromania autonom cu radar ocolire obstacole
Unul dintre cele mai simple coduri pentru Robot 2WD autonom cu radar ocolire obstacole.
Avem nevoie de :
o placă de dezvoltare tip Arduino UNO (oricare)
un modul driver motoare L298N
un senzor cu ultrasunete
șasiu cu 2 motoare 2WD
servomotor
cabluri Dupont
Cel mai simplu cod :
//––––––––––––––
// roboromania.ro Arduino Object Avoiding Robot with Ultrasonic Sensor
#include <Servo.h>
#include „Ultrasonic.h”
const int buzzer = 8;
const int motorA1= 2;
const int motorA2= 6;
const int enableA = 3;
const int motorB1= 10;
const int motorB2= 9;
const int enableB = 5;
Ultrasonic ultrasonic(A2 ,A3); //(trig pin,echo pin)
Servo myservo;
int distance;
int checkRight;
int checkLeft;
int pos=100;
int speedPWM = 150; //Change speed (PWM max 255)
void setup()
{
myservo.attach(7); //Servo pin connected to pin 7
myservo.write(pos);
pinMode(buzzer, OUTPUT);
pinMode(motorA1,OUTPUT);
pinMode(motorA2,OUTPUT);
pinMode(motorB1,OUTPUT);
pinMode(motorB2,OUTPUT);
pinMode(enableA, OUTPUT);
pinMode(enableB, OUTPUT);
delay(1000);
}
void loop(){
analogWrite(enableA, speedPWM);
analogWrite(enableB, speedPWM+50);
//Read distance…
distance = ultrasonic.Ranging(CM); // CM= centimeters INC= inches
delay(20);
//Check for objects…
if (distance > 15){
forward(); //All clear, move forward!
noTone(buzzer);
}
else if (distance <=15){
stop(); //Object detected! Stop the robot and check left and right for the better way out!
tone(buzzer,500); // play a tone
//Start scanning…
for(pos = 30; pos < 170; pos += 1){
myservo.write(pos);
delay(10);
}
checkLeft = ultrasonic.Ranging(CM);
for(pos = 170; pos>=30; pos-=1){
myservo.write(pos);
delay(10);
}
checkRight= ultrasonic.Ranging(CM);
myservo.write(100); // Sensor „look” forward again
// decision turn left or right?
if (checkLeft < checkRight){
left();
delay(500);
}
else if (checkLeft > checkRight){
right();
delay(500);
}
else if (checkLeft <=10 && checkRight <=10){
backward();
left();
}
}
delay(150);
}
void forward(){
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
}
void backward(){
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
}
void left(){
digitalWrite(motorA1, HIGH);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, HIGH);
}
void right(){
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, HIGH);
digitalWrite(motorB1, HIGH);
digitalWrite(motorB2, LOW);
}
void stop(){
digitalWrite(motorA1, LOW);
digitalWrite(motorA2, LOW);
digitalWrite(motorB1, LOW);
digitalWrite(motorB2, LOW);
}
//––––––––––––––
Atenție la declararea pinilor. Dacă copiați codul atenție la fonturi.
Succes !