标题: Arduino GP2D12的Proteus仿真 [打印本页]

作者: youngzhao_work    时间: 2020-6-6 09:13
标题: Arduino GP2D12的Proteus仿真
1、原理图
Arduino开发板的简介
119V DC输入,为Arduino板提供外部电源输出,使Arduino控制板具有能够驱动舵机等大功率外部设备的能力;
21USB口,通过该口连接到计算机,由ArduinoIDE将用户编写好的控制程序上传到控制板中,同时还可以通过该口为电路板供电,驱动小功率的外部设备;
314个数字输入/输出端,其中端口0RX)和1TX)分别连接主控芯片的串行引脚,用来接收和发送TTL串行数据。其中端口23可以接收外部信号,实现外部中断功能;端口35691011作为PWM端口,可用于电机PWM调速[5]或音乐播放;端口10SS)、11MOSI)、12MISO)和13SCK)在SPI模块库的支持下,可以提供SPI通信模式;端口13内部连接了一个LED指示灯,随着13脚上电平的高低变化,实现开启和关闭;
46个模拟输入/输出端,其中端口4SDA)和端口5SCL)端口可以实现I2C通信;
515 V DC输出和133 V DC输出,可为其它电路提高33 V5 V直流电源;
61个复位接口。
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的范围中。



arduino_GP2D12_1.rar

7.98 MB, 下载次数: 25, 下载积分: 黑币 -5


作者: laoguang    时间: 2020-6-11 07:46
这个真的好值得下载!!!!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1