【创客实验室】Arduino教程之 -- 震动探测


震动传感器,我们从名字中应该就可以判断,传感器能够检测震动中的物体。我们用什么来做震动传感器呢?那就是滚珠开关。滚珠开关,其内部含有导电珠子,器件一旦震动,珠子随之滚动,就能使两端的导针导通。

通过这个原理,我们可以做一些小玩具结合起来。只要传感器检测到东西震动,就会有信号输出。这里,我们想通过滚珠开关做个简单的震动传感器,并把震动传感器和LED的结合,当传感器检测到物体震动时,LED亮起,停止震动时,LED关闭。

所需元件

  • 1×  滚珠开关 SW200D  

  • 1×  5mm LED灯

  • 1×  220欧电阻


STEP 1:硬件连接
从滚珠开关这个名字,我们可以把它和什么联想在一起呢?就是按键开关,滚珠开关和Arduino教程 Lesson 4 --互动交通信号灯中介绍的按钮在硬件连接是完全相同的,原理也相似。只是使用方法不同而已。可以把下图对应交通灯的一起看,你会发现很多相似之处。滚珠开关也需要一个下拉电阻,LED需要一个限流电阻。


STEP 2:输入代码

完成硬件连接后,打开Arduino IDE,输入下面这段代码。

  1. //项目八 – 震动传感器

  2. int SensorLED = 13;       //定义LED为数字引脚13

  3. int SensorINPUT = 3;      //连接震动开关到中断1,也就是数字引脚3 

  4. unsigned char state = 0;


  5. void setup() { 

  6.   pinMode(SensorLED, OUTPUT);         //LED为输出模式

  7.   pinMode(SensorINPUT, INPUT);        //震动开关为输入模式


  8.   //低电平变高电平的过程中,触发中断1,调用blink函数

  9.   attachInterrupt(1, blink, RISING);   

  10. }


  11. void loop(){

  12.       if(state!=0){              // 如果state不是0时

  13.         state = 0;               // state值赋为0

  14.         digitalWrite(SensorLED,HIGH);   // 亮灯

  15.         delay(500);          //延时500ms

  16.       }  

  17.       else 

  18.         digitalWrite(SensorLED,LOW);     // 否则,关灯


  19. 大二下就是模电和单片机都是非常重要的两门课我们的模电课时结合实践上的就是老师讲一个电路分析计算会然后实物做出来单片机的话讲的是很基础的51虽然知乎上很多人会告诉你51已经被淘汰了但是作为入门学习的型号51还是很合适的51的寄存器很少可以让你理解什么是单片机外设


  20. void blink(){                //中断函数blink()

  21. state++;             //一旦中断触发,state就不断自加

  22. }

当我们晃动板子时,LED灯也会随之亮,一旦停止晃动,LED灯又恢复到熄灭的状态。


STEP 3:代码回顾

先大致说下代码的运行过程。在没有任何打扰的情况下,程序在不断运行着…,让LED一直处于关闭。突然,被人打扰了(也就是晃动板子),就跳到中断函数blink()中(当然进入中断也是要条件的,我们后面说)。此时,state不断自加,连锁反应的,主函数中if函数检测到state不为0了,那么就让LED亮起了,同时又重新让state为0,等待下一次中断。如果没有中断的话,LED有恢复到关闭的状态。


中断函数attachInterrupt() 
什么是中断?打个比方吧,比如你在家好好的看电视,突然家里电话铃响了,那么你不得不停下看电视,先去接电话,等接完电话后,你又可以继续看电视啦!在整个过程中,接电话就是一个中断过程,电话铃响就是中断的标志,或者说是中断条件。

现在知道中断是什么意思了,再回到attachInterrupt()函数,它是一个当外部发生中断时,才被唤醒的函数。区别于其他函数,它依附于中断引脚才发生。大多数板子都有两个外部中断引脚:数字引脚2(中断0)和数字引脚3(中断1)。中断0与中断1是中断号,在函数中需要用到。不同板子,中断号对应引脚可能不同,可以查阅Arduino官方编程语法手册(http://arduino.cc/en/Reference/AttachInterrupt)。

attachInterrupt()需要三个传递参数:

  1. attachInterrupt(interrupt, function, mode)

interrupt:中断号0或者1。如果选择0的话,连接到数字引脚2上,选择1的话,连接到数字引脚3上。

function:调用的中断函数名。写中断函数时,需要特别说明以下三点: 

  • 我们在写中断函数的时候,该函数不能含有参数和返回值。也就是说,要是一个无返回值的函数。

  • 中断函数中不要使用delay()和millis()函数,因为数值不会继续变化。

  • 中断函数中不要读取串口,串口收到的数据可能会丢失。


mode:中断的条件。只有特定的以下四种情况:

  • LOW:当引脚为低电平时,触发中断。

  • CHANGE 当引脚电平发生改变时,触发中断。

  • RISING 当引脚由低电平变为高电平时,触发中断。

  • FALLING 当引脚由高电平变为低电平时,触发中断。

知道了attachInterrupt()函数的用法,回归到我们的代码中:

  1. attachInterrupt(1, blink, RISING);

对应上面说明看。1,指中断号1。所以滚珠开关接到数字引脚3。blink是我们下面要调用的中断函数。RISING,指引脚3在由低变为高的一瞬间,中断触发。

为什么要选RISING呢?由于硬件我们还没提到,我们就先滚珠开关想象成按键。在按键没按下的时,是断开的,引脚3处于低的状态。一旦被按下,就和5V导通,变为高。这个过程是引脚由低电平变高电平的过程,所以选择RISING模式。

STEP 4:硬件回顾

滚珠开关

滚珠开关,也叫做珠子开关,震动开关等等。虽然叫法不同,不过原理是相同的。就是通过珠子滚动接触导针的原理来控制电路的通断。看下结构图就明白了。

滚珠开关内部两个珠子,通过珠子滚动接触导针的原理来控制电路的接通或者断开。传感器震动或者晃动时,珠子就会接触导针,从而导通。还需要注意的一点是,由于滚珠开关的内部构造,滚珠开关只有一头是导通的,金色导针一端是导通的,银色导针一端是不导通的。这也就是为什么,往金色一端倾斜,灯会点亮,而偏向银色一端倾斜时,灯不会被点亮的原因。


点击阅读原文,进入作者博客

单片机

每天更新
单片机
各种知识,电子制作DIY,及
电子行业
最新资讯,关注我们,棒棒哒!

本报告研究全球与中国安全单片机的发展现状及未来发展趋势,分别从生产和消费的角度分析安全单片机的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国的主要厂商产品特点、产品规格、不同类型产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。历史数据为2015至2019年,预测数据为2020至2026年。

生成海报
点赞 0

Abin

我还没有学会写个人说明!

相关推荐

ST六轴传感器LSM6DSO使用记录

1、前言 LSM6DSO是ST公司的六轴传感器,集成三轴加速度和三轴陀螺仪。 2、传感器特性 加速度支持±2/±4/±8/±16 g 量程; 陀螺仪支持±125/±250/±500/±1000/±2000 dps

BMP280详解

前言 本文着重介绍bmp280(GY-BM E/P 280模块)的原理、功能、使用方法、不同公司的型号以及提供适用于不同单片机的代码 一、bmp280大气压传感器外观 二、原理图 三、相关参数讲解 1.引脚 六个引脚,名称

STM32使用各种传感器的demo

各种传感器的demo 最近有假期有空整理了一些传感器的使用方式 激光测距 激光测距是我在完成电磁炮项目用的模块,大家也可以去借鉴我以前的文章,使用起来也是方便,当时涂方便,利用的是串口