Intel Galileo笔记(七)小小的玩耍之超声波测距
2014-11-04 23:35
204 查看
一,前言
车队终于从襄阳比好了赛,感觉时隔一个月终于回来了,并且考完了该死的生化期中!再次开始研究我的galileo了,因为得知了edison要出来了,我感觉我的重心可以转移到了edison了,很大的原因就是edison是一块核心板,更方便我们开发了,当然我先做一个测距仪先!至于为什么要做这个小东西呢,因为我想靠超声波去测流速,没错就是空气流速!!感觉是超酷的!
F1上用的是皮托管,就像下面这样的,我觉得我完全可以做一个超声波的!
二,原理
其实是超级简单的,就是一个测距仪,当空气流动的时候,自然距离就变短边长了,当然我想谈的还是使用galileo中碰到的一些问题。三,问题来了
1.串口模式
我买的模块型号是US-100 ,能工作在两个状态,一个是通过串口通讯,还有一个就是发一个信号,然后自己计时,首先是串口的问题,galileo上的串口分配在arduino ide中还是很神奇的,手册如下:不难看出,应该有两个串口,那arduino里面改怎么用呢?没错就是这么用:
Serial.println(); //通过USB传到 arduino monitor Serial1.println(); //IO0,1所对应的串口 Serial2.println();//tty 设备输出
这里又牵涉到一个 galileo 和 galileo gen 2 的区别了,galileo gen 2 是可以使用软串口的(就是你可以任意找两个端口做串口,是不是很酷!),你可以在例子里面看到 software serial,当选择目标板子为 galileo的时候会出错而gen 2 就不会,这点我也很困惑,照理来说不应该啊??
其他也就没什么问题了,下面贴上我的代码:
/* BY DIG */ unsigned int HighLen = 0; unsigned int LowLen = 0; unsigned int Len_mm = 0; int temp=0; void setup() { Serial.begin(9600); Serial1.begin(9600); Serial.println("Ultrasonic sensor:"); } void loop() { Serial1.write(0X55); // 发送0X55,触发US-100开始测距 delay(500); //延时500毫秒 HighLen = Serial1.read(); //距离的高字节 LowLen = Serial1.read(); //距离的低字节 Len_mm = HighLen*256 + LowLen; //计算距离值 Serial1.write(0X50); // 发送0X55,触发US-100开始测距 delay(10); //延时500毫秒 temp = Serial1.read(); //距离的高字节 Len_mm = HighLen*256 + LowLen; //计算距离值 Serial.print("Present Length is: "); //输出结果至串口监视器 Serial.print(Len_mm, DEC); //输出结果至串口监视器 Serial.println("mm"); //输出结果至串口监视器 Serial.print("Temperature is: "); //输出结果至串口监视器 Serial.print(temp-45, DEC); //输出结果至串口监视器 Serial.println("C"); //输出结果至串口监视器 delay(10); //等待500ms*/ }
2.触发模式
说实话,这一步我也是醉了,直接贴代码:/* BY DIG */ const int TrigPin = 4; const int EchoPin = 3; float distance; void setup() { Serial.begin(9600); pinMode(TrigPin, OUTPUT); pinMode(EchoPin, INPUT); Serial.println("Ultrasonic sensor:"); } void loop() { digitalWrite(TrigPin, LOW); delayMicroseconds(2); digitalWrite(TrigPin, HIGH); delayMicroseconds(10); digitalWrite(TrigPin, LOW); distance = pulseIn(EchoPin, HIGH); Serial.print(distance); Serial.print("cm"); Serial.println(distance); }
这段代码是完全正确的,但是在galileo上一直显示0cm的,以为看手册:
记住是有上拉电阻的!也就是一直是高电平,谈何触发呢?因此,实际电路上应该有个电阻下拉的应该就ok了!
正是这个问题,我看了pulsein半天!!
四,总结
虽然是个比较简单的东西,但是还是有很多的问题,最主要还是不看手册,不看文档!其次我想说一个问题就是,很多人都要弄C++编译,其实直接用arduino ide 就行了,因为他的原理就是一个交叉C++编译器!
相关文章推荐
- Intel Galileo笔记(三)windows安装
- Intel Galileo笔记(五)VS配置与编译
- Intel Galileo笔记(一)
- Intel Galileo笔记(四)windows on galileo的配置
- [Erlang 学习笔记] erlang socket 小小 demo
- 基于msp430小车驱动,寻光设计,超声波测距
- 小小笔记,大家分享
- Arduino超声波测距程序
- IntelASMIrvine第六章学习笔记
- 超声波测距程序
- 超声波模块 测距模块 超声波 传感器 送资料
- [笔记] Intel C++编译器的预定义宏(Windows版、Linux版)
- [pythonScript][cherrypy3.2]Cherrypy 小小笔记
- ardunio 实验:超声波测距、声光报警模拟倒车雷达
- OpenCV学习笔记(18)双目测距与三维重建的OpenCV实现问题集锦(三)立体匹配与视差计算
- 小小笔记
- [笔记]Arduino平台使用US-100超声波测距模块的电平模式测距实验
- 51单片机超声波测距C程序