鄒元鵬
摘 要:介紹了一種基于Arduino的語(yǔ)音報(bào)警系統(tǒng)。文中描述了語(yǔ)音系統(tǒng)的實(shí)現(xiàn)原理和具體功能,該系統(tǒng)通過(guò)接收以太網(wǎng)上的UDP報(bào)文,解析成文本并進(jìn)行語(yǔ)音朗讀,實(shí)現(xiàn)智能化的語(yǔ)音報(bào)警。本設(shè)計(jì)硬件部分選用了開(kāi)放式的硬件平臺(tái)Arduino和文本語(yǔ)音轉(zhuǎn)換(TTS)模塊;軟件部分給出了控制器中具體的程序邏輯實(shí)現(xiàn);最后對(duì)系統(tǒng)的控制方法作了說(shuō)明。
關(guān)鍵詞:Arduino;語(yǔ)音報(bào)警系統(tǒng)
當(dāng)前市場(chǎng)上常用的語(yǔ)音報(bào)警系統(tǒng)分兩種。一種是帶錄音功能的語(yǔ)音報(bào)警器,內(nèi)置通用的多種報(bào)警語(yǔ)音,按條件觸發(fā)播放。這種語(yǔ)音報(bào)警系統(tǒng)聲音自然,易于使用。但是如果需要修改語(yǔ)音,或是需要播報(bào)的語(yǔ)音條目太多時(shí),需要做的工作量非常大,且難以實(shí)現(xiàn)智能化的語(yǔ)音報(bào)警(如在語(yǔ)音中自動(dòng)插入報(bào)警的設(shè)備號(hào))。近年來(lái),隨著語(yǔ)音文字轉(zhuǎn)換技術(shù)(TTS)的發(fā)展,另一種采用此種技術(shù)的語(yǔ)音報(bào)警系統(tǒng)開(kāi)始普及,極大的提高了工業(yè)報(bào)警系統(tǒng)的自動(dòng)化和智能化程度。
本文介紹一種以SYN6658 TTS語(yǔ)音模塊、W5100以太網(wǎng)模塊以及開(kāi)源Arduino平臺(tái)實(shí)現(xiàn)的基于以太網(wǎng)的語(yǔ)音報(bào)警系統(tǒng)。該系統(tǒng)可方便的與工廠中常用的多種PLC直接對(duì)接。系統(tǒng)從以太網(wǎng)接收GBK編碼的UDP報(bào)文,將其以指定語(yǔ)速及音色朗讀。具有擴(kuò)展性好,網(wǎng)絡(luò)負(fù)載低、易于實(shí)現(xiàn)等多種優(yōu)點(diǎn),為相關(guān)語(yǔ)音系統(tǒng)的構(gòu)建提供了參考。
一、硬件設(shè)計(jì)
本設(shè)計(jì)采用了Arduino Nano 控制板、W5100以太網(wǎng)模塊、SYN6658語(yǔ)音模塊及有源音箱、穩(wěn)壓電源等構(gòu)成。系統(tǒng)的組成如圖所示。
系統(tǒng)通過(guò)W5100接收?qǐng)?bào)文,經(jīng)過(guò)Arduino解析并再次封裝,發(fā)送給SYN6658模塊,模塊將編碼轉(zhuǎn)換為語(yǔ)音并驅(qū)動(dòng)音箱播放。
Arduino是一種基于Atmel的微控制器的開(kāi)源軟硬件平臺(tái),近年來(lái)隨著智能硬件的普及得到了廣泛應(yīng)用,這種控制板細(xì)分為眾多型號(hào),本次設(shè)計(jì)中使用的是基于ATmega328的Arduino Nano版本。該版本體積比標(biāo)準(zhǔn)板更小,采用更友好的MiniUSB供電接口,提供14個(gè)數(shù)字輸入輸出引腳和8個(gè)模擬輸入引腳,32KB 閃存,2KB SRAM和1KB EEPROM。
W5100是一款多功能的單片網(wǎng)絡(luò)接口芯片,內(nèi)部集成了10/100M以太網(wǎng)控制器,主要用于各種高集成、高穩(wěn)定、高性能和低成本的嵌入式系統(tǒng)中。W5100內(nèi)部集成了全硬件的TCP/IP協(xié)議棧。
SYN6658是一款優(yōu)秀的語(yǔ)音合成芯片,芯片通過(guò)UART接口或SPI接口通訊方式接收待合成的文本數(shù)據(jù),實(shí)現(xiàn)文本到語(yǔ)音的轉(zhuǎn)換,主要應(yīng)用于公交語(yǔ)音報(bào)站、自動(dòng)售貨機(jī)、排隊(duì)機(jī)等領(lǐng)域。芯片支持文本智能分析、多音字處理、中文姓氏處理、語(yǔ)音語(yǔ)調(diào)切換等多種功能。
Arduino Nano與W5100間使用SPI對(duì)接,可以實(shí)現(xiàn)以太網(wǎng)數(shù)據(jù)的讀取和寫入,同時(shí)與SYN6658間使用TTL串口通訊,實(shí)現(xiàn)語(yǔ)音報(bào)文的發(fā)送。
二、軟件設(shè)計(jì)
軟件部分采用Arduino1.6.8編程軟件平臺(tái)完成,該平臺(tái)使用了一種類C的語(yǔ)言進(jìn)行編程序編制。程序通過(guò)Socket通訊機(jī)制接收UDP報(bào)文,然后通過(guò)串口發(fā)送文本信息。
簡(jiǎn)化后的主要程序邏輯如下:
void setup() {
Ethernet.begin(mac, ip); //初始化網(wǎng)絡(luò)模塊
Udp.begin(localPort); //開(kāi)始監(jiān)聽(tīng)端口
Serial.begin(9600);}
void loop() {
int packetSize = Udp.parsePacket(); //接收?qǐng)?bào)文
if (packetSize) {
Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
unsigned char head[packetSize+5]; //封裝文本數(shù)據(jù)
head[0] = 0xFD;
head[1] = 0x00;
head[2] = packetSize+2;
head[3] = 0x01;
for(int i=0; i<=packetSize; i++){
head[i+2] = packetBuffer[i];}
for(int i=0; i Serial.write(head[i]);}}} //發(fā)送給語(yǔ)音模塊 三、系統(tǒng)控制方法 本語(yǔ)音系統(tǒng)的報(bào)警可使用任意支持以太網(wǎng)Socket連接的設(shè)備觸發(fā)。調(diào)試時(shí)可使用PC上的Socket測(cè)試助手進(jìn)行連接,也可使用高級(jí)語(yǔ)言編寫控制端軟件進(jìn)行控制。實(shí)際工業(yè)現(xiàn)場(chǎng)中,由于現(xiàn)在大部分PLC都支持Socket連接,可直接將該語(yǔ)音報(bào)警系統(tǒng)連入現(xiàn)場(chǎng)以太網(wǎng),通過(guò)在PLC中編寫程序與報(bào)警系統(tǒng)進(jìn)行對(duì)接。 四、結(jié)語(yǔ) 經(jīng)測(cè)試,該語(yǔ)音報(bào)警系統(tǒng)能夠根據(jù)現(xiàn)場(chǎng)發(fā)送的文本進(jìn)行報(bào)警,硬件可靠性,搭配的放大電路及有源音箱的功率也足夠,滿足可用性要求。但本方案中并未考慮現(xiàn)場(chǎng)電磁屏蔽保護(hù),如果現(xiàn)場(chǎng)電磁干擾較強(qiáng),需要設(shè)計(jì)防護(hù)外殼為系統(tǒng)屏蔽電磁干擾,同時(shí)選用TCP連接協(xié)議進(jìn)一步增加數(shù)據(jù)可靠性。另外,該系統(tǒng)也可設(shè)計(jì)為使用如串口、數(shù)字量等其他方式進(jìn)行控制,以適應(yīng)不兼容以太網(wǎng)的其他工業(yè)現(xiàn)場(chǎng)。 參考文獻(xiàn): [1]王滿利,張濤.基于單片機(jī)的語(yǔ)音報(bào)警系統(tǒng)[J].2014(11). [2]BANZIM.Getting started with Arduino[M].California:O`REILLY,2009. [3]蔡睿妍.Arduino的原理及應(yīng)用[J].電子設(shè)計(jì)工程,2012(8).