找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6640|回復(fù): 25
收起左側(cè)

【Arduino】168種傳感器模塊系列實驗(146)---MT8870語音解碼

[復(fù)制鏈接]
ID:513258 發(fā)表于 2020-3-3 12:19 | 顯示全部樓層 |閱讀模式
本帖最后由 eagler8 于 2020-3-3 17:08 編輯

37款傳感器與模塊的提法,在網(wǎng)絡(luò)上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實踐出真知(一定要動手做)的理念,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動手試試做實驗,不管成功與否,都會記錄下來---小小的進步或是搞不定的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
實驗一百四十六:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路



0.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 12:21 | 顯示全部樓層
MT8870
音調(diào)譯碼器(Tone Decoder)是 MITEL 公司所開發(fā)生產(chǎn)為一顆常用復(fù)頻譯碼 IC,這個電路可以接收 DTMF 信號,是一個完整的 DTMF 接收器。它接收了 DTMF 信號后,內(nèi)部將信號分成高頻帶和低頻帶,并將此信號送至數(shù)字譯碼器,然后將訊號送至數(shù)字譯碼器以解出按鍵值,接著將解出的按鍵值以二進制的方式以四條線(Q1、Q2、Q3、Q4)輸出到外部共享 Bus 上,其MT8870 接腳說明如表 1 及內(nèi)部結(jié)構(gòu)如圖 2。值得一提的是,當(dāng) MT8870 解出一個按鍵值且輸出到外部時,其 STD 接腳會由低態(tài)升為高態(tài),經(jīng)一段時間后再降為低態(tài),我們便可利用此特點偵測到此腳有訊號時便馬上將 Q1-Q4 接腳所產(chǎn)生的值讀入 CPU,然后解出電話的按鍵值。


0-.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 12:50 | 顯示全部樓層
04 (1).jpg

02.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 12:58 | 顯示全部樓層
03 (1).jpg
回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 13:07 | 顯示全部樓層
DTMF
雙音多頻 DTMF(Dual Tone Multi Frequency),雙音多頻,由高頻群和低頻群組成,高低頻群各包含4個頻率。一個高頻信號和一個低頻信號疊加組成一個組合信號,代表一個數(shù)字。DTMF信號有16個編碼。利用DTMF信令可選擇呼叫相應(yīng)的對講機。

在編碼時將擊鍵或數(shù)字信息轉(zhuǎn)換成雙音信號并發(fā)送,解碼時在收到的DTMF信號中檢測擊鍵或數(shù)字信息的存在性。一個DTMF信號由兩個頻率的音頻信號疊加構(gòu)成。這兩個音頻信號的頻率來自兩組預(yù)分配的頻率組:行頻組或列頻組。每一對這樣的音頻信號唯一表示一個數(shù)字或符號。電話機中通常有16個按鍵,其中有10個數(shù)字鍵0~9和6個功能鍵*、#、A、B、C、D。由于按照組合原理,一般應(yīng)有8種不同的單音頻信號。因此可采用的頻率也有8種,故稱之為多頻,又因它采用分別從高低頻中任意抽出1種進行組合來進行編碼,所以又稱之為“8中取2”的編碼技術(shù)。根據(jù)CCITT的建議,國際上采用的多種頻率為697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz等8種。用這8種頻率可形成16種不同的組合,從而代表16種不同的數(shù)字或功能鍵。

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 14:15 | 顯示全部樓層
05.jpg
回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 14:33 | 顯示全部樓層
MT8870的應(yīng)用電路
05-2.jpg


05-.jpg


05-1.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 16:41 | 顯示全部樓層
1、板載MT8870復(fù)頻譯碼芯片
2、板載語音輸入接口
3、板載5個LED指示燈,方便查看輸出狀態(tài)
4、芯片主要管腳基本都已經(jīng)引出
5、PCB尺寸:26.5(mm)x24.5(mm)

06-.jpg


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-3 17:06 | 顯示全部樓層
模塊電原理圖

07.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 07:19 | 顯示全部樓層
本帖最后由 eagler8 于 2020-3-4 08:08 編輯

