Arduino Based RC Remote Control and Compact Receiver, version 2

This is a rendering from Easy EDA. I’ll upload pictures when I get the latest version assembled.

This is an updated version of my previous Arduino based remote control transmitter and receiver. The previous version was based on the Arduino Nano. I found that every time I ordered more nano boards, something would be different about them. They would have a different boot loader, a different variant of the 328P chip, or a 328P counterfeit. This led to a high failure rate and a lot of troubleshooting. Also an Arduino nano on pin headers is rather large. My solution was to but the Atmel 328P chip by itself and solder it directly onto the PCB.

What It Does

I designed this receiver specifically for combat robotics. It would also work nicely for an RC car with some minor programming changes. It has 2 H bridge motor drivers built into one IC. It is ideal for robots with two independently controlled wheels. The default configuration in the firmware is for each joystick to control each wheel. I find this is easier to drive than a single joystick. There is also 2 separate output channels on a pin header that can be used for a servo motor and a brusless ESC. On the Servo motor channel the power pin is fed from a separate L7806 voltage regulator with a 100μF capacitor to give the servo motor plenty of torque without bogging down the micro controller voltage. It is designed for a 3 or 4 cell Lithium Battery. The main limiting factor with input voltage is your capacitor voltages. The board is 40mm x 60mm. It’s only about 8mm tall.

Changes and Improvements

  • All components except the H Bridge driver are surface mounted. This makes for a flat, monolithic board that is easier to mount inside of a robot. The smallest part is the QFP44 micro controller. Everything can easily be hand soldered, or it could be ordered as an assembled unit.
  • Switched from an Arduino Nano to a really small Atmel 328PB in a quad flat pack IC.
  • Added an M3 stud and M3 screw that functions as a switch. This is a requirement for combat robotics and having it on board eliminates a lot of wires inside the bot. This is also a lot cheaper than a separate screw actuated switch, and it saves some weight.
  • Switched to a DIP packaged H Bridge. It is cheaper than the larger H Bridge in the last design, it’s smaller, and it’s perfectly adequate for 1Lb antweight robots.
  • Upgraded to a much larger L7806 voltage regulator for the servo motor output. The last version was undersized. When used to drive a servo for a flipper, this makes the servo much more powerful.
  • Switched from a standard NRF24L01 radio to NF-03 made by Ai-Thinker. This radio is smaller, surface mountable, a lot more reliable and better in every way. The main chip in this radio is something other than the usual NRF24L01 from Nordic, but it seems to do function exactly the same, with the same RF24 Arduino library. It can talk to other NRF24L01 radios, but the range will be less. I have found that the AI-Thinker radios also have amazingly better range than the NRF24L01.
  • Added two 3mm mounting holes. Also because there’s no components on the bottom of the board, it’s a lot easier to fit inside of an enclosure.

Flashing the firmware

To flash the firmware you will need an extra Arduino Uno with the Arduino as ISP sketch loaded onto it, and some DuPont cables. In the example sketches in the Arduino IDE You’ll see an example sketch called “Arduino as ISP.” Flash this to your Arduino Uno like you normally would and follow the instructions in the sketch for the wiring up your DuPont cable to the remote receiver board. For the receiver’s micro controller You can use an Atmel 328P chip, or the Atmel 328PB. I prefer the Atmel 328PB because it has more GPIO pins, and it’s cheaper. You may notice that there is no crystal on the board. You’ll need to use the 328’s built in oscillator. The only way I know to use the internal oscilator and the 328PB chip is to use the Tiny Core plugin for Arduino. This third party library is a must if you use the 328PB. You’ll need to add it to your Arduino IDE using the Boards manager. See Tiny Core’s GitHub for instructions. Once you’ve got Tiny Core installed, You’ll need to select the Tiny Core board, 328 processor, 328PB variant, and built in 8Khz oscillator all in the tools menu. Once you’ve gotten this far, you will need to burn the bootloader to your 328PB chip. Under tools, select programmer, “Arduino as ISP.” Then you should be able to press “Burn Bootloader” under tools and burn the bootloader. Once that’s done, you can upload your firmware by clicking on: “Sketch, Upload using programmer.” If you press the button with the arrow to upload your sketch like you usually would, then you will upload the Remote control sketch to the Arduino Uno instead of your RC receiver board. If you do this you will need to upload the Arduino as ISP sketch to your Uno again.

Download Links

I don’t like to share Gerbers because they can’t be modified. You can generate your own Gerber by importing the following .JSON files into Easy EDA.

Arduino firmware:

Updated Remote Control

This image is the first version. New Image coming soon.

I made an updated remote control. It is fairly universal, and it has more input devices than you’ll need. This updated version uses an Atmel 328PB in a QFP-44 instead of an Arduino Nano. For a battery it uses a small 2 or 3 cell Lipo battery instead of Lipo cells in battery holsters on the back. This is a lot safer. For the radio, you’ll want to get an AI-Thinker NF-01-S. It looks identical to a regular NRF24L01, but its vastly improved. You can use a regular NRF24L01, but the AI thinker radio in the receiver will have a hard time receiving the radio packets and the range will be dramatically reduced.

Remote Controller Download Links:

Arduino Firmware: