- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
最近忙生活琐事,很少搞这些小东东,今天闲了一下就发表一个Arduino控制GP2D12的小实例,仅供大家参考!
器材:Arduino开发板,GP2D12,1602字符液晶,连接线若干。
Arduino开发板和1602字符液晶我就不多介绍了,前面都提到过。
GP2D12是日本SHARP公司生产的红外距离传感器,价格便宜,测距效果还不错,主要用于模型或机器人制作。
技术规格如下:
探测距离:10-80cm工作电压:4-5.5V标准电流消耗:33-50 mA输出量:模拟量输出,输出电压和探测距离成比例
从曲线图中我们可以看出,输出电压并非是线性的,所以这个测距也就只能测个大概,如果要精度高的话就需要做非线性校正,这里我们就不讨论这个问题了。
实验原理:
GP2D12根据距离的远近输出相应的电压,经Arduino开发板0号模拟口输入,转换成数字量,根据公式计算得到需要显示的数据。
实验原理图:
实验实物图:
没有障碍物,显示范围超出。
有障碍物时显示测量距离。
经实验,需要在GP2D12的电源端加个10UF以上的电解电容,稳定供电电压,以保证输出模拟电压更稳定。
实验代码:
/********************************************************************/int GP2D12=0;
int ledpin = 13;
int LCD1602_RS=12;??
int LCD1602_RW=11;??
int LCD1602_EN=10;??
int DB[] = {6, 7, 8, 9};
char str1[]= www.DFR;
char str2[]=Renge:00cm;
char str3[]=Renge Over;/********************************************************************/
?
/********************************************************************/? void LCD_Command_Write(int command){?int i,temp;?digitalWrite( LCD1602_RS,LOW);?digitalWrite( LCD1602_RW,LOW);?digitalWrite( LCD1602_EN,LOW);
?temp=command 0xf0;?for (i=DB[0]; i = 9; i++)?{?? digitalWrite(i,temp 0x80);?? temp = 1;?}??digitalWrite( LCD1602_EN,HIGH);?delayMicroseconds(1);?digitalWrite( LCD1602_EN,LOW);
?temp=(command 0x0f)4;?for (i=DB[0]; i = 10; i++)?{?? digitalWrite(i,temp 0x80);?? temp = 1;?}
?digitalWrite( LCD1602_EN,HIGH);?delayMicroseconds(1); ?digitalWrite( LCD1602_EN,LOW);}
/********************************************************************/void LCD_Data_Write(int dat){? ?int i=0,temp;?digitalWrite( LCD1602_RS,HIGH);?digitalWrite( LCD1602_RW,LOW);?digitalWrite( LCD1602_EN,LOW);
?temp=dat 0xf0;?for (i=DB[0]; i = 9; i++)?{?? digitalWrite(i,temp 0x80);?? temp = 1;?}
?digitalWrite( LCD1602_EN,HIGH);?delayMicroseconds(1);?digitalWrite( LCD1602_EN,LOW);
?temp=(dat 0x0f)4;?for (i=DB[0]; i = 10; i++)?{?? digitalWrite(i,temp 0x80);?? temp = 1;?}
?digitalWrite( LCD1602_EN,HIGH);?delayMicroseconds(1); ?digita
文档评论(0)