Click an image see a larger version; more photos are on Flickr.


Above Left: cardboard enclosure by Jeff Warren. Above Right: purpleheart enclosure by Dena Molnar. Below Left: milled enclosure by Yoav Sterman. Below Right: 3D-printed enclosure by Ben Peters.


Wired UK: How to make your own mobile phone by Tom Cheshire (Nov. 12, 2012)

New Scientist: Making your own phone is easier than you might think, Lisa Grossman (Mar. 21, 2013)

ABC News: Make Your Own Cellphone for $120 in Parts, Plus SIM Card: It's Not Rocket Science, Karin Halperin (Apr. 23, 2013)

DIY Cellphone

The DIY Cellphone is a working (albeit basic) cellphone that you can make yourself. It can make and receive phone calls and text messages, store names and phone numbers, and display the time. It builds on the hardware and software in the Arduino GSM Shield but extends it with a full interface, including display, buttons, speaker, microphone, etc. The source files for the cellphone are hosted on GitHub (hardware, software), which also includes an issue list where you can file bug reports or request enhancements.


There are two main variants of the DIY cellphone: one that uses a black and white LCD like those found on old Nokia phones and one that uses an eight-character matrix of red LEDs. The LCD shows more information (six lines of fourteen characters) but breaks over time. The variant with the LED matrix is harder to use but the display is more robust.

Making the Phone

Making the DIY cellphone can be a fairly involved process but it doesn't necessarily require specific electronics expertise. You'll need to order the circuit board and electronics components (about $200 total) and have access to some other electronics tools. There's a good amount of fine hand soldering to be done: about 60 components, mostly surface-mount, which can take from one to five or ten hours, depending on your experience. Programming and, especially, debugging the phone can take a while – again, depending on your experience and how much goes wrong. Making the case requires some plywood and veneer, along with access to a laser cutter (or you can find your own way to enclosure the circuit board). In short, this is a difficult but potentially do-able project.

If you are interested in making the phone and looking for help, check out the DIY Devices Forum. It's a (nascent) community for people building the DIY cellphone and other devices. (Note that new user registrations have to be manually approved. If you're having trouble, please email me at

Ordering the Circuit Board

You can order a version of the circuit board from OSH Park. It costs about $60 and you get three copies of the board.

Alternatively, you can upload the Gerber files to a fabrication service yourself, either OSH Park, Advanced Circuits, AP Circuits, or a number of others. Each time I order boards, I save the Gerber files in my GitHub repository, in a directory named according to the date. Find the latest here: LCD variant, LED matrix variant.

There are a few different files in the directory:

You'll need to upload these (typically in a single zip file) and sometimes specify which file is what. This is a two-layer board, 5.15" x 2.3", and the standard options for board thickness (0.62"), copper weight (1 oz), and solder mask should be fine. You'll want to get solder mask and silk-screen on both sides. Getting the corners rounded might count as a complex shape and cost extra; I think it's worth it but it's not necessary.

Getting the Parts

There's no kit available for the cellphone but you can order the parts from various websites.

Electronic Components

Most of the electronic components are available from SparkFun and Digi-Key. You'll also need to get the M10 GSM Module from the Arduino store (EU) or D Art Perfect (US).

Bill of Materials: BOM.pdf (LCD variant), BOM.pdf (LED matrix variant)


To assemble the phone, you'll a need a good soldering setup: a soldering iron (e.g. the WES51) with a good tip, fine-pitch solder, desolder wick, tweezers, etc. To program the microcontroller, you'll need an AVR in-system programmer (like the AVRISP mkII) and a 3.3V FTDI Cable (or equivalent breakout board). To charge the battery, you'll need a mini-USB cable.

To make the laser-cut case, you'll need access to a laser cutter and a small philips screwdriver.

SIM Card

The phone should work with a full-size SIM card from any GSM provider. I've been using T-Mobile in the United States but the phone has also been tested with AT&T and in India, China, and Europe.

Other Materials

For the laser cut enclosure, you'll need:

Or, try making a difference enclosure (e.g. with 3D-printing or by milling a mold).

Circuit Board (1/4/2013)Circuit Board (1/4/2013)
Images of the assembled circuit boards (LCD variant). Click to enlarge.

DIY Cellphone (LED matrix variant)DIY Cellphone (LED matrix variant)
Images of the assembled circuit boards (LED matrix variant). Click to enlarge.

Soldering the Electronics

