通过UART将文本和传感器值发送到TinyTTS模块,添加语音反馈到任何Arduino项目
扫描二维码
随时随地手机看文章
本项目展示了一种简单、可重复的方法,使用TinyTTS文本到语音模块使Arduino“说话”。
Arduino保持其通常的作用:读取传感器,运行逻辑,并通过串行端口发送纯文本。TinyTTS通过一个3.5 毫米的音频插孔接收这些文本,然后自己生成语音。没有网络,没有带音频文件的SD卡,没有编解码器。
您将构建和测试两个具体场景:
1.USB演示-您在PC上的串行终端输入文本,Arduino将其转发到TinyTTS,然后您听到它说话。
2.传感器驱动版本- Arduino读取传感器值,格式化短句子,TinyTTS宣布结果
一旦这工作,你可以把TinyTTS作为一个小的“语音层”,你可以进入任何未来的Arduino项目,只要你需要语音反馈,而不是(或除了)led和显示器。
项目概述
我们将在两种模式下使用相同的基本连接:
•场景1 - USB演示
PC→Arduino (USB Serial)→TinyTTS (UART)。
你从电脑上的终端发送文本,TinyTTS会说出来。
•场景2 -传感器驱动
传感器→Arduino→TinyTTS。
Arduino读取一个传感器(在示例中是温度),构建一个字符串,如“温度是23度”,并将其发送给TinyTTS。
这两个场景之间唯一的真正区别是文本的来源。
在这两种情况下,TinyTTS接口保持相同。
它是如何工作的
TinyTTS的行为就像一个简单的UART设备:
•它在RX上监听文本行。
•当它接收到以换行符(\n)结尾的行时,它将该文本转换为语音并在音频输出中播放。
在Arduino端:
•PC机接口:用于调试和接收计算机输入的文本。
•TinyTTS接口:用于向模块发送文本。
Arduino Mega:该板有多个硬件串行端口。您可以使用PC的标准USB连接和第二个硬件串行(例如,Serial1或serial2)以高速可靠地与TinyTTS交谈。
对于Arduino Uno/Nano:这些板只有一个硬件串行(引脚0和1)。为了确保可靠的音频性能,我们将TinyTTS连接到硬件串行。为了与PC同时通信,我们使用单独的USB-TTL适配器,通过数字引脚上的SoftwareSerial连接。
在代码中,这可以归结为一个操作:
在场景1中,您使用来自PC的文本调用speak()。
在场景2中,使用根据传感器读数构建的文本调用speak()。
硬件
您可以使用常见的Arduino部件重现此项目。
核心组件
•TinyTTS模块
- UART文本输入接口
- 3.5 毫米耳机或扬声器音频插孔
•Arduino -兼容的董事会
测试:
- Arduino Uno
- Arduino Nano
- Arduino Mega 2560
任何电路板都有一个用于TinyTTS的硬件串行端口和一个用于USB的第二个串行端口(硬件或软件)。
•扬声器或耳机
插入TinyTTS 3.5 mm输出。
•USB TTL适配器
对电路板进行编程,并在场景1中从PC机发送文本。
场景2传感器(示例)
•BME680传感器
您可以将其替换为您熟悉的另一个传感器(DHT11/DHT22,光敏电阻,HCSR04,土壤湿度等)。TinyTTS部分不依赖于传感器类型。
布线
常见连接(TinyTTS↔Arduino)
两种情况的基本连接是相同的:
•TinyTTS VCC→Arduino 5 V(检查模块的额定电压)
•TinyTTS GND→Arduino GND
•TinyTTS RX→用于TinyTTS的串行端口的Arduino TX (Hardware Serial)引脚
•TinyTTS TX→Arduino RX(硬件串行)
•TinyTTS音频插孔→扬声器或耳机
例如,在Arduino Mega上,您可以使用Serial1:
•TinyTTS RX→Arduino pin 18 (TX1)
•TinyTTS TX→Arduino引脚19 (RX1)
在Uno/Nano上,你可以使用Hardware Serial:
•TinyTTS RX→Arduino pin 1 (TX)
•TinyTTS TX→Arduino引脚0 (RX)
Arduino Uno/Nano的具体布线:
因为引脚0和1是由TinyTTS模块使用的,所以您必须添加一个USB TTL适配器才能从计算机发送文本。
附加传感器接线(场景2)
•BME680传感器(温度、湿度、压力、气体)
•BME680 VCC→Arduino 5 V
•BME680 GND→Arduino GND
•BME680 SCL→Arduino模拟输入(例如A5)
•BME680 SDA→Arduino模拟输入(如A4)
如果您使用不同的传感器,请按照其文档中的建议进行连接。TinyTTS部分的布线保持不变。
代码概述和上传
场景1 - USB演示:输入文本,听语音
在这种情况下,Arduino充当PC和TinyTTS之间的桥梁。
1. 上传草图
在Arduino IDE中选择您的板和端口。
上传演示草图:
•从串行(USB)读取行
•通过Serial1转发给TinyTTS。
Uno用户注意事项:上传时断开TinyTTS引脚0和1的连接,然后重新连接并按Reset。
2. 在PC上打开串口终端
以下任何一种都可以:
•Arduino Uno:将USB-TTL适配器连接到您的PC。打开终端软件(PuTTY或Python miniterm)并选择适配器的COM端口。波特率设置为9600。
•Mega:连接单板的标准USB线。打开串行监视器。波特率设置为115200。
3. 发送文本
•输入一个简短的短语,比如Hello TinyTTS
•用换行符发送(串行监视器:设置“换行符”或“NL & CR”)。
•Arduino接收文本并调用speak(line);TinyTTS会说。
此时,您已经验证了:
•TinyTTS供电和接线正确。
•Arduino和TinyTTS之间的串行链路正在工作。
•辅助函数speak()完成了它应该做的工作。
场景2 -传感器驱动的语音
现在我们从PC上输入的文本切换到由传感器读取生成的文本。
1. 保留现有的TinyTTS线路
这方面不需要更改。
2. 添加传感器接线
通过I2C连接BME680,连接方法请参见接线。
3. 修改草图
包括必要的库(例如CloseCube_BME680),并将串行输入环路替换为传感器逻辑:
4. 测试说话传感器
•为Arduino供电(USB或外部5 V)。
•听TinyTTS音频输出。
•触摸或轻轻地加热传感器,检查语音温度是否发生变化。
从这里,你可以替换任何传感器:距离,光照水平,土壤湿度等。
在其他项目中重用此模式
这个构建的主要目标不是一个单独的会说话的温度计,而是一个可以重用的通用模式:
1. 为TinyTTS预留一个串口。
2. 实现一个小函数,比如speak(text)。
3. 在你的项目中决定何时调用它以及该说什么。
您可以将其放入:
•偶尔读出最后测量值的数据记录器。
•简单的实验室工具,你的手很忙,你可以听,但不能看显示器。
•可访问性导向的设备,可以显示价值,而不仅仅依赖于屏幕或led。
•应用程序代码的其余部分可以保持原样。
下一个步骤
扩展这个项目的想法:
•阈值警报
只在值超过限制时说话,例如:
•模式公告
使用TinyTTS确认状态变化:
•结合显示器
在OLED或LCD上显示数值,并同时说出来。
•连接到另一个MCU
TinyTTS UART协议与其他板(例如ESP32)工作相同。您只需要一个备用串行接口。
如果您使用此模式构建自己的支持语音的工具或实验,请考虑将其作为单独的项目发布,并将其作为TinyTTS基础引用。这样,其他人就可以看到重用同一语音层的不同方法。
本文编译自hackster.io





