TinyRC: So many more tiny improvements, and it's finally done


    Version 9.5. I have made it to version 9.5 and I think this is good enough. By which I mean I can still think of plenty of things that could be improved but this does everything I want it to do and there are no obvious major flaws. I've been working on this hobby project for more than three years now and I'm very ready to be done.

Things that I have recently improved:

Power

  • My previous complete prototype car had all the basic functionality I needed, but the drive motor was incredibly weak. It wobbled along at very low speed and didn't turn well. That was because I was only supplying 5V to the motor. I was using a 1S battery combined with a battery charging/control board that boosted 1S voltage to 5V.
  • I decided to switch to a 2S battery which provided ~8.0V and that certainly made the motor happier, but then I had to deal with a 2S battery. I couldn't find a nice compacy all-in-one 2S battery controller like I had for the 1S setup, so I needed a buck regulator to reduce 2S voltage to 5V for servos, lights, and CPU, some way to charge the 2S battery from 5V USB, and ideally I also wanted a balanced charger that charged the two cells separately. And that was just a lot of stuff to cram into the vehicle, especially when power electronics has always been one of my weakest areas of expertise.
  • So I went BACK to a 1S battery and the same terrific 1S/5V battery controller as before, but adding in an off the shelf boost regulator that could provide 9V for the motor. That arrangement is working beautifully.
  • I also added in a voltage divider that lets me read battery voltage through an analog-in pin. I plan on having the headlights flash when battery voltage gets too low.

Control Electronics

  • I added an externally-reachable boot select button to the bottom of the vehicle so I could easily reprogram the Raspberry Pi Pico without having to disassemble the vehicle body.
  • I remembered that USB-C can be plugged in in either orientation, so I needed to solder the USB 1.0 data +/- lines to two pins each so they could connect in either plug orientation.
  • I tap into the battery controller USB-C connector's 0.5mm pins with 36awg magnet wire. It's quite a pain to solder. But after getting it connected, I realized I also need to isolate those wires from noisy or inductive components inside the car, otherwise I can't get a reliable data connection.
  • Several times now I've made new PCB revs where I moved GPIO pins around and I didn't bother to check whether or not I was double-using PWM channels. The Raspberry Pi Pico has 28 GPIO pins and you can configure any of them as PWM, but there are only 8 PWM generators so each generator is connected to several GPIO pins. That means if you initialize two GPIO pins with PWM functionality and they're both connected to the same PWM generator channel, they're both going to output the same single PWM signal. So I manually rewired one signal on PCB v9.5. If I order another rev I can fix this.

Vehicle Body

  • I redesigned the fenders so they wouldn't grind up the extremely delicate headlight LED wiring.
  • Then I combined the fenders and vehicle body into a single piece and also moved the headlights onto that single piece.
  • Then I realized the headlights were better off attached to the vehicle baseplate, not the body, so I moved them back. If I attached them to the body, then I can mount the body in either orientation since the vehicle is symmetrical and I always forget to check which direction is which so the lights end up being backward 50% of the time.
  • The headlights are still a pain to assemble, just because they're so close to the exterior of the body, with just a single nozzle thickness of printed plastic (0.4mm) surrounding them. It's very easy to tear or crush the magnet wires that connect the headlight LEDs. I wish there were a way to make this easier to assemble and more durable, but there's just so little room surrounding them that I can't think of a better way. Maybe lightpipes? Bury the LEDs farther inside the body? I'll think about it.
  • I found M1.6 flathead screws that are designed to be self-tapping in plastic on McMaster. Hallelujah. That lets me increase ground clearance as well as making it easier to mount some components inside the body.

Drivetrain

  • On the last vehicle I found that the baseplate wasn't quite flat and one of the tires wasn't touching the ground, which ruined traction. So I added in a simple passive suspension. On the undriven end of the vehicle, I allowed the wheels to rock back and forth around a pin joint so those wheels can naturally follow the terrain.
  • I found some TPE filament with shore hardness 75A which grips much better than the 95A I started with. I also redesigned the tire geometry to have narrower treads which improves grip further. The only downside is that the softer filament turns white on the areas where it bonded very strongly to the printer buildplate, so I might tweak buildplate temperatures a bit and see if I can improve that appearance.

Software

  • I added in a jerk limit to improve wheel traction further. When I push the controller joystick quickly all the way to the end, the drive motor speed increases at a fixed rate, rather than jumping directly to max.
  • I fixed soooooo many bugs, especially related to properly switching signals when changing vehicle direction.

Case

  • Since the toy car this whole monstrosity is copied from comes in a clear plastic display case, I built a clear plastic display case to house my RC car. I don't like working with acrylic, but it turned out pretty well. I need to redesign it, replacing hold-down screws with friction clips, placing the controller at the end of the vehicle instead of on the side, using acrylic cement instead of superglue, so many small improvements to make here. I'll make one more rev of the case and say that however that one turns out, that's good enough.


    I don't know if this is the end of this project, I have plenty of new ideas in my head and written down about how it could be improved further, but I'm going to step away from it for at least a while. It works. It does everything I want it to do reasonably well. I can leave it sitting on a shelf for a while then I can open the display case and take out my car and controller and drive it around anytime I like and I can recharge or reprogram both car and controller with a USB-C cable without disassembling them. Steering, drivetrain, and lights all work pretty well now. The drivetrain still needs a little bit of manual tuning when I set it up, but once I get it tuned it seems to stay that way. So now I'm planning on making several of these to give to a few people. I'm sure I'll find problems as they age, but for now they appear to be good and I'm going to try to leave them as is.