zoukankan      html  css  js  c++  java
  • 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 文件中,代码如下:

    [python] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. import RPi.GPIO as GPIO  
    2. import time  
    3.    
    4. PIN_NO = #GPIO编号,可自定义  
    5.    
    6. GPIO.setmode(GPIO.BOARD)  
    7. GPIO.setup(PIN_NO, GPIO.OUT)  
    8.    
    9. #哔1次,时长作为参数传递  
    10. def beep(seconds):  
    11.         GPIO.output(PIN_NO, GPIO.HIGH)  
    12.         time.sleep(seconds)  
    13.         GPIO.output(PIN_NO, GPIO.LOW)  
    14.    
    15. #哔N次,时长、间隔时长、重复次数作为参数传递  
    16. def beepAction(secs, sleepsecs, times):  
    17.         for i in range(times):  
    18.             beep(secs)  
    19.             time.sleep(sleepsecs)  
    20.    
    21. #beepAction(0.02,0.02,30)  

    在 alarm.py 中实现整点报时,代码如下:

    [python] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. import RPi.GPIO as GPIO  
    2. import time  
    3. import libbeep  
    4. while True:  
    5.         t = time.localtime() #读取系统时间  
    6.         h = t.tm_hour  
    7.         m = t.tm_min  
    8.         s = t.tm_sec  
    9.         w = time.strftime('%w',t)#函数接收以时间元组,并返回以可读字符串表示的当地时间,%w一年中的星期数(00-53)星期一为星期的开始  
    10.         print h,m,s,w  
    11.         time.sleep(0.3)  
    12.         if m == and s == 0:  
    13.             if h>22 or h<8:#为了晚上22点之后,上午8点之前不被打扰  
    14.                 print "continued"  
    15.                 continue  
    16.             if h>12:  
    17.                 h = h-12  
    18.             libbeep.beepAction (0.3,0.5,h)  
    19.             time.sleep(1)  
    20.    
    21.         if m == 30 and s == 0:  
    22.             if h>22 or h<8:  
    23.              print "continued"  
    24.                 continue  
    25.             libbeep.beepAction (0.05,0.05,2)  
    26.             time.sleep(1)  

    为了方便测试,我们可以把系统时间调整接近整点的时刻,在运行脚本,等待整点,感受自己制作的整点报时

    使用此命令更改系统时间: sudo date -s"10:59:57 2015-04-03"

    执行脚本:    sudo Python alarm.py

    最后等待铃声响起!

  • 相关阅读:
    paip.提升用户体验c++ 右键菜单以及socket接口
    paip. 'QObject::QObject(const QObject&)' is private问题的解决.
    paip.ollydbg 设置c++ qt API断点总结
    paip.提升用户体验c++ qt自定义窗体(1)标题栏的绘制
    paip.提升用户体验c++ QPushButton按钮控件透明以及不规则按钮以及 鼠标越过动态设置
    paip.c++ static 变量的定义以及使用...
    paip.c++ gcc 不能捕获exception异常的解决
    paip.pyqt python qt 最新版本环境最佳实践
    paip.提升用户体验c++ QLabel标签以及QLineEdit文本框控件透明 设置
    paip.c++ 宏的展开调试.
  • 原文地址:https://www.cnblogs.com/Pond-ZZC/p/6763315.html
Copyright © 2011-2022 走看看