Python与硬件学习笔记:蜂鸣器(转)
相信大家对蜂鸣器都不会陌生,很多产品和方案中都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。这里对单片机在蜂鸣器驱动上的应用作一下描述。
蜂鸣器的介绍、原理及其驱动方式
(一)蜂鸣器的介绍
1.蜂鸣器的作用:蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
2.蜂鸣器的分类:蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。
3.蜂鸣器的电路图形符号蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。
(二)蜂鸣器的结构原理
1.压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5~15V直流工作电压),多谐振荡器起振,输出1.5~2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2.电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
(三)驱动方式
惯用驱动蜂鸣器的方式有两种:一种是PWM 输出口直接驱动,另一种是利用I/O定时翻转电平产生驱动波形对蜂鸣器进行驱动。
PWM 输出口直接驱动是利用PWM输出口本身可以输出一定的方波来直接驱动蜂鸣器。在单片机的软件设置中有几个系统寄存器是用来设置PWM口的输出的,可以设置占空比、周期等等,通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后,只要打开PWM输出,PWM输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。比如频率为2000Hz的蜂鸣器的驱动,可以知道周期为500μs,这样只需要把PWM的周期设置为500μs,占空比电平设置为250μs,就能产生一个频率为2000Hz的方波,通过这个方波再利用三极管就可以去驱动这个蜂鸣器了。
而利用I/O 定时翻转电平来产生驱动波形的方式会比较麻烦一点,必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。比如为2500Hz的蜂鸣器的驱动,可以知道周期为400μs,这样只需要驱动蜂鸣器的I/O口每200μs翻转一次电平就可以产生一个频率为2500Hz,占空比为1/2duty的方波,再通过三极管放大就可以驱动这个蜂鸣器了。
有源蜂鸣器与无源蜂鸣器有什么区别
这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。因此有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。无源蜂鸣器的优点是:便宜、声音频率可控,可以做出“多来米发索拉西”的效果、在一些特例中,可以和LE复用一个控制口。有源蜂鸣器的优点是:程序控制方便 。
模块使用
在此我们利用蜂鸣器实现一个简单的整点报时功能,在这里我们选用有源蜂鸣器,只要通电就会发声,这样程序控制简单,无源蜂鸣器的控制发声,需要利用PWM进行输出,PWM控制输出可参见温度传感器DS18B20。
1、所需材料:
• 有源蜂鸣器一个
• 树莓派
• 杜邦线数根
2、引脚连接说明:
有源蜂鸣器 | 树莓派 |
- | GND |
+ | 5v |
S | GPIO 7 |
3、程序编写:
为了使蜂鸣器鸣叫的程序模块化,将这一部分代码放到独立的 libbeep.py 文件中,代码如下:
- import RPi.GPIO as GPIO
- import time
- PIN_NO = 7 #GPIO编号,可自定义
- GPIO.setmode(GPIO.BOARD)
- GPIO.setup(PIN_NO, GPIO.OUT)
- #哔1次,时长作为参数传递
- def beep(seconds):
- GPIO.output(PIN_NO, GPIO.HIGH)
- time.sleep(seconds)
- GPIO.output(PIN_NO, GPIO.LOW)
- #哔N次,时长、间隔时长、重复次数作为参数传递
- def beepAction(secs, sleepsecs, times):
- for i in range(times):
- beep(secs)
- time.sleep(sleepsecs)
- #beepAction(0.02,0.02,30)
在 alarm.py 中实现整点报时,代码如下:
- import RPi.GPIO as GPIO
- import time
- import libbeep
- while True:
- t = time.localtime() #读取系统时间
- h = t.tm_hour
- m = t.tm_min
- s = t.tm_sec
- w = time.strftime('%w',t)#函数接收以时间元组,并返回以可读字符串表示的当地时间,%w一年中的星期数(00-53)星期一为星期的开始
- print h,m,s,w
- time.sleep(0.3)
- if m == 0 and s == 0:
- if h>22 or h<8:#为了晚上22点之后,上午8点之前不被打扰
- print "continued"
- continue
- if h>12:
- h = h-12
- libbeep.beepAction (0.3,0.5,h)
- time.sleep(1)
- if m == 30 and s == 0:
- if h>22 or h<8:
- print "continued"
- continue
- libbeep.beepAction (0.05,0.05,2)
- time.sleep(1)
为了方便测试,我们可以把系统时间调整接近整点的时刻,在运行脚本,等待整点,感受自己制作的整点报时
使用此命令更改系统时间:
sudo date -s"10:59:57 2015-04-03"
执行脚本: sudo Python alarm.py
最后等待铃声响起!
Python与硬件学习笔记:蜂鸣器(转)的更多相关文章
- Requests:Python HTTP Module学习笔记(一)(转)
Requests:Python HTTP Module学习笔记(一) 在学习用python写爬虫的时候用到了Requests这个Http网络库,这个库简单好用并且功能强大,完全可以代替python的标 ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- Python Built-in Function 学习笔记
Python Built-in Function 学习笔记 1. 匿名函数 1.1 什么是匿名函数 python允许使用lambda来创建一个匿名函数,匿名是因为他不需要以标准的方式来声明,比如def ...
- Python快速入门学习笔记(二)
注:本学习笔记参考了廖雪峰老师的Python学习教程,教程地址为:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb49318210 ...
- python数据分析入门学习笔记
学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
- python网络爬虫学习笔记(二)BeautifulSoup库
Beautiful Soup库也称为beautiful4库.bs4库,它可用于解析HTML/XML,并将所有文件.字符串转换为'utf-8'编码.HTML/XML文档是与“标签树一一对应的.具体地说, ...
- Python之xml学习笔记
XML处理模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,至今很多传统公司如金融行业的很多系统的接口还主要是xml. xml的格式如下,就是通过&l ...
- python网络爬虫学习笔记(一)Request库
一.Requests库的基本说明 引入Rquests库的代码如下 import requests 库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个 ...
- Python基础教程学习笔记:第一章 基础知识
Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...
随机推荐
- jfinal 使用类里的方法
package demo; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; imp ...
- IIS下PHP的ISAPI和FastCGI比较
在Windows IIS 6.0下配置PHP,通常有CGI.ISAPI和FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异. 1. ...
- oracle中根据时间获取最新的一条数据
order by kd.createtime 2.SELECT * FROM ( SELECT *,ROWNUM rn FROM t ORDER BY date_col DESC ) ,cg.bert ...
- 甲醛(Formaldehyde)
化学式:HCHO 又称蚁醛 无色气体,有特殊的刺激气味 气体相对密度1.067(空气=1),液体密度0.815g/cm³(-20℃).熔点-92℃,沸点-19.5℃.易溶于水和乙醇.水溶液的浓度最高可 ...
- POJ2947 DAZE [Gauss]
题目是要求建立一个方程组: (mat[1][1]*x[1] + mat[1][2]*x[2] + - + mat[1][n]*x[n])%7 =mat[1][n+1] (mat[2][1]*x[1] ...
- Asp.net 基于Cookie简易的权限判断
基于Cookie简易的权限判断代码,需要的朋友可以参考下. 写入Cookie页面,创建cookie后,设置cookie属性,并添加到Response.Cookies中读取cookie,利用cookie ...
- ChemDraw是这样预测诺氟沙星NMR谱
化学绘图软件ChemDraw是一款在生化领域都可以使用的软件,诺氟沙星是一款常用的肠炎药,是生物化学领域的常见研究对象,在研究过程中需要预测它的NMR谱.这个时候如果用最新的ChemOffice 15 ...
- Android初体验-D3
1. UI界面布局. (即可用XML控制布局也可采用Java代码布局,不过在实际应用中是两者混合控制UI界面,为什么呢,因为XML适用于固定的不易改变的组件布局,Java程序控制常变的组件...其控制 ...
- Codeforces 460 D. Little Victor and Set
暴力+构造 If r - l ≤ 4 we can all subsets of size not greater than k. Else, if k = 1, obviously that ans ...
- 【BZOJ3029】守卫者的挑战 概率+背包
[BZOJ3029]守卫者的挑战 Description 打开了黑魔法师Vani的大门,队员们在迷宫般的路上漫无目的地搜寻着关押applepi的监狱的所在地.突然,眼前一道亮光闪过.“我,Nizem, ...