While the cellphone uses many small, surface-mount components, it's possible to solder it together by hand with a good soldering iron and some practice. Most of the components are straightforward to solder (apart from their small size), with a few exceptions:

Compiling the Software

The cellphone's software is an Arduino program that makes use of various libraries and a third-party hardware definition. You can compile and upload it with the Arduino software but some initial setup is required:

  1. Download and install Arduino 1.0.4 (tested) or 1.0.5 from the Arduino software page.
  2. Install the Git version control software. See, for example, the instructions from GitHub for Windows or Mac.
  3. Checkout the cellphone's source code from GitHub, e.g. "git clone". Then "cd cellphone2" to change into the source code's directory.
  4. Checkout the other repositories used by the cellphone's software with "git submodule init" and "git submodule update".
  5. For the LED matrix variant, checkout the LED matrix branch with "git checkout led-matrix". (The code for the LCD variant is stored in the default master branch.)
  6. Run Arduino and, in the preferences dialog, set your sketchbook folder to the cellphone2 directory (that you checked out from github).
  7. Also in the preferences dialog, enable verbose information on compile and upload. (This will help you debug if anything goes wrong.)
  8. Restart the Arduino software.
  9. Select "DIY Cellphone" from the Tools > Board menu.
  10. Select AVRISP mkII (or whichever programmer you're using) from the Tools > Programmer menu.
  11. Plug the LiPo battery into the cellphone.
  12. Initiate "Burn Bootloader" from the Tools menu (while holding the pins in the ISP header against the corresponding holes in the PCB). This may take a few minutes.
  13. Connect the 3.3V FTDI cable to the FTDI header (the black wire goes on the side labelled "B", the green on the side labelled "G").
  14. Open the Cellphone sketch from the sketchbook.
  15. From the Tools > Serial Port menu, select the item corresponding to the FTDI cable.
  16. Upload the Cellphone sketch.
  17. The screen should turn on and show the word "connecting".
  18. Insert a SIM card into the socket.
  19. It may take a while for the cellphone to connect to the network. If it doesn't connect after a few minutes, try resetting the board (by pressing the small reset button). You can see debugging information in the Arduino serial monitor at 9600 baud.
  20. Once the phone connects to the network, you'll see the words "connected" and "caching" on the screen. After a few seconds, the screen will go blank. That's a sign that the phone has successfully started up and is now on the lock screen. See "using the phone" below for more information.
5/23/13  15:54

The unlocking screen (backlight will be off)
5/23/13  15:54

lock      menu
The home screen

back      call
The dialing screen

Using the Phone

Unlocking the Phone

Once the phone successfully starts up, it will be locked and the screen will be blank. To unlock the phone, press any button; the date and time will appear on the screen for a few seconds (this is the "unlocking" screen). On the LED matrix variant, the date and time will scroll back and forth across the screen. If, during this time, you press the "unlock" key (the top-left button), the phone will unlock and, if using the LCD variant, the screen's backlight will turn on. On the LCD variant, the date and time will remain on-screen, and the soft-keys labels will read "lock" and "menu". On the LED matrix variant, the time will remain on the display, without scrolling. This is the home screen.

Locking the Phone

From the home screen, you can lock the phone by pressing the left soft-key button (the upper-left button). The screen and backlight will turn off but the phone will still be on and able to receive phone calls or text messages.

Adjusting the Contrast/Brightness

When the phone is in the "unlocking" screen, you can adjust the contrast (for the LCD variant) or brightness (for the LED matrix variant) by using the up and down buttons (the two central buttons of the group of four buttons just below the screen).

Dialing a Phone Number

You can dial a number from the home screen. Simply press the button corresponding to the first digit of the number. You'll be taken to the dialing screen where you can enter the rest of the number. Press * to delete the last digit entered or "back" (the left soft-key) to go back to the home screen. By pressing # one or more times in succession, you can enter #, *, or +. To call the number, press the right soft-key ("call").

Using the Phone Book (Contact List)

From the home screen, press the down arrow (the lower of the group of four buttons just below the display) to enter the phone book. Use the down and up arrows to navigate to the desired entry. Press the right soft-key ("okay") to enter a menu from which you can call that contact, send a text message to that contact, add a new entry to the address book, or edit or delete the contact.

Adding a Contact

To add a contact, first enter the contact list by pressing the down arrow from the home screen. Then press the right button to enter the contact menu ("call", "text", "add entry", etc); scroll (using the down and up buttons) down to the "add entry" menu item and press the right button. Now you can enter the name of the contact using the keypad (2 is "abc", 3 is "def", etc.; 1 is space, * is backspace, and # is shift). Once you've entered the contact's name, press the down arrow to move to the field for entering the contact's phone number. (You can press the up arrow to return to the field for entering the contact's name.) Enter the contact's number using the keypad (* is again backspace, but # now cycles between #, *, and +). When you've entered both the name and phone number, press the right button to save the contact (or the left button to cancel).

Calling a Contact

To call a contact in your contact list, scroll to that contact, press the right button to bring up the contact menu ("call", "text, etc.) and then press the right button again to call.

Texting a Contact

To text a contact, scroll to their entry in your contact list and press the right button to bring up the contact menu. Scroll down to "text" and press the right button. Now you can enter your message using the keypad. (As for entering a contact's name, 2 is "abc", 3 is "def", etc.; 1 is space, * is backspace, and # is shift.) Press the right button to send the text (or the left button to cancel).


There are a lot of pieces and, therefore, a lot of things that might not work. Here are some potential problems and some possible solutions.

Can't burn the bootloader onto the microcontroller.

Can't compile the cellphone program.

Can't upload the cellphone program.

Can't connect to the network.

Another component doesn't work (e.g. display, speaker, microphone, buzzer).

Serial Debugging

You can further debug the phone by communicating with the GSM module via serial communication with the computer, using the microcontroller as a proxy. To do so, upload the SerialProxy sketch to the phone (using a 3.3V FTDI cable or breakout board). Then open the serial monitor and set the baud rate to 9600 and the line ending to "carriage return". After a few seconds, you should see:


That means the GSM is ready to receive AT commands (text strings that mostly start with the letters "AT"). The commands are detailed in the datasheet for the GSM module but here are a few basic ones:

Test/synchronization command. If you enter "AT" in the serial monitor (with a "carriage return" line ending), you should get a response of "OK".
Check the status of the network registration (connection). The response will be in the form "+CREG 0,N", with N being: 0 (not registered to a network), 1 (registered to a network), 2 (searching for networks), 3 (network registration denied), or 5 (registered, roaming).
Display currently-selected phone book. Sample response: "+CPBS: "SM",50,250", with the "SM" indicating the SIM card is the current phone book (some other options include "MC" for the missed call list, "RC" for the received call list, and "ME" for the GSM module phone-book) and that 50 of its 250 entries are in use. This command can be useful for verifying that the GSM module is able to communicate with the SIM card.
Select the SIM card's phone book. You can also replace the "SM" with the abbreviations for the other phone books listed previously.
Read the first entry from the currently-selected phone book. Replace the 1 with the number of the entry you wish to read (up to the total phone book size reported by AT+CPBS?).

Making the Enclosure

You can make a simple but functional enclosure from laser-cut plywood and veneer, along with some small screws (see materials above):

  1. Before cutting the case, check that the case files match the circuit board. In particular, I've made a lot of tweaks to the size and location of the screw holes, so check that they're in the same place on the PCB and the case. (Note that the holes in the bottom veneer file should be bigger than the others, this is to accommodate the nut, recessing it slightly.)
  2. If you soldered pins onto the ISP header, you'll need to cutout a space for them in the top piece of plywood. Edit DIY-Cellphone-Top accordingly.
  3. Laser-cut the plywood (1/4" / 6mm) using the DIY-Cellphone-Top and DIY-Cellphone-Bottom files in the Case/ folder of the damellis/cellphone2hw repository on GitHub. The SVG files were created in Inkscape, then exported to hpgl for importing to CorelDraw.
  4. Laser-cut the veneer using the DIY-Cellphone-Top-Veneer and DIY-Cellphone-Bottom-Veneer files. Cut the veneer with the wood front facing up (adhesive back face down).
  5. Remove the adhesive backing from the top veneer piece and stick it to the outer face of the top plywood piece. Repeat with the back, again attaching the veneer to the outer face of the plywood.
  6. There's a bit of empty space between the top of each button and the veneer. You might need to stick small spacers to the back of the top piece of veneer, one for each button (in the middle of each rectangular flexure cutout in the veneer). That way, you don't have to depress the veneer as much to press the button.
  7. Slip the top and bottom pieces of the case over the circuit board. You'll have to fit the battery's wire in between the GSM module and the battery connector, folding it in half. The plywood pieces should rest flat against the circuit board.
  8. Insert the six screws and thread them onto the nuts.

Design Files

The design files and source code for the cellphone can be found on GitHub: