雷竞技注册
项目

使用LaunchPad制作一个激光绊线报警器

2015年11月18日通过蒂姆血性小子

利用LaunchPad的模拟数字转换器(ADC)功能来构建激光触发线报警。这是一种熟悉LaunchPad的好方法,同时也能创造一些很酷的内容。

做一个激光触发报警器?是的,请!

理解发射台的模拟数字转换

MSP430单片机发射台有一个内置的10位模拟数字转换器(ADC)模块,将应用于其输入的模拟电压转换为数字数字。在本文中,我们将向您展示如何使用LaunchPad的ADC,并构建在其中开发的示例应用程序能源IDE。

LaunchPad ADC模块的一般功能如下:

  • 10位分辨率
  • 200ksps转化率
  • 逐次逼近寄存器(SAR)核
  • 8独立输入通道
  • 可编程内部电压基准
  • 外部电压基准输入
  • 可编程采样和保持电路

10位ADC模块将输入电压转换为0 ~ 1023之间的数字,分别是电压下限VR+和电压上限VR-。MSP430让用户选择许多不同的参考极限,这可以是电源电压(VCC)和地的组合,外部参考输入VREF+/VEREF+和VREF-/VEREF-和内部电压发电机2.5V和1.5V。假设我们使用电源电压VCC (3.6V)和GND作为参考限值,读数0和1023分别代表0和3.6V,它们之间的ADC读数可以使用下式计算。

能源,可以通过使用analogReference(option)函数来选择ADC参考源。该功能选项为DEFAULT (VR+ = VCC, VR- = 0V)、INTERNAL1V5 (VR+ = 1.5V, VR- = 0V)、INTERNAL2V5 (VR+ = 2.5V, VR- = 0V)、EXTERNAL (VR+ = VREF, VR- = 0V)。更多的选项可以通过直接访问ADC10CTL0注册

模拟输入引脚的电压必须在VR-到VR+的电压范围内,才能得到有效的转换结果。模拟输入引脚的绝对最大额定电压是VCC。

LaunchPad从A0到A7有8个模拟输入引脚,如下图所示。不幸的是,它们没有标记在LaunchPad PCB上。

在Energia中,analogRead()函数用于读取应用于选定通道的模拟电压,并返回0到1023之间的整数。这个函数需要通道号作为输入。硬件多路复用器在内部将所选通道连接到ADC模块,而其余通道保持隔离。例如" adcreading = analogRead(A4); "命令读取施加在引脚P1.4 (A4)上的模拟电压,并将结果写入int类型变量" adcreading "。每次转换大约需要100微秒。

在模拟到数字的转换过程中,模拟信号上的噪声可能会使转换结果失真,造成错误的读数。为了提高信噪比,采用过采样平均技术是一种很好的方法。例如,连续读取五个样本并取其平均值将比读取单个样本得到更准确的结果。

还有一些其他通道内部连接到ADC模块(参见ADC10CTL1注册获取更多信息)。其中一个是内部温度传感器的输出。读取温度传感器数据,只需使用analogRead(TEMPSENSOR);命令。

激光绊线报警项目

现在是使用LaunchPad的ADC特性构建示例应用程序的时候了。我们将使用一个激光二极管,一个光依赖电阻,一个蜂鸣器,一个电阻和LaunchPad来建立一个激光绊线报警。

光相关电阻(LDR)是一种半导体,其电阻随其表面光强的变化而变化。在黑暗的环境中,它的电阻可以增加到百万欧姆,在有光的环境中,它的电阻降低到几百欧姆。LDR的特性曲线如下所示。

在实际应用中,采用LDR作为激光传感器。在日光条件下,LDR的电阻约为1-2千欧姆。当激光束落在LDR表面时,其电阻下降到100-200欧姆。我们需要知道LDR的电阻来检测绊线是否被切断。因为LaunchPad的ADC模块可以读取模拟电压,所以我们需要将电阻信息转换为电压。为了实现这一点,一个串联电阻被连接到LDR和VCC电压被应用到这个电阻网络。根据LDR电阻的不同,这个分压器的输出电压会发生变化。您可以看到下面的应用程序原理图。

当激光束落在LDR表面时,测得LDR的电阻约为200欧姆。在此条件下,A0输入端的电压变为[3.6V/(1.5K + 0.2K)] * 1.5K = 3.18V。当绊线被切断时,LDR的电阻会增加,A0输入上的电压会降低。所以我们可以说,如果我们从A0输入读数小于3.0V,电线被切断,警报应该被激活。

Energia应用程序的草图如下所示。

代码

//当你按下reset时,setup例程运行一次://设置VR+ = VCC:3.6B, VR- = GND:0V为上下限pinMode(3,OUTPUT);//设置蜂鸣器引脚模式}//循环程序一遍又一遍的运行:void loop(){//读取模拟电压在A0 int sensorValue = analogRead(A0);//将ADC读数转换为电压浮动电压= sensorValue * (3.6 / 1023);if (voltage < 3.0){//触发线被切断:用振荡digitalWrite(3,HIGH)激活蜂鸣器;延迟(150);digitalWrite(低);延迟(100);} else {// tripwire is not cut:去激活蜂鸣器digitalWrite(3,LOW);}}

Laser_Tripwire.zip

你可以在以下视频中看到激光触发线报警的作用:

视频

自己试试这个项目吧!BOM。

3评论
  • 年代
    超引力 2015年12月08日

    很巧妙的一个项目,激光绊线可以用在我几年前做的一个磁力悬浮器上,当物体打破了束流,束流就会打开或关闭一个电磁体。我能够使线圈下面两英寸的小金属片悬浮起来。它有一些振荡最初,但在一个正反馈电阻添加到电路后,它是平滑的,并使退出谈话部分。

    喜欢的。 回复
    • C
      cuyler1 2016年2月19日
      我很想看看你所建造的(磁悬浮)的示意图。或者你能告诉我去哪里吗。由于cuyler
      喜欢的。 回复
  • Rayregula 2016年6月8日

    你能把它转换成Arduino uno来使用吗?

    喜欢的。 回复