使用强度敏感的压力传感器来创建一个可见和可听的警报
扫描二维码
随时随地手机看文章
在这个项目中,我们将使用强度敏感的压力传感器来创建一个警报,在视觉和声音上警告我们在展示中发布的图形被操纵。这些人物被白光照亮。当你被操纵时,灯光的颜色就会变成红色,并发出警报。即使我们把图形放回原处,灯光的颜色也不会改变,警报继续响起,以找出哪个图形被操纵了。让我们先解释一下什么是强度相关传感器。
什么是抗强度相关的传感器?
力敏电阻(FSR)传感器是将施加在其上的物理压力作为电压值输出的传感器。这基本上是可变电阻。
通常,这些传感器由导电衬底层和半导体子结构层组成,据此,这些传感器通常由导电衬底层和半导体子结构层组成,由此,开放层的距离。在传感器的有源区施加的压力越大,该区域接触半导体层的点越多,使电阻值下降。
FSR基本上是电阻,改变它们的电阻值(以欧姆Ω为单位),这取决于它们被压的程度。这些传感器很容易使用,但不是很精确。它们不提供精确的值。用这些传感器可以确定重量。然而,你必须将电阻值转换成成比例的重量。那么重量就不准确了。然而,识别变化是可能的。这允许传感器用于此项目。
我们将使用的模块由FSR传感器和与传感器串联的510 kΩ电阻组成。该电路由5 VDC供电,电路的输出信号电压从分压器中移除,分压器由我们将使用的模块由FSR传感器和与传感器串联的510 kΩ电阻组成。电路供电5vdc,电路的输出信号电压从分压器上取下,由模块形成的输出信号电压很低,输出信号电压很低。相反,当传感器上的压力增加时,传感器的电阻会下降,从而使模块输出信号上的电压增加。在我们的项目中,我们将模块的输出信号连接到AZ微控制器的模拟输入,并在串行监视器上显示测量值。下图是AZ-Delivery-Data表中的模块电路:
电路及所用模块说明
我们对三个物体使用三个压力传感器。您将用白色或红色的光照亮WS2812B LED环。我们还使用了迷你mp3播放器DFPlayer与迷你扬声器一起播放报警音。整个系统由AZ-Atmega328微控制器控制。我们还需要一个microSD卡来保存声音文件。整套设备由外部5伏直流电源供电。
程序流程和草图的描述
当物体就位时,FSR传感器模块有一个高输出信号显示在串行监视器上。LED环用白光照亮人物或物体。一旦其中一个对象被操作,FSR传感器模块的输出信号下降,被操作对象的LED环亮红灯并发出报警声音。即使同一物体或其他物体再次定位在该位置,警报仍然存在。
使用迷你MP3播放器DFPlayer模块需要前两个库。MP3模块和微控制器之间的必要通信是串行的。库Softwareerial.H包含微控制器激活串行通信的任何数字PIN的功能。使用库Dfrobotdfplayermini.h,让我们激活使用MP3播放器模块所需的功能。
第三个库是来自Adafruit的Neopixel,能够使用LED环。
在我们为项目集成了必要的库之后,我们开始创建对象和变量的定义。为了使用MP3播放器模块,我们必须在软件库softwareial . h中实现mysoftwareial对象。数字引脚被赋予微控制器,我们将用于模块的串行通信。我们使用数字PIN 5接收来自MP3模块的数据,使用数字PIN 6向MP3模块发送数据。为了使用模块的税务方法和命令,例如设置音量或开始播放MP3文件,我们从库Dfrobotdfplayermini.h中创建对象mydfplayer。
FSR传感器的输出连接到微控制器的模拟输入。为此声明了以下变量。我们还将信号保存在其他变量中。
草图的下四行是用于将WS2812B LED环连接到微控制器的数字引脚的三个常量,以及用于定义每个环的LED数量的常量,在这种情况下为8个LED。
对于每个WS2812B LED环的操作,必须为使用的每个环创建Neopixel库的对象。一个环的led的各自数量写在这个对象的参数中(我们有这个number_led_ring的变量),每个环连接的微控制器的引脚(为此我们有变量,例如floers_ring_led),以及每个环的属性。它们是三色led (Neo_grb),工作频率为800 kHz (Neo_khz800)。
在草图的下一行中,为每个环的两种颜色的RGB值声明和定义变量。
下一个代码块是setup(),我们在其中配置模块的初始状态。
在前两行中,我们用Begin指令(“波特率”)初始化串行通信,这两行都是为了用mysoftwareeries指令与MP3模块通信。开始(9600),以及使用串行指令的串行监视器。开始(115200)。
接下来,我们检查MP3模块是否被IF语句正确初始化。在这种情况下,我们检查MP3模块是否由于任何原因没有初始化。我们用符号“!”进行初始化。退化,即如果模块没有初始化,条件为真,执行花括号内的代码。如果MP3播放器模块初始化正确,则不满足条件,并且不执行我们解释的代码。setup()方法继续通过serial行执行到串行控制台。println (f ("correct dfplayer initialization."))告知MP3播放器模块被正确初始化。
MP3模块初始化后,三个LED环必须使用每个环的对象(name_ring)的Begin()方法。Begin())被初始化。如果有一个亮了,我们就关掉所有的led灯。
首先,我们将环形光的亮度设置为200,总共为254。
在一个for循环中,一个环的所有led都带有flowers_ring。Setpixelcolor (I, floers_color_white)配置白色照明,然后使用floers_ring。Show()打开。计数变量I的最大值是我们在开始时定义的变量number_leds_ring的值。
两个for环类似于其他两个LED环。
只有FSR模块的信号值的变量,它被定义为一个高值。我们记得,当按下传感器时,模块的信号值很高。而不按下时,其值较低。
有了这些行,块的编程就完成了。现在让我们从持续执行的Loop()开始。它确定其中一个图形是否被移动或从其位置移除。我们将描述花中的花的代码。menina和hand的图形代码是相同的,只是每个图形变量的值发生了变化。menina的sensor_menina_signal <1200, hand sensor_hand_signal <1000。
为了检查FSR传感器模块的起始值的变化,我们使用if,在此我们检查先前存储的相应数字的传感器变量的值。三个数字的代码是一样的,只是每个数字的变量的测试值发生了变化。在这里,我们也将对代码中的变量进行检查,对花儿的图形sensor_flowers_signal进行分析。
每当变量sensor_flowers_signal中的先前存储值小于1000时,就执行块的内部。
一进入指令块,我们就用第一行Analogread (sensor_flowers_pin)读取FSR传感器模块信号的当前值,并将该值保存在相应的变量sensor_flowers_signal中。然后我们在串行监视器中花费该值。
下面的If - Else如果检查变量sensor_flowers_signal当前值是否小于200,如果该条件为真,则对象被移动,并执行以下代码触发告警。
我们在串行监视器中发出一个说明:
我们将环形光的亮度强度设置为200,总共为254。
为了打开受影响的红色环的所有led,我们再次使用一个for循环来遍历环的所有led。计数变量I对应LED的个数。红色的灯光是与flowers_ring。Setpixelcolor (I, flexers_color_red)配置。然后他们会和floers_ring在一起。Show()打开。我们记得变量I的最大值,因此变量Number_leds_Ring的值的拆除条件是。
现在我们要播放的报警音,我们在microSD卡下保存的名称为1.mp3。首先,我们使用mydfplayer配置播放强度。音量(10)并在mydfplayer中循环播放声音文件。循环(1).声音文件的周期为7秒。一直播放到单片机复位为止,因为是报警,要检查图的状态。我在草图中使用了一个延迟(500),以便在下一个指令执行之前播放警报音。
到目前为止,只要FSR传感器变量的值小于200,就可以设计if指令的代码。但是,如果FSR传感器模块更新后的测量值变量的存储值小于1000,但大于或等于200,则Else IFInstruction的代码。它只是通知串行监视器,相应的数字没有被操纵。
所有三个数字的代码几乎相同,只有测试区域的变量随FSR传感器的每个数字的值而变化。
添加
可以向项目中添加几个选项。第一种选择是安装一个外部按钮,连接在GND连接和微控制器的复位连接之间。通过这种方式,我们将复位微控制器,它将具有与微控制器的复位按钮相同的功能。以下组件应添加到电路中:
第二种选择是在扬声器的正极线(红色电缆)上安装一个开关。在另一种安排下,只有当开关被翻转时,警报才会停止,但数字的LED环会继续亮红灯,以显示哪个数字被操纵了。对于第二种选择,我们必须确保在检查角色状态后更改开关以重新激活声音。
本文编译自hackster.io