实验目的:

通过使用Arduino控制避障智能小车,学习Arduino编程和电路控制的基本原理,并实现小车的自动避障功能。

实验材料:

  1. Arduino Uno控制板

  2. L298N电机驱动模块

  3. HC-SR04超声波传感器

  4. SG90小型舵机

  5. 小车底盘、电池、电机等

  6. 杜邦线、面包板等

实验原理:

小车控制原理:

小车控制采用Arduino Uno板作为控制器,驱动两个电机分别控制小车前进、后退、左转、右转等动作。电机驱动使用L298N模块,由Arduino控制模块输出PWM控制信号,通过L298N模块转换为电机控制信号,实现电机的正转、反转、停止等控制动作。

超声波测距原理:

超声波传感器HC-SR04是一种常用的测距传感器,利用超声波的反射原理测量物体与传感器之间的距离。传感器发送一个高频声波信号,然后接收来自物体反射回来的声波信号,并通过计算发送和接收之间的时间差,可以计算出物体与传感器之间的距离。

舵机控制原理:

舵机是一种小型电机,可以通过控制PWM信号的占空比来控制其旋转的角度。在小车避障中,我们使用舵机控制超声波传感器的旋转角度,实现对周围障碍物的检测。

避障控制原理:

当超声波传感器检测到前方有障碍物时,舵机会转动一定角度,使超声波传感器的探测范围扩大,然后小车会根据超声波传感器检测到的距离信息,调整行驶方向,避开障碍物。

实验步骤:

  1. 将L298N模块和Arduino Uno连接,将电机接到L298N模块上。

  2. 将超声波传感器和舵机连接到Arduino Uno上。

  3. 编写Arduino程序,实现小车的避障控制。

  4. 将程序上传到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的避障智能小车控制。这些知识和技能对于我们今后的学习和工作都有很大的帮助

基于arduino的避障智能小车控制的实验报告包括代码

原文地址: https://www.cveoy.top/t/topic/eGsE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录