嵌入式人工智能(26-基于树莓派4B的声音传感器)

         发声体产生的振动在空气或其他物质中的传播叫作声波。声波可以借助各种介质向四面八方传播,根据频率的不同,可分为普通的声波(人耳能听到的,频率为20~20000Hz)和超声波(人耳不能听到,频率大于20000Hz)。声波传感器可以检测环境中的声波信号,根据检测频率的不同也可分为普通的声音传感器和超声波传感器两类。本文将介绍普通的声音传感器,下文再介绍超声波传感器。

1、声音传感器简介

声音传感器的作用相当于一个话筒(麦克风)。它用来接收声波,显示声音的振动图像,该传感器内置一个对声音敏感的电容式驻极体话筒。声波使话筒内的驻极体薄膜振动,导致电容的变化,而产生与之对应变化的微小电压。这一电压随后被转化成0-5V的电压,经过A/D转换被数据采集器接收,并传送给计算机。

2、DO与AO模块

DO与AO和光敏、热敏传感器模块一样。DO模块只传送数字量,就是根据震动的原理识别声音 的有无,不能识别特定频率的声音,也不能对噪声的强度进行测量。下图是只有DO模块的声音传感器。

 当声音传感器模块检测到的环境声音强度达不到设定阈值时,OUT引脚输出高电平;当外界环境声音强度超过设定阈值时,OUT输出低电平。低电平并不会持续,声音一旦结束,传感器马上停止输出低电平。另外该传感器上面的蓝色的电位器可以调节声音敏感度(触发音量的阈值)。

还有一种声音传感器模块是4引脚带AO的,不仅能检测声音是否能够达到阈值,还能检测具体的声音强度,该传感器模块上的麦克风可将音频信号转换为模拟信号,模拟信号送AD模块PCF8591将模拟信号转为数字信号通过IIC总线送树莓派进行处理显示。

3、声音传感器与树莓派的连接

我们使用4引脚声音传感器,DO接树莓派GPIO19,VO(AO)接PCF8591的IN0。PCF8591接法参考25电阻传感器那部分。

4、实验代码与结果

实验一用DO输出检测是否有声音。如果有声音则LED灯亮,没有声音则LED灯灭

