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





