c++趣味编程玩转物联网:基于树莓派Pico控制有源蜂鸣器

有源蜂鸣器是一种简单高效的声音输出设备,广泛应用于电子报警器、玩具、计时器等领域。在本项目中,我们结合树莓派Pico开发板,通过C++代码控制有源蜂鸣器发出“滴滴”声,并解析其中涉及的关键技术点和硬件知识。


一、项目概述

1. 项目目标
  • 学习有源蜂鸣器的原理和特性。
  • 利用树莓派Pico开发板控制蜂鸣器发出“滴滴”声。
  • 掌握晶体管的驱动电路设计。
2. 必需硬件

  • 树莓派Pico开发板 × 1
  • 树莓派Pico扩展板 × 1
  • 有源蜂鸣器 × 1
  • NPN型晶体管(S8050) × 1
  • 1kΩ电阻 × 1
  • 面包板与跳线若干

晶体管有两种类型,如下图所示,PNP和NPN:

基于晶体管的特性,它常被用作数字电路中的开关。由于单片机输出电流的能力很弱,我们将使用晶体管来放大电流和驱动大电流的元件。在使用NPN晶体管驱动蜂鸣器时,通常采用以下方法:如果GPIO输出高电平,电流将流过R1,晶体管将传导,蜂鸣器将发出声音。如果GPIO输出低电平,没有电流流过R1,晶体管就不会传导,蜂鸣器也不会响。在使用PNP晶体管驱动蜂鸣器时,通常采用以下方法:如果GPIO输出低电平,电流将流过R1,晶体管将传导,蜂鸣器将发出声音。如果GPIO输出高电平,没有电流流过R1,晶体管就不会传导,蜂鸣器也不会响。


二、硬件知识与工作原理

1. 有源蜂鸣器与无源蜂鸣器的区别
  • 有源蜂鸣器:内置振荡电路,只需提供直流电即可发声。
  • 无源蜂鸣器:需要外部电路提供2K-5K Hz的方波信号驱动。
2. 晶体管在电路中的作用
  • NPN晶体管(S8050):作为电流放大器,解决蜂鸣器对电流需求高的问题。
  • 工作原理
    • 当GPIO输出高电平时,基极通过电流,集电极-发射极导通,蜂鸣器工作。
    • 当GPIO输出低电平时,晶体管关闭,蜂鸣器停止发声。
3. 注意事项
  • 蜂鸣器工作电压为5V。在3.3V下可运行,但音量降低。
  • 避免VUSB与GND短路,连接错误可能导致硬件烧毁。

三、项目电路设计

电路图
  1. 蜂鸣器正极:连接树莓派Pico的GP16。
  2. 蜂鸣器负极:通过NPN晶体管的集电极接地。
  3. 晶体管基极:通过1kΩ电阻连接Pico的GPIO引脚。
  4. 电源:蜂鸣器供电为5V,通过扩展板或外部供电。

项目电路图

连线图

注意

1.  该电路中蜂鸣器的电源为5V。在3.3V的电源下,蜂鸣器可以工作,但会降低响度。

2.  VUSB应连接到USB线的正极如果它连接到GND,它可能烧坏电脑树莓派Pico板。同样,树莓派Pico板的36-40引脚接线时也要小心,避免短路。

3.  有源蜂鸣器正极(“+”/长引脚)接引脚16,负极短引脚接GND


四、项目代码实现

const int buzzerPin = 16;  // 定义蜂鸣器连接的引脚

void setup() {
  pinMode(buzzerPin, OUTPUT);  // 将蜂鸣器引脚设置为输出
}

void loop() {
  digitalWrite(buzzerPin, HIGH);  // 打开蜂鸣器
  delay(500);                     // 延时500毫秒
  digitalWrite(buzzerPin, LOW);   // 关闭蜂鸣器
  delay(500);                     // 再次延时500毫秒
}
 

代码解析
  • pinMode():设置GPIO引脚为输出模式。
  • digitalWrite():向引脚写入高或低电平,控制蜂鸣器的开关。
  • delay():延时函数控制蜂鸣器工作节奏,实现“滴滴”声。

