在當今的現(xiàn)代世界中,我們都依賴手機作為無線通信的主要手段。但是,我們都遇到過可能無法接聽電話的情況,這些電話可能是重要的個人電話或改變生活的商務(wù)電話,您可能錯過了那個機會,因為您無法在那個特定時間接聽該電話。
該項目旨在通過使用Arduino和GSM模塊創(chuàng)建自動呼叫應(yīng)答機來解決此問題。下次當您更換新電話號碼或外出進行長途朝圣旅行或享受當之無愧的假期時,只需使用此機器錄制您的聲音,說明缺席的原因,您的所有電話將自動由這臺機器接聽,您錄制的聲音將播放給他們。這也可用于您的業(yè)務(wù)號碼,以便在非辦公時間接聽客戶的呼叫。聽起來很有趣吧?所以讓我們構(gòu)建它..
所需材料:
該項目可能聽起來有點復(fù)雜,但它真的很容易構(gòu)建,你只需要以下組件
Arduino Uno
GSM 模塊 – 飛鱗 SIM 900
ISD 1820 語音模塊
12V 適配器為 GSM 模塊供電
9V 電池為 Arduino 供電
連接線
在我們實際進入項目之前,讓我們熟悉GSM模塊和ISD 1820語音模塊
飛秤 SIM900 GSM 模塊:
GSM模塊使用起來非常吸引人,尤其是當我們的項目需要遠程訪問時。這些模塊可以執(zhí)行我們普通手機可以執(zhí)行的所有操作,例如撥打/接聽電話,發(fā)送/接收短信,使用GPRS連接到互聯(lián)網(wǎng)等。您還可以將普通麥克風(fēng)和揚聲器連接到此模塊,并在移動通話中交談。
如下圖所示,GSM模塊帶有一個USART適配器,可以使用MAX232模塊直接連接到計算機,或者可以使用Tx和Rx引腳將其連接到微控制器。您還可以注意到可以連接麥克風(fēng)或揚聲器的其他引腳,如MIC +,MIC-,SP+,SP-等。該模塊可以通過普通的直流桶形插孔由12V 適配器供電。
將SIM卡插入模塊插槽并打開電源,您應(yīng)該注意到電源指示燈亮起?,F(xiàn)在等待一分鐘左右,您應(yīng)該會看到紅色(或任何其他顏色)LED 每 3 秒閃爍一次。這意味著您的模塊能夠與您的SIM卡建立連接?,F(xiàn)在,您可以繼續(xù)將模塊與手機或任何微控制器連接。
ISD1820 語音模塊:
ISD 1820語音模塊確實是一個很酷的模塊,可以通過語音公告為您的項目增添趣味。該模塊能夠錄制音頻剪輯 10 秒,然后在需要時播放。模塊本身帶有麥克風(fēng)和揚聲器(8歐姆0.5瓦),它應(yīng)該看起來像下面顯示的那樣。
該模塊工作在+5V電壓下,可以使用左側(cè)的操縱桿供電。它在底部還有三個按鈕,分別是Rec.按鈕,PlayE。按鈕和播放L。按鈕。您可以通過按錄制按鈕錄制您的聲音,并使用 PlayE 按鈕播放。只要您按住按鈕,PlayL 就會播放語音。與MCU接口時,我們可以使用左側(cè)的引腳。這些引腳可承受 3V-5V,因此可由 Arduino/ESP8266 直接驅(qū)動。在我們的項目中,我們使用Arduino模塊的D8引腳控制PLAYE引腳。這樣我們就可以在GSM模塊檢測到并接聽呼叫時播放錄制的語音。
電路圖及說明:
上面給出了該自動語音呼叫應(yīng)答機項目的完整電路圖。如您所見,連接非常簡單。我們使用 12V 1A 適配器為 GSM 模塊供電,使用 9V 電池為 Arduino 供電,ISD 語音模塊由 Arduino 的 +5V 引腳供電。眾所周知,我們可以通過按下rec按鈕在語音模塊上錄制任何內(nèi)容,這將在按下P-E時播放,此音頻必須發(fā)送到GSM模塊的麥克風(fēng)。因此,我們將語音模塊的揚聲器引腳連接到GSM模塊的麥克風(fēng)引腳。
這里,Arduino和GSM模塊串行連接,Arduino的Tx引腳連接到引腳9,Rx引腳連接引腳10。這將有助于Arduino收聽GSM模塊。當呼叫到達GSM模塊時,Arduino將收聽它并要求GSM模塊應(yīng)答呼叫。Arduino 確保呼叫處于活動狀態(tài),然后通過使引腳 8(連接到語音模塊的 P-E)高電平 200 毫秒,在語音模塊上播放錄制的語音消息。
對 Arduino 進行編程:
從上面的段落中我們知道Arduino在這里的作用是什么;現(xiàn)在讓我們看一下執(zhí)行相同操作的代碼。該項目的完整Arduino代碼在本頁底部給出,在這里我將代碼分成小垃圾來解釋它。
在我們進一步安裝 GSM 庫之前,請單擊此 Github GSM 庫鏈接以下載此項目中使用的庫。您將獲得一個zip文件,該文件必須通過Sketch -> Include Librarey -> Add添加到Arduino庫中。壓縮文件。
下面顯示的代碼的前三行用于將庫包含在我們的代碼中。我們使用串行庫和線庫,因為我們沒有使用 Arduino 的默認 Rx 和 Tx 引腳與 GSM 模塊通信。
#include //download librarey from https://github.com/Seeed-Studio/GPRS_SIM900
#include //default librarey
#include //default library
我們使用以下線路在引腳 9 和 10 上啟用串行通信。這是我們上面包含的軟件串行庫實現(xiàn)的。
SoftwareSerial gprs(9,10);//TX,RX
在我們的設(shè)置函數(shù)中,我們以 9600 波特率初始化串行監(jiān)視器,GSM 模塊也使用 9600 波特率初始化。觸發(fā)語音的引腳 8 被聲明為輸出引腳。
void setup(){
Serial.begin(9600); //Serial monitor works on 9600 baudrate for debugging
sim900_init(&gprs, 9600); //GSM module works on 9600 baudrate
pinMode(8, OUTPUT); //pin to turn on Voice
Serial.println("Arduino - Automatic Voice Machine");
}
接下來,我們必須創(chuàng)建一個函數(shù),該函數(shù)可以通過其串行端口讀取和理解GSM模塊所說的內(nèi)容。如果我們使用簡單的串行讀取行(如“gprs.read()”來讀取消息,我們將以 ASCII 十進制值的形式獲取它們,這對我們來說毫無意義。
因此,以下函數(shù)用于使用字符串對象將這些十進制值轉(zhuǎn)換為字符串,然后將它們連接起來形成字符串。最終的字符串值存儲在變量 Fdata 中,該變量為字符串類型,可用于與任何字符串值進行比較。
void check_Incoming()
{
if(gprs.available()) //If GSM is saying something
{
Incomingch = gprs.read(); // Listen to it and store in this variable
if (Incomingch == 10 || Incomingch ==13) //If it says space (10) or Newline (13) it means it has completed one word
{Serial.println(data); Fdata =data; data = ""; } //Print the word and clear the variable to start fresh
else
{
String newchar = String (char(Incomingch)); //convert the char to string by using string objects
data = data +newchar; // After converting to string, do string concatenation
}
}
}
以下行用于調(diào)試,使用這些調(diào)試器行,您可以將任何AT命令從Arduino的串行監(jiān)視器發(fā)送到GSM,還可以查看串行監(jiān)視器上的響應(yīng)。
if(Serial.available()){ //Used for debugging
gprs.write(Serial.read()); //Used for debugging
} //Used for debugging
如前所述,Arduino必須檢查GSM模塊是否正在接收任何呼叫。這可以通過使Arduino檢查“RING”來完成,因為GSM模塊將根據(jù)AT命令列表在呼叫時輸出RING。當它找到呼叫時,它將等待 5 秒鐘并將命令“ATA”發(fā)送到 GSM 模塊,這將使 GSM 模塊接聽呼叫,接聽后它將響應(yīng)“確定”。Arduino再次等待“OK”確認,然后將引腳8調(diào)高200ms,以播放來自語音模塊的錄制語音。
if (Fdata == "RING") //If the GSM module says RING
{
delay(5000); //wait for 5sec to create 3 ring delay.
gprs.write ("ATArn"); //Answer the call
Serial.println ("Placed Received"); //Used for debugging
while(Fdata != "OK") //Until call successfully answered
{check_Incoming(); //Read what GSM modue is saying
Serial.println ("Playing Recorded message"); //Used for debugging
//Play the recored voice message
delay(500);
digitalWrite(8, HIGH); //Go high
delay(200); // wait for 200 msec
digitalWrite(8, LOW); //Go low
}
加工:
一旦您的代碼和硬件準備就緒,就該找點樂子了。打開兩個模塊的電源,然后按語音模塊上的REC按鈕并錄制消息。此消息的長度只能為 10 秒。
現(xiàn)在使用以下給定的代碼對Arduino進行編程,并將SIM卡插入GSM模塊,您應(yīng)該等待至少2分鐘,以便GSM模塊可以與您的網(wǎng)絡(luò)服務(wù)提供商建立連接。完成后,您應(yīng)該會看到一個紅色 LED 每 3 秒閃爍一次,這表明您的 SIM 卡已準備好接聽電話。您現(xiàn)在可以嘗試從任何號碼撥打此SIM卡,并且您應(yīng)該會在連續(xù)響鈴三次后聽到錄制的消息。
/*
Automatic Voice machine using Arudino and GSM900
Created by: Aswinth Raj B
Coded on: 22-9-2017
Website: www.circuitdigest.com
*/
#include //download library from https://github.com/Seeed-Studio/GPRS_SIM900
#include //default library
#include //default library
int Incomingch;
String data,Fdata;
//Connect Tx pin of GSM to 9 of Arduino
//Connect Rx pin of GSM to 10 of Arduino
SoftwareSerial gprs(9,10);//TX,RX
void setup(){
Serial.begin(9600); //Serial monitor works on 9600 baudrate for debugging
sim900_init(&gprs, 9600); //GSM module works on 9600 baudrate
pinMode(8, OUTPUT); //pin to turn on Voice
Serial.println("Arduino - Automatic Voice Machine");
}
/*Function to read Incoming data from GSM to Arduino*/
void check_Incoming()
{
if(gprs.available()) //If GSM is saying something
{
Incomingch = gprs.read(); // Listen to it and store in this variable
if (Incomingch == 10 || Incomingch ==13) //If it says space (10) or Newline (13) it means it has completed one word
{Serial.println(data); Fdata =data; data = ""; } //Print the word and clear the variable to start fresh
else
{
String newchar = String (char(Incomingch)); //convert the char to string by using string objects
data = data +newchar; // After converting to string, do string concatenation
}
}
}
/*##End of Function##*/
void loop(){
check_Incoming(); //Read what GSM module is saying
if(Serial.available()){ //Used for debugging
gprs.write(Serial.read()); //Used for debugging
} //Used for debugging
if (Fdata == "RING") //If the GSM module says RING
{
delay(5000); //wait for 5sec to create 3 ring delay.
gprs.write ("ATArn"); //Answer the call
Serial.println ("Placed Received"); //Used for debugging
while(Fdata != "OK") //Until call successfully answered
{check_Incoming(); //Read what GSM module is saying
Serial.println ("Playing Recorded message"); //Used for debugging
//Play the recorded voice message
delay(500);
digitalWrite(8, HIGH); //Go high
delay(200); // wait for 200 msec
digitalWrite(8, LOW); //Go low
}
}
}
-
GSM
+關(guān)注
關(guān)注
9文章
837瀏覽量
124062 -
應(yīng)答機
+關(guān)注
關(guān)注
0文章
6瀏覽量
9902 -
Arduino
+關(guān)注
關(guān)注
189文章
6493瀏覽量
190216
發(fā)布評論請先 登錄
某型空管二次雷達應(yīng)答機系統(tǒng)設(shè)計
航管應(yīng)答機的接口類型有哪些?
詢問-應(yīng)答機制的描述

基于OP7200的應(yīng)答機自動測試系統(tǒng)

Cobham AvComm推出用于測試應(yīng)答機和測距的新型綜合測試儀
基于單片機的航管應(yīng)答機高度模擬器解析

應(yīng)答機器人可通過導(dǎo)航系統(tǒng)傳達實時災(zāi)情
用Arduino和其他模塊制作一個懸停板
使用GSM和Arduino的基本電話的制作
Airboxer無人直升機上已成功集成了MXS應(yīng)答機
某星載應(yīng)答機電磁兼容性設(shè)計案例講解
使用GSM模塊制作家庭自動化設(shè)備

評論