Airframe
I'm starting this project log in the middle of the fun -- I had no idea just how far out of control this would spiral, but I plan on riding it all the way to the end.
My first iteration was fully 3D-printed. This was a huge success in that I learned CAD (I started with FreeCAD, moved to Solid Edge, then Fusion, then back to FreeCAD). It meant the parts all fit together precisely and the wings were a real airfoil. I added washout, and a slight negative camber on the tail. The downside to 3D printing everything is obvious in retrospect: iteration time was terrible, and the maiden flight lasted about 3 seconds, concluding with the airplane in about one million little pieces of PLA.
In an effort to make crashes less punishing, I started over completely on the airframe, building out of whatever I had lying around -- a piece of unidentified wood and some EPE foam. The 3D printer is still incredibly useful for building parts for things like mounting servos and holding the foam to the spar or fuselage.
This plane's first test flight ended up in a nose dive because I still had much to learn about balancing the aircraft's center of mass, but the plane survived the crash with no real damage. In that regard, it was a massive success. After tweaking the tail and fighting tooth and nail to move the center of mass forward, the next flight went much better, lasting a full 6 seconds before crashing at the bottom of the hill. Sarcasm aside, I was extremely pleased with the fact that I had good stability, plenty of roll authority, and a nose-first glide instead of a graceful backflip.
Electronics
I took one look at standard RC transmitters and decided I didn't want anything to do with those prices (I'm aware now that there are cheaper options available, but at the time, I figured I'd have to roll everything myself).
My receiver is based on a cheap Arduino Nano clone with a ATmega168. The radio module is the HC-12, which I'd heard could reasonably be expected to get a good few hundred feet of range under typical conditions with a quarter-wave whip. Servo/ESC control is bit-banged PWM on the 168, the first real AVR/Arduino program I've ever written. The transmitter is much more cursed: the HC-12 on the transmitting end connects to a USB-serial bridge, packed into a cute little 3D-printed enclosure which plugs into my laptop. A small program uses SDL2 to read joystick inputs and send them out the serial port. It worked fine, and it was cheap, but it meant I had to have my laptop and a joystick wherever I wanted to fly. Let me tell you, it's hard to throw a plane while trying to control it with a desktop joystick. I replaced the joystick with an Xbox controller to at least make it handheld, and while it improved the situation, the laptop is not ideal. Not to mention no tactile throttle feedback.
Just a few weeks ago, I discovered the ESP32 and it changed my life. It's just as cheap as buying a completely outclassed AVR MCU, it has wifi and bluetooth built in, you get a full-on RTOS instead of a bare-metal environment... suddenly I understand what all the fuss is about, and my only regret is that I haven't been using this thing for all my projects.
This leads me to the upgrade I'm most excited about: rebuilding the transmitter and receiver based on the ESP32 instead of AVR. The new transmitter will finally ditch the laptop: the transmitting ESP32 connects directly to the Xbox controller via BLE and talks to the radio module via UART or SPI. The receiving ESP32 then talks to a ATmega48 I'm using as a budget PWM driver using a very similar bit of code to the old FC. This upgrade opens up a lot of potential improvements, namely PID stabilization and detailed telemetry with battery level, signal strength, IMU data, barometric altitude, etc. and I can display it all on a 1" OLED attached to the controller in a 3D-printed enclosure. And since I already had the game controller, the whole transmitter will probably run me around $10.
Josh Hyatt