Wednesday, March 11, 2009

RFID activated phone system

I feel most hobbyists make things that are useful. I tend to like to make prototypes. To me that's what I like about the iobridge so much. I can prototype things very quickly that in the past would have taken me a long time to create. I was able to make my phone system in the morning before heading off to school. I tend to think about usability more than most engineers, and as a biomedical engineer I like to think about products for physicians, patients, and the elderly. When I was an undergrad I had an idea for a phone system for the elderly. Yes there are phones with large buttons and few features, but they are often very ugly and you still have to remember the phone number. My idea was to create a phone that would dial the desired number based on placing a picture on or near the phone. In essence the device would work like the many iphone apps out there that allow you to call a person by pressing their picture on your phone. My dialer could be this advanced, with a touch screen and the whole nine yards, but I really liked the idea of physically doing something. Here's my prototype:


One note about the video. This has nothing to do with an iphone. The system will connect any two phones.

To create the RFID activated phone dialer I used:

The RFID reader is very simple to use and is easliy connected to an arduino. Code to run the reader can be found on the arduino website. For my purposes this did almost everything I needed it to do. My only change was to put a delay after reading a card. This eliminated multiple reads if you swiped the card by the reader slowly. Since the iobridge JSON object stores the serial data for a period of time, I also added a line of code to change the stored serial data after my javascript had a chance to read the RFID tag. If I didn't do this then the phone dialer javascript would keep making phone calls.

Dialer without cover

The arduino sends the RFID info to the iobridge via a connection between the TX pin on the arduino and the serial smart board. The dialing is done on my home computer/server that is running a bit of javascript. The javascript compares the RFID code and dials the appropriate phone number. This is the heart of the javascript I have running back on my computer.
function testNumber(numtocall) {

if (numtocall == "RFIDTAG1") {
// RFIDTAG1 is the unique tag
window.location="tel:XXXXXXXXXX";
// XXXXXXXXXX is the phone number to call
}
else if (numtocall == "RFIDTAG2") {
// RFIDTAG2 is the unique tag
window.location="tel:XXXXXXXXXX";
// XXXXXXXXXX is the phone number to call

// ... repeat for each tag you have
}

function checkNumber() {
$.getJSON("http://www.iobridge.com/api/feed/key=YYYYYYYYYYYY&callback=?",
// YYYYYYYYYYYY is the key for your iobridge
function (data) {
testNumber(data.module.channels[3].LastSerialInput); // 3 is the 4th channel on the iobridge (0-3)
});
}

$(document).ready(function() {
checkNumber();
setInterval("checkNumber()", 10000);
});

The script checks the feed of my ioBridge every 10 seconds and then parses the JSON object. The LastSerialInput is then compared to the RFID tags I have in the script. If a match is found then the call is placed.

To place the call I used a tel:URL. This works like a mailto:URL, but instead of activating your email program to start and email it activated a phone program to dial a number. The program I use all the time for this is Vocito. It works with Google Voice. I use google voice and Vocito all the time so I didn't think twice before picking this combo as my dialing method. For those of you without google voice, I am sure you could activate a phone call with numerous other programs and systems.

ioBridge Serial Smart Board Tutorial

My little tutorial about controlling your lights with an ioBridge was well received by the guys over at ioBridge.com so I thought I would make another tutorial. This time I wanted to go over a really powerful tool ioBridge just released, the serial smart board. The smart board allows an iobridge to send and receive serial signals. In this tutorial I will be suppling a serial signal from my arduino microcontroller. Here's the video tutorial. Keep reading after the video for more details.





Let's start with the arduino sketch. Like I said in the video, this is a really simple circuit that is probably one of the first people make. One of the best arduino tutorials around is the one by the fine folks at ladaya.net, and the circuit I used can be found in their 5th lesson. The only change to the sketch I used is to insert the corresponding Serialprintln("I turned it on"); and Serialprintln("I turned it off); Into the loops that turn the LED on and off. Since ladaya.net covers the arduino portion of the tutorial so well, I'll jump to the ioBridge section.

ioBridge serial smart board


After building the circuit and programing your arduino, power down your iobridge. Plug in the serial smart board to an open channel and then power your iobridge back up. Whenever plugging in a new smart board you need to be sure to restart your iobridge so it will detect the new board.

Connect the grounds of your iobridge and arduino circuit. If you haven't done so at this time load your sketch onto the arduino board. Finally connect the TX pin (pin 1) to the RX pin on your iobridge serial smart board. If you make this connection before uploading your sketch you will probably get an error.

Head over to the iobridge.com website and log in. Click on the module tab and then select the module you plugged the serial smart board into. Change the appropriate channel to the "serial" mode and save the change.


Select serial as the mode


The iobridge will now "listen" for data. If you go ahead and press the button on your circuit the text should pop up in box just under where you selected the serial mode. If you see garbage instead of the text you are expecting, some of your settings are probably off. Make sure your baud rates are the same on the arduino and iobridge. Also make sure you have the right pacing and inversion mode set for your setup.

I'm using:
baud rate = 9600
pacing = 0
Signal mode = inverted


Channel listening for serial data


Now that everything is set up correctly go to the widgets tab and create a new widget. Select "Monitor Serial Messages (Real-time)". This is the widget you use when you want the iobridge to "read" serial data. The other two serial setting "write" serial data. Then click your module, and then select the channel you installed the serial smart board onto. Now you've got a serial monitor. As with all widgets you can copy the provided code to any webpage or just view the results from your iobridge dashboard.



Completed widget


In my video I just viewed it from the dashboard. Back in the widget's tab, click the plus next to the widget you just created to add the widget to your dashboard. Next, click on the widget dashboard. You should see your widget here. It is currently listening for data. If you push the push button then serial data will be sent from the arduino to the iobridge and be displayed on the dashboard.


Widget after being added to the dashboard