在本系列的前几篇博客中,我们使用桌面软件控制过红绿灯,也编程点亮过炫彩的3色LED 灯。在这些实验的过程中,相信你对树莓派GPIO引脚如何输出高低电平,以及如何使用PWM技术来控制电压输出等都有了了解。本篇博客,我们将再探索一些树莓派编程更多新鲜好玩的领域,来尝试使用硬件来控制硬件。
现在,我们将尝试完成这样一个实验,使用按压开关控制蜂鸣器的发声。将开关元件和蜂鸣器都连接到树莓派,当按下开关时,让蜂鸣器发声,当松开开关时,蜂鸣器停止发声。
一、主角登场
开始动手实验前,我们先来认识一下将要出场的主角们,当然,无论什么实验,树莓派都是当之无愧的第一主角,但我相信你已经对它已经有了足够的了解(如果没有,可以查看本系列的前几篇博客),因此我们将介绍的重点放在两个新登场的“角色”上:蜂鸣器与按压开关。
1.本实验的“主角甲”——有源蜂鸣器
蜂鸣器,顾名思义,其是一种发声元件。广泛应用于计算机、打印机、电话、玩具等电子设备中。
蜂鸣器可以分为“有源蜂鸣器”和“无源蜂鸣器”。其中的源并非指电源,而是指蜂鸣器内部是否有震荡源。有源蜂鸣器自带一个震荡源模块,其使用起来非常简单,只要接通直流电,其就会自动发出声音。而无源蜂鸣器内部没有震荡源,需要外接使用一定频率的方波来驱动其发声。关于无源蜂鸣器更多深入的用法,我们后续博客再专门介绍。这里,我们先着重理解有源蜂鸣器的工作原理。
本实验中,我们采用的是低电平触发的有源蜂鸣器,元件如下图所示:
其有3个引脚,GND引脚用来接地,VCC引脚用来接3.3V的电源,I/O引脚用来进行蜂鸣器是否播放声音的控制。你可能有些疑惑,为什么低电平也可以触发元件的“开”状态,这要归功于PNP型三极管的功劳,对于PNP型三极光,当输入管脚为低电平时,三极管处于导通状态,使得蜂鸣器被加电压,当输入管脚为高电平时,三极管处于截止状态,蜂鸣器无电压。原理如下图所示:
现在,我们先来编写一段简单的Python程序,来使蜂鸣器发出声音。
2. 触发蜂鸣器播放声音
我们使用的蜂鸣器的3个引脚,其中VCC接电源,GND接地,I/O引脚我们可以选择树莓派BCM编码为27的GPIO引脚,通过查表,可以得到其物理编码为13。连线示意如下:
编写Python程序代码如下:
#coding:utf-8
# 导入GPIO控制薄块
import RPi.GPIO as GPIO
# 导入time模块
import time
# 定义引脚
fm = 13
# 设置使用的引脚编码模式
GPIO.setmode(GPIO.BOARD)
# 进行引脚的初始化,因为是低电平触发,初始时设置为高电平
GPIO.setup(fm,GPIO.OUT, initial=GPIO.HIGH)
# 进行一长两短的声音播放
# 播放1秒声音
GPIO.output(fm, GPIO.LOW)
time.sleep(1)
GPIO.output(fm, GPIO.HIGH)
time.sleep(0.1)
# 播放0.5秒声音
GPIO.output(fm, GPIO.LOW)
time.sleep(0.5)
GPIO.output(fm, GPIO.HIGH)
time.sleep(0.1)
# 播放0.5秒声音
GPIO.output(fm, GPIO.LOW)
time.sleep(0.5)
# 停止蜂鸣器播放
GPIO.output(fm, GPIO.HIGH)
GPIO.cleanup()
在树莓派上运行代码,你应该已经可以听到蜂鸣器发出一长两短的鸣叫声了。