震动传感器,我们从名字中应该就可以判断,传感器能够检测震动中的物体。我们用什么来做震动传感器呢?那就是滚珠开关。滚珠开关,其内部含有导电珠子,器件一旦震动,珠子随之滚动,就能使两端的导针导通。
通过这个原理,我们可以做一些小玩具结合起来。最常见的,比如我们看到一些小孩子穿的一闪一闪的小鞋子!走动的过程,就能使内部珠子滚动。
只要传感器检测到东西震动,就会有信号输出。这里,我们想通过滚珠开关做个简单的震动传感器,并把震动传感器和LED的结合,当传感器检测到物体震动时,LED亮起,停止震动时,LED关闭。
所需元件
硬件连接
从滚珠开关这个名字,我们可以把它和什么联想在一起呢?就是按键开关,滚珠开关和我们项目三中介绍的按钮在硬件连接是完全相同的,原理也相似。只是使用方法不同而已。可以把下图对应项目三的一起看,你会发现很多相似之处。滚珠开关也需要一个下拉电阻,LED需要一个限流电阻。
图 8-1 震动传感器连线图
代码编程
输入样例代码8-1
//项目八 – 震动传感器
int SensorLED = 13; //定义LED为数字引脚13
int SensorINPUT = 3; //连接震动开关到中断1,也就是数字引脚3
Volatile unsigned char state = 0;
void blink(); //使用任何函数前,必须先声明
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值赋为0
digitalWrite(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()函数,它是一个当外部发生中断时,才被唤醒的函数。区别于其他函数,它依附于中断引脚才发生。Arduino UNO板有两个外部中断引脚:数字引脚2(中断0)和数字引脚3(中断1)。中断0与中断1是中断号,在函数中需要用到。不同板子,中断号对应引脚可能不同,可以查阅Arduino官方编程语法手册。
interrupt:中断号0或者1。
如果选择0的话,连接到数字引脚2上,选择1的话,连接到数字引脚3上。
function:调用的中断函数名。
写中断函数时,需要特别说明以下三点:
我们写中断函数的时候,该函数不能含有参数和返回值。也就是说,要是一个无返回值的函数。
中断函数中不要使用delay()和millis()函数,因为数值不会继续变化。
中断函数中不要读取串口,串口收到的数据可能会丢失。
mode:中断的条件。
只有特定的以下四种情况:
LOW:当引脚为低电平时,触发中断。
CHANGE:当引脚电平发生改变时,触发中断。
RISING:当引脚由低电平变为高电平时,触发中断。
FALLING:当引脚由高电平变为低电平时,触发中断。
知道了attachInterrupt()函数的用法,回归到我们的代码中:
attachInterrupt(1, blink, RISING);
对应上面说明看:1,指中断号1。所以滚珠开关接到数字引脚3;blink是我们下面要调用的中断函数;RISING,指引脚3在由低变为高的一瞬间,中断触发。
为什么要选RISING呢?由于硬件我们还没提到,我们就先滚珠开关想象成按键。在按键没按下的时,是断开的,引脚3处于低的状态。一旦被按下,就和5V导通,变为高。这个过程是引脚由低电平变高电平的过程,所以选择RISING模式。
硬件回顾
滚珠开关
滚珠开关,也叫做珠子开关,震动开关等等。虽然叫法不同,不过原理是相同的。就是通过珠子滚动接触导针的原理来控制电路的通断。看下结构图就明白了。
图 8-2 滚珠开关内部结构图
滚珠开关内部两个珠子,通过珠子滚动接触导针的原理来控制电路的接通或者断开。传感器震动或者晃动时,珠子就会接触导针,从而导通。还需要注意的一点是,由于滚珠开关的内部构造,滚珠开关只有一头是导通的,金色导针一端是导通的,银色导针一端是不导通的。这也就是为什么,往金色一端倾斜,灯会点亮,而偏向银色一端倾斜时,灯不会被点亮的原因。
——————— 正文完 ———————
教育的目的是为了培养学生协作能力、沟通能力、批判思维以及创造力,其中最核心的是创造力,蘑菇云创客教育作为国内为数不多的一站式创客教育服务供应商旨在培养孩子的创造力。
为让学生们在课堂上学习到的知识更好地连接现实世界,蘑菇云将指导学校规划、建立、运营自己的创客空间。并根据学生年龄段的不同,在设计与布局上进行了区分
小学创客空间注重趣味性,
强调互动场景;
初中创客空间注重实用性,
强调学习场景;
高中创客空间注重技术性,
强调应用场景;
在内容上, 蘑菇云和国内一线创客名师联手,编纂了一系列适合国内创客教育的教材。并拥有一套完整的创客教育课程体系,包括课程内容及教具,课程培训,技术答疑。同样根据学生年龄段的不同,在课程分类与设计上也会有所区别。
小学通过游戏化和体验化的方式来开展,要以“玩中学”为主。
初中引导学生在实际动手过程中进行探究式学习,促进“做中学”。
高中基于问题和设计的学习,需要教师为学生创设相关的真实情境,使高中生在“思中学”。
推荐阅读:
【炫彩 RGB LED】基于Mind+Arduino入门教程05
【S.O.S求救信号】基于Mind+ Ardunio入门教程02
【初识Arduino & Mind+】基于mind+ Arduino入门教程00
我知道你在看呦