五、项目现象与应用场景

1. 项目现象

上传代码并运行后,蜂鸣器将以0.5秒的间隔发出“滴滴”声。

2. 应用场景
  • 报警器:如火灾报警、越界提醒等。
  • 电子玩具:发出特定节奏的声音。
  • 计时器:倒计时结束时提示用户。

六、扩展与优化

1. 改变音调与频率

通过调整 delay() 参数或引入PWM信号控制蜂鸣器音调,实现更丰富的声音效果。

2. 组合多种声音模式

引入按键模块,切换不同的声音模式,例如长响、短响或音乐节奏。

3. 改善功耗与稳定性

设计低功耗电路,确保蜂鸣器在便携设备中更高效运行。


七、C++知识点剖析

1. 数字信号控制
  • GPIO高低电平:通过 digitalWrite() 控制外设开关状态。
  • 延时实现节奏控制:简单但有效,适合基础音频输出。
2. 引脚模式设置
  • OUTPUT 模式确保引脚能提供足够电流驱动外设。
  • 建议在项目初始阶段统一设置所有引脚的模式,避免引脚冲突。
3. 模块化设计

通过封装功能函数如 beep() 实现更灵活的代码:

void beep(int duration) {digitalWrite(buzzerPin, HIGH);delay(duration);digitalWrite(buzzerPin, LOW);
}

八、总结与学习意义

通过本项目,您将:

  • 理解有源蜂鸣器的工作原理及其与晶体管的关系。
  • 掌握如何利用树莓派Pico的GPIO控制简单外设。
  • 学习C++代码在嵌入式开发中的基础应用。

无论是入门学习还是技术扩展,本项目都为硬件驱动的基本原理提供了宝贵经验。


结语

希望本文对您在硬件控制与C++编程的结合应用中有所帮助。如果您觉得这篇文章对您的学习和实践有价值,请点赞、收藏并分享,您的支持是我们继续创作的最大动力!

 动手实践学习套件

欢迎加V交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/61069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu+ROS推视频流至网络

目录 概述 工具 ros_rtsp 接受流 web_video_server 源码安装 二进制安装 ros接收rtsp视频流 总结 概述 ros_rtsp功能包可以将ros视频流以rtsp形式推送 web_video_server功能包可以将ros视频话题推HTTP流 rocon_rtsp_camera_relay可以接受同一网段下的rtsp视频流输出为…

探索光耦:光耦安全标准解读——确保设备隔离与安全的重要规范

在现代科技日新月异的今天,光耦(光电耦合器)作为电子设备中不可或缺的隔离元件,其重要性不言而喻。它不仅在电源调控、工业自动化及医疗设备等关键领域大显身手,更是确保系统电气隔离与运行稳定的守护神。特别是在保障…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

JAVA题目笔记(二十)异常综合小练