11-.jpg

雙音多頻信號(DTMF)
電話系統(tǒng)中電話機與交換機之間的一種用戶信令,通常用于發(fā)送被叫號碼。
在使用雙音多頻信號之前,電話系統(tǒng)中使用一連串的斷續(xù)脈沖來傳送被叫號碼,稱為脈沖撥號。脈沖撥號需要電信局中的操作員手工完成長途接續(xù)(早期方法,很老很古董)。

雙音多頻信號是貝爾實驗室發(fā)明的,其目的是為了自動完成長途呼叫。

雙音多頻的撥號鍵盤是4×4的矩陣,每一行代表一個低頻,每一列代表一個高頻。每按一個鍵就發(fā)送一個高頻和低頻的正弦信號組合,比如'1'相當(dāng)于697和1209赫茲(Hz)。交換機可以解碼這些頻率組合并確定所對應(yīng)的按鍵。

雙音多頻(DTMF)是由貝爾實驗室開發(fā)的信令方式,通過承載語音的模擬電話線傳送電話撥號信息。每個數(shù)字利用兩個不同頻率突發(fā)模式的正弦波編碼,選擇雙音方式是由于它能夠可靠地將撥號信息從語音中區(qū)分出來。一般情況下,聲音信號很難造成對DTMF接收器的錯誤觸發(fā)。DTMF是“TouchTone” (早期AT&T的商標(biāo))的基礎(chǔ), 替代機械式撥號轉(zhuǎn)盤的按鍵。




回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 08:39 | 顯示全部樓層
本帖最后由 eagler8 于 2020-3-4 09:02 編輯

12.jpg

DTMF編碼器
基于兩個二階數(shù)字正弦波振蕩器,一個用于產(chǎn)生行頻,一個用于產(chǎn)生列頻。向DSP裝入相應(yīng)的系數(shù)和初始條件,就可以只用兩個振蕩器產(chǎn)生所需的八個音頻信號。典型的DTMF信號頻率范圍是700~1700Hz,選取8000Hz作為采樣頻率,即可滿足Nyquist條件。DTMF雙音頻信號由兩個二階數(shù)字正弦振蕩器產(chǎn)生,一個用來產(chǎn)生行音頻信號,另一個產(chǎn)生列音頻信號。

CCITT規(guī)定每秒最多按10個鍵,即每個鍵時隙最短為100MS,其中音頻實際持續(xù)時間至少為45MS,不大于55MS,時隙的其他時間內(nèi)保持靜默,因此按鍵產(chǎn)生雙音頻信號時,相繼的兩個信號間隔一段時間;解碼器利用這個時間識別出雙音頻信號,并轉(zhuǎn)換成對應(yīng)的數(shù)字信息,而且要識別出間隙信息。因此流程包含音頻任務(wù)和靜默任務(wù),前者是產(chǎn)生雙音頻采樣值,后者產(chǎn)生靜默樣值,每個任務(wù)結(jié)束時,要重置定時器和下一個任務(wù)。其中靜默任務(wù)還要加上一個任務(wù):從數(shù)字緩沖區(qū)取出數(shù)字并解包。解包就是將數(shù)字映射為對應(yīng)的行列音頻特性,裝載指針指向振蕩器特征表對應(yīng)的正確位置。兩個任務(wù)輪流執(zhí)行。由CCITT(國際電報電話咨詢委員會)的規(guī)定,數(shù)字之間必須有適當(dāng)長度的靜音,因此編碼器有兩個任務(wù),其一是音頻信號任務(wù),產(chǎn)生雙音樣本,其二是靜音任務(wù),產(chǎn)生靜音樣本。每個任務(wù)結(jié)束后,啟動下一個任務(wù)前(音頻信號任務(wù)或靜音任務(wù)),都必須復(fù)位決定其持續(xù)時間的定時器變量。在靜音任務(wù)結(jié)束后,DSP從數(shù)字緩存中調(diào)出下一個數(shù)字,判決該數(shù)字。信號所對應(yīng)的行頻和列頻信號,并根據(jù)不同頻率確定其初始化參數(shù)。

