Is this the quadrotor week? :-)
Hi all, on Christmas holidays I have started my DIY project to construct a cheap (but good performance) quadcopter based on ArduIMU hardware only.

I have used standard props (NO counter rotating) that are easy to get and if we want construct the quad on other size you have no problems finding the right prop. To compensate for torque I mount front and rear motor with a small angle (about 6º, see Photos). I first use this concept on this project ( six years ago!!...

Size: 64cm (motor to motor). We can dissasembly front and rear arms with one screw (easy transport)
Weigth: 850g
4x TowerPro2410-9T+ESC18A+Prop1047 combo 4x$15 = $60
3S2200 Lipo Batt = $13
Aluminium and building materials = $12
ArduIMU = $99
Full: $185

Note how small seems the ArduIMU PCB on this quad! and how clean is this setup. We can construct really tiny quads this way and if we use standard props we have a wide range of motors and props to choose...

The first test I did on this project was the vibration test of the ArduIMU with motors running and with the new firmware (I use r20) there are no problems with this. Because we have 4 motors running there are more noise on accelerometers (it´s normal) so I added a new low pass filter on the accels and also adjust the gains for drift corrections...

The main loop with IMU code and PID controls for roll, pitch and yaw runs at 70Hz and the PWM outputs for ESC´s have a 125Hz rate. As always, adjust the PID gains is a very important task . D term is really important for a quad and I am using directly the raw gyro readings (bias corrected) to feed the D term in order to make it more responsive.

The most difficult part was the developing of the function to generate the PWM pulses for the ESC´s because we need 4 PWM servo outputs with very good precision (1-2us) and at a high rate (now is 125Hz).
This code generate more than 10,000 interrupts per second (only ADC generates more than 8,800) so in this enviroment is difficult to generate precise pulses.
The solution was to use the Timer2 overflow interrupt and a "trick" based on Timer 1 counter readings to achieve this high precision. I have also one (or two) more standard servo output for future applications (camera stabilization?)
The radio input is done via the ICP pin and interrupts so high precision is achieved (1us). We need to feed a PPM signal (directly from Rx or via the new Jordi´s PPM encoder...)

On the future we can use the magnetometer of ArduIMU, but now the yaw is like having a Heading hold gyro (note that quads have slower yaw response than helis)

This is the first stage on the development process of this project but I have made some tests with good results.

-More tests, outdoor tests...
-Add ArduIMU magnetometer to correct yaw drift
-Add GPS for position control...
-Add Ultrasonic rangefinger for automatic take-off / landing...
-Add camera with stabilization...
-Find time to all this projects... :-)

Here is the code and some notes:
Some link to photos: Photo1,Photo2,Photo3,Photo4

Jose Julio.

Views: 37720

Comment by MANGIRDAS on May 1, 2011 at 10:10am
So in thepory speed controler need only main power from battery, 3 wires to motor, and one pwm from controler. red wires and black is not needed it this case? i was just intrested if esc can be powered from main power suply, and it dnt need "to power again" :)

one more short question. 3 wires to motor from esc. does it mater to motor which wires goes where on motor?
Comment by Mulyadi on May 8, 2011 at 6:21pm

hai. how to program arduIMU? can you teach me? thanks.. :)

Comment by Josu Berriatua on June 15, 2011 at 3:16pm

I have a Tx JR 388 (2,4 Ghz FRSKY) and Rx FRSKY D8R v2 with PPM at ch8. In JR channel order is 1Throttle 2Aleiron 3Elevator and 4Rudder, and I changed the reading order of the receiver in the code:

      //ch1 = RxGetChannelPulseWidth(1);   // Read radio channel values
      //ch2 = RxGetChannelPulseWidth(2);
      //ch3 = RxGetChannelPulseWidth(3);
      //ch4 = RxGetChannelPulseWidth(4);
      //This order for JR
      ch3 = RxGetChannelPulseWidth(1);   // Throttle
      ch1 = RxGetChannelPulseWidth(2);   // Aleiron
      ch2 = RxGetChannelPulseWidth(3);   // Elevator
      ch4 = RxGetChannelPulseWidth(4);   // Rudder

but can not get work. My Rx latency is 18ms I think. PPM and chain with 7 channels as well:

Should I change something else to get the signal from the Rx to my ArdIMU?

Sorry for my ignorance, but I want to learn about this board and its code. Thank you in advance who can help me.

Comment by MANGIRDAS on June 26, 2011 at 2:23am
Hey. I have Some old stuff Dynam Racon 6, with Dynam R-6P receiver. So i need some additional PPM encoder for connection to aruiMO? or i just can change receiver? please suggest :)
Comment by chaiyachat on August 4, 2011 at 6:05am

why my rx value from 8ch ppm encoder not Correct. I use receiver futaba r617fs .I connect receiver to 8 ch ppm encoder v.2 and board arduimu v2 follow instructions. I Measure the signal output of the 8 ch ppm encoder is shown picture

the signal output of the 8 ch ppm encoder


please help me

Comment by Carl on January 10, 2012 at 5:49am

Hallo. i have a question about the sketch. can i test it on pc via terra term or arduimu test? or is their a version were it is possible? thanks

Comment by Bhaumik on March 20, 2013 at 10:38pm

Is your code usable in ArduIMU v3 without GPS..?

Comment by thamarai on July 10, 2013 at 1:21am

hi fnds,can i get the components names for building this...thanks in advance


You need to be a member of DIY Drones to add comments!

Join DIY Drones


Season Two of the Trust Time Trial (T3) Contest 
A list of all T3 contests is here. The current round, the Vertical Horizontal one, is here

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service