在當今的現代世界中,我們都依賴手機作為無線通信的主要手段。但是,我們都遇到過可能無法接聽電話的情況,這些電話可能是重要的個人電話或改變生活的商務電話,您可能錯過了那個機會,因為您無法在那個特定時間接聽該電話。
該項目旨在通過使用Arduino和GSM模塊創建自動呼叫應答機來解決此問題。下次當您更換新電話號碼或外出進行長途朝圣旅行或享受當之無愧的假期時,只需使用此機器錄制您的聲音,說明缺席的原因,您的所有電話將自動由這臺機器接聽,您錄制的聲音將播放給他們。這也可用于您的業務號碼,以便在非辦公時間接聽客戶的呼叫。聽起來很有趣吧?所以讓我們構建它..
所需材料:
該項目可能聽起來有點復雜,但它真的很容易構建,你只需要以下組件
Arduino Uno
GSM 模塊 – 飛鱗 SIM 900
ISD 1820 語音模塊
12V 適配器為 GSM 模塊供電
9V 電池為 Arduino 供電
連接線
在我們實際進入項目之前,讓我們熟悉GSM模塊和ISD 1820語音模塊
飛秤 SIM900 GSM 模塊:
GSM模塊使用起來非常吸引人,尤其是當我們的項目需要遠程訪問時。這些模塊可以執行我們普通手機可以執行的所有操作,例如撥打/接聽電話,發送/接收短信,使用GPRS連接到互聯網等。您還可以將普通麥克風和揚聲器連接到此模塊,并在移動通話中交談。
如下圖所示,GSM模塊帶有一個USART適配器,可以使用MAX232模塊直接連接到計算機,或者可以使用Tx和Rx引腳將其連接到微控制器。您還可以注意到可以連接麥克風或揚聲器的其他引腳,如MIC +,MIC-,SP+,SP-等。該模塊可以通過普通的直流桶形插孔由12V 適配器供電。
將SIM卡插入模塊插槽并打開電源,您應該注意到電源指示燈亮起。現在等待一分鐘左右,您應該會看到紅色(或任何其他顏色)LED 每 3 秒閃爍一次。這意味著您的模塊能夠與您的SIM卡建立連接。現在,您可以繼續將模塊與手機或任何微控制器連接。
ISD1820 語音模塊:
ISD 1820語音模塊確實是一個很酷的模塊,可以通過語音公告為您的項目增添趣味。該模塊能夠錄制音頻剪輯 10 秒,然后在需要時播放。模塊本身帶有麥克風和揚聲器(8歐姆0.5瓦),它應該看起來像下面顯示的那樣。
該模塊工作在+5V電壓下,可以使用左側的操縱桿供電。它在底部還有三個按鈕,分別是Rec.按鈕,PlayE。按鈕和播放L。按鈕。您可以通過按錄制按鈕錄制您的聲音,并使用 PlayE 按鈕播放。只要您按住按鈕,PlayL 就會播放語音。與MCU接口時,我們可以使用左側的引腳。這些引腳可承受 3V-5V,因此可由 Arduino/ESP8266 直接驅動。在我們的項目中,我們使用Arduino模塊的D8引腳控制PLAYE引腳。這樣我們就可以在GSM模塊檢測到并接聽呼叫時播放錄制的語音。
電路圖及說明:
上面給出了該自動語音呼叫應答機項目的完整電路圖。如您所見,連接非常簡單。我們使用 12V 1A 適配器為 GSM 模塊供電,使用 9V 電池為 Arduino 供電,ISD 語音模塊由 Arduino 的 +5V 引腳供電。眾所周知,我們可以通過按下rec按鈕在語音模塊上錄制任何內容,這將在按下P-E時播放,此音頻必須發送到GSM模塊的麥克風。因此,我們將語音模塊的揚聲器引腳連接到GSM模塊的麥克風引腳。
這里,Arduino和GSM模塊串行連接,Arduino的Tx引腳連接到引腳9,Rx引腳連接引腳10。這將有助于Arduino收聽GSM模塊。當呼叫到達GSM模塊時,Arduino將收聽它并要求GSM模塊應答呼叫。Arduino 確保呼叫處于活動狀態,然后通過使引腳 8(連接到語音模塊的 P-E)高電平 200 毫秒,在語音模塊上播放錄制的語音消息。
對 Arduino 進行編程:
從上面的段落中我們知道Arduino在這里的作用是什么;現在讓我們看一下執行相同操作的代碼。該項目的完整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 上啟用串行通信。這是我們上面包含的軟件串行庫實現的。
SoftwareSerial gprs(9,10);//TX,RX
在我們的設置函數中,我們以 9600 波特率初始化串行監視器,GSM 模塊也使用 9600 波特率初始化。觸發語音的引腳 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");
}
接下來,我們必須創建一個函數,該函數可以通過其串行端口讀取和理解GSM模塊所說的內容。如果我們使用簡單的串行讀取行(如“gprs.read()”來讀取消息,我們將以 ASCII 十進制值的形式獲取它們,這對我們來說毫無意義。
因此,以下函數用于使用字符串對象將這些十進制值轉換為字符串,然后將它們連接起來形成字符串。最終的字符串值存儲在變量 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
}
}
}
以下行用于調試,使用這些調試器行,您可以將任何AT命令從Arduino的串行監視器發送到GSM,還可以查看串行監視器上的響應。
if(Serial.available()){ //Used for debugging
gprs.write(Serial.read()); //Used for debugging
} //Used for debugging
如前所述,Arduino必須檢查GSM模塊是否正在接收任何呼叫。這可以通過使Arduino檢查“RING”來完成,因為GSM模塊將根據AT命令列表在呼叫時輸出RING。當它找到呼叫時,它將等待 5 秒鐘并將命令“ATA”發送到 GSM 模塊,這將使 GSM 模塊接聽呼叫,接聽后它將響應“確定”。Arduino再次等待“OK”確認,然后將引腳8調高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 秒。
現在使用以下給定的代碼對Arduino進行編程,并將SIM卡插入GSM模塊,您應該等待至少2分鐘,以便GSM模塊可以與您的網絡服務提供商建立連接。完成后,您應該會看到一個紅色 LED 每 3 秒閃爍一次,這表明您的 SIM 卡已準備好接聽電話。您現在可以嘗試從任何號碼撥打此SIM卡,并且您應該會在連續響鈴三次后聽到錄制的消息。
/*
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
+關注
關注
9文章
835瀏覽量
123026 -
應答機
+關注
關注
0文章
6瀏覽量
9813 -
Arduino
+關注
關注
188文章
6477瀏覽量
187828
發布評論請先 登錄
相關推薦
評論