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.rhkb.cn/news/479940.html

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

相关文章

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化? 重要性:★★ NLP Github 项目: NLP 项目实践:fasterai/nlp-project-practice 介绍:该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

路由引入中次优路由和路由环路问题

A公司用的是IS-IS,B公司用的是OSPF,现在这两个公司要合并,网络要相通 项目目标 前期准备 配置IP地址:完成IP地址规划,A公司和B公司内部网络通过路由器R2和R4环回接口模拟。配置路由器接口的IP地址并测试所有直连链路的…

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

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

光伏功率预测!Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型时序预测

目录 预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Transformer-LSTM、Transformer、CNN-LSTM、LSTM、CNN五模型多变量时序光伏功率预测 (Matlab2023b 多输入单输出) 1.程序已经调试好,替换数据集后,仅运行一个main即可运行,数据格式…

Postman定义公共函数

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Postman定义公共函数 在postman中,如下面的代码: 1、返回元素是否与预期值一致 var assertEqual(name,actual,expected)>{tests[…

SpringAI:Java 开发的智能新利器

一、SpringAI 简介 随着人工智能技术的飞速发展,越来越多的开发者开始探索如何将 AI 能力集成到现有的应用中来提升产品的智能化水平。Spring AI 正是为 Java 开发者提供的一款强大的 AI 框架,使得这一集成过程变得前所未有的简单和高效。 本文将深入探…

javaweb-day02-JS(javascript)

1.JavaScript引入 (1)引入方式 2.JS语法 2.1 书写语法 2.2 变量 (1)var关键字定义的是全局变量; (2)可以重复声明; 2.3 数据类型&运算符 (1)数据类型…

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【三】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

七牛云AIGC内容安全方案助力企业合规创新

随着人工智能生成内容(AIGC)技术的飞速发展,内容审核的难度也随之急剧上升。在传统审核场景中,涉及色情、政治、恐怖主义等内容的标准相对清晰明确,但在AIGC的应用场景中,这些界限变得模糊且难以界定。用户可能通过交互性引导AI生成违规内容,为审核工作带来了前所未有的不可预测…

Python语法基础(三)

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 我们这篇文章来说一下函数的返回值和匿名函数 函数的返回值 我们先来看下面的这一段函数的定义代码 # 1、返回值的意义 def func1():print(111111111------start)num166print…

导入100道注会cpa题的方法,导入试题,自己刷题

一、问题描述 复习备考的小伙伴们,往往希望能够利用零碎的时间和手上的试题,来复习和备考 用一个能够导入自己试题的刷题工具,既能加强练习又能利用好零碎时间,是一个不错的解决方案 目前市面上刷题工具存下这些问题 1、要收费…

使用flink编写WordCount

1. env-准备环境 2. source-加载数据 3. transformation-数据处理转换 4. sink-数据输出 5. execute-执行 流程图&#xff1a; DataStream API开发 //nightlies.apache.org/flink/flink-docs-release-1.13/docs/dev/datastream/overview/ 添加依赖 <properties>&l…

【SpringBoot】28 API接口防刷(Redis + 拦截器)

Gitee仓库 https://gitee.com/Lin_DH/system 介绍 常用的 API 安全措施包括&#xff1a;防火墙、验证码、鉴权、IP限制、数据加密、限流、监控、网关等&#xff0c;以确保接口的安全性。 常见措施 1&#xff09;防火墙 防火墙是网络安全中最基本的安全设备之一&#xff0c…

java全栈day10--后端Web基础(基础知识)

引言&#xff1a;只要能通过浏览器访问的网站全是B/S架构&#xff0c;其中最常用的服务器就是Tomcat 在浏览器与服务器交互的时候采用的协议是HTTP协议 一、Tomcat服务器 1.1介绍 官网地址&#xff1a;Apache Tomcat - Welcome! 1.2基本使用(网上有安装教程&#xff0c;建议…

elasticsearch的索引模版使用方法

5 索引模版⭐️⭐️⭐️⭐️⭐️ 索引模板就是创建索引时要遵循的模板规则索引模板仅对新创建的索引有效&#xff0c;已经创建的索引并不受索引模板的影响 5.1 索引模版的基本使用 1.查看所有的索引模板 GET 10.0.0.91:9200/_index_template2.创建自定义索引模板 xixi &…

英语知识网站开发:Spring Boot框架应用

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架&#xff0c;JAVA作为开发语…

Linux自动化构建-make/Makefile

目录 1. 背景2. 基本使用3. 推导过程4. 好用的操作5. 拓展语法 1. 背景 会不会写makefile&#xff0c;从⼀个侧⾯说明了⼀个⼈是否具备完成⼤型⼯程的能⼒⼀个⼯程中的源⽂件不计数&#xff0c;其按类型、功能、模块分别放在若⼲个⽬录中&#xff0c;makefile定义了⼀系列的规…

Ubuntu20.04+ROS 进行机械臂抓取仿真:环境搭建(一)

目录 一、从官网上下载UR机械臂 二、给UR机械臂添加夹爪 三、报错解决 本文详细介绍如何在Ubuntu20.04ROS环境中为Universal Robots的UR机械臂添加夹爪。首先从官方和第三方源下载必要的软件包&#xff0c;包括UR机械臂驱动、夹爪插件和相关依赖。然后&#xff0c;针对gazeb…

C++11(下)

C11&#xff08;下&#xff09; 1.条件变量2.包装器&#xff08;重要&#xff09;3.bind &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【C的学习】 &#x1f4dd;&#x1f4…

【组件封装】uniapp vue3 封装一个自定义下拉刷新组件pullRefresh,带刷新时间和加载动画教程

文章目录 前言一、实现原理二、组件样式和功能设计三、scroll-view 自定义下拉刷新使用回顾相关属性&#xff1a;最终版完整代码&#xff1a; 前言 手把手教你封装一个移动端 自定义下拉刷新组件带更新时间和加载动画&#xff08;PullRefresh&#xff09;&#xff0c;以uniapp …