Arduino基础实验6,制作基于单片机的门铃

创客行的模拟电子实验套件里,我们探讨过基于三极管和555芯片的电子门铃制作方案,相关资料可以参考文档【1】,如果使用单片机来制作电子门铃,在硬件搭配上要简单很多,声音频率采用软件调试,就省却了不断试验电阻/电容的RC参数搭配烦恼。本文中,我们就来看看一个基于Arduino的电子门铃怎么制作。

 Arduino门铃的电路搭建

电子门铃的功能就是按下按键,发出提示声音。我们在文档【2】介绍过Arduino的引脚输入,那里给出了按键开关对开发板的输入方法,在文档【3】又讲述了Arduino的发声机制,将两者结合起来,就可以完成一个Arduino门铃的制作。

Arduino门铃电路图图1 Arduino门铃电路图

Arduino门铃实验电路

图2 Arduino门铃实验电路

我们直接上图吧,图1是Arduino门铃的电路图,图2是实验电路,电路中用1KΩ电阻使得D3和按键开关的负极跟电源负极相连,电源正极连接按键开关正极,这样连接使得D3输入为正电压(高电平)或负电压(低电平),没有悬空的模糊状态。由于电路驱动扬声器需要较大电流,使用NPN三极管S9013的共集电极电路来间接耦合Arduino引脚2和扬声器。

因此,D2为扬声器控制引脚,D3为按键开关输入引脚。

 Arduino门铃的相关代码

/*
 doorbell experiment
 source by: www.i-makers.info
*/
//定义音阶常量 
#define Do 262 
#define Re 294 
#define Mi 330 
#define Fa 349 
#define Sol 392 
#define La 440 
#define Si 494 
 
int buzzerPin=2; //定义扬声器控制引脚
int buttonPin = 3; //定义按键开关输入引脚
bool buttonState = LOW;//按键状态变量
int scale[]={Do,Re,Mi,Fa,Sol,La,Si}; //定义音阶数组 
 
void setup(){ 
  pinMode(buzzerPin,OUTPUT); 
  pinMode(buttonPin,INPUT);
} 
 
void loop(){ 
  buttonState = digitalRead(buttonPin);
 
  if(HIGH == buttonState)
  {
    tone(buzzerPin,scale[5]); 
    delay(1000); 
    tone(buzzerPin,scale[3]); 
    delay(1000); 
    noTone(buzzerPin); 
    delay(1000); 
  }
}

 代码1 Arduino门铃代码

代码1是Arduino门铃的对应代码,当引脚3的按键按下,状态变成高电平时,将触发

if(HIGH == buttonState)

里的声音发生代码,它会以3秒钟为一个循环单位,第一秒发出音乐简谱中6的音,第二秒是简谱4,第三秒为消音,停止发声,如果检测到一个单元结束时,按键状态还是高电平,说明它还处于被按下的状态,则会继续循环。

总结

有了前面的知识,这个制作就很简单了,相对于文档【1】中的模拟电路组成的门铃,Arduino很容易就调试出了“叮咚”的音效,由此可见,单片机给创客们提供了一个作品升级的平台,让丰富的想法可以使用方便的手段来实现。更多的精彩内容,请查看全站目录

优秀科技原创内容源,欢迎添加微信公众号。

创客行淘宝店提供本网站电子制作的全部套件

创客行淘宝店地址:https://shop125908459.taobao.com/

参考文档

  1. 电子门铃制作,三极管和555芯片的振荡电路分析
  2. Arduino基础实验4,用外部中断来测速
  3. Arduino基础实验5,驱动蜂鸣器和扬声器
  4. 全站目录

发表评论