在當(dāng)今的現(xiàn)代世界中,我們都依賴手機(jī)作為無(wú)線通信的主要手段。但是,我們都遇到過(guò)可能無(wú)法接聽(tīng)電話的情況,這些電話可能是重要的個(gè)人電話或改變生活的商務(wù)電話,您可能錯(cuò)過(guò)了那個(gè)機(jī)會(huì),因?yàn)槟鸁o(wú)法在那個(gè)特定時(shí)間接聽(tīng)該電話。
該項(xiàng)目旨在通過(guò)使用Arduino和GSM模塊創(chuàng)建自動(dòng)呼叫應(yīng)答機(jī)來(lái)解決此問(wèn)題。下次當(dāng)您更換新電話號(hào)碼或外出進(jìn)行長(zhǎng)途朝圣旅行或享受當(dāng)之無(wú)愧的假期時(shí),只需使用此機(jī)器錄制您的聲音,說(shuō)明缺席的原因,您的所有電話將自動(dòng)由這臺(tái)機(jī)器接聽(tīng),您錄制的聲音將播放給他們。這也可用于您的業(yè)務(wù)號(hào)碼,以便在非辦公時(shí)間接聽(tīng)客戶的呼叫。聽(tīng)起來(lái)很有趣吧?所以讓我們構(gòu)建它..
所需材料:
該項(xiàng)目可能聽(tīng)起來(lái)有點(diǎn)復(fù)雜,但它真的很容易構(gòu)建,你只需要以下組件
Arduino Uno
GSM 模塊 – 飛鱗 SIM 900
ISD 1820 語(yǔ)音模塊
12V 適配器為 GSM 模塊供電
9V 電池為 Arduino 供電
連接線
在我們實(shí)際進(jìn)入項(xiàng)目之前,讓我們熟悉GSM模塊和ISD 1820語(yǔ)音模塊
飛秤 SIM900 GSM 模塊:
GSM模塊使用起來(lái)非常吸引人,尤其是當(dāng)我們的項(xiàng)目需要遠(yuǎn)程訪問(wèn)時(shí)。這些模塊可以執(zhí)行我們普通手機(jī)可以執(zhí)行的所有操作,例如撥打/接聽(tīng)電話,發(fā)送/接收短信,使用GPRS連接到互聯(lián)網(wǎng)等。您還可以將普通麥克風(fēng)和揚(yáng)聲器連接到此模塊,并在移動(dòng)通話中交談。
如下圖所示,GSM模塊帶有一個(gè)USART適配器,可以使用MAX232模塊直接連接到計(jì)算機(jī),或者可以使用Tx和Rx引腳將其連接到微控制器。您還可以注意到可以連接麥克風(fēng)或揚(yáng)聲器的其他引腳,如MIC +,MIC-,SP+,SP-等。該模塊可以通過(guò)普通的直流桶形插孔由12V 適配器供電。
將SIM卡插入模塊插槽并打開(kāi)電源,您應(yīng)該注意到電源指示燈亮起。現(xiàn)在等待一分鐘左右,您應(yīng)該會(huì)看到紅色(或任何其他顏色)LED 每 3 秒閃爍一次。這意味著您的模塊能夠與您的SIM卡建立連接。現(xiàn)在,您可以繼續(xù)將模塊與手機(jī)或任何微控制器連接。
ISD1820 語(yǔ)音模塊:
ISD 1820語(yǔ)音模塊確實(shí)是一個(gè)很酷的模塊,可以通過(guò)語(yǔ)音公告為您的項(xiàng)目增添趣味。該模塊能夠錄制音頻剪輯 10 秒,然后在需要時(shí)播放。模塊本身帶有麥克風(fēng)和揚(yáng)聲器(8歐姆0.5瓦),它應(yīng)該看起來(lái)像下面顯示的那樣。
該模塊工作在+5V電壓下,可以使用左側(cè)的操縱桿供電。它在底部還有三個(gè)按鈕,分別是Rec.按鈕,PlayE。按鈕和播放L。按鈕。您可以通過(guò)按錄制按鈕錄制您的聲音,并使用 PlayE 按鈕播放。只要您按住按鈕,PlayL 就會(huì)播放語(yǔ)音。與MCU接口時(shí),我們可以使用左側(cè)的引腳。這些引腳可承受 3V-5V,因此可由 Arduino/ESP8266 直接驅(qū)動(dòng)。在我們的項(xiàng)目中,我們使用Arduino模塊的D8引腳控制PLAYE引腳。這樣我們就可以在GSM模塊檢測(cè)到并接聽(tīng)呼叫時(shí)播放錄制的語(yǔ)音。
電路圖及說(shuō)明:
上面給出了該自動(dòng)語(yǔ)音呼叫應(yīng)答機(jī)項(xiàng)目的完整電路圖。如您所見(jiàn),連接非常簡(jiǎn)單。我們使用 12V 1A 適配器為 GSM 模塊供電,使用 9V 電池為 Arduino 供電,ISD 語(yǔ)音模塊由 Arduino 的 +5V 引腳供電。眾所周知,我們可以通過(guò)按下rec按鈕在語(yǔ)音模塊上錄制任何內(nèi)容,這將在按下P-E時(shí)播放,此音頻必須發(fā)送到GSM模塊的麥克風(fēng)。因此,我們將語(yǔ)音模塊的揚(yáng)聲器引腳連接到GSM模塊的麥克風(fēng)引腳。
這里,Arduino和GSM模塊串行連接,Arduino的Tx引腳連接到引腳9,Rx引腳連接引腳10。這將有助于Arduino收聽(tīng)GSM模塊。當(dāng)呼叫到達(dá)GSM模塊時(shí),Arduino將收聽(tīng)它并要求GSM模塊應(yīng)答呼叫。Arduino 確保呼叫處于活動(dòng)狀態(tài),然后通過(guò)使引腳 8(連接到語(yǔ)音模塊的 P-E)高電平 200 毫秒,在語(yǔ)音模塊上播放錄制的語(yǔ)音消息。
對(duì) Arduino 進(jìn)行編程:
從上面的段落中我們知道Arduino在這里的作用是什么;現(xiàn)在讓我們看一下執(zhí)行相同操作的代碼。該項(xiàng)目的完整Arduino代碼在本頁(yè)底部給出,在這里我將代碼分成小垃圾來(lái)解釋它。
在我們進(jìn)一步安裝 GSM 庫(kù)之前,請(qǐng)單擊此 Github GSM 庫(kù)鏈接以下載此項(xiàng)目中使用的庫(kù)。您將獲得一個(gè)zip文件,該文件必須通過(guò)Sketch -> Include Librarey -> Add添加到Arduino庫(kù)中。壓縮文件。
下面顯示的代碼的前三行用于將庫(kù)包含在我們的代碼中。我們使用串行庫(kù)和線庫(kù),因?yàn)槲覀儧](méi)有使用 Arduino 的默認(rèn) Rx 和 Tx 引腳與 GSM 模塊通信。
#include //download librarey from https://github.com/Seeed-Studio/GPRS_SIM900
#include //default librarey
#include //default library
我們使用以下線路在引腳 9 和 10 上啟用串行通信。這是我們上面包含的軟件串行庫(kù)實(shí)現(xiàn)的。
SoftwareSerial gprs(9,10);//TX,RX
在我們的設(shè)置函數(shù)中,我們以 9600 波特率初始化串行監(jiān)視器,GSM 模塊也使用 9600 波特率初始化。觸發(fā)語(yǔ)音的引腳 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");
}
接下來(lái),我們必須創(chuàng)建一個(gè)函數(shù),該函數(shù)可以通過(guò)其串行端口讀取和理解GSM模塊所說(shuō)的內(nèi)容。如果我們使用簡(jiǎn)單的串行讀取行(如“gprs.read()”來(lái)讀取消息,我們將以 ASCII 十進(jìn)制值的形式獲取它們,這對(duì)我們來(lái)說(shuō)毫無(wú)意義。
因此,以下函數(shù)用于使用字符串對(duì)象將這些十進(jìn)制值轉(zhuǎn)換為字符串,然后將它們連接起來(lái)形成字符串。最終的字符串值存儲(chǔ)在變量 Fdata 中,該變量為字符串類型,可用于與任何字符串值進(jìn)行比較。
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模塊是否正在接收任何呼叫。這可以通過(guò)使Arduino檢查“RING”來(lái)完成,因?yàn)镚SM模塊將根據(jù)AT命令列表在呼叫時(shí)輸出RING。當(dāng)它找到呼叫時(shí),它將等待 5 秒鐘并將命令“ATA”發(fā)送到 GSM 模塊,這將使 GSM 模塊接聽(tīng)呼叫,接聽(tīng)后它將響應(yīng)“確定”。Arduino再次等待“OK”確認(rèn),然后將引腳8調(diào)高200ms,以播放來(lái)自語(yǔ)音模塊的錄制語(yǔ)音。
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
}
加工:
一旦您的代碼和硬件準(zhǔn)備就緒,就該找點(diǎn)樂(lè)子了。打開(kāi)兩個(gè)模塊的電源,然后按語(yǔ)音模塊上的REC按鈕并錄制消息。此消息的長(zhǎng)度只能為 10 秒。
現(xiàn)在使用以下給定的代碼對(duì)Arduino進(jìn)行編程,并將SIM卡插入GSM模塊,您應(yīng)該等待至少2分鐘,以便GSM模塊可以與您的網(wǎng)絡(luò)服務(wù)提供商建立連接。完成后,您應(yīng)該會(huì)看到一個(gè)紅色 LED 每 3 秒閃爍一次,這表明您的 SIM 卡已準(zhǔn)備好接聽(tīng)電話。您現(xiàn)在可以嘗試從任何號(hào)碼撥打此SIM卡,并且您應(yīng)該會(huì)在連續(xù)響鈴三次后聽(tīng)到錄制的消息。
/*
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文章
835瀏覽量
122906 -
應(yīng)答機(jī)
+關(guān)注
關(guān)注
0文章
6瀏覽量
9784 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187225
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論