小车实现壁障功能

来源:互联网 发布:文件强力删除软件 编辑:程序博客网 时间:2024/04/28 04:49
1.所用材料:L298N电机驱动模块、LM2596、HC-SR04、舵机、小车底盘、18650电池等。

2.接线图:
3.需要注意的是:准备一块LM2596,舵机电源应取于LM2596(否则会有干扰)。

4.Arduino代码:
#include <Servo.h>
Servo servoone;
char state=' ';
int midDist;
int leftDist;
int rightDist;
#define echoPin 12
#define trigPin 13
void goAhead() {
  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);   
}
void turnRight() {
  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);
}
void allStop() {
  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;
}
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();      
  } 
}
void setup(){
  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();
    }
}