arduino小实验
刚好最近学东西有用到arduino,所以把平常的小实验做成实验,有兴趣的朋友可以看看。
一 、功能实现
一、水银开关实现呼吸灯功能,当水银开关闭合后,灯从“熄灭–>l亮度提升–>亮度最大保持10ms再熄灭,不断循环”,当水银开关打开时,灯熄灭。
使用的水银开关图示和介绍
以下是实现程序
通过变量zhi读取SensorPin的值是否有变化,如果为0(即水银碰撞开关被触发),进入for循环,执行相应指令,否则保持熄灭状态
int led=3;
int SensorPin=2;
int t;
void setup() {
pinMode(led, OUTPUT);
pinMode(SensorPin, INPUT);
}
void loop()
{
int zhi=digitalRead(SensorPin);
if(zhi==0){
for(int n=255;n>0;n--)
{
analogWrite(led,n); // 共阳极接法,当9号引脚为高电平,灯灭
delay(10);
}
}
else{
analogWrite(led,255);
}
}
硬件接线图如下
二、编写部分银行保险柜程序:
当保险柜被碰撞(即水银开关被触发后),LED灯不断闪烁,且蜂鸣器持续报警不中断,水银开关失效,无法停止报警。
蜂鸣器图示和介绍
以下是bug讲解(开个小玩笑,程序可用)
buzz函数是定义好的,如果不会改可以不用动,直接调用就可以用,亲测很响。如果要修改,改变x和y的值即可。
保持水银碰撞开关触发后失效,我是用if判断和for循环来实现的,当触发了水银开关,报警器和灯就进入循环,在跳出循环之前水银开关为失效状态,(理论上,只要你循环够多,它就出不来,当然如果真的要使用的话,这个地方得修改一下)。
程序如下
int Led=4;//定义灯引脚
int SensorPin=2;//震动传感器连接引脚
int buzzpin=3;
int zhi;
void buzz(int x,int y) {
for(int i=0;i<x;i++) {
digitalWrite(buzzpin, HIGH);
delayMicroseconds(y);
digitalWrite(buzzpin, LOW);
delayMicroseconds(y);
}
}
void setup()
{
pinMode(2,INPUT);
pinMode(4,OUTPUT);
pinMode(buzzpin, OUTPUT);
buzz(200,500);
buzz(400,250);
}
void loop()
{
int zhi=digitalRead(SensorPin);
if(zhi==LOW)
{
for(int i=0;i<1000;i++)
{
digitalWrite(Led,LOW);
delay(10);
digitalWrite(Led,HIGH);
delay(10);
buzz(200,500);
buzz(400,250);
}
}
else {
digitalWrite(Led,HIGH);
digitalWrite(buzzpin,LOW);
}
}
硬件接线图如下
三、完整保险柜功能
当保险柜被碰撞(即水银开关被触发后),LED灯不断闪烁,且蜂鸣器持续报警不中断,水银开关失效,无法停止报警。通过终端按钮实现结束报警功能,水银开关被触碰到继续进入报警,可反复循环
和上面程序的区别在于加了个按键,所以我在for循环里嵌了个if判断,如果按键被按下,则for循环变量的值溢出,跳出for循环,报警灯,报警声都停止,继续对水银开关的状态进行判断,反复循环,程序如下
int Led=4;//定义灯引脚
int SensorPin=2;//震动传感器连接引脚
int buzzpin=3;
int zhi;
int ting;
int key=5;
void buzz(int x,int y) { //蜂鸣器
for(int i=0;i<x;i++) {
digitalWrite(buzzpin, HIGH);
delayMicroseconds(y);
digitalWrite(buzzpin, LOW);
delayMicroseconds(y);
}
}
void setup() //初始化函数
{
pinMode(SensorPin,INPUT);
pinMode(Led,OUTPUT);
pinMode(key, INPUT);
pinMode(buzzpin, OUTPUT);
buzz(200,500);
buzz(400,250);
}
void loop() //主程序
{
int zhi=digitalRead(SensorPin);
if(zhi==LOW)
{
for(int i=0;i<1000;i++)
{
digitalWrite(Led,LOW);
delay(10);
digitalWrite(Led,HIGH);
delay(10);
buzz(200,500);
buzz(400,250);
int ting=digitalRead(key);
if(ting==LOW){
i=1000;
}
}
}
else {
digitalWrite(Led,HIGH);
digitalWrite(buzzpin,LOW);
}
}
接线图如下
四、以下为视频演示
55059fce3ac7c39c86a5de51cb24f91a
四、总结
以上就是我对arduino简易保险柜制作的一些学习笔记吧,程序还有很大的优化空间,后期可以增加传感器来实现更多的功能,让它更加完善。
到这里写的BUG就结束了,谢谢各位的观看。