Send an SMS by Semaphore




Introduction: Send an SMS by Semaphore

Now an all-purpose semaphore-driven keyboard for all desktop apps - with an iPhone front end! Read on for the original instructions.

After masterme120's comments should work cross-platform on any app with text input, though tested on Mac. Tell me about your experiences.

The instructions are the same - just install [http://processing Processing], download and double click on the .pde file then switch to your favourite app, and start typing in the air!

The new prototype switches between numerical and alphabetical using the NEXT signal. Send NEXT twice in a row, and it will hit 'Enter', suitable for IM. Skip to step 4 for how to semaphore - it's really simple.

Download the (new keyboard prototype)(original SMS version)

The instructable should still make sense whichever prototype you choose to download.


Build a system so you can use Semaphore to send an SMS text message.

To make the Semaphore Cellphone you will need...

  • A Mac, Windows or Linux Computer with a webcam attached
  • Some yellow stuff
  • Some blue stuff

This offers a third way to send SMS instead of T9 and that funky apple keyboard. Using this system you simply stand about 5 metres back from the camera and move your 'flags' into the semaphore positions in order to dial the number, and then to type the message.

What's more, with an SMS service like Mojo, or GizmoSMS you can make it send real text messages. However it's almost as fun without. Maybe you can mod it to send emails, or something else.

The whole system is written on an open source piece of software called Processing which is used for all kinds of arts projects.

You can read more, see a demo of the system and download the software from my website.

The remaining steps in the instructable show you step by step how to install and configure your semaphore system, how to build the pom poms and how to use it.

If you like the project, then use the rating controls to help spread the word and leave any thoughts in the comments. I'll be listening.

This is a Curiosity Collective project.

Step 1: Download Processing and the Semaphore Software.

First step, download Processing from and the semaphore software from

The semaphore software must be unzipped and I think should automatically open in Processing when you double click on semaphore_tutorial_branch.pde. If it doesn't then use File>Open and open it from the directory where you unzipped the files.

I've garbled the details for my personal SMS account so you'll have to add your own in step 3 if you want to actually send a SMS. However, the software is functional without the SMS account, but it won't send texts to your friends.

Each stage of the message sending process (dialling, message composing) is illustrated by an Apple iPhone parody keyboard (best projected onto the screen on the wall for visibility).

Each key is annotated with little color circles denoting the flag positions which will trigger that number or letter. You can also see a mirror image of yourself and see what the machine is 'seeing'. Whenever the color patches detected by the computer match the color patches on the keyboard, that key gets pressed.

A 'delete' and 'next' key are provided. These can cancel mistaken symbols, and proceed to the next stage of the message when you have finished dialling or typing. They use the 'cancel' and 'numerals' symbol from the original semaphore code.

The processing suite of software provides a fully integrated IDE for all kinds of arts projects.

For example, getting hold of the built in camera on most platforms is simply a matter of writing a line like...
new Capture();
...because all the libraries and everything are built in from the start.

There's loads of tutorials online at their website and lots of very cool audio-visual projects have already been built and published for you to learn from.

Fortunately for this project you don't have to write all the code, because I've already built and tested the software.

Step 2: Make Your Pom Poms

This project uses pom-poms rather than flags.

It is possible to improvise by simply printing out a yellow page and a blue page on a printer, but it's not ideal.

It is a machine-vision based system which detects pixels which have a high intensity of a particular hue. Pom-poms are good because they are rotationally symmetrical, whilst flags and bits of paper end up side-on to the camera so don't get detected so well, especially if you invite others to play with it, who don't know how it works under the hood, and don't make an effort to put the flags side-on.

Thanks to Michael Powell for constructing these. They are perfect for the job. In particular, they contrast well with the background, making it easy to detect. Additionally, when you shake them, they get bigger, meaning that if the computer can't see them yet, you shake them, they get bigger and the computer picks them up.

Find yourself two big sheets of colored paper (this software responds to peak colors at hues of 0.2 (Yellow) and 0.4 (Blue) in the unit HSV (Hue Saturation Value) color spectrum. If you're a programmer, you could change these values to experiment with detecting other kinds of colors or objects.

If you want to check out what these hues look like, or print out some paper just to test the system, then choose HSB in your favourite image editor, set the saturation and value to max, and the hue value to 20% and 40% of the hue range (these ranges can be different depending on your software. 0.0-1.0 is a unit range, 0-255 is another common scheme which uses whole numbers between zero and 255, where yellow would be at 51/255 and blue at 102/255).

We found large rolls of colored paper in blue and yellow from staples for about $7 each.

You make a load of layers of paper, run tape across the whole of one side, and fold over underneath. Once they are taped at the bottom, you can score them with a sharp craft knife from the taped bottom all the way to the top to create the loose flapping strips which create the pom pom.

Finally when you have cut through the multiple layers of paper, you roll up the whole thing along the length of the tape and secure it with a final few turns of tape. If you do this tightly, you end up with a nice handle at the bottom.

Step 3: Set Up an Account to Send SMS

I don't know how easy it will be for you to get an SMS sending account. I was lucky and got in touch with a beta service for sending SMS through BT, called Mojo.

They thought this project was suitably crazy, and they let me have an account and charged it up with 200 credits for nothing. Maybe they'll do the same for you if you can prove you're (almost) completely insane.

I wrote some software to access their service which is incorporated in the download I provide at my website. I've changed the authentication credentials so you'll have to add your own.

If you get invited to beta test Mojo, you'll be able to register a user and a gadget to give you all the authentication details you need. Change the lines below in processing to match your own details...

String username = "Cefn";
String gadgetkey = "43500229d89e0263d3ca101e2998ce05ffe8b929";
String gadgetsecret = "3761e64df1036efa97c4c3bc856dfa0059478b18";

The benefit of Mojo, and other similar systems is that you can send an SMS just by making a HTTP request (in other words, just like loading a webpage). Integrating the service is very much simpler than, for example, the BT SDK, which needs certificates and all kinds of work to crack it open.

I think there are other ways to get hold of SMS sending from a PC. Add some comments to this instructable if you know of other providers which you could get at with simple code.

Update: It looks like you could use GizmoSMS as an alternative until Mojo comes out of beta, although I haven't tried this myself, yet.

Anyway, you can easily replace the postSMS() function in my code with something which uses your chosen service or just does something else with your message if you can't or don't want to use Mojo.

Step 4: Learn to Semaphore

Now the fun part. You can learn to semaphore by looking at the dialpad and keyboard. This shows you the positions you have to adopt in order to choose the letters and numbers you want.

Once the application starts up (or if the background seen by the camera changes significantly) it will take a few seconds to calibrate. During this time it will be confused and flash yellow and blue squares.

Once this has finished, you can move your yellow and blue 'flags' and the yellow and blue squares should faithfully follow your position. With the squares in the right position, just hold still and after about half a second, it will type the letter for you. If you need to repeat the same letter, this takes around two seconds.

If you make a mistake, signal 'DELETE" and it will remove the last character. When you've finished one stage of the message (e.g. dialling, writing the 'from', writing the 'subject' you can signal 'NEXT' to move on to the next stage. After you've filled out the body of the message, signalling 'NEXT" will send it, and then return you to the beginning again.

Semaphore is still taught and used in the Royal Canadian Navy, so you may even have a flourishing career ahead of you.

The semaphore SMS system promises to make us healthier than alternative text input systems given the energy expended in sending just a few characters.

It occupies a cultural territory between Tai Chi, Cheerleading and Telecommunications which I don't think has ever been explored before.

The software saves a snapshot of each successful symbol match, including a picture of you and your message so far.

The composite video in step 1 shows a series of these images put together into a video and speeded up, which I did using an app called MPEGStreamClip. After each semaphore session, you'll find these images written into the program's directory.

Always happy to hear from people who want to take away these ideas and twist them to their own nefarious purposes. Look forward to hearing from you, and don't forget to rate this instructable if you like it.

Be the First to Share


    • Stone Concrete Cement Contest

      Stone Concrete Cement Contest
    • Backyard Contest

      Backyard Contest
    • Meatless Challenge

      Meatless Challenge



    14 years ago on Introduction

    Having learned semaphore in the Boy Scouts forty years ago, I was quite intrigued by the title of this instructable. It is great to see semaphore getting some use by the public. I am at a loss to see the practical applications though. The problem with sending semaphore the old fashioned way was anyone with a pair of binoculars and semaphore knowledge could read your message.


    Reply 14 years ago on Introduction

    ha, I actually just got back from summer camp today, and during the games one of them involved semaphores (our patrol guessed the phrase after the first three letters) and I was the one who learned morse code!!!


    14 years ago on Step 4

    I had an idea that might be possible with processing. Since it can generate keystrokes, do you think that it can generate mouse movements? You could set up the camera in front of your monitor, then have a stylus like object with leds in the end and 2 tactile switches, so that you could turn your computer into a tablet? When you push each tactile switch, the leds flash in a certain order, so that processing can detect from a hyper cam where you pushed the button? That may be way to complicated, but it's just an idea.


    Reply 14 years ago on Introduction

    I couldn't help it. Had to spend a bit of time making it a bit more solid and this is probably pretty well finished now. See the link in step one of the instructable. To send 'Enter' you have to hit 'Next' twice. Hitting Next just once switches you between numeric and alphabetical. The procedure is to launch the app in processing, then switch to iChat. All keystrokes sent are then captured by iChat instead.


    Reply 14 years ago on Step 4

    I just tried it! It works perfectly, but my camera is not very good, could you please add manual brightness and contrast adjustors?


    Reply 14 years ago on Step 4

    Did you get a chance to test the keyboard prototype?


    14 years ago on Step 4

    How would you make it use iChat?


    Reply 14 years ago on Introduction

    The way to connect the two is using the java.awt.Robot class, which is able to generate native keystroke events. So if you begin the processing application, then switch to iChat, the keystrokes get sent to iChat instead. Great idea, masterme!