用arduino写一个寻迹避障小车
时间: 2023-12-29 11:46:35 浏览: 108
好的,下面是一个简单的寻迹避障小车的Arduino代码,需要连接两个红外传感器和一个超声波传感器:
```C++
// 引入头文件
#include <NewPing.h>
// 定义超声波传感器引脚
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200
// 定义左右红外传感器引脚
#define LEFT_PIN A0
#define RIGHT_PIN A1
// 定义电机驱动引脚
#define MOTOR1_PIN1 6
#define MOTOR1_PIN2 5
#define MOTOR2_PIN1 9
#define MOTOR2_PIN2 10
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
// 配置电机驱动引脚
pinMode(MOTOR1_PIN1,OUTPUT);
pinMode(MOTOR1_PIN2,OUTPUT);
pinMode(MOTOR2_PIN1,OUTPUT);
pinMode(MOTOR2_PIN2,OUTPUT);
// 配置左右红外传感器引脚
pinMode(LEFT_PIN, INPUT);
pinMode(RIGHT_PIN, INPUT);
}
void loop() {
// 测量距离
delay(50);
unsigned int distance = sonar.ping_cm();
// 判断是否需要避障
if (distance > 5 && distance < 20) {
// 避障
digitalWrite(MOTOR1_PIN1, LOW);
digitalWrite(MOTOR1_PIN2, HIGH);
digitalWrite(MOTOR2_PIN1, HIGH);
digitalWrite(MOTOR2_PIN2, LOW);
delay(1000);
digitalWrite(MOTOR1_PIN1, HIGH);
digitalWrite(MOTOR1_PIN2, HIGH);
digitalWrite(MOTOR2_PIN1, HIGH);
digitalWrite(MOTOR2_PIN2, HIGH);
delay(1000);
} else {
// 寻迹
int leftSensor = digitalRead(LEFT_PIN);
int rightSensor = digitalRead(RIGHT_PIN);
if (leftSensor == HIGH && rightSensor == LOW) {
// 左偏转
digitalWrite(MOTOR1_PIN1, HIGH);
digitalWrite(MOTOR1_PIN2, LOW);
digitalWrite(MOTOR2_PIN1, HIGH);
digitalWrite(MOTOR2_PIN2, HIGH);
} else if (leftSensor == LOW && rightSensor == HIGH) {
// 右偏转
digitalWrite(MOTOR1_PIN1, HIGH);
digitalWrite(MOTOR1_PIN2, HIGH);
digitalWrite(MOTOR2_PIN1, HIGH);
digitalWrite(MOTOR2_PIN2, LOW);
} else {
// 直行
digitalWrite(MOTOR1_PIN1, HIGH);
digitalWrite(MOTOR1_PIN2, LOW);
digitalWrite(MOTOR2_PIN1, HIGH);
digitalWrite(MOTOR2_PIN2, LOW);
}
}
}
```
这段代码中,我们使用了两个红外传感器来寻迹,如果超声波传感器测量到距离小于20cm的障碍物,就会进行避障。电机驱动引脚的控制方式为L298N,可以通过改变引脚高低电平的方式控制小车转向。需要注意的是,这只是一个简单的示例代码,实际使用中还需要根据具体的硬件进行调整。
阅读全文