DTMF信號包含兩組音頻信號,解碼器的任務(wù)是通過數(shù)學(xué)變換把它從時域轉(zhuǎn)化到頻域,然后得出對應(yīng)的數(shù)字信息。由于芯片處理的是數(shù)字信號,所以必須把輸入信號數(shù)字化,再用DSP芯片處理。頻率檢測時,檢測出DTMF信號的基波及二次諧波,DTMF信號只在基波上有較高的能量,而話音信號則是在基波上疊加有較強的二次諧波,檢測二次諧波的作用是用來區(qū)分DTMF信號與語言和音樂信號。

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 09:02 | 顯示全部樓層
10.jpg

DTMF特性
DTMF是由低頻組(fb)和高頻組(fa)兩組頻率信號構(gòu)成,每個數(shù)字信號由低頻組和高頻組的任意一個疊加而成。根據(jù)CCITT的建議,DTMF的編譯碼定義可用下式表示 f(t)=A_{a}sin(2f_{a}t)+A_sin(2f_t) 式中兩項分別表示低、高音頻的值,Ab和Aa分別表示低音群合高音群的樣值量化基線,而且兩者幅值比為K=Ab/Aa(0.7<K<0.9)。同時規(guī)定,對應(yīng)于DTMF編譯碼中的標(biāo)稱頻率在發(fā)送時,DTMF信號的頻率偏差不應(yīng)當(dāng)超過1.5%,每位數(shù)字的信號極限時長應(yīng)該大于40ms,而接收設(shè)備對2%的偏差應(yīng)能可靠地接收,對30ms~40ms時長的信號可以正常地接收。

與單音編碼不同,DTMF信號是采用8中取2的方式,從高低兩個音組中各取一個音頻復(fù)合而成來代表0-9十個號碼和其他功能碼,再加上這8個音頻信號的各頻率間不存在諧波關(guān)系,大大減少了虛假信號的干擾,因而DTMF信號工作可靠性特別是抗干擾能力很強。

DTMF應(yīng)用
DTMF信號即雙音頻信號,最先用于程控電話交換系統(tǒng)來代替號盤脈沖信號,主叫用戶摘機按鍵撥號后,電話號碼所對應(yīng)的DTMF信號通過電話線傳到程控交換機中的DTMF接受電路,交換機中的微機識別被叫電話號碼后,接通主被叫用戶實現(xiàn)雙方通話。

DTMF信號還用于自動控制系統(tǒng),如果把DTMF的發(fā)送電路用于主控系統(tǒng),接收電路用于被控系統(tǒng),就可以方便地組成有線或無線通信系統(tǒng),其通道數(shù)視需要而定,16通道以內(nèi)每通道只需編一位號碼即可,若需要更多通道,則可像電話號碼編號一樣編為兩位或兩位以上的號碼。DTMF信號還被用于部分型號的車載導(dǎo)航終端,用于遠程下發(fā)目的地坐標(biāo)信息。比如警情自動拔號、DTMF遠程控制系統(tǒng),基于DTMF編解碼的智能家居電話遠程控制系統(tǒng)等。
回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 12:59 | 顯示全部樓層
【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路
  第一項實驗:用arduino的PWM腳(11、12)合成DTMF雙音多頻編碼信號

  1、安裝 "Tone.h"庫: IDE-工具-管理庫-搜索-安裝
  2、項目測試 :將喇叭貼近電話機話筒,然后發(fā)送要撥的電話號碼到串口,比如10000,即可撥通電話10000
  3、需要材料:喇叭1個,68Ω電阻兩個
  4、硬件連接:在D11,D12引腳各接一個68Ω電阻一端,
     68Ω電阻另一端接喇叭,然后喇叭另一端接地。

