We’re really more programmers than designers/fabricators, however that’s a big part of this undertaking. We have to fit several parts on it, first of all of course the motors. As well as an Android phone, Arduino board, battery and other electronics.
To do this we have sketched the entire thing using SketchUp. To make it look cool be used the Star Trek “Prometheus” shape as a base, which is described as “the fastest and most innovative vessel in Starfleet” – StarTrek.com, which seemed like a pretty good starting point.
To fabricate this we cut the shape from 3mm aluminium and lined it with plastic (to avoid cutting ourselves and hide the ugly cuts we made).
As explained in the first post the copter is controlled from an Android phone, to be able to do this we need communication between the Android phone and the Arduino board over USB. The biggest step in this part is describing how commands should look like and all the possible commands so we can separately start coding.
First of all, the format of a request, there are five main parts: opening, identifier, command, data and closing. With these you can track a buffer where you can start tracking a new incoming command en detect when it is finished transmitting. The format we chose is as follows:
The open tag is “<<<“, then the request is identified by an integer consisting of two characters “ii”. Then a three character command “XXX” followed by the data in a query string which is exactly as a query string used on the web (only not escaped with html entities) and closed by “/>>”.
The next step is to define all possible commands, we might have forgotten some, but the current list of commands is:
- ACK – acknowledgement of receiving a command, where the identifier is the same as the incoming command
- STA – request to send a status, response with INF
- INF – response on STA with all kinds of information on the copter
- TOS – start take-off sequence
- DRP – drop from the sky, in other words: “please land”
- MOV – change direction of the craft, with in the query string dx, dy and dz parameters
- HVR – hover stationary
- DIE – kill switch, just drop dead and turn of the motors
- HEY – notification from the Arduino to tell something, like warnings, errors accompanied by a message
- DWN – message from the Arduino to Android to let it now it has finished landing
- DEF – request for definition of the copter, the copter will house the public and private keys for the Android phone to communicate with the web (mainly because the Arduino programmer is the same as the webprogrammer)
- MOI – response to DEF request
- CAL – request to calibrate the copter
- REP – calibration report
- OBS – notification that the copter has hit an obstacle and refuses to go straight on
That’s it for now, quite a lot of work still to be done, but I think we’ve covered a lot of possible situations we might run into.
The first parts we bought were three sonars (Ultrasonic Module HC-SR04 Arduino) and three Turnigy motors (D2830-11 1000kv Brushless Motor) all from Hobbyking.
To be able to tell if we’re flying into walls and having an idea of the height we’re at we needed some sensors. There are a few methods to do this, one is using lasers, another using a camera and a third was : Sonars. Everyone of them has some advantages and disadvantages. Lasers we had no experience with and what we could find are quite expensive and hard to implement. Using simply a camera would be cool since you could extract much more information about your surroundings. However we would need several pointing in all kinds of directions as well as programming something like that is not what you call easy. The third options was sonars, we chose these since they’re cheap and easy to implement, the HC-SR04’s come with their own logical circuit which ables you to use several libraries. The downside is the range, experiments we did using the sonars yielded a real-life precision up to about 3.5 meters, which isn’ts that much. But we’ll see if it’s enough.
On some forums we saw these motors being used quite often for tri/quad-copters, so they’ll probably work. Havent really experimented with them yet.
So we’re starting a new and ambitious project: An autonomous Android-Arduino powered web-controlled Tricopter.
In short, this is a tricopter that will get its directions from the web, will process them using a internet connected Android phone which will send commands to an Arduino board which controls the motors.
Our goal is to be able to provide some coordinates and the tricopter will go there. As simple as that.
We have some big hurdles to take but we’re excited to work on this. We’ll keep you posted on this blog and in the meantime you can check the development branches on the following repositories:
Nick & Joris