基于arduino的避障智能小车控制的实验报告包括代码
实验目的:
通过使用Arduino控制避障智能小车,学习Arduino编程和电路控制的基本原理,并实现小车的自动避障功能。
实验材料:
-
Arduino Uno控制板
-
L298N电机驱动模块
-
HC-SR04超声波传感器
-
SG90小型舵机
-
小车底盘、电池、电机等
-
杜邦线、面包板等
实验原理:
小车控制原理:
小车控制采用Arduino Uno板作为控制器,驱动两个电机分别控制小车前进、后退、左转、右转等动作。电机驱动使用L298N模块,由Arduino控制模块输出PWM控制信号,通过L298N模块转换为电机控制信号,实现电机的正转、反转、停止等控制动作。
超声波测距原理:
超声波传感器HC-SR04是一种常用的测距传感器,利用超声波的反射原理测量物体与传感器之间的距离。传感器发送一个高频声波信号,然后接收来自物体反射回来的声波信号,并通过计算发送和接收之间的时间差,可以计算出物体与传感器之间的距离。
舵机控制原理:
舵机是一种小型电机,可以通过控制PWM信号的占空比来控制其旋转的角度。在小车避障中,我们使用舵机控制超声波传感器的旋转角度,实现对周围障碍物的检测。
避障控制原理:
当超声波传感器检测到前方有障碍物时,舵机会转动一定角度,使超声波传感器的探测范围扩大,然后小车会根据超声波传感器检测到的距离信息,调整行驶方向,避开障碍物。
实验步骤:
-
将L298N模块和Arduino Uno连接,将电机接到L298N模块上。
-
将超声波传感器和舵机连接到Arduino Uno上。
-
编写Arduino程序,实现小车的避障控制。
-
将程序上传到Arduino Uno控制板,测试小车避障控制效果。
实验代码:
#include <Servo.h>
Servo myservo; //定义舵机对象
int pos = 90; //定义舵机初始角度
int trigPin = 7; //超声波信号发射引脚
int echoPin = 6; //超声波信号接收引脚
int motorPin1 = 9; //电机控制引脚1
int motorPin2 = 10; //电机控制引脚2
int motorSpeed = 200; //电机转速
int safeDistance = 20; //安全距离
void setup(){
pinMode(trigPin, OUTPUT); //设置超声波信号发射引脚为输出模式
pinMode(echoPin, INPUT); //设置超声波信号接收引脚为输入模式
pinMode(motorPin1, OUTPUT); //设置电机控制引脚1为输出模式
pinMode(motorPin2, OUTPUT); //设置电机控制引脚2为输出模式
myservo.attach(11); //将舵机连接到引脚11
myservo.write(pos); //将舵机初始角度设为90度
}
void loop(){
int distance = measureDistance(); //测量前方障碍物距离
if(distance < safeDistance){ //如果距离小于安全距离
avoidObstacle(); //避开障碍物
}else{ //否则前进
forward();
}
}
int measureDistance(){ //测量前方障碍物距离
digitalWrite(trigPin, LOW); //将超声波信号发射引脚设置为低电平
delayMicroseconds(2);
digitalWrite(trigPin, HIGH); //将超声波信号发射引脚设置为高电平
delayMicroseconds(10);
digitalWrite(trigPin, LOW); //将超声波信号发射引脚设置为低电平
int duration = pulseIn(echoPin, HIGH); //计算超声波信号往返时间
int distance = duration / 58; //计算距离
return distance;
}
void forward(){ //前进
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(motorSpeed);
}
void backward(){ //后退
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(motorSpeed);
}
void left(){ //左转
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
analogWrite(motorSpeed);
}
void right(){ //右转
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(motorSpeed);
}
void avoidObstacle(){ //避开障碍物
int left_distance = measureDistance(); //测量左侧距离
myservo.write(pos - 45); //将舵机转向左侧
delay(500);
int right_distance = measureDistance(); //测量右侧距离
myservo.write(pos + 45); //将舵机转向右侧
delay(500);
if(left_distance < safeDistance && right_distance < safeDistance){ //如果左右两侧都有障碍物
backward(); //后退
delay(1000);
left(); //左转
delay(1000);
}else if(left_distance < safeDistance){ //如果左侧有障碍物
right(); //右转
delay(1000);
}else if(right_distance < safeDistance){ //如果右侧有障碍物
left(); //左转
delay(1000);
}else{ //否则直行
forward();
}
myservo.write(pos); //将舵机复位
}
实验结果:
完成实验后,我们可以通过电脑串口监视器查看小车的运行情况。当小车检测到前方有障碍物时,会自动避开障碍物,保持安全距离。我们也可以通过调整程序中的参数,改变小车的运行速度、安全距离等参数,进一步优化小车的性能。
实验总结:
通过本次实验,我们学习了Arduino编程和电路控制的基本原理,了解了超声波传感器、舵机和L298N电机驱动模块的工作原理,并成功实现了基于Arduino的避障智能小车控制。这些知识和技能对于我们今后的学习和工作都有很大的帮助
原文地址: https://www.cveoy.top/t/topic/eGsE 著作权归作者所有。请勿转载和采集!