|
1、原理图
Arduino开发板的简介
1)1个9V DC输入,为Arduino板提供外部电源输出,使Arduino控制板具有能够驱动舵机等大功率外部设备的能力;
2)1个USB口,通过该口连接到计算机,由Arduino的IDE将用户编写好的控制程序上传到控制板中,同时还可以通过该口为电路板供电,驱动小功率的外部设备;
3)14个数字输入/输出端,其中端口0(RX)和1(TX)分别连接主控芯片的串行引脚,用来接收和发送TTL串行数据。其中端口2、3可以接收外部信号,实现外部中断功能;端口3、5、6、9、10、11作为PWM端口,可用于电机PWM调速[5]或音乐播放;端口10(SS)、11(MOSI)、12(MISO)和13(SCK)在SPI模块库的支持下,可以提供SPI通信模式;端口13内部连接了一个LED指示灯,随着13脚上电平的高低变化,实现开启和关闭;
4)6个模拟输入/输出端,其中端口4(SDA)和端口5(SCL)端口可以实现I2C通信;
5)1个5 V DC输出和1个3.3 V DC输出,可为其它电路提高3.3 V和5 V直流电源;
6)1个复位接口。
GP2D12简介
上图就是GP2D12红外线测距传感器的电压值与距离值的关系曲线,从这个曲线可以看出,电压输出与距离成反比,而且是非线性关系。
根据上图关系曲线,大约关系为10cm距离时有2.55V输出,80cm距离时有0.42V输出。可以通过该曲线拟合出电压值与距离值的数学关系式,但是这个关系式里的距离是参考距离值,实际距离值=(参考距离值-0.42)cm,另外由于Arduino的模拟量采样命令analogRead(),采样的数据范围是0至1023,对应的电压范围是0至5V,每格数据代表0.0049V,于是读取的有效数据应该由86(0.42V)至520(2.548V)。所以最终实际距离=2547.8/((float)采样数据*0.49-10.41)-0.42。
2、代码流程图
程序运行到流程为:首先初始化串口的波特率,串口的波特率初始化之后可以进行串口通信,在,静茹到loop循环中,进行数据的读取,数据读取的过程中需要判断数据端正确性,如果数据不正确显示is not value,如果显示合理的范围在串口打印出来。
3、功能结构说明
本设计使用Arduino单片机做为控制,使用红外测距模块 GP2D12检测距离,通过单片机的串口输出。
4、函数说明
Arduino开发使用ide开发工具,具有较多的库函数,再开发中不需要对每个模块进行寄存器操作方便开发。
void setup()//初始化设置函数
{
Serial.begin(9600); //波特率9600用于显示数据
}
void loop()//主程序运行部分
{
int tmp = analogRead(A3);//模拟引脚3口
int gao=tmp/10;//将采取到的值进行高位和低位截取
int di=tmp%10;//截取低位
int value=gao*10+di;//将高位和低位的值相加
delay(50);//采样时间延时10ms
if(value>10&&value<80) //判读值正确
{
Serial.print(value);//打印出距离值
Serial.println("cm");//打印出cm
}
else Serial.println("is not value");//如果距离不再10-80之间显示距离值不正确
}
| 5、仿真结果
使用proteus仿真的结果显示出,再串口输出的界面中显示设定的值34-35cm的范围中。
|
评分
-
查看全部评分
|