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

通过这个原理,我们可以做一些小玩具结合起来。最常见的,比如我们看到一些小孩子穿的一闪一闪的小鞋子!走动的过程,就能使内部珠子滚动。

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

所需元件

硬件连接

从滚珠开关这个名字,我们可以把它和什么联想在一起?就是按键开关,滚珠开关和我们项目三中介绍的按钮在硬件连接是完全相同的,原理也相似。只是使用方法不同而已。可以把下图对应项目三的一起看,你会发现很多相似之处。滚珠开关也需要一个下拉电阻,LED需要一个限流电阻。

输入代码

样例代码8-1

//项目八 – 震动传感器
int SensorLED = 13; //定义LED为数字引脚13
int SensorINPUT = 3; //连接震动开关到中断1,即数字引脚3
unsigned char state = 0;
void setup() { pinMode(SensorLED, OUTPUT); //LED为输出模式pinMode(SensorINPUT, INPUT); //震动开关为输入模式//低电平变高电平的过程中,触发中断1,调用blink函数attachInterrupt(1, blink, RISING); }
void loop(){if(state!=0){ // 如果state不是0时state = 0; // state值赋为0digitalWrite(SensorLED,HIGH); // 亮灯delay(500); //延时500ms} else{ digitalWrite(SensorLED,LOW); // 否则,关灯}
}
void blink(){ //中断函数blink()
state++; //一旦中断触发,state就不断自加
}

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

代码回顾

代码虽不长,但还是不太容易理解的。先大致说下代码的运行过程。

在没有任何打扰的情况下,程序在不断运行着…,让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()需要三个传递参数:

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

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

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

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

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

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

1、LOW 当引脚为低电平时,触发中断。

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

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

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

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


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

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

这个过程是引脚由低电平变高电平的过程,所以选择RISING模式。

硬件回顾

滚珠开关

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

看下结构图就明白了。


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

这也就是为什么,往金色一端倾斜,灯会点亮,而偏向银色一端倾斜时,灯不会被点亮的原因。

原文来自DF创客社区:https://mc.dfrobot.com.cn/forum.php?mod=forumdisplay&fid=92&filter=typeid&typeid=426

【基础系列教程】项目八:震动传感器相关推荐

  1. STM32 基础系列教程 50 – MbedTls

    前言 mbed TLS(以前称为PolarSSL)是TLS和SSL协议的实现,并且需要相应的加密算法和支持代码.这是双重许可与Apache许可证 2.0版(与GPLv2许可也可).网站上指出,mbed ...

  2. STM32 基础系列教程 40 - Lwip_mqtt

    前言 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级&qu ...

  3. STM32 基础系列教程 14 - IIC

    前言 学习stm32 IIC接口的使用,用IIC 接口实现与IIC设备的通信功能. 示例详解 基于硬件平台: STM32F103C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使 ...

  4. STM32 基础系列教程 49 – Jansson

    前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...

  5. STM32 基础系列教程 48 – CJSON

    前言 JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全 ...

  6. STM32 基础系列教程 47 - MD5

    前言 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信 ...

  7. STM32 基础系列教程 46 – RNG

    前言 随机数发生器(RNG)是一个以连续模拟噪声为基础的随机数发生器,在主机读数时提供一个 32 位的随机数.STM32F407自带RNG ,本节将给大演示STM32F4系列MCU中的RNG的使用.用 ...

  8. STM32 基础系列教程 45 - FSMC_LCD_Touch

    前言 上一节我们完成了用 STM32F4的 FSMC接口来控制 TFTLCD的显示的操作,其实正点原子的探索者F4开发板带的屏幕支持触摸操作,笔者用的是4.3寸的电容触摸屏,本节我们继续实验,来完成基 ...

  9. STM32 基础系列教程 44 - FSMC_LCD

    前言 TFT-LCD 即薄膜晶体管液晶显示器.其英文全称为: Thin Film Transistor-Liquid Crystal Display. TFT-LCD 与无源 TN-LCD. STN- ...

最新文章

  1. Web服务器面临的五种应用层DOS威胁
  2. sql replace 双引号变单引号_sql-汇总、排序以及分析思路
  3. armgcc交叉编译的文件无法运行_从0开始搭建基于ARM GCC的软件系统02——使用ARM GCC编译SDK
  4. 谷歌眼镜设计规范之度量和网格
  5. Uncaught RangeError: Maximum call stack size exceeded 超出最大调用值(个人解释)
  6. 杭州地铁2号线西北段顺利通车 三思LED照明彰显“暖心”服务
  7. Rstudio MarkDown使用教程
  8. 笔记本电脑更换固态硬盘教程(联想ThinkPadE455)
  9. 使用 Docker 运行微信 PC 客户端
  10. Python 脚本帮你找出微信上删除了你的“好友“
  11. 【转帖】lmbench的简单使用
  12. 【干货】Excel根据条件变换颜色
  13. c语言地震子波6,地震子波显示及合成地震记录
  14. Mybatis-Spring源码分析(五) MapperMethod和MappedStatement解析
  15. 局域网arp攻击_如何排查ARP网络攻击
  16. 高端html5网站设计工作室织梦模板 dedecms5.7,html5高端网络建站设计工作室网站织梦模板...
  17. spring事物管理
  18. googlemap中添加指南针图标
  19. Java开发技巧!java语言程序设计第四版答案
  20. 附件1:POM文件总体配置说明

热门文章

  1. 深入Android【一】—— 序及开篇
  2. WPScan使用方法
  3. docker-compose搭建rap2
  4. SpringBoot+Quartz+数据库存储(附完整代码和数据库脚本)
  5. 原生JS灵魂之问——你真的懂这些JS吗?
  6. Filebeat+Kafka+ELK日志采集(二)——Filebeat
  7. 别把元宇宙想得太复杂
  8. 【网络】报文封装整体结构
  9. Meizu M8 SDK开发初体验
  10. 征服者 游骑兵系列T117一体机最新款09年5月上市