arduino平衡车超声波_Arduino Nano DIY超声波测距平衡小车源码与资料分享

本文介绍了一种使用Arduino Nano、HC-SR04超声波模块和L298N驱动模块制作低成本自平衡小车的方法。通过超声波测距替代复杂的传感器和算法,降低了制作难度。文章详细阐述了硬件设计、程序设计和调试流程,包括平衡点设置、PD算法的Kp和Kd调整,以及电机方向校正等步骤。作者还分享了项目中遇到的问题及解决方案,如电机干扰和超声波模块选择,并对方案的优缺点进行了总结,鼓励读者动手实践并分享经验。
摘要由CSDN通过智能技术生成

采用Arduino Nano控制模块制作的超声波测距平衡小车

1、项目概述

因为第一次制作自平衡小车,心里没底,也就没有投入过多的资金,一切按照最小配置进行,所以选择“TT马达”,俗称“香蕉电机”的小车底盘。在等快递送货期间,才看到各种说用“香蕉电机”做自平衡小车的问题,最大的问题就是电机启动对传感器和单片机的干扰问题,还有就是平衡的稳定性不好等问题。在我以Arduino + MPU6050 + L298N为核心做完后,闲得没事干,就想做一款成本低,易上手,最小配置和最基本功能的自平衡小车,其目的就是给那些没有什么经验的刚入行的新手们提供一个入门的解决方案。所以这个项目的目标有以下几点:

a、成本低;

b、目标功能明确,就是实现小车的自平衡;

c、系统稳定可靠;

d、调试、操作方便简单。

2、项目方案

基于上述目标,本方案采用超声波测距模块作为小车平衡状态的检测,免去了对加速度、陀螺仪传感器的理解和复杂处理算法。小车的平衡控制仍然采用网络上流行的Arduino开源硬件,再加上电机驱动模块 L298N,电机仍然采用TT马达(香蕉电机)。

该方案为了降低成本,采用电位器调整设定小车的平衡参数,不使用蓝牙无线模块或有线串口在线调整参数。

用超声波测距的方式实现的自平衡小车,网络上有人提出这种方案无法在坡度变化的斜坡上保持平衡,这种说法经过我的实践,是有解决方案的,这个问题我将在后面进行阐述。

平衡控制的算法还是采用平衡车中经典的PD算法。

3、硬件设计

硬件设计比较简单,以Arduino Nano为核心控制模块,采用HC-SR04超声波测距模块,L298N电机驱动模块,供电采用7.4V/2200mAh锂电池。图中三个10K电位器分别用于平衡点设置、PD算法中Kp和Kd系数设置的调整。

电路原理图如下所示:

图中J1为HC-SR04超声波测距模块,J2、J3为L298N模块,Arduino Nano为核心控制模块,MG1、MG2分别为左右电机。器件采购清单见附件

程序设计

程序源代码见附件

6、调试流程

超声平衡小车装配完毕后如下图所示。

串口调试助手程序见附件

a、准备工作

将Kp与Kd调为0,调整方法是,旋转电位器后,按下Arduino模块上的复位键调整方可有效。调整后用串口调试助手(sscom42.exe)发送“F”命令,读取超声自平衡小车参数的设定值。在使用串口调试助手前,首先选择串口调试助手对应的串口号,设置好波特率,方可发送上述命令读取超声自平衡小车参数的设定值,操作界面如下图所示。

第一个数据为平衡点设定值,第二个数据为Kp,第三个数据为Kd。

b、超声波测距测试

发送相应“L”命令,读取超声波的测距值,注意,这里不是实际的mm或cm值,而是对应距离来回的传播时间值,是单片机内部计时的输出值。

操作界面如下图所示。

第一个数为超声波测距模块的直接输出值,第二个数为一阶滤波后的值。改变超声波测距模块与被测界面的距离,这两个值会发生相应的改变,距离近,测得的值变小&

非常感谢您的提问。下面是一个适合新手的详细 Arduino 超声波避障小教程。 材料清单: - Arduino UNO 控制板 - HC-SR04 超声波模块 - L298N 电机驱动模块 - 两个直流电机 - 9V 电池或者 USB 线 步骤1:连接电机驱动模块 将电机驱动模块连接到电机上,并将其连接到 Arduino 控制板上。将两个电机分别连接到电机驱动模块的 OUT1 和 OUT2 引脚上。 步骤2:连接超声波模块 将 HC-SR04 超声波模块连接到 Arduino 控制板上。将超声波模块的 VCC 引脚连接到 Arduino 控制板的 5V 引脚上,将 GND 引脚连接到 Arduino 控制板的 GND 引脚上。将超声波模块的 Trig 引脚连接到 Arduino 控制板的 9 号引脚上,将 Echo 引脚连接到 Arduino 控制板的 10 号引脚上。 步骤3:编写程序 打开 Arduino 开发环境,编写程序。程序的主要功能是控制小的运动和检测障碍物。以下是一个简单的程序: ``` #define trigPin 9 #define echoPin 10 #define leftMotor 5 #define rightMotor 6 void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(leftMotor, OUTPUT); pinMode(rightMotor, OUTPUT); } void loop() { long duration, cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 58; if (cm < 20) { // 如果障碍物离小不到 20 厘米 digitalWrite(leftMotor, LOW); digitalWrite(rightMotor, LOW); delay(500); digitalWrite(leftMotor, HIGH); digitalWrite(rightMotor, LOW); delay(1000); } else { // 否则正常行驶 digitalWrite(leftMotor, HIGH); digitalWrite(rightMotor, HIGH); } } ``` 步骤4:上传程序 将 Arduino 控制板连接到电脑上,并上传程序。上传成功后,将小放在地面上,观察其运动。当小接近障碍物时,它会停下来,然后向左转 90 度,再向前行驶。 这就是一个简单的 Arduino 超声波避障小教程。希望对您有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值