锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

树莓派还能这么玩之做一个语音音箱

时间:2022-12-09 12:00:00 内部传感器贴片ic12f629集成电路528二极管

关注树莓派已经很久了,但是没有感兴趣的应用场景,所以没有买玩。几个月前偶然得到一个小度音箱,发现了新大陆,各种语音控制功能,便捷性不言而喻,还买了一些外部设备可以通过小度控制,发现有红外遥控器可以控制家里的大部分红外家电,奈何码库不是很全,有些设备还是不能控制的,而且不支持定制功能。碰巧知乎看到了一些 geek 视频,想着自己做一个,可以支持红外数据的定制,实现自由遥控。所以说干就干,从一个什么硬件都不懂的小白一步一步学到一些硬件知识,软件部分相对容易实现。主要计划的功能是通过语音控制红外电器、温湿度监测和智能提醒,然后不断开发插件形式,以提高可玩性。

该计划主要分为两个子系统

  1. 软件子系统主要实现从语音到文本和文本到语音的转换,以及逻辑功能的处理。
  2. 硬件子系统为收音机、扬声器、温湿度传感器、红外收发、系统供电等提供支持。

整体功能点进度如下

  • ok 显示,信息简单显示界面,计划使用 OLED12832 屏。
  • ok 收集外部语音信息。
  • ok 音响,输出系统响应结果。
  • 收集设备所处环境的温湿度。
  • ok 风扇,硬件系统散热。
  • ok 用于控制红外家电的红外收发、红外设备系统输入和红外信号发射。
  • 为音响和树莓派硬件供电模块。
  • ok pcb 电路设计,传感器集成。
  • 3d 打印外壳,最后根据硬件的排列定制简单的外壳。
  • ok 语音汉字互转,计划采用讯飞 API 实现接口,然后尝试做一个简单的语音识别模型。
  • ok 基于硬件传感器数据的采集和信息的归纳整理能力,逻辑控制和输出输入设备控制模块。

硬件部分

软件一直在做,这次从 0 到 1 一点学硬件,到 PCB 打样,焊板。根据可用水平,没有研究任何设计规范。

d8c4bff3179ef1ef0fe5dbd5719262e5.png


收集实验数据

树莓派4 GPIO 引脚

关于树莓派 IO 接口部分参考:

树莓派IO你知道界面吗?看完这篇文章就够了。


一、电源输出引脚

3v3、5v代表:3.3伏特和5伏特是输出和供电的正极,我们常说Vcc

GND负极代表接地和输出供电

特别注意:每个引脚最大输出电流为16m安(mA),同时,所有引脚的总输出电流不得超过51m安

二、GPIO

GPIO(General Purpose I/O Ports)意思是一般输入/输出端口,一般来说是一些引脚,可以输出高低电平或读入引脚状态——高电平或低电平。GPIO这是一个更重要的概念,用户可以通过GPIO数据交互(如口与硬件)UART),控制硬件工作(如LED、蜂鸣器等。),读取硬件工作状态信号(如中断信号)等。GPIO口腔被广泛使用。掌握了GPIO,几乎相当于掌握了操作硬件的能力。树莓派有26个GPIO部分接口是复用接口。

  1. 引脚3、5为IC总线重用接口
  2. 引脚7为(GCLK)全局时钟引脚复用接口
  3. 引脚19、21、23为SPI总线重用接口
  4. 引脚8、10是串口复用接口,TX发送,RX接收
  5. 引脚12、32、33、35PWM复用接口

三、IC总线

IC是内部整合电路的称呼,是一种串行通讯总线,使用多主从架构,由飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边装置而发展。IC正确的读法是Inter-Integrated Circuit” 。

  • SDA:数据线
  • SCL:时钟线

四、SPI总线

SPI是串行外设界面(Serial Peripheral Interface)缩写是一种高速、全双工、同步通信总线,芯片管脚只占用四条线,节省了芯片管脚,同时也是PCB由于这种简单易用的特点,越来越多的芯片集成了这种通信协议,以节省空间,提供便利。

  • MISO:数据输入
  • MOSI:数据输出
  • SCLK:时钟信号
  • SS:使能信号

五、UART总线

UART异步通信是一种通用串行数据总线。该总线的双向通信可实现全双工传输和接收。嵌入式设计,UART用于通信主机和辅助设备,如汽车音响和外部AP通信,和PC机通信包括监控调试器和其他设备,如EEPROM通信。
可理解为计算机串口。RS232、TTL。

  • RX是接收
  • TX是发送

六、PWM脉冲宽度调制

脉冲宽度调制是一种模拟控制方式,其根据相应载荷的变化来调制晶体管基极或MOS管栅实现晶体管或MOS管导时间的变化,从而实现开关稳压电源输出的变化。这种方法可以在工作条件变化时保持电源的输出电压恒定,是利用微处理器的数字信号控制模拟电路的非常有效的技术。脉冲宽度调节是一种非常有效的技术,利用微处理器的数字输出来控制模拟电路,广泛应用于从测量、通信到功率控制和转换的许多领域。

AD 教程

AD 使用和使用硬件电路图PCB图纸设计使用。主要是看B站的入门视频教程,然后不断搜索改变。

B 站立一小时速成教程:

Altium Designer快速入门一小时


其它参考资料:


详解如何用AD 生成Gerber文件


如何制作印刷电路板(PCB)的3D渲染效果图?

