Tuesday, March 9, 2010

Announcing my New Product: the DroneCell

Announcing my new product... drum roll please..... DroneCell!
What is it? Its a cell phone for your robotics/electronics/minicomputer/anything project.
It has a simple 3.3V to 5V UART interface, so it can be easily connected to any 3.3V or 5V device, like most AVRs, PICs. All the necessary voltage level shifting is done onboard, so there isn't any headache. Connect it to your Arduino, your STAMP, your Gumstix board, your Axon, your whatever.
It is completely breadboard compatible, so its perfect for any prototyping rig. Plus it comes with two neat little LED indication lights, so you can visually see and understand whats happening.
No more stupid Xbees that have limited range, use DroneCell for nearly unlimited range! It will work anywhere you have a cell tower. Control your robot in Los Angeles from your laptop in New York City.
Imagine sending a text message to your custom circuit which starts your car. Or sending data wirelessly over the Internet to your UAV that flying over Afghanistan. Or getting GPS and weather data from your high altitude air balloon. Or even having your butler robot( like my own Chives, look on Narobo.com for details) dial your cell phone and email you when he detects an intruder. All this is possible with DroneCell!

I actually used a slightly different version of the DroneCell in a major commercial product, so I have tons of code available. All the hard work is done, so enjoy it in your different projects!

Videos and software to be uploaded this weekend and next week. I'll post up the new info as its available.
Currently, I am sending out samples to several retail stores and very few personal friends. Expect DroneCell in a robotics store near you in about 2 weeks. If you absolute MUST have a DroneCell, email me and we can work something out.
Heres a laundry list of the features and possible applications:
FEATURES:
LED indication for both network status and power
Small footprint (5cm x 5cm)
Breadboard compatible for easy prototyping
5VDC-16VDC power supply input
3.3V to 5V UART Interface (voltage-shifting is done on board)
High serial data rate (up to 115200 baud)
GPRS communication rate (86.5 kbps downlink) – cellular to server communication
CSD (up to 14.4 kbps) – cellular to cellular communication
Software configurable baud rate
Works with any SIM card
Quad band cellular connectivity
Internal switch to detect SIM card presence
Dial and receive phone calls (however, no microphone or speaker interface setup)
Send and receive text messages
Send and receive data to any Internet connected computer
Send and receive data over TCP or UDP sockets
Super long range (anywhere there is cell reception)
High altitude (at least 10,000 feet, up to 30,000)
Phonebook entries and storage
Software libraries for AVR
Real time clock, synced to cellular tower time
User set alarms

POTENTIAL APPLICATIONS:
UAVs and Balloons – live data reporting – GPS, pressure, altitude, streaming video
set waypoints, camera commands, etc.
Cars- remote start, car alarm notification, GPS tracking
Security systems – cars, boards, sheds, etc.
Home automation – thermostat control, lighting
Robots – data transfer, remote commands
Processors and computers- data transfer, wireless ssh, telnet
Wireless Industrial Systems – reset computers, activate pumps
Wireless Asset tracking – GPS track your car, your spouse, your cat

DATA TRANSFER METHODS:
iPod server/client socket app
Hyperterminal
Custom socket server/client – Perl, Python, C#, etc.

Friday, October 2, 2009

Divide Bits into Bytes

Another useful Python script. Divides text of bits into 8 bits at a time, so you can see everything byte by byte.

Python Code:

>>> string = raw_input('String = ')
String = 1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
>>> " ".join(string[i:i+16] for i in range(0,len(string),16))
'1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'

Thanks Keith and #python IRC

Reverse Text in Python

I've been doing a lot of work lately dealing with bits, and many times I've had to reverse the bit text in order to actually see what was being submitted ( most significant bits are first not last). I used to do it by hand, but I now use a handy one line python script.

The raw data from my microcontroller:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1 1

The one line Python script :
print raw_input("Enter String to Reverse: ")[::-1]

Open up terminal and go into python. Type in that script and press enter.

Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print raw_input("Enter String to Reverse: ")[::-1]
Enter String to Reverse:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 1 0 0 1 1 1
1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

The reversed code:
1 1 1 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0


Special thanks to Keith!

Wednesday, September 30, 2009

The truth about leaving light bulbs on

A common piece of urban folklore: Its better to leave a light on than to turn it off and turn it on a half hour later. The theory is that the bulb takes more energy on startup than it takes while in regular operation.
Time to debunk this foolish folklore with some math and specifications.( for incandescent bulbs)
Cold resistance of a tungsten incandescent bulb is usually around 1/10 or 1/15 the hot resistance of the bulb.( depending on the bulb). The startup time for the bulb to get from cold resistance to hot resistance is at maximum 1/5 of a second.
So when the bulb is starting up and turning on , it has cold resistance. After the the bulb is all turned on, it now has the higher resistance.
And we all know that with great power comes great current squared times resistance, or power = current* resistance. So Power = Current^2 * Resistance.

Lets take a common incandescent bulb with the following specs:
100W power consumption
120 volt source
Hot Resistance of 150 ohms
Cold resistance of 10 ohms
Startup Time(cold to hot) of .20 seconds

So that means that during that startup time , you will spend 3.16 amps(100 = i^2 * 10) for .2 seconds . Whereas with the hot resistance you will spend 0.81 amps(100 = i^2 * 150).
So lets see: upon startup you are spending around 4 times(3.16/.81=3.9) as much energy as you would spend , but only for 1/5 of a second.

Lets solve to see how many seconds of hot current draw equals cold current draw.
3.16 amps * .2 seconds = .81 amps * X seconds
X seconds = .78 seconds

Conclusion:
It takes less than one second to compensate for that startup current "surge"! Urban myth is busted!

Friday, August 28, 2009

Working at BugLabs

I've been working at BugLabs - buglabs.net for the past few weeks. Its been lots of fun and I got to play with a lot of cool stuff.

RFID Module I made: http://bugcommunity.com/wiki/index.php/VonHippel_RFID_Reader

I also took my bipedal robot and mounted a BugBase onto it. BugBase talks to my custom Serial Servo Controller.