通過UART將文本和傳感器值發(fā)送到TinyTTS模塊,添加語音反饋到任何Arduino項目
本項目展示了一種簡單、可重復的方法,使用TinyTTS文本到語音模塊使Arduino“說話”。
Arduino保持其通常的作用:讀取傳感器,運行邏輯,并通過串行端口發(fā)送純文本。TinyTTS通過一個3.5?毫米的音頻插孔接收這些文本,然后自己生成語音。沒有網(wǎng)絡,沒有帶音頻文件的SD卡,沒有編解碼器。
您將構建和測試兩個具體場景:
1.USB演示-您在PC上的串行終端輸入文本,Arduino將其轉發(fā)到TinyTTS,然后您聽到它說話。
2.傳感器驅動版本- Arduino讀取傳感器值,格式化短句子,TinyTTS宣布結果
一旦這工作,你可以把TinyTTS作為一個小的“語音層”,你可以進入任何未來的Arduino項目,只要你需要語音反饋,而不是(或除了)led和顯示器。
項目概述
我們將在兩種模式下使用相同的基本連接:
?場景1 - USB演示
PC→Arduino (USB Serial)→TinyTTS (UART)。
你從電腦上的終端發(fā)送文本,TinyTTS會說出來。
?場景2 -傳感器驅動
傳感器→Arduino→TinyTTS。
Arduino讀取一個傳感器(在示例中是溫度),構建一個字符串,如“溫度是23度”,并將其發(fā)送給TinyTTS。
這兩個場景之間唯一的真正區(qū)別是文本的來源。
在這兩種情況下,TinyTTS接口保持相同。
它是如何工作的
TinyTTS的行為就像一個簡單的UART設備:
?它在RX上監(jiān)聽文本行。
?當它接收到以換行符(\n)結尾的行時,它將該文本轉換為語音并在音頻輸出中播放。
在Arduino端:
?PC機接口:用于調試和接收計算機輸入的文本。
?TinyTTS接口:用于向模塊發(fā)送文本。
Arduino Mega:該板有多個硬件串行端口。您可以使用PC的標準USB連接和第二個硬件串行(例如,Serial1或serial2)以高速可靠地與TinyTTS交談。
對于Arduino Uno/Nano:這些板只有一個硬件串行(引腳0和1)。為了確保可靠的音頻性能,我們將TinyTTS連接到硬件串行。為了與PC同時通信,我們使用單獨的USB-TTL適配器,通過數(shù)字引腳上的SoftwareSerial連接。
在代碼中,這可以歸結為一個操作:
在場景1中,您使用來自PC的文本調用speak()。
在場景2中,使用根據(jù)傳感器讀數(shù)構建的文本調用speak()。
硬件
您可以使用常見的Arduino部件重現(xiàn)此項目。
核心組件
?TinyTTS模塊
- UART文本輸入接口
- 3.5?毫米耳機或揚聲器音頻插孔
?Arduino -兼容的董事會
測試:
- Arduino Uno
- Arduino Nano
- Arduino Mega 2560
任何電路板都有一個用于TinyTTS的硬件串行端口和一個用于USB的第二個串行端口(硬件或軟件)。
?揚聲器或耳機
插入TinyTTS 3.5?mm輸出。
?USB TTL適配器
對電路板進行編程,并在場景1中從PC機發(fā)送文本。
場景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適配器才能從計算機發(fā)送文本。
附加傳感器接線(場景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轉發(fā)給TinyTTS。
Uno用戶注意事項:上傳時斷開TinyTTS引腳0和1的連接,然后重新連接并按Reset。
2. 在PC上打開串口終端
以下任何一種都可以:
?Arduino Uno:將USB-TTL適配器連接到您的PC。打開終端軟件(PuTTY或Python miniterm)并選擇適配器的COM端口。波特率設置為9600。
?Mega:連接單板的標準USB線。打開串行監(jiān)視器。波特率設置為115200。
3. 發(fā)送文本
?輸入一個簡短的短語,比如Hello TinyTTS
?用換行符發(fā)送(串行監(jiān)視器:設置“換行符”或“NL & CR”)。
?Arduino接收文本并調用speak(line);TinyTTS會說。
此時,您已經(jīng)驗證了:
?TinyTTS供電和接線正確。
?Arduino和TinyTTS之間的串行鏈路正在工作。
?輔助函數(shù)speak()完成了它應該做的工作。
場景2 -傳感器驅動的語音
現(xiàn)在我們從PC上輸入的文本切換到由傳感器讀取生成的文本。
1. 保留現(xiàn)有的TinyTTS線路
這方面不需要更改。
2. 添加傳感器接線
通過I2C連接BME680,連接方法請參見接線。
3. 修改草圖
包括必要的庫(例如CloseCube_BME680),并將串行輸入環(huán)路替換為傳感器邏輯:
4. 測試說話傳感器
?為Arduino供電(USB或外部5?V)。
?聽TinyTTS音頻輸出。
?觸摸或輕輕地加熱傳感器,檢查語音溫度是否發(fā)生變化。
從這里,你可以替換任何傳感器:距離,光照水平,土壤濕度等。
在其他項目中重用此模式
這個構建的主要目標不是一個單獨的會說話的溫度計,而是一個可以重用的通用模式:
1. 為TinyTTS預留一個串口。
2. 實現(xiàn)一個小函數(shù),比如speak(text)。
3. 在你的項目中決定何時調用它以及該說什么。
您可以將其放入:
?偶爾讀出最后測量值的數(shù)據(jù)記錄器。
?簡單的實驗室工具,你的手很忙,你可以聽,但不能看顯示器。
?可訪問性導向的設備,可以顯示價值,而不僅僅依賴于屏幕或led。
?應用程序代碼的其余部分可以保持原樣。
下一個步驟
擴展這個項目的想法:
?閾值警報
只在值超過限制時說話,例如:
?模式公告
使用TinyTTS確認狀態(tài)變化:
?結合顯示器
在OLED或LCD上顯示數(shù)值,并同時說出來。
?連接到另一個MCU
TinyTTS UART協(xié)議與其他板(例如ESP32)工作相同。您只需要一個備用串行接口。
如果您使用此模式構建自己的支持語音的工具或實驗,請考慮將其作為單獨的項目發(fā)布,并將其作為TinyTTS基礎引用。這樣,其他人就可以看到重用同一語音層的不同方法。
本文編譯自hackster.io