import time
import RPi.GPIO as GPIO# 指定编号规则为BOARD
GPIO.setmode(GPIO.BOARD)# 定义传感器连接的GPIO引脚
sound = 35
Led = 11
Button = 13# 指定13/35号引脚模式为输入模式,11为LED灯输出引脚
# 默认拉高到高电平,低电平表示OUT口有输出
GPIO.setup(Led, GPIO.OUT)
GPIO.setup(Button, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(sound, GPIO.IN, pull_up_down=GPIO.PUD_UP)try:while True:if GPIO.input(Button)==1:              # 检测声音传感器模块是否输出低电平if GPIO.input(sound) == 0:print("检测到声音!")GPIO.output(Led, GPIO.LOW)time.sleep(0.2)else:print("没有检测到声音!")GPIO.output(Led, GPIO.HIGH)time.sleep(0.2)else:GPIO.cleanup()exit()except KeyboardInterrupt:print("停止检测声音!")finally:GPIO.cleanup()

实验二:通过IIC总线通信,PCF8591将AD转换后的值送树莓派,可以根据声音强度的大小控制LED灯的亮暗。 当然也可以把声音值送OLED显示(同学们自行实现OLED)。

import time
import RPi.GPIO as GPIO
import smbus# 指定编号规则为BCM
GPIO.setmode(GPIO.BOARD)
PWM_LED = 11
# 将第11个引脚设置为输出模式
GPIO.setup(PWM_LED, GPIO.OUT)
pwm = GPIO.PWM(PWM_LED, 80)
pwm.start(0)# 设置PCF8591地址
address = 0x48
# 创建一个smbus实例
bus = smbus.SMBus(1)def loop_print():while True:# 发送一个控制字节到设备bus.write_byte(address, 0x40)# 从设备读取单个字节# 若检测到有声音,该值会变小vioce_value = bus.read_byte(address)if vioce_value:print("读取到的声音值为:", vioce_value)pwm.ChangeDutyCycle(100-int(vioce_value/255*100))time.sleep(0.02)if __name__ == '__main__':try:loop_print()except KeyboardInterrupt:print("程序结束!")finally:pwm.stop()GPIO.cleanup()

这里将获取的声音值(0-255)转成0-100的值送PWM改变占空比。pwm.ChangeDutyCycle(100-int(vioce_value/255*100)),声音越大,LED灯越亮,反之越暗,time.sleep别延时太长时间,同学们可以试试,很好玩。

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

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

相关文章

Linux进程——环境变量之二

文章目录 环境变量查看环境变量获取环境变量main()的第三个参数本地变量全局环境变量内建命令与常规命令 环境变量 查看环境变量 在上一篇文章中我们只说了查看某个环境变量的值,那么如何查看所有的环境变量呢 使用指令env即可 例如 这里我们也不需要全部记住&a…

WPF MVVM框架:CommunityToolkit.Mvvm包使用介绍

最近在需要使用MVVM框架的时候才发现MvvmLight作者宣布停止更新了,有点可惜。 原作者推荐使用CommunityToolkit.Mvvm包,所以这里做一个CommunityToolkit.Mvvm包使用的全面的总结。 开发环境: Visual Studio 2019Windows 10 1903CommunityTo…

海山数据库(He3DB)性能优化方案解析

前端优化是一个永恒的话题,每个前端开发者都希望自己的页面能够快速加载,给用户良好的体验。但往往事与愿违。因此,本文从编码优化、构建优化、部署优化三方面入手进行web页面性能优化。 1. 编码优化 1.1. Css优化 1.1.1. 合理使用css选择…

vue 实战 区域内小组件元素拖拽 示例

<template><div><el-button type"primary" click"showDialog true">快捷布局</el-button><el-dialog title"快捷布局配置" :visible.sync"showDialog"><el-row :gutter"20"><el-co…

全方位数据管理:一站式爬虫服务解决方案

摘要 面对互联网信息爆炸的时代&#xff0c;如何高效地收集、整理并分析海量数据&#xff0c;成为企业与开发者面临的一大挑战。本文将深入探讨一站式爬虫服务解决方案&#xff0c;揭示如何通过全方位数据管理策略&#xff0c;助力企业轻松驾驭大数据海洋&#xff0c;实现数据…

专业视频拍摄与编辑SDK,定制专属视频解决方案

无论是社交媒体营销、产品展示、教育培训还是直播电商&#xff0c;高质量的视频内容都是吸引眼球、传递信息的关键。美摄科技&#xff0c;作为视频编辑处理领域的佼佼者&#xff0c;以其强大的视频拍摄与编辑SDK&#xff0c;为企业开启了视觉创意的新篇章。 【专业级功能&…

web3d值得学习并长期发展,性价比高吗?

在数字化浪潮日益汹涌的今天&#xff0c;Web3D技术以其独特的魅力和广泛的应用前景&#xff0c;逐渐成为技术领域的焦点。对于许多热衷于技术探索和创新的人来说&#xff0c;学习并长期发展Web3D技术无疑是一个值得考虑的选择。那么&#xff0c;Web3D技术的学习和发展究竟是否性…

07 JSP

文章目录 JSP1、JSP 概述2、JSP 脚本和缺点3、EL 表达式4、JSTL标签5、MVC模式和三层架构6、案例 JSP 1、JSP 概述 JSP&#xff08;全称&#xff1a;Java Server Pages&#xff09;&#xff1a;Java 服务端页面 &#xff08;1&#xff09;是一种动态的网页技术 &#xff08;2&…

【C++高阶】哈希之美:探索位图与布隆过滤器的应用之旅

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;模拟实现unordered 的奥秘 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀哈希应用 &#x1f4…

大模型llama结构技术点分享;transformer模型常见知识点nlp面经

1、大模型llama3技术点 参考&#xff1a;https://www.zhihu.com/question/662354435/answer/3572364267 Llama1-3&#xff0c;数据tokens从1-2T到15T;使用了MHA&#xff08;GQA缓存&#xff09;&#xff1b;上下文长度从2-4-8K&#xff1b;应用了强化学习对其。 1、pretraini…

分布式事务(典型的分布式事务场景+CAP+解决方案)

分布式事务与分布式锁的区别&#xff1a; 分布式锁解决的是分布式资源抢占的问题&#xff1b;分布式事务和本地事务是解决流程化提交问题。 SQL中的4个事务隔离级别&#xff1a;&#xff08;1&#xff09;读未提交&#xff08;2&#xff09;读已提交&#xff08;3&#xff09…

如何远程开发完整分析一台新能源车BMS电池管理系统CAN数据矩阵

随着我国新能源汽车的崛起&#xff0c;从网络管理平台、数据中心、科研机构、高校教学、车型对标、整车DBC控制策略分析、电池管理系统研究、电池健康管理、网约车管理、电池梯度利用、车队管理等多方面的市场需求&#xff0c;完整分析一台新能源车BMS电池管理系统的CAN矩阵开发…

【深度学习】yolov8-seg分割训练,拼接图的分割复原

文章目录 项目背景造数据训练 项目背景 在日常开发中&#xff0c;经常会遇到一些图片是由多个图片拼接来的&#xff0c;如下图就是三个图片横向拼接来的。是否可以利用yolov8-seg模型来识别出这张图片的三张子图区域呢&#xff0c;这是文本要做的事情。 造数据 假设拼接方式有…

Oracle配置TCPS加密协议测试

文章目录 一、环境信息二、配置过程1.创建证书2.监听配置2.1.配置sqlnet.ora2.2.配置listener.ora文件2.3.配置tnsnames.ora文件2.4.重载监听 3.数据库本地测试3.1. tcps登录测试3.2.日志监控 一、环境信息 操作系统&#xff1a;Linux 版本信息&#xff1a;Oracle 19c 参考文档…

缓存框架 Caffeine 的可视化探索与实践

作者&#xff1a;vivo 互联网服务器团队- Wang Zhi Caffeine 作为一个高性能的缓存框架而被大量使用。本文基于Caffeine已有的基础进行定制化开发实现可视化功能。 一、背景 Caffeine缓存是一个高性能、可扩展、内存优化的 Java 缓存库&#xff0c;基于 Google 的 Guava Cac…

Ubuntu20.04 设置静态ip

Ubuntu 从 17.10 开始&#xff0c;已放弃在 /etc/network/interfaces 里固定 IP 的配置&#xff0c;interfaces 文件不复存在&#xff0c;即使配置也不会生效&#xff0c;而是改成 netplan 方式 &#xff0c;配置写在 /etc/netplan/01-netcfg.yaml &#xff0c;50-cloud-init.y…

机器学习笔记-02-基础线性算法认识(问题-解答自查版)

前言 以下问题以Q&A形式记录&#xff0c;基本上都是笔者在初学一轮后&#xff0c;掌握不牢或者频繁忘记的点 Q&A的形式有助于学习过程中时刻关注自己的输入与输出关系&#xff0c;也适合做查漏补缺和复盘。 本文可以让读者用作自查&#xff0c;答案在后面&#xff0…

跟《经济学人》学英文:2024年07月20日这期 At last, Wall Street has something to cheer

At last, Wall Street has something to cheer 华尔街终于有值得欢呼的事情了 at last&#xff1a;终于&#xff1b;最后&#xff1b; Consumer banks, on the other hand, are starting to suffer 原文&#xff1a; Capital markets are twitchy. When interest rates spi…

数据危机!4大硬盘数据恢复工具,教你如何正确挽回珍贵记忆!

在这个数字化的时代&#xff0c;硬盘里的数据对我们来说简直太重要了。但糟糕的是&#xff0c;数据丢失这种事时不时就会发生&#xff0c;可能是因为不小心删了&#xff0c;硬盘坏了&#xff0c;或者中了病毒。遇到这种情况&#xff0c;很多人可能就慌了&#xff0c;不知道怎么…

货架管理a

路由->vue的el标签->Api->call方法里calljs的api接口->数据声明const xxxData-> 编辑按钮:点击跳出页面并把这一行的数据给到表单formDataba2 保存按钮:formDataba2改过的数据->xxApi发送->查询Api 跳转仓库:把tableData.value数据清空->callXxxAp…