|
楼主 |
发表于 2015-4-13 19:26:25
|
显示全部楼层
本帖最后由 wujingyu 于 2015-4-13 19:28 编辑
四、硬件设计
根据方案的框图,首先分别介绍各模块,由于这里主要是讨论自平衡小车,而不是学习单片机,所以与自平衡小车关系不大的单片机使用以及程序部分就不拟讨论了。按照框图顺序和硬件调试步骤,首先介绍的是超声波测距模块。
1、超声波测距模块
我们选择的超声波测距模块型号是:新款HC-SR04超声波测距模块。
这个模块的淘宝链接是:
http://item.taobao.com/item.htm? ... &_u=d79shmu6f6b
推荐用这种
不推荐用这种,就是图中红色区域有个4MHz的晶体
它的特点,我从卖家那里摘抄部分信息如下:
新款提升了IC性能,因晶振受低温环境影响,频率容易发生漂移。所以去掉了晶振。比带晶振的稳定很多,此型号为原厂原装型号,市场上大部分4块多钱的HC-SR04带晶振的那种,都是仿品性能不稳定!(通过我买的几种对比,情况的确如此,有些精度更高的,近距离运用时,效果更差)
(1)主要技术参数
工作电压:DC5V
静态电流:小于2mA
电平输出:高电平5V、低电平0V
感应角度:不大于15度
探测距离:2cm ~ 450cm
精度:可达0.3cm
(2)接线方式
VCC(电源正端)可用杜邦线接Arduino Nano模块的5V端;
GND(地)接Arduino Nano模块的GND;
Trig(控制端)接Arduino Nano模块的D4;
Echo(接收端)接Arduino Nano模块的D5。
(3)工作原理:
采用IO触发测距,给Trip控制端至少10us的高电平信号;模块自动发送8个40khz的方波,并自动检测是否有信号返回;如有信号返回,通过Echo输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离 =(高电平时间 * 声速)/ 2。
测试原理图
测试接线照片
//超声波测距模块测试程序
char val='z'; //调节与控制命令字
unsigned int TrigPin = 4, EchoPin = 5, Len_Echo = 0; //HC-SR04触发信号,回波检测,回波时间
unsigned long systime0; //上次系统时间,当前时间
//初始化
void setup() {
Serial.begin(115200);
pinMode(EchoPin, INPUT); //超声波测距
pinMode(TrigPin, OUTPUT);
digitalWrite(TrigPin, LOW);
systime0 = millis(); //读取系统时间
}
//主循环程序
void loop() {
if(millis() - systime0 >= 5){ //系统循环周期为5ms
systime0 = millis();
digitalWrite(TrigPin, HIGH); //发送超声波测量触发脉冲
delayMicroseconds(10);
digitalWrite(TrigPin, LOW);
Len_Echo = pulseIn(EchoPin, HIGH); //回波时间测量
if (Serial.available() > 0) {
val = Serial.read();
if(val == 'A') {
Serial.println(Len_Echo); //超声波测距输出
}
}
}
}
使用串口调试助手(sscom42.exe)发送字符“A”命令读取超声波的测距值。
程序中超声波的测量周期是5ms,一般超声波测距的测量周期远远大于这个值,但在小车平衡中,这个值不能太大,否则是不能稳定控制住小车平衡的。
串口测试界面如下图所示:
注意:串口号选择要正确,比特率要与程序中的一致(此处为115200),这里为了方便,串口输出的是字符串,发送的命令是“A”,图中用了100ms间隔的定时发送。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|