When my 5 year old son asked me for a phone, i told him i would make one for him.
The phone uses an Arduino and a SIM800L module that i bought on Taobao for RMB 35. There are a lot of variations, i chose this one because it has connections for speaker and microphone, and works directly with the 3.7V of a LiPo battery. Other versions have less pins (basically only RX/TX) or a lot more components but this one is perfect for my project.
I soldered the pin headers to the SIM800 module and made a prototype with Arduino board (red Seeeduino below), a breadboard with 3 buttons and a electret microphone, and a 8ohm speaker. The speaker and microphone connect directly to the SIM800 module.
Initially i used 3 buttons: call mum, call dad, answer/hang up call; but in the final version i figured that the 3rd button is not needed, we can answer/hang up with any of the other 2 buttons. I added a green LED for the status of the phone: after power on, it blinks while the SIM card is being registered on the network, and then stays on to indicate the phone is ready to make/receive calls. The red LED blinks when there is an incoming call, and stays on during the call. [i tried several SIM cards in Hong Kong: CSL works, for some reason 3HK and Smartone do not seem to work]
The communication between SIM800 and Arduino goes over a Software Serial, and uses standard AT commands, with an excellent datasheet (multiple versions available online). The hardware datasheet does not mention it, but this thread on the Arduino forum claims the RX/TX pins are 5V tolerant. I did not take any chances and put my Seeeduino in 3.3V mode. My aim was to power the Arduino (and the SIM800) from a 3.7V LiPo battery so i was only using 5V while the Arduino was connected to my laptop for uploading sketches and debugging over the Serial Monitor. Even then i needed to have the LiPo battery connected to the SIM800 module because it can draw a lot more current than the laptop USB can provide. I also added a large capacitor of 1500uF to stabilise the voltage. It is possible to use this module with 5V if you activate the onboard diode, as i describe in this other post.
I did not want to use my Arduino board inside the phone, so i made a barebones Arduino (ATmega328P at 16MHz, see my other post) and soldered the few components on a perf board (2x 22pF caps, the 16MHz crystal, the 1500uF cap, 2 resistors for LEDs, and the wires going to the switch, buttons and LEDs.
In my sketch i’m not using a SIM library for the AT commands, but rather writing them directly over the Software Serial and decoding the reply, to know exactly what is going on in the SIM800 module. [see my sketch in comments below]
As soon as my prototype was working, i started to make a wooden box, out of 5mm board. The corner pieces are screwed to the base board and the side panels are glued together.
I sanded the edges, drilled holes in the front panel, and put a varnish on it.
I fixed the perf board with the ATmega328 to the base board, and let the SIM800 float around as there are no holes in this PCB to fix it.
I attached all the components to the front panel as below, using glue for the speaker.
And the end result looks quite OK i think, and more importantly, it works!
For a breadboard version of this phone, see below drawing that works with the sketch below, and runs on 5V (see this post on how to use this module with 5V).
And a second version of the same project, with a recycled laptop battery cell and DC-DC booster to bring that up to 4.2V; the SIM800 module from a new batch seems to easily loose the network connection under 4V.