订阅趣无尽微信公众号

树莓派用蜂鸣器实现整点报时

buzzer

树莓派外加一个有源蜂鸣器,实现一个简单的报时功能。

可能有些新手对于有源、无源蜂鸣器的区别,这里简短介绍下:
一、无源蜂鸣器
1 无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它
2 声音频率可控,可以做出“多来米发索拉西”的效果。
3 在一些特例中,可以和LED复用一个控制口
二、有源蜂鸣器
1 有源蜂鸣器内部带震荡源,所以只要一通电就会叫
2 程序控制方便,单片机一个高低电平就可以让其发出声音,而无源蜂鸣器却做不到。

笔者采用的是有源蜂鸣器
电压:3.5—5.5V
电流:<25mA 频率:2300±500 为了使蜂鸣器鸣叫的程序模块化,将这一部分代码放到独立的 libbeep.py 文件中。 [python] import RPi.GPIO as GPIO import time PIN_NO = 10 #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) [/python] 然后在 alarm.py 中实现整点报时,代码如下: [python] 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) 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) [/python] 最后运行脚本: [bash]sudo python alarm.py[/bash]

本文来自:树莓派实验室
链接地址:http://shumeipai.nxez.com/2014/10/29/raspberry-pi-and-buzzer-timekeeping.html

4 Responses

  1. eww 2015年7月18日 / 02:03

    百度搜来搜去都是这篇帖子,可我的是无源蜂鸣器。没办法,还是英文上谷歌吧

  2. admin 2015年7月18日 / 10:55

    void beep()
    {
    unsigned char i , j;
    for (i=0;i<100;i++)
    {
    BEEP=!BEEP; //BEEP取反
    for (j = 0 ; j<250 ; j++) //需要产生方波
    _nop_();
    }
    BEEP=1; //关闭蜂鸣器
    }

    这是无源蜂鸣器的代码示例

  3. asd 2016年3月31日 / 17:53

    php的话 不知道怎么办好。。

  4. Emma 2016年6月12日 / 18:18

    Jag gillar Rock-Philia, men jag är inte riktigt säker pÃ¥ det där med stjärnor pÃ¥ byxorna. Jag fÃ¥r lite hÃit¶gadie-vsbbar av det… (alltsÃ¥ när jag själv gick i högstadiet pÃ¥ 80-talet).EvaK

发表评论

电子邮件地址不会被公开。 必填项已用*标注