In the original configuration, the airswimmer is propelled by the tail fin, which can be flapped left-to-right using the remote. The whole fish can also be tilted up or down by moving the gondola, which holds the battery and receiver, forward and back along a rail attached to the belly of the fish. This combination of controls allows the user to move the airswimmer around in a fluid motion, which is quite pretty to watch. With some practice it is possible to get fairly accurate control.
My dot-on-the-horizon goal for this project is to build a platform for experiments in autonomous behavior. A balloon is quite an attractive platform for this, since the relatively slow movements make collisions far less dangerous than with, say, a quadcopter.
The main challenge when working with helium balloons, however, is the limited payload capacity. For this project, my mass budget is about 100 grams for the controller, propulsion AND battery. This was a large driver in the selection of technologies and parts, and led me to select a small, 600 mAh LiPo battery to power the whole thing.
I also wanted to use the Arduino toolchain because of the easy availability of a large selection of libraries, but a standard Arduino is way too big and heavy. So I decided to develop my own, minimalist board, which ended up holding only 11 components: 6 resistors, 2 capacitors, an RF12B 433 MHz module, an Atmega328 microcontroller and a LB1836M motor driver IC. The PCB is designed in EagleCAD and produced using the UV-exposure method.
The firmware running on the on on-board controller is pretty simple. It simply sits there, waiting for messages to come in through the wireless connection. It handles simple commands indicating which PWM pin should be set to which value. The protocol can be expanded to include control of digital pins and even reading analog values (which can then be reported back to the ground station), but the current implementation does not support this.
When stripping down the airswimmer, I discovered the tail fin and gondola are moved by two identical small DC motors. I decided to repurpose them to directly drive a couple of small propellers. While the shaft-diameter is a not a common size, I was able to source a small supply of 50 mm props that had the right size hole. The motors are rigidly connected to each other, and can be tilted up or down by a servo.
The ground station is a Nanode, which is an Arduino clone which replaces the USB connector of the original with a standard ethernet port and a Hope RF12B wireless module. The nanode provides a REST-API to control the shark, meaning requests take the form:
http://192.168.0.101/1/pins/[motorid]?value=[0-100]
where [motorid] is either lprop, rprop or servo, and value can be anything from 0 to 100. With the prop motors, this value indicates their PWM percentage. With the tilt-servo the value indicates the position within the full allowed range.