一、键盘录入数据 import java.text.ParseException; import java.util.InputMismatchException; import java.util.Scanner;public class Co {public static void main(String[] args) throws ParseException {//键盘录入信息int age0;String namenull;Scanner sc new Scanne…

STM32F10x 定时器

使用定时器实现:B5 E5的开关 添加相关的.h路径文件 添加相关的.c配置文件 led.h文件 用于声明LED函数 #ifndef __LED_H //没有定义__LED_H #define __LED_H //就定义__LED_H #define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5) #defi…

shell脚本基础学习_总结篇(完结)

细致观看可以,访问shell脚本学习专栏,对应章节会有配图https://blog.csdn.net/2201_75446043/category_12833287.html?spm1001.2014.3001.5482 导语 一、shell脚本简介 1. 定义: 2. 主要特点: 3. shell脚本的基本结构 4. S…

Linux创建免密登陆(错误:Permission denied (publickey,gssapi-keyex,gssapi-with-mic))

报错截图 解决方法 1. mkdir -p ~/.ssh 2. chmod 700 ~/.ssh 3. ssh-keygen,一直回车 4. chmod 600 /root/.ssh/id_rsa 5. 将公钥内容追加到服务器上,cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 6. chmod 600 ~/.ssh/authorized_keys…

低代码平台在医疗/医院行业应用案例与优势介绍

随着医疗行业的不断发展,数字化管理的需求日益迫切。传统的医疗信息化管理系统开发往往面临着成本高、周期长、定制性差等问题。在这个数字化转型的浪潮下,低代码平台应运而生,为医院快速搭建高效、灵活的医疗信息化管理系统提供了全新的解决…

在 Spring Boot 中构造 API 响应的最佳实践

在平时的开发和项目中,我们一定会涉及到接口对接的功能,由于不同开发人员的编码习惯不同,API报文在项目中通常是"百花齐放"的。 不但增加工作难度,往往也是扯皮的大头,如果能统一报文格式,不但能…

多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization(多目标粒子群优化算法) 一、摘要: 本文提出了一种将帕累托优势引入粒子群优化算法的方法,使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展…

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。 原文链接:分享|16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括: 1. 人…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后,后台无法启动jenkins服务,服务状态如下: 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

【计算机视觉+MATLAB】自动检测并可视化圆形目标:通过 imfindcircles 和 viscircles 函数

引言 自动检测图像中的圆形或圆形对象,并可视化检测到的圆形。 函数详解 imfindcircles imfindcircles是MATLAB中的一个函数,用于在图像中检测并找出圆形区域。 基本语法: [centers, radii] imfindcircles(A, radiusRange) [centers, r…

鸿蒙NEXT元服务:利用App Linking实现无缝跳转与二维码拉起

【效果】 元服务链接格式(API>12适用):https://hoas.drcn.agconnect.link/ggMRM 生成二维码后效果: 【参考网址】 使用App Linking实现元服务跳转:文档中心 草料二维码:草料二维码生成器 【引言】 …

下载安装Android Studio

(一)Android Studio下载地址 https://developer.android.google.cn/studio 滑动到 点击下载文档 打开新网页 切换到english ![](https://i-blog.csdnimg.cn/direct/b7052b434f9d4418b9d56c66cdd59fae.png 等待一会,出现 点同意后&#xff0…

【C/C++】深入解析 Stack 与 Queue 数据结构(详解):实现原理、应用场景与性能优化

文章目录 引言栈(Stack)数据结构详解1. 栈的基本概念2. 栈的实现原理3. C中的栈实现4. 栈的应用场景5. 栈的性能分析6. 实战示例:括号匹配 队列(Queue)数据结构详解1. 队列的基本概念2. 队列的实现原理3. C中的队列实现…

【css实现收货地址下边的平行四边形彩色线条】

废话不多说&#xff0c;直接上代码&#xff1a; <div class"address-block" ><!-- 其他内容... --><div class"checked-ar"></div> </div> .address-block{height:120px;position: relative;overflow: hidden;width: 500p…

从零开始配置Qt+VsCode环境

从零开始配置QtVsCode环境 文章目录 从零开始配置QtVsCode环境写在前面扩展安装及配置Qt Configure配置 VsCode创建Qt工程VsCodeQMakeMinGwVsCodeQMakeMsvcVsCodeCMakeMinGwVsCodeCMakeMsvcQtCreatorQMakeMinGw->VsCodeQtCreatorQMakeMsvc->VsCodeQtCreatorCMakeMinGw-&g…

【前端】JavaScript中的字面量概念与应用详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;字面量1. 数字字面量2. 字符串字面量3. 布尔字面量4. 空值字面量&#xff08;null&#xff09;5. 对象字面量6. 数组字面量7. 正则表达式字面量8. 特殊值字面量9. 函数字…

Python使用ffmpeg进行本地视频拉流,并使用训练模型识别人脸,并将识别后的模型推流源码

前言&#xff1a; Windows上搭建nginx-rtsp流媒体服务器&#xff0c;实现FFmpeg推流、录像转rtsp推流 - WayWayWayne - 博客园参考上述文章和一些webRTC前端拉流文章 主要是缕一缕思路和每个部分的代码功能&#xff0c;文件命名高度相似导致。 效果&#xff1a; 代码&#x…