Thursday, September 14, 2017

Converged Quadcopter-Helicopter Device

Thanks to importer, I use it on my direct-drive, sub-250-gram helicopter for IOT/MQTT research. Works OK so far. See attached pictures. 3S 11.1 volts lifts the 260 gram heli at about 50% throttle , 1504 ms pulse for 1000-2000ms range PWM. The fuselage is Blade 185 sized heli, tail boom is from 250 sized heli, main rotor blade is 230 sized and hollowed and trimmed to 9 degrees attack angle. The main grip itself is biased to plus 2 degrees attack angle. Tail motor is dys 1306 2300kv, tail prop is bull-nose cut from a 5040 prop. This tmotor is presumably the lightest, most efficient motor for this weight class in US market, and no other motors at 50 gram has such 250 gram lifting power at such efficiency. Time will tell if it lives up to the specification though.

Once the main blade will be replaced with quadcopter 1855 or 2055 propeller blade, the convergence will be complete. The result is lower cost combination of either quad copter or helicopter. The helicopter fuselage is cheaper, at less than 9 dollars. The quadcopter tail motor and props are cheaper. The main motor without gears without mounts is cheaper with quadcopter than a helicopter motor with gears and mounts. Main blades price is the same between quadcopter and helicopter. The overall single main drive is a huge cost reduction than 4 full sets of main drives that is basically 4 times the cost of a quadcopter. This is basically a poor man's multirotor system. The complexity of the system is about the same as a quadcopter with folding blades. Either this helicopter or quadcopter with folding blades have exactly 12 moving parts per craft.

Sunday, August 6, 2017

Keeping Your IOT Drone Under 250 Grams

Nothing requiring government registration can become mass consumer product

So are drones. Helicopters offers better hover duration than quads. But, Blade 200S is moving away from the 250 gram realm of Blade 200SRX. Luckily there is a quick fix. Use Blade 200SRX and common quad parts on top of the 200S body. And I reduce it to 236 grams. The weight reduction is 1.7 grams from common quad components tail section, 1.6 grams from home-made ESC-BEC, 3.6 grams from Xtreme 8-degree blades, 3.4 grams from EC2 2mm banana plugs, 2.3 grams from Microheli main shaft, and 2.1 grams from removing battery strap and jacket. The 200S body gains 2.3 grams . CC3D Revo Flight board with FS-A8S receiver make the electronics reduces 0.2 grams weight from stock AR636H +AS3X .
246.6 - 1.6 - 3.4 - 3.6 - 2.3 - 1.7 - 2.1 - 0.2 + 2.3 = 234.0
Comparison to stock components follow,

256.8 - 22.8(stool) = 234

202.1 + 68.9(battery) - 24.4(stool) = 246.6

Breakdowns of the weight loss

The tail weight is 2.6(fin+screws) + 17.5(motor+mount+wires+screw+prop) + 3.8(boom) + 0.7(female part of 2mm EC2 banana plugs) = 24.6 . The stock tail weight is 1.9 (fin+screws) + 17.9 (motor+mount+wires+prop) + 2.9(boom) + 2.5(support booms) + 0.4 (horizontal fin) + 0.7 (male servo plug not pictured) = 26.3 .
The kit has a standalone shaft tightening bolt (upper left corner). But the kid does 
not need prop holder because the push configuration presses prop down.
Stock does not have separate tightening bolt.

Second layer breakdown of the motor+bracket+wires+screw+prop in the tail section follows.

Prop is 0.2 grams lighter in my modification. Motor is also 0.2 grams lighter then stock.

ESC without main banana plugs is 16 - 0.7 = 15.3 . Stock ESC without main banana plugs is 19.4 - 2.5 = 16.9 .

Xtreme blade has hollowed body underneath the decal skin.

EC2 2mm banana plugs is less than 1/3 the weight of stock 3.5mm banana plugs

Carbon fiber main shaft is less than half of stock steel shaft.

Battery strap and jacket removed from stock configuration

New 200S's body gains some weight

Here the retail AR636 is 11.5 . CC3D(8.8)+A8X(2.5) is 11.3 .

. And CC3D settings follow,

. The bug in CC3D prevents me from using vehicle type "FP" fixed-pitch. If I select FP, INPUT in the flight data tab is put in orange, vehicle not flyable.

Sunday, July 16, 2017

C Programming Raspberry Pi MQTT Drone PWM

Drones commonly require real time programming because a split second control delay of a tail rotor can mean 180 degrees difference of a helicopter's heading.  For this reason, flight controller programming is often done with C language on a micro controller, where control logic can be optimized on a per-CPU-instruction basis.

However, a new trend has emerged to use Raspberry Pi Zero as a robotic controller to take advantage of the ubiquitous Linux programming, which the OS hides the underlying custom circuitry of micro controllers and presents the abstract programming interface to the programmers so that a program can be portable between different hardware systems. Adafruit has many tutorials focus on the Python library for the I2C devices. But, again, few resources provide the comprehensive view of the requirement of real time C programming. So, as soon as I found a hint of a C library controlling I2C servos, I have to jump in and test drive its performance.

The solution is . Steps I took:
  1. "Burn" SD Card with 2017-06-21-raspbian-jessie-lite.img , which is public downloadable from raspberrypi official site. After first powering on with the "burned" SD, wait for the disk expansion to finish in a few minutes while green LED light busy flashes.
  2. Wire up as the following diagram, 
  3. The usual IP connectivity chores. First thing is to get UART access through USB-FTDI adapter. Raspberry Pi Kernel side needs "enable_uart=1" in /boot/config.txt . To do so, insert the SD in to my PC to mount it .  
  4.  Then try to get IP access. Comment out the wlan entries in /etc/network/interfaces , and replaces it with my AP access credential,
    auto wlan0
    iface wlan0 inet static
    wpa-ssid "pc36000"
    wpa-psk "A...."
    Then, systemctl enable ssh , and reboot. Once IP SSH access is successful, apt install vim , and comment out the "enable_uart=1" .
  5. apt-get install git-core
    git clone git://
    cd wiringPi/
  6. git clone
    cd pca9685/src/
    sudo make install
  7. cd; mkdir mqtt-pizero
    cd mqtt-pizero
  8. vim servo-check.c ; The content follows,
    #include <pca9685.h>
    #include <stdio.h>

    int calcTicks(float impulseMs, int hertz)
    float cycleMs = 1000.0f / hertz;
    return (int)(4096 * impulseMs / cycleMs + 0.5f);

    int main()
    int fd = pca9685Setup(300, 0x40, 50);

    float millis = 1.5;
    int tick = calcTicks(millis, 50);
    pwmWrite(300, tick);

    while (1)
    millis = 1.8;
    tick = calcTicks(millis, 50);
    pwmWrite(300, tick);

    millis = 1.2;
    tick = calcTicks(millis, 50);
    pwmWrite(300, tick);
  9. gcc servo-check.c -o servo-check -l wiringPiPca9685 -l wiringPi
  10. apt install i2c-tools
  11. sudo vim /boot/config.txt ;  uncomment the following line,
  12. sudo vim /etc/modules; content follows,
  13. sudo vim /etc/modules-load.d/modules.conf; content follows,
  14. sudo sync ; sudo reboot
  15. Once rebooted, check i2c device is at 0x40 by gpio readall ; then cd mqtt-pizero/ ; ./servo-check