单位转换

  • 1.0mil = 0.025mm
  • 1.2mil = 0.030mm
  • 1.25mil = 0.032mm

DHT11 温湿度传感器

以下是温湿度传感器的基本电路图,原本是3pin方案是树莓派的,板子也画好了,但是焊接时处理不好。现在系统不能正确读数,只能在测试过程中正常读数。


直接读取树莓派 DHT11 温湿度法

OLED 12832

这里使用了 Adafruit_Python_SSD1306 库来驱动液晶显示屏。

使用树莓派 SSD1306 OLED 屏幕

IR 收发

这里只画了两张红外发射图。事实上,我配备了四个红外发射二极管,将限流电阻调整成 100R。



红外接收图,主要是引脚的情况,这里直接使用简单封装的传感器

IR收发是主要调试功能:

使用红外录入功能: 安装 Linux 下红外控制库:

sudo apt-get update   sudo apt-get install lirc  

更新 /boot/config.txt 打开红外收发接口的文件:

# Uncomment this to enable the lirc-rpi module dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=18,gpio_in_pull=up /pre> 
   

更新 /etc/lirc/lirc_options.conf 文件来控制当前是接收模式还是发射模式,修改完重启服务生效:

device=/dev/lirc0
 

测试能否正常接收到红外信号:

mode2 -d /dev/lirc0

space 16777215
pulse 8999
space 4457
pulse 680
space 1627
......

可以通过 lirc 录制简单的红外设备生成遥控文件,如果空调这种比较复杂的不太好弄。

# 查看按键名称,这里一个红外码是绑定到一个按键上的,你需要找一些你录制的按键然后记下来。
irrecord -l
# 开启录制命令,这个录制过程比较复杂,需要先判断环境噪音,然后随机按键,最后才是录制按键,而我的有些红外设备按键无法录上有点奇怪,目前只有台灯的录进去了。
irrecord ~/lircd.conf
# 如果有问题可以录制 raw code
irrecord -f ~/lircd.conf 

录制好的文件内容像下面这样,如果没有内容则说明没有录制上。

begin remote
  name myir
  flags RAW_CODES|CONST_LENGTH
  eps 30
  aeps 100
  gap 108055
      begin raw_codes
          name KEY_1
            9062 4462 621 531 627 532
              626 531 626 532 629 531
              601 556 627 531 628 530
              628 1610 629 1611 603 1636
              603 1636 629 1612 629 1609
              631 1609 630 1610 627 1612
              630 530 629 1608 629 532
              626 534 625 532 628 1609
              629 532 628 529 630 1609
              629 530 626 1612 629 1610
              629 1610 629 540 633 1596
              629
          name KEY_2
            9067 4455 632 528 630 528
              633 524 631 529 630 529
              630 528 630 530 630 528

最后要把录制的文件内容复制到对应目录,重启,让 lirc 服务能加载上:

sudo cp ~/xx.lircd.conf /etc/lirc/lircd.d/xx.lircd.conf 

实际上发送按键需要执行的命令包含你复制的文件名(device-name)以及按键名(KEY_1):

 irsend SEND_ONCE  KEY_1 
红外输入输出参考


使用LIRC为Raspberry PI(RPi)设置IR远程控制 树莓派 ——红外遥控篇lirc【内核4.19.x】


人类身份验证 - SegmentFault 树莓派:红外遥控测试


树莓派3B-------使用lirc配置遥控器 - Huang路飞 - 博客园


树莓派4B 4.19.X内核,红外接收与发送(附python发送红外)教程

发现,作为一个小白,参考了很多的文章,这里在录制的时候也踩了很多坑。


软件部分

简单的将软件部分分为前台功能和后台功能,前台功能主要是面向用户使用层面,后台功能主要是配置相关功能。代码就不上了先。



前台功能分为三个模块,输入模块、逻辑处理模块和输出模块。



其中热词唤醒方案使用的 snowboy ,语音文字互转采用的讯飞免费接口,后面可以考虑实现一些简单的部分。


按照这个方案,后续只要不断配置和扩展功能即可,主要处理流程不会有太大变化产生。


语音部分参考


树莓派使用 snowboy 配置语音唤醒


离线语音Snowboy热词唤醒+ 树莓派语音交互实现开关灯


Python人工智能之路 - 第三篇 : PyAudio 实现录音 自动化交互实现问答


语音听写(流式版)WebAPI 文档 | 讯飞开放平台文档中心


语音合成(流式版)WebAPI 文档 | 讯飞开放平台文档中心


讯飞开放平台语音识别音频文件格式说明 | 讯飞开放平台文档中心

软件部分等优化后再放出来。

总结

目前一期实现了核心部分的功能,可以语音控制普通红外家电,耗时有两周(晚上),目前的时间精力上也只能做到这样,毕竟工作和生活还要占据绝大部分时间的。使用上流程比较简单,插电开机自启动后就可以了,只是语音和音箱部分还没有很方便的集成到整个项目里面。下一期做的时候计划优化电路,支持更多的传感器,然后把麦和音箱集成进去,再做一个外壳。
整个项目从计划到实施还是学到了一些,主要是硬件方面上的了解,电路原理图、PCB画图打样、硬件电路 IO 接口标准等,软件部分并没有太多的实践,准备放到三期做软件层面的优化,把外部 API 调用改成自己训练的语音模型。

欢迎私信交流~

最后关于树莓派的推荐商品:

嘉立创定制PCB打样 批量生产 激光钢网 SMT打样贴片加工 源头厂家

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章