AludrACopter Project:I started my analog 5-DOF modular IMU research and testing in January of 2009. I don't know much about electronics. I researched on op-amps and how to use it to create an analog computing device to do calculus integration of gyro signal then combine it with accelerometer signal. I also incorporated a multi-turn potentiometer to enable adjustable mixing of gyro and accelerometer.Then from February until April, I researched on a heli platform and assembled it. I chose a Furion 450 and some handpicked electronics accessories (I still don't know how to fly it but I could hover a little). My previous microcontroller at the time was a ZBasic but it only has 2 PWM pins (however, capable of several multi-tasking). To control a helicopter I need 4 servo signals. So I decided to change to Arduino for its multiple PWM. However, I didn't know how to program in C and Arduino cannot really do software multi-tasking.In May, I finished creating a digital version of the analog modular IMU. The device spits out tilt angle via serial communication. That means that it could send it to any device that could communicate serially. That makes it really easy to transfer it to any vehicle platform like airplane, car, heli, balancing robot, etc.June 5, 2009:I connected the Ardupilot board to the RC receiver and servos. Then I connected the 5-DOF modular IMU that I made to communicate serially with the Ardupilot. I didn't do a flight test yet because it's already 2am and I don't want to fly it inside my bedroom... =)It's capable of compensating for tilt so far but I still haven't written the code for the PID...Actually I'm thinking of creating a "learning" PID... I still have to sort out the theory in my head...Check out the pics and video in my profile.June 6, 2009:Flight test! The code is from scratch except the hardware PWM that I copied from Ardupilot code. The loop samples aileron (right servo) and pitch (left servo) signal from the transmitter. 5-DOF IMU module sends serial tilt angle to the Ardupilot board. Proportional control in respect to tilt from the IMU and controls the servo to change cylic head of the heli to align itself. I was not able to lift the heli off the ground because the heli started jittering left and right as I increase the throttle. I think that the gain for the control is too high.I reduced the gain and tried it again but the left servo kept on twitching therefore making the heli jump an inch or so erratically. I checked the code and found out that the pulseIn is not capturing an accurate signal from the receiver. I am very disappointed because the resolution of pulseIn is not enough.June 7, 2009:To see if it's going to be able to leave the ground, I remove the pulseIn command line and permanently set both left and right servo to a decent collective pitch to give the blades enough lift. The heli was able to lift off the ground about two inches or so for few seconds. However it kept on circling (about 1 foot radius). I think that it has something to do with the IMU's "center" calibration. The IMU's center is not aligned with the heli's vertical center of gravity. I think I could fix this issue by hanging the heli by its rotor head and calibrate the IMU from that position. Or I could connect a switch to one of the channel to trigger the IMU to calibrate when the heli is in perfect hover during manual control. I will probably do the "hanging" technique first.June 10, 2009:Considering pulseIn wouldn't work in capturing the pulse signal from the receiver, I've been reading Atmega datasheets on how to use hardware timer1's higher resolution to measure the throttle's signal.The throttle signal tells me where to set the starting point for both servos. So far the datasheets and instructions on how to use the timers are so cryptic and stressing me out! These past few days I've been studying how to do bit math as well considering I would like to tweak the microchip's registers.
Read more…