一起玩转树莓派(4)——用开关控制蜂鸣器发声(一)

在本系列的前几篇博客中,我们使用桌面软件控制过红绿灯,也编程点亮过炫彩的3色LED 灯。在这些实验的过程中,相信你对树莓派GPIO引脚如何输出高低电平,以及如何使用PWM技术来控制电压输出等都有了了解。本篇博客,我们将再探索一些树莓派编程更多新鲜好玩的领域,来尝试使用硬件来控制硬件。


现在,我们将尝试完成这样一个实验,使用按压开关控制蜂鸣器的发声。将开关元件和蜂鸣器都连接到树莓派,当按下开关时,让蜂鸣器发声,当松开开关时,蜂鸣器停止发声。


一、主角登场


开始动手实验前,我们先来认识一下将要出场的主角们,当然,无论什么实验,树莓派都是当之无愧的第一主角,但我相信你已经对它已经有了足够的了解(如果没有,可以查看本系列的前几篇博客),因此我们将介绍的重点放在两个新登场的“角色”上:蜂鸣器与按压开关。


1.本实验的“主角甲”——有源蜂鸣器


蜂鸣器,顾名思义,其是一种发声元件。广泛应用于计算机、打印机、电话、玩具等电子设备中。


蜂鸣器可以分为“有源蜂鸣器”和“无源蜂鸣器”。其中的源并非指电源,而是指蜂鸣器内部是否有震荡源。有源蜂鸣器自带一个震荡源模块,其使用起来非常简单,只要接通直流电,其就会自动发出声音。而无源蜂鸣器内部没有震荡源,需要外接使用一定频率的方波来驱动其发声。关于无源蜂鸣器更多深入的用法,我们后续博客再专门介绍。这里,我们先着重理解有源蜂鸣器的工作原理。


本实验中,我们采用的是低电平触发的有源蜂鸣器,元件如下图所示:

一起玩转树莓派(4)——用开关控制蜂鸣器发声(一)



其有3个引脚,GND引脚用来接地,VCC引脚用来接3.3V的电源,I/O引脚用来进行蜂鸣器是否播放声音的控制。你可能有些疑惑,为什么低电平也可以触发元件的“开”状态,这要归功于PNP型三极管的功劳,对于PNP型三极光,当输入管脚为低电平时,三极管处于导通状态,使得蜂鸣器被加电压,当输入管脚为高电平时,三极管处于截止状态,蜂鸣器无电压。原理如下图所示:

一起玩转树莓派(4)——用开关控制蜂鸣器发声(一)



现在,我们先来编写一段简单的Python程序,来使蜂鸣器发出声音。


2. 触发蜂鸣器播放声音


我们使用的蜂鸣器的3个引脚,其中VCC接电源,GND接地,I/O引脚我们可以选择树莓派BCM编码为27的GPIO引脚,通过查表,可以得到其物理编码为13。连线示意如下:


一起玩转树莓派(4)——用开关控制蜂鸣器发声(一)


编写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()

在树莓派上运行代码,你应该已经可以听到蜂鸣器发出一长两短的鸣叫声了。

上一篇:《树莓派开发实战(第2版)》——2.7 利用SSH远程控制树莓派


下一篇:一起玩转树莓派(9)——DS18B20测温模块应用