BlimpDuino is a very low cost open source autonomous blimp. It consists of an Arduino-based blimp controller board with on-board infrared and ultrasonic sensors and an interface for an optional RC mode, a simple gondola with two vectoring (tilting) differential thrusters, and ground-based infrared beacon.
It is available as a commercial kit from the Maker Shed or the DIY Drones store for $89.
[UPDATE: The current Blimpduino kit has been discontinued. Stay tuned for a new design in 2012]
- What else you'll need
- Instructions for making the kit are here.
- Instructions for loading the code are here
- Correct LED/servo/motor behavior modes are here
- Instructions for using Blimpduino are here
- The parts list is here
- The discussion forum for teams using Blimpduino in the FIRST Robotics aerial robotics demonstration is here
- If you want to build your own board from scratch, the necessary files and component lists are here
- If you want to print out a cool DIY Drones sticker like the blimp above has, here's a pdf.
The Blimpduino board is the core of the kit. Features:
* 17 grams, with ultrasonic and IR sensors.
* Controls two motors and one vectoring servo.
* Built-in RC compatibility (can read two RC channels--throttle and steering)
* Designed for a 7.4v LiPo battery; has an automatic power cut-off at low voltage to protect the battery.
Here's the board with the ultrasonic sensor removed, so you can see the Atmega168 processor underneath it:
Here is a video of BlimpDuino in flight, using a breadboard version of the controller board:
At the moment, we're using Pololu IR beacons as the ground beacon, but we'll eventually release our own, open source, versions of them, too.
Here's the board on the gondola with vectoring thrusters and the optional RC receiver:
The commercial kit consists of the following:
--BlimpDuino board, with all SMD parts already soldered on
--Other through-hole components, to be soldered by user (easy)
--A very simple laser-cut plastic platform for the board, battery, optional RC receiver, and motor components
--A servo, gears and motor shaft for the vectoring (thrust tilting) function
--Two motors and props
--One IR ground beacon
--52" mylar envelope
The following is a chronological list of posts describing the development of the project. This is mostly for those who want to follow along and learn about Arduino-based robotics. If you're interested in autonomous blimp development and want to know more about BlimpDuino features, they will give you some insight into the evolution of this project.
- BlimpDuino, an Arduino-based blimp controller board.
- BlimpDuino board, assembled
- BlimpDuino test platform, with optional RC mode
- A simple Arduino code demo of how to control vectoring thrusters in RC mode
- How to add vectoring thrusters to a toy RC blimp
- Video of BlimpDuino with vectoring thrusters
- Near-final production Blimpduino board
- Status update (Sept 10)
- Production board release candidate
- How can we make BlimpDuino navigate between multiple IR beacons?
- BlimpDuino code now in pre-alpha
- BlimpDuino RC-mode code
- New BlimpDuino code--much more efficient (10/18/08)
- Video of BlimpDuino demonstrating autonomous navigation
- Finally, BlimpDuino code in Beta!
- Board version 432 released
- How to prepare a self-built BlimpDuino board for first use
- Coast Guard Academy course built around BlimpDuino
- BlimpDuino debugging tips
- A small fleet going out to the beta testers
- Building instructions
- Instructions for using BlimpDuino
- BlimpDuino code Beta 1.1 released
- BlimpDuino board v5 released, final production version
Thanks, Scott. Boards ordered. The OSH Park pricing is indeed great -- free shipping, too!
I really like OSH Park - great service and good prices, especially for low production runs. I got 3 boards for $13.55 - just the board.
Perfect for me because I love working with electronics and pulling out the soldering station - a challenge to be sure with the micro-controller chip but a fun one. If you have a go-to organization you use for PCB fab with component attachment, pass it along - I'm interested in that for other projects.
Scott: great updates! If you can share a BOM and your recommended configuration, I'd love to build a new version myself and perhaps make it easier for people to put together the kit themselves. If nothing else I can certainly get new PCPs fabbed to make that part easier for folks.
With everything together and able to be tested, I've found the following:
1) the Ultrasonic sensor isn't doing a great job, not in the environment I've been testing it within and probably not within the environment it will finally be operating in. The test environment is in our office and there are a lot of soft surfaces (carpet, etc) that really bedevil the sensor. Not only that but since its sensing a distance and not an altitude, it goes bonkers whenever if travels over things that are neither at its minimum or maximum flight level (floor or approaching the ceiling or limit of the Ultrasonic sensor). Next time I might think about changing the code to use a precise barometric sensor (assuming I can find one cheap enough and precise enough to measure changes in altitude of a foot or so).
2) The motors and props are extremely important. The original design doesn't provide specs so you end up guess what's required. For the size and shape of the props recommended and their forward and reverse capabilities, I think you really need a high RPM motor - on the order of 20-30 krpm unloaded - in order to provide enough thrust to push this ungainly beast around. A larger propeller that bites more into the air with a higher torque gearing system or motor running it at a slower speed would be the other option. As it is, I ordered a different set of motors and got slightly better performance but not a lot, though they were significantly smaller and lighter which helped in other ways.
3) The IR sensors - I wish they worked better. I keep getting muddiness between the sensors on any one side of the blimp - I think there's too much overlap and not enough isolation between them so the flight controller becomes twitchy. The IR sensors will also catch any reflections of the sun and other IR sources or reflections of sources in the room. While a more expensive solution, I think a rangefinder or trip-wire sensor might work better, with a bit of coding to get it to wander randomly within a space might be a better solution. At least in that way, there is no need for an IR ground station (or multiples of them for waypoint navigation - which the code doesn't really support at the moment - and would require a way to turn off the ground beacons as the blimp got close)
4) Great project, lots of fun, a great opportunity for learning and with updated, more powerful motors, a good manual flight capable blimp.
Its pretty light and flexible and with a few zip-ties, does a good job holding all the components together.
If you would like to order the beta 6 board - here's the link to the OSHPark part I uploaded and had them fab for me:
I don't profit from this.
As I said before, I'll better document some of the things I had to do to get things to work but here are a couple of the things that really had me scratching my head and re-reading the instructions.
1. Burning the bootloader to the ATMega168
This was a huge issue - mostly because it was my first attempt. I used a USBTinyISP AVR programmer which I bought as a kit from Adafruit (can't recommend them or it enough). I followed the instructions for loading the bootloader and subsequently ended up nearly bricking the chip. For all intents and purposes I did brick it, though I was able to bring it back. The problem was that one of the fuse settings was entered wrong (probably me fat-fingering it, but I don't know how since I used to code provided on the site) - this fuse setting told the ATMega to use an external oscillator instead of its internal oscillator. This took me a long time to figure out after much trial and error. I bought a bunch of oscillators and crystal / capacitor combination from Adafruit once I was reasonably certain that this was the problem and I was finally able to burn the bootloader into the chip.
This site, http://www.engbedded.com/fusecalc/, was a huge help in this. It showed me what could be altered via setting the fuses and help narrow down my search. Which frequency to use and where its located is stored in the low fuse and somehow I'd changed that from its default (internal 8MHz) to an external 8MHz value.
The nice thing about the Blimpduino board beta 6 is that it brings out both clock pins from the ATMega168 to headers - 3 sets of 3 headers near the arrow pointing forward. The first set is for the servo and the second and third sets are power, ground and the two clock pins. That made it easy to temporarily connected an external oscillator so I could then communicate with the board again and reset its clock setting to internal.
2. The servo.
The servo I selected, admittedly not the one recommended, kept on causing the board to restart. I tracked this down to a voltage dip when the servo starts moving. To solve the problem, I'm adding a LARGE capacitor across the power and ground wires leading to the servo. I did some testing and found that in most cases, three 470 uF Electrolytic Capacitors would stop the brownouts - I ended up getting a 3300 uF to give some head-room.
A better answer would be to source a servo better matched to this application but this is what I had lying around (no-name generic 9g servo)
3. The Ultrasonic Sensor
I bought my MaxBotix LV4 from Adafruit and while I was able to get it to work in a test harness, I could not get any values from it running on the Blimpduino board.
The MaxBotix sensors have three output methods for the sensor readings. Serial, which isn't used on the Blimpduino, Analog Voltage and PWM pulse widths. The board actually allows you to set which of the last two you want to use - there are jumper pads on the back marked JP2. The middle of the three pads is connected to the input pin on the ATMega168 and the other two pads are connected to the PWM and Analog Voltage outputs from the sensor. If you don't short either of those outside pads to the inner pad, you won't get any sensor output from the sensor into the ATMega168. I can't believe I missed that myself, but I couldn't find anywhere in the instructions for assembling the board from scratch where that was mentioned. Obvious when you look at the back of the board but you have to know to look.
Color me surprised after shorting between the PWM pad and the center pad, I was still not getting any readings from the sensor. This led to me tracing every connection, verifying the pin mappings in the Blimpduino code, etc. Having assumed this was a hardware issue because this was my first ever SMD soldering job, making the Blimpduino board from scratch and it being a beta board to boot, that's where I started. Having exhausted all of that, I started to look at the code - not very clean when it came to accessing the sensor data from the MaxBotix sensor.
One, there was a compiler directive allowing you to switch between PWM and Analog Voltage for your sensor input on the board - this was nice but since you hard-code that on the board by shorting the pads, I removed it. It either wasn't working as expected or not at all because when I did that, I started to see data. Personally, after researching, I decided to use PWM because its supposed to be more accurate and precise a measurement at 147 micro-seconds / inch.
Now the problem was that the initial read of altitude was always wrong and always out of whack with the updates to the altitude that the flight controller uses to maintain altitude. Come to find out, the initial altitude was hard-coded to look at the Analog Voltage on pin 2 - Instead of using the function built to retrieve the altitude for the rest of the code, it was bypassing that and using a different method (would couldn't work without the analog voltage being provided to the chip). So, I changed that to a function call to raw_ultrasonic() (used by everything else in the code for the Alt reading) and got better numbers. I'm still tweaking the delay code there to get the Ultrasonic sensor to fully start up and calibrate before it takes that first reading.
Anyway, I hope that helps others that might try to build the Blimpduino project from scratch. I'll compile all these into a final document or something eventually but thought I'd pass along my findings, problems and fixes as I get them resolved just in case it helps someone else.
Feel free to ping me if you are trying and having problems - I've learned a lot in this process about how to implement this project but also programming AVR and working with the sensors and I'm happy to help if you are running into problems.
I've designed a new gondola for the Blimpduino I'm working on. Wanted to shave some weight and add some fixtures to connect the Lego parts and servo to.
I'll upload the finished design to Thingiverse when I've finalized and made sure it works well with the actual gas envelope.
I also completed a dry / test assembly of the gondola for sizing, layout and tweaking - looking good so far.
I've been working on building a new Blimpduino using the information contained within the site. I plan to post some updates, if I can, and clarifications for items that caused me problems, etc.
Current state of my build project is:
Hope there is still interest out there in this and I hope I can make it easier on the next guy - at least until someone updates or creates a new project with technology updates new since the last post.
This has been great fun and I highly recommend it as a project.