15.jpg


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 13:02 | 顯示全部樓層
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路
  4.   
  5.   第一項實驗:用arduino的PWM腳(11、12)合成DTMF雙音多頻編碼信號
  6.   1、安裝 "Tone.h"庫: IDE-工具-管理庫-搜索-安裝
  7.   2、項目測試 :將喇叭貼近電話機話筒,然后發(fā)送要撥的電話號碼到串口,比如10000,即可撥通電話10000
  8.   3、需要材料:喇叭1個,68Ω電阻兩個
  9.   4、硬件連接:在D11,D12引腳各接一個68Ω電阻一端,
  10.      68Ω電阻另一端接喇叭,然后喇叭另一端接地。
  11. */

  12. #include <Tone.h>
  13. String Phone_Number = "";
  14. int i = 0, mark = 0;
  15. //定義freq1,freq2為Tone實例,并且定義雙音多頻的頻率

  16. Tone freq1;
  17. Tone freq2;
  18. const int DTMF_freq1[] = {1336, 1209, 1336, 1477, 1209, 1336, 1477, 1209, 1336, 1477};
  19. const int DTMF_freq2[] = {941,  697,  697,  697,  770,  770,  770,  852,  852,  852};

  20. void setup()
  21. {
  22.   Serial.begin(9600);
  23.   //定義聲音產(chǎn)生引腳在Arduino的D11,D12
  24.   freq1.begin(11);
  25.   freq2.begin(12);
  26. }

  27. void loop()
  28. {
  29.   //讀出串口數(shù)據(jù),串接成Phone_Number字符串
  30.   while (Serial.available() > 0)
  31.   {
  32.     Phone_Number += char(Serial.read());
  33.     delay(2);
  34.     mark = 1;
  35.   }
  36.   //播放DTMF音頻,電話號碼來自Phone_Number,持續(xù)長度200ms,間隔長度300ms
  37.   PlayDTMF(Phone_Number, 200, 300);

  38.   //如果剛才接收到串口的電話號碼,因為號碼已經(jīng)在喇叭輸出了,清空電話號碼并且重置mark
  39.   if (mark == 1)
  40.   {
  41.     Phone_Number = "";
  42.     Serial.println();
  43.     mark = 0;
  44.   }
  45. }
  46. /*
  47.   DTMF播放函數(shù)
  48.   調(diào)用格式:playDTMF(數(shù)字(0~9), 持續(xù)時間)。
  49. */
  50. void PlayDTMF(String Number, long duration, long pause)
  51. {
  52.   //如果輸入數(shù)字為空,或者持續(xù)時間不為正數(shù),或者暫停時間不為正數(shù)
  53.   //則視作錯誤,立即停止執(zhí)行返回主程序。
  54.   if (Number.length() == 0 || duration <= 0 || pause <= 0) return;
  55.   //將Number逐個文字分離,
  56.   for (i = 0; i < Number.length(); i++)
  57.   {
  58.     //如果Number屬于0~9的數(shù)字字符
  59.     if (Number[i] >= '0' && Number[i] <= '9')
  60.     {
  61.       //則將它ASCII碼減去‘0’,得到純數(shù)字,
  62.       Number[i] = '0';
  63.       //然后在串口輸出一份,便于查看
  64.       Serial.print(i, DEC);
  65.       //輸出雙音多頻之一
  66.       freq1.play(DTMF_freq1[i], duration);
  67.       //輸出雙音多頻之二
  68.       freq2.play(DTMF_freq2[i], duration);
  69.       delay(pause);
  70.     }
  71.   }
  72. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 13:36 | 顯示全部樓層
通過串口,嘗試輸入10000號碼,手機11位號碼和一個28位的號碼

16.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 16:45 | 顯示全部樓層
視頻——第一項實驗:用arduino的PWM腳(11、12)合成DTMF雙音多頻編碼信號

https://v.youku.com/v_show/id_XNDU3MzExODkzMg==.html

https://v.youku.com/v_show/id_XNDU3MzExODkzMg==.html




回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 20:37 | 顯示全部樓層
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路

  4.   第二項實驗:重復(fù)播放合成DTMF雙音多頻8675309撥號音
  5.   1、安裝 "Tone.h"庫: IDE-工具-管理庫-搜索-安裝
  6.   2、項目測試 :發(fā)送電話號碼8675309到串口
  7.   3、需要材料:喇叭1個,68Ω電阻兩個
  8.   4、硬件連接:在D11,D12引腳各接一個68Ω電阻一端,
  9.      68Ω電阻另一端接喇叭,然后喇叭另一端接地。
  10. */

  11. #include <Tone.h>

  12. Tone freq1;
  13. Tone freq2;

  14. const int DTMF_freq1[] = { 1336, 1209, 1336, 1477, 1209, 1336, 1477, 1209, 1336, 1477 };
  15. const int DTMF_freq2[] = {  941,  697,  697,  697,  770,  770,  770,  852,  852,  852 };

  16. void setup()
  17. {
  18.   Serial.begin(9600);
  19.   freq1.begin(11);
  20.   freq2.begin(12);
  21. }

  22. void playDTMF(uint8_t number, long duration)
  23. {
  24.   freq1.play(DTMF_freq1[number], duration);
  25.   freq2.play(DTMF_freq2[number], duration);
  26. }


  27. void loop()
  28. {
  29.   int i;
  30.   uint8_t phone_number[] = { 8, 6, 7, 5, 3, 0 , 9 };

  31.   for (i = 0; i < sizeof(phone_number); i ++)
  32.   {
  33.     Serial.print(phone_number[i], 10);
  34.     Serial.print(' ');
  35.     playDTMF(phone_number[i], 500);
  36.     delay(600);
  37.   }

  38.   Serial.println();
  39.   delay(4000);
  40. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-4 20:39 | 顯示全部樓層
【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路

  第二項實驗:重復(fù)播放合成DTMF雙音多頻8675309撥號音
  1、安裝 "Tone.h"庫: IDE-工具-管理庫-搜索-安裝
  2、項目測試 :發(fā)送電話號碼8675309到串口
  3、需要材料:喇叭1個,68Ω電阻兩個
  4、硬件連接:在D11,D12引腳各接一個68Ω電阻一端,
     68Ω電阻另一端接喇叭,然后喇叭另一端接地。

19.jpg


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 13:48 | 顯示全部樓層
20.jpg
回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 13:51 | 顯示全部樓層
  1. /*
  2.   【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  3.   實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路

  4.   第三項實驗:用合成DTMF雙音多頻信號測試咪頭傳感器和DTMF解碼模塊
  5.   1、安裝 "dtmf"庫: 下載https://codeload.github.com/DFRobot/DTMF/zip/master
  6.   2、需要材料:喇叭1個,68Ω電阻兩個,咪頭傳感器和DTMF解碼模塊,兩塊UNO板
  7.   3、合成信號硬件連接:在D11,D12引腳各接一個68Ω電阻一端,68Ω電阻另一端接喇叭,然后喇叭另一端接地。
  8.   4、咪頭模塊接線:
  9.   MAX9814  Arduino
  10.   VCC        5V
  11.   GND        GND
  12.   OUT        IN(接到DTMF)
  13.   5、DTMF解碼模塊接線
  14.   DTMF     Arduino
  15.   VCC        5V
  16.   GND        GND
  17.   Q1         12
  18.   Q2         11
  19.   Q3         10
  20.   Q4         9
  21. */

  22. #include "dtmf.h"

  23. DTMF dtmf;

  24. void setup()
  25. {
  26.   Serial.begin(9600);
  27. }

  28. void loop()
  29. {
  30.   // 讀DTMF代碼并且用串行輸出
  31.   int myDtmf;
  32.   myDtmf = dtmf.getDTMF();
  33.   if (myDtmf != -1)
  34.     Serial.println(myDtmf);
  35.   delay(100); // 以避免收到重復(fù)的輸出。
  36. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 15:03 | 顯示全部樓層
DTMF解碼識別模塊實驗視頻
https://v.youku.com/v_show/id_XNDU3OTkzOTA4OA==.html

https://v.youku.com/v_show/id_XNDU3OTkzOTA4OA==.html


【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路

  第三項實驗:用合成DTMF雙音多頻信號測試咪頭傳感器和DTMF解碼模塊
  1、安裝 "dtmf"庫: 下載https://codeload.github.com/DFRobot/DTMF/zip/master
  2、需要材料:喇叭1個,68Ω電阻兩個,咪頭傳感器和DTMF解碼模塊,兩塊UNO板
  3、合成信號硬件連接:在D11,D12引腳各接一個68Ω電阻一端,68Ω電阻另一端接喇叭,然后喇叭另一端接地。
  4、咪頭模塊接線:
  MAX9814  Arduino
  VCC        5V
  GND        GND
  OUT        IN(接到DTMF)
  5、DTMF解碼模塊接線
  DTMF     Arduino
  VCC        5V
  GND        GND
  Q1         12
  Q2         11
  Q3         10
  Q4         9

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 15:24 | 顯示全部樓層
打開"dtmf.h"庫文件查看,發(fā)現(xiàn)是針對不同硬件模塊的(板上芯片都是MT8870),由于接腳對不上號,故串口輸出的解碼不對的

21.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 15:54 | 顯示全部樓層
不同的硬件模塊(板上芯片都是MT8870),名稱為 Arduino DTMF語音識別擴展板 V1.0


23.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 15:58 | 顯示全部樓層
  1. 【Arduino】168種傳感器模塊系列實驗(資料+代碼+圖形+仿真)
  2.   實驗一百四十五:MT8870 DTMF語音解碼板模塊 電話撥號控制音頻解碼處理電路

  3.   第四項實驗:不用庫,使用MT8870芯片模塊進行DTMF解碼
  4.   1、需要材料:喇叭1個,68Ω電阻兩個,咪頭傳感器和DTMF解碼模塊,兩塊UNO板
  5.   2、合成信號硬件連接:在D11,D12引腳各接一個68Ω電阻一端,68Ω電阻另一端接喇叭,然后喇叭另一端接地。
  6.   3、咪頭模塊接線:
  7.   MAX9814  Arduino
  8.   VCC        5V
  9.   GND        GND
  10.   OUT        IN(接到DTMF)
  11.   4、DTMF解碼模塊接線
  12.   DTMF     Arduino
  13.   VCC        5V
  14.   GND        GND
  15.   Q1         12
  16.   Q2         11
  17.   Q3         10
  18.   Q4         9

  19. int keyvalue;  // 與音調(diào)相關(guān)的數(shù)字

  20. void setup()
  21. {
  22. Serial.begin(9600);
  23. pinMode(12, INPUT); //從解碼器芯片輸入二進制1的數(shù)字
  24. pinMode(11, INPUT); //從解碼器芯片輸入二進制2的數(shù)字
  25. pinMode(10, INPUT); //從解碼器芯片輸入二進制4的數(shù)字
  26. pinMode(9, INPUT); //從解碼器芯片輸入二進制4的數(shù)字
  27. }

  28. void loop()

  29. // 首先確定鍵的以10為底的值 0-11
  30. {
  31. if (digitalRead(6) == HIGH) //如果二進制1為高
  32. {
  33. keyvalue = 1;  //使鍵值等于1
  34. }
  35. else
  36. {
  37. keyvalue = 0;  //否則將其設(shè)為零
  38. }

  39. if (digitalRead(7) == HIGH)  //如果二進制2為高
  40. {
  41. keyvalue = keyvalue + 2;  //在鍵值中添加“ 2”
  42. }
  43. if (digitalRead(8) == HIGH)  //如果二進制4為高
  44. {
  45. keyvalue = keyvalue + 4;  //將“ 4”添加到鍵值
  46. }
  47. if (digitalRead(9) == HIGH)  //如果二進制8為高
  48. {
  49. keyvalue = keyvalue + 8;  //將“ 8”添加到鍵值
  50. }
  51. // 現(xiàn)在將鍵值9、10和11轉(zhuǎn)換為“ 0”,“ *”和“#”
  52. if (keyvalue == 10)
  53. {
  54. Serial.println("0"); //打印零鍵
  55. }
  56. else
  57. {
  58. if (keyvalue == 11)
  59. {
  60. Serial.println("*"); //打印星號鍵
  61. }

  62. else
  63. {
  64. if (keyvalue == 12)
  65. {
  66. Serial.println("#"); //打印井號
  67. }

  68. else
  69. {
  70. Serial.println(keyvalue); //它不是特殊鍵,所以只需打印
  71. }
  72. }
  73. }
  74. delay(500);
  75. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 16:04 | 顯示全部樓層
從MT8870 DTMF語音解碼板模塊上,5只解碼LED燈看,是在正常工作,只是串口輸出的數(shù)字,依舊好像不對......

22.jpg

回復(fù)

使用道具 舉報

ID:513258 發(fā)表于 2020-3-9 16:45 | 顯示全部樓層
附錄:基于DTMF編解碼的智能家居電話遠程控制系統(tǒng)

本著“環(huán)保與創(chuàng)新”的主題,系統(tǒng)集本地家電控制和監(jiān)控模塊,DTMF編解碼的電話遠程控制和監(jiān)控模塊以及以太網(wǎng)web server的遠程家居控制和監(jiān)控系統(tǒng)模塊三大模塊為一體,實現(xiàn)智能家居控制。電話遠程控制和以太網(wǎng)遠程控制,不需進行專門的布線,不占用無線電頻率資源,避免了電磁污染。且可以通過以太網(wǎng)實時監(jiān)控家用電器,避免了沒必要的電力資源浪費。

一、本地家電控制和監(jiān)控模塊

此模塊能夠?qū)崟r檢測溫濕度、一氧化碳、煙霧等的數(shù)值或者濃度,并在1602液晶上顯示相關(guān)參數(shù)。當(dāng)超過一定的警戒線,它還會發(fā)出警報以及通知主系統(tǒng)(AVR 32)出現(xiàn)何種警情,讓主系統(tǒng)進行相關(guān)處理。

二、DTMF編解碼的電話遠程控制和監(jiān)控模塊

此模塊能夠受手機控制,通過手機撥打家里電話來遠程控制家里的電器的開閉,以及當(dāng)家里出現(xiàn)盜賊或者出現(xiàn)險情(包括火災(zāi)、煤氣泄漏等)時固定電話能及時自動撥打電話通知用戶。

三、以太網(wǎng)web server的遠程家居控制和監(jiān)控系統(tǒng)模塊

此模塊通過網(wǎng)線接入以太網(wǎng)后,用戶可以通過手機或PC機打開相應(yīng)瀏覽器來遠程控制家里的電器的開閉,以及監(jiān)控家里的溫濕度,煤氣傳感器和煙霧傳感器的數(shù)據(jù)。

2.2 性能要求

一、本地家電控制和監(jiān)控模塊

此模塊性能要求傳感器采集數(shù)據(jù)要實時,而且要快速,采集出來的數(shù)據(jù)經(jīng)過相應(yīng)轉(zhuǎn)換后得到的數(shù)值與實際數(shù)值相差不能超過5%,溫度的精度為0.1℃,濕度的精度為0.5%RH。

二、DTMF編解碼的電話遠程控制和監(jiān)控模塊

此模塊性能要求能響應(yīng)速度快,即有人撥打電話時,此模塊能夠在1S內(nèi)檢測到有電話打入,并記錄下?lián)艽蛉溯斎氲陌存I信息。此外,當(dāng)要實現(xiàn)自動撥打電話時,要求此模塊模擬按下的電話號碼要準(zhǔn)確無誤,確保準(zhǔn)確性。

三、以太網(wǎng)web server的遠程家居控制和監(jiān)控系統(tǒng)模塊
此模塊要求接入互聯(lián)網(wǎng),當(dāng)用戶瀏覽網(wǎng)頁時,家用電器信息和傳感器數(shù)據(jù)每隔幾秒刷新一次,確保數(shù)據(jù)傳輸?shù)目焖傩院蜏?zhǔn)確性。

24 (1).jpg

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表