Basic Phone Using GSM and Arduino
Intro: Basic Phone Using GSM and Arduino
In this instructable an Arduino uno with a GSM shield is used to perform four cellular operations. These are
1-Make calls
2-Receive calls
3-Send SMS
4-Recieve SMS
All you need:-1. A GSM shield with 900A/900 Sim module (preferably by ATRIM electronics).
2. A 4x4 button Matrix keypad.
3. A 16x2 LCD as display.
4. A Ardiuno UNO R3.
5. Some Male to female & Female to male connecting wires.
6. A PC for programming& uploading the Code using Arduino IDE
STEP 1: Making Hardware Connections-
·
A-Connections of GSM shield &Arduino:-1. GND of Shield-GND of Arduino.
2. Tx of Shield-Pin 10(Rx of Software Serial) of Arduino.
3. Rx of Shield-Pin 11(Tx of Software Serial) of Arduino.
·B-Connections of Matrix Keypad & Arduino:-
As shown in figure
C-Connections of LCD & Arduino:-As shown in figure
STEP 2: Programming of Arduino.
·
A. Interfacing code for GSM:We interface Arduino with GSM shield using AT commands. So, take an overview of some commonly used AT commands:
1. AT: Test weather GSM shield respond
2. AT+CIMI: Request International Mobile Subscriber Identity
3. ATD+91XXXXXXXXXX : Dial the specified number ( replace x with number)
4. AT+CMG=1: Switch on the messaging mode of gsm
5. AT+CNMI=2,2,0,0, 0: Turn on the message indicator
6. ATH: Halt call
7. ATA: Pick up incoming call
8. AT+COPS: Get the service provider name
9. AT+CSQ: Get signal strength
·B-Interfacing code for Input Matrix:
These two functions are used in interfacing of Input Matrix with Arduino-
1. Return_Keypad_Values() : Return the value of key pressed (in char)
2. Take_input(): Enter a 10 digit number using matrix and use
- * key : For deleting last digit
- # key : Call the entered number
Returns: Number entered through keypad ( in String Object)
C-Interfacing of LCD:Mainly 3 functions are used for interfacing of LCD with Arduino
1- lcd.begin(): initializing the LCD with Arduino
2- lcd.setCursor(x,y): Set the cursor at x column & y row
3- lcd.print(“hello”)-This function is use to print any text or number on LCD.
STEP 3: Upload the Code
1. Code is available on this Github repository here.
2. Download the repository here in zip.
3. Unzip it and open the all_phone_operations folder.
4.Open all_phone_operations.ino in Arduino ide and upload it (as shown in figure).
STEP 4: Operation
·
A.Send call:By pressing button ‘A’ you will be in Send call mode. LCD will prompt to enter a number to call.
These buttons are used in send call mode
- ‘D’-used for cancel calling operation.
- ‘*’-used to delete printed digit.
- ‘#’- Call on dialed number.
· ·
B.Send SMS:
- Press ‘B’ key for configuring shield in send message mode
- ‘Enter number’ will be prompted your LCD. You need to enter a 10 digit numbe
- These buttons are also used in Send message mode.
- ‘D’: Used for cancel calling operation.
- ‘*’: Used to delete printed digit.
- ‘#’: Call on dialed number.
C.Receive call and SMS
Module configures itself in receiving mode when it starts and the LCD will show a response as soon as a call or SMS is received. The program uses only two button for user interaction in case of response received.
- ‘*’: used to show the received SMS/ Pick up Call.
- ‘#: used to halt or terminate message / terminate incoming Call
If you find it useful, Please share it.
STEP 5:
Special thanks and Credit to Mr. devvrat Arya and Mr. Harsha Deva boley Shetty for this Article.......
And there is a tip for all users to use vcc and ground of ICSP port.
12 Comments
christmt20005 4 years ago
IsraelD3 4 years ago
gurupetach 5 years ago
anangpal.singh 5 years ago
All functions working well, only incoming call notification not showing on display.
please suggest for this.
brightled 5 years ago
brightled 5 years ago
anangpal.singh 5 years ago
Any one help me, incoming call not reflecting on LCD.
PrateekS14 7 years ago
Eric Brouwer 7 years ago
Thanks for sharing. I scanned through your code, and like the way you handle the different functions. I am also currently busy with a SIM800 module.
Just a finding. With the standard SoftwareSerial library, the length of the received SMS will be limited to a maximum of 64 characters. This include all the SMS details, not just the actual message.
Example of a complete received SMS:
+CMT: "+278####6071","","16/07/12,20:21:53+08"
You have 312 Ad-Hoc SMSs remaining which expire on 2016-08-06
Example of same message using the standard SoftwareSerial library:
+CMT: "+27820096071","","16/07/12,20:21:53+08"
You have 312 Ad-Hoc7899urhbfu34u90
To overcome the loss of part of the SMS, I increased the SoftwareSerial receive buffer size from 64 to 200. This resolved all my problems with received SMS's.
With any editor, open the SoftwareSerial file containing the definitions. In my case, it is NewSoftSerial.h.
devvrata1 7 years ago
My code uses a halt function which wait for about 3 sec till the Serialserial reload and read cycle can run several times. That how i was able to fetched the whole msg . But your way is really a quick fix for this problem. Thanks, i will iterate the code.
Eric Brouwer 7 years ago
Thanks for this. Now your code also makes a lot more sense to me. It just shows that there is no single method to get results. Each programmer makes up his/her own methods, but in the end, we all get the same results.
DIY Hacks and How Tos 7 years ago
Awesome. Building your own phone would be way more fun than just buying one.