xgqfrms™, xgqfrms® : xgqfrms's offical website of cnblogs! xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

How to use the Raspberry Pi and Python to control a buzzer All In One

How to use the Raspberry Pi and Python to control a buzzer All In One

如何使用树莓派和Python来控制蜂鸣器

image

蜂鸣器

有源蜂鸣器 vs 无源蜂鸣器

现在有很多人对有源蜂鸣器无源蜂鸣器的概念不是很清楚,这里做简单介绍,希望对大家日后使用有所帮助。
注意,这里的“源”不是指电源。而是指震荡源

无源蜂鸣器的特点:

  1. 无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它
  2. 声音频率可控,可以做出“多来米发索拉西”的效果。(高阶玩家)
  3. 在一些特例中,可以和 LED 复用一个控制口

💡: 使用无源蜂鸣器,只要输出不同频率PWM 波,即可发出不同的音符; 不同的音符组合起来就是一个曲子了, 可以用来播放音乐; ✅

有源蜂鸣器的特点:

  1. 有源蜂鸣器内部带震荡源,所以只要一通电就会叫
  2. 程序控制方便,单片机一个高低电平就可以让其发出声音,而无源蜂鸣器却做不到

errors ❌

AttributeError: 'NoneType' object has no attribute 'value'

AttributeError: 'NoneType' object has no attribute 'off'

GPIO.output(PIN, GPIO.LOW) ValueError: Channel must be an integer or list/tuple of integers

  1. on / off

print('开始鸣叫 🔔')
try:
  for i in range(3):
    print('鸣叫 ✅', i)
    buzzer.value(0)
    sleep(1)
    buzzer.value(1)
except KeyboardInterrupt:
  print('鸣叫 ❌')
  GPIO.cleanup()
finally:
  print('结束鸣叫 🔔')

  1. value(1) / value(0)
print('开始鸣叫 🔔')
try:
  for i in range(3):
    print('鸣叫 ✅', i)
    buzzer.off()
    sleep(1)
    buzzer.on()
except KeyboardInterrupt:
  print('鸣叫 ❌')
  GPIO.cleanup()
finally:
  print('结束鸣叫 🔔')

  1. ???

solutions ✅

PIN

PIN = 17
# 有源蜂鸣器,低电平触发
buzzer = GPIO.setup(PIN, GPIO.OUT)
print('🔔 buzzer =', buzzer)
# 🔔 buzzer = None ❌

print('开始鸣叫 🔔')
try:
  for i in range(3):
    print('鸣叫 ✅', i)
    GPIO.output(PIN, GPIO.LOW)
    sleep(1)
    GPIO.output(PIN, GPIO.HIGH)
except KeyboardInterrupt:
  print('鸣叫 ❌')
  GPIO.cleanup()
finally:
  print('结束鸣叫 🔔')

https://raspberrypi.stackexchange.com/questions/55718/rpi-gpio-library-working-in-python-3-4-but-not-in-python-2-7

demos

有源蜂鸣器模块,低电平触发 (电子积木模块)

模块描述:
模块采用 S8550 三极管驱动
工作电压 3.3V-5V
设有固定螺栓孔,方便安装
小板 PCB尺寸:3.2cm * 1.3cm
当I/O口输入低电平时,蜂鸣器发声

模块接口说明(3线制:
VCC 外接 3.3V-5V 电压(可以直接与5v单片机和3.3v单片机相连)
GND 外接 GND
I/O 外接单片机 IO口

image


#!/usr/bin/env python3
# coding: utf8

from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
PIN = 17
# 有源蜂鸣器,低电平触发
buzzer = GPIO.setup(PIN, GPIO.OUT)
print('🔔 buzzer =', buzzer)
# 🔔 buzzer = None ❌

# print('GPIO.RPI_INFO =', GPIO.RPI_INFO)
# print('GPIO.VERSION =', GPIO.VERSION)
# P17_value = GPIO.gpio_function(17)
# print('GPIO.gpio_function(17) =', P17_value)

print('开始鸣叫 🔔')
try:
  for i in range(3):
    print('鸣叫 ✅', i)
    # buzzer.off()
    # buzzer.value(0)
    GPIO.output(PIN, GPIO.LOW)
    sleep(1)
    # buzzer.on()
    # buzzer.value(1)
    GPIO.output(PIN, GPIO.HIGH)
except KeyboardInterrupt:
  print('鸣叫 ❌')
  GPIO.cleanup()
finally:
  print('结束鸣叫 🔔')


"""
https://www.cnblogs.com/xgqfrms/p/17404551.html

https://github.com/xgqfrms/Raspberry-Pi/tree/master/Python
"""

代码优化

#!/usr/bin/env python3
# coding: utf8

from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
PIN = 17
# 有源蜂鸣器,低电平触发
buzzer = GPIO.setup(PIN, GPIO.OUT)
print('🔔 buzzer =', buzzer)
# 🔔 buzzer = None ❌

# print('GPIO.RPI_INFO =', GPIO.RPI_INFO)
# print('GPIO.VERSION =', GPIO.VERSION)
# P17_value = GPIO.gpio_function(17)
# print('GPIO.gpio_function(17) =', P17_value)

print('开始鸣叫 🔔')
try:
  for i in range(3):
    print('鸣叫 ✅', i)
    # buzzer.off()
    # buzzer.value(0)
    GPIO.output(PIN, GPIO.LOW)
    sleep(1)
    # buzzer.on()
    # buzzer.value(1)
    GPIO.output(PIN, GPIO.HIGH)
except KeyboardInterrupt:
  print('鸣叫 ❌')
finally:
  GPIO.cleanup()
  print('结束鸣叫 🔔')


"""
https://www.cnblogs.com/xgqfrms/p/17404551.html

https://github.com/xgqfrms/Raspberry-Pi/tree/master/Python
"""

无源蜂鸣器模块,高电平触发 (电子积木模块)

#!/usr/bin/env python3
# coding: utf8

from time import sleep
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
# GPIO.setwarnings(False)

PIN = 18
Hz = 4978
GPIO.setup(PIN, GPIO.OUT)
# 设置 GPIO 18 PIN 为 PWM 输出, PWM 脉冲频率为 4978Hz (2KHz ~ 5KHZ)
pwm = GPIO.PWM(PIN, Hz)
print('pwm =', pwm)

print('\n开始鸣叫 🔔')
try:
  # DutyCycle 0.0 ~ 100.0
  pwm.start(0.0)
  pwm.ChangeDutyCycle(50.0)
  sleep(1)
  pwm.stop()
except KeyboardInterrupt:
  print('鸣叫 ❌')
finally:
  GPIO.cleanup()
  print('结束鸣叫 🔔')

"""

GPIO 18(PWM0)
GPIO 12(PWM0)

GPIO 13(PWM1)
GPIO 19(PWM1)

https://pinout.xyz/pinout/pwm

https://pinout.xyz/pinout/pin12_gpio18


`无源蜂鸣器`的特点:

1. 无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用`2K~5K`的方波去驱动它
2. 声音频率可控,可以做出“多来米发索拉西”的效果。(高阶玩家)
3. 在一些特例中,可以和 LED 复用一个控制口

💡: 使用无源蜂鸣器,只要输出不同频率的 PWM 方波(数字信号),即可发出不同的音符; 不同的音符组合起来就是一个曲子了, 可以用来播放音乐; ✅

模拟信号:连续性
数字信号: 非连续 0 ~ 1

https://www.cnblogs.com/xgqfrms/p/17404551.html

"""

(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!

refs



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!


posted @ 2023-05-16 12:05  xgqfrms  阅读(17)  评论(3编辑  收藏  举报