1.所用材料:L298N电机驱动模块、LM2596、HC-SR04、舵机、小车底盘、18650电池等。
2.接线图:
3.需要注意的是:准备一块LM2596,舵机电源应取于LM2596(否则会有干扰)。
4.Arduino代码:
#include <Servo.h>
Servo servoone;
Servo servoone;
char state=' ';
int midDist;
int leftDist;
int rightDist;
int midDist;
int leftDist;
int rightDist;
#define echoPin 12
#define trigPin 13
#define trigPin 13
void goAhead() {
analogWrite(3,0);
analogWrite(5,128);
analogWrite(6,0);
analogWrite(11,118);
}
analogWrite(3,0);
analogWrite(5,128);
analogWrite(6,0);
analogWrite(11,118);
}
void goBack() {
analogWrite(3,128);
analogWrite(5,0);
analogWrite(6,118);
analogWrite(11,0);
}
analogWrite(3,128);
analogWrite(5,0);
analogWrite(6,118);
analogWrite(11,0);
}
void turnRight() {
analogWrite(3,72);
analogWrite(5,0);
analogWrite(6,0);
analogWrite(11,65);
}
analogWrite(3,72);
analogWrite(5,0);
analogWrite(6,0);
analogWrite(11,65);
}
void turnLeft() {
analogWrite(3,0);
analogWrite(5,72);
analogWrite(6,65);
analogWrite(11,0);
}
analogWrite(3,0);
analogWrite(5,72);
analogWrite(6,65);
analogWrite(11,0);
}
void allStop() {
analogWrite(3,0);
analogWrite(5,0);
analogWrite(6,0);
analogWrite(11,0);
}
analogWrite(3,0);
analogWrite(5,0);
analogWrite(6,0);
analogWrite(11,0);
}
float checkdistance(){
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00;
return distance;
}
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
float distance = pulseIn(echoPin, HIGH) / 58.00;
return distance;
}
void turn(){
allStop();
servoone.write(170);
delay(500);
leftDist = checkdistance();
servoone.write(90);
delay(600);
if(leftDist>20){turnLeft();}else{
goBack();
}
servoone.write(10);
delay(600);
rightDist = checkdistance();
servoone.write(90);
delay(600);
if(rightDist>20){turnRight();}else{
goBack();
}
}
allStop();
servoone.write(170);
delay(500);
leftDist = checkdistance();
servoone.write(90);
delay(600);
if(leftDist>20){turnLeft();}else{
goBack();
}
servoone.write(10);
delay(600);
rightDist = checkdistance();
servoone.write(90);
delay(600);
if(rightDist>20){turnRight();}else{
goBack();
}
}
void setup(){
Serial2.begin(9600);
Serial.begin(9600);
servoone.attach(8);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
Serial2.begin(9600);
Serial.begin(9600);
servoone.attach(8);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop(){
servoone.write(90);
midDist=checkdistance();
if(midDist<10){
goBack();
delay(300);
}
if(midDist<=20&&midDist>10){
turn();
}
if(midDist>20){
goAhead();
}
}
servoone.write(90);
midDist=checkdistance();
if(midDist<10){
goBack();
delay(300);
}
if(midDist<=20&&midDist>10){
turn();
}
if(midDist>20){
goAhead();
}
}