专注电子技术学习与研究
当前位置:单片机教程网 >> Arduino >> 浏览文章

光电门测加速度实验

作者:未知   来源:互联网   点击数:  更新时间:2014年07月31日   【字体:

本实验需要一个Arduino开发板,两个GQY的光电门,一台安装了 Flash cs3Arduino软件的计算机。


 
首先,必须了解光电门连接口几根连接线的具体作用。可以使用示波器、万用表等进行测试。最后发现,虽然连接线中有六根线,但是只有三根起作用,分别是电源输入的两根线和信号输出线。而且光电门的原理也非常简单,当有物体挡住光电门时,信号输出线便为高电平,否则为低电平。
接着,将Arduino的电压输入端连接到光电门的电源输入线,将光电门的信号输出线连接到Arduino的任意一个信号输入端口。然后对Arduino进行编程如下(只有主要程序段,如有需要可以联系笔者):
……
  duration = pulseIn(inputPin, HIGH,5000000); //计算出光电门被挡住的时间间隔duration
time = micros();                         //得到此刻Arduino板子上的时间time
Serial.print(duration);                    //发送时间duration
Serial.print("t");                        //发送字母t,用来分隔两个时间
Serial.print(time);                      //发送板子时间time
……
可以看到Arduino端的程序非常简单,它的作用就是发送两个时间,一个是光电门本次被挡光的时间、另一个是光电门结束被挡光时Arduino板上的时刻。
接下来编写Flash端的程序,因为程序代码过长,在这里仅叙述其基本原理而不再一一写出。
先读取存储在Serproxyxml格式的数据,其实就是来自于Arduino发送的字母串(两个时间以及中间的字母t都会被认为一整串字母),这个字母串在每次接收Arduino的数据时都会更新。Flash读取后先对字母串进行处理,分离出两个时间,并将它们转换为数值形式。然后利用Flash里的setInterval(updateTimer, 10)每隔10ms运行一下主函数updateTimer
具体要用光电门来进行什么样的实验、要用Flash进行一些什么样的运算就需要编写主函数updateTimer来实现了。例如仅仅需要实现一个将光电门挡光时间显示出来的课件,就只需要将时间间隔数值在一个动态字符框内显示出来即可,因为主函数每10ms就会执行一次,所以在课件中显示出来的也几乎就是实时的数据。
Flash端还必须设置一些简单的存储数据的功能,但是因为Flash在单机运行的时候并不支持将数据输出到其它文档,所以这里只将这些数据存储在一个多行显示的字符框内。具体的界面如图所示,每按一次保存按钮,便会在数据框内记录下此次实验的两个质量值和一个测得的加速度值。当实验完成后,将数据框内的数据全部选中,然后复制到excel文档中,利用excel的图像处理功能来解决最后图像绘制的任务(关于excel中如何处理数据,笔者在这里不再介绍,可以参考上一个实验中的处理)。
关闭窗口

相关文章