Skip to content

MyRCCar Arduino Surface Radio for RC Car / Bike / Boat. "BigBoy" Multi Channel Radio Control System, including Transmitter and Receiver

Advertising
Advertising
?
Creation quality: 5.0/5 (1 vote)
Evaluation of members on the printability, utility, level of detail, etc.

  • 5.7k views
  • 7 likes
  • 8 downloads
  • 3 collections

License
3D design format
ZIP Folder details Close
  • MyRCCar_Arduino_RC_Surface_Transmitter_and_Receiver.zip

Learn more about the formats

Publication date 2021-05-08 at 20:10
Design number 422249

3D printer file info

3D model description

https://youtu.be/m5H8ZL3efo0

https://youtu.be/VcryeB61UpQ

Shocks, Wheels... maybe you expected that but... also the radio 3D printed? :) Take a look!
FEATURES:

  • Arduino based, very customizable
  • Throttle feel like standard radios
  • +-60º Steering wheel
  • Muti-Channel RF thanks to nRF24L01 Modules
  • Use any 1/10 On-Road RC Car Wheel or a 3D printed one for the Steering Wheel
  • Works with 6xAA batteries or LiPo 18650 cell + boost-up module
  • Not high level electronics, no special PCB required, most of connections with dupont cables
  • Plug your Radio or receiver to your PC and re-configure many things quickly

Maybe you ask yourself why is it called "BigBoy"... My hands are quite normal-big and the radio is a little big for me... I think is the right size for my uncle, who has sausages instead of fingers... The same way, as it can be delicate if you don't solder the wires it is not recommended for kids, but you will need the passion of a big boy to get involved with this instead of buying a 17€ 2CH radio system... Anyway you are advised, this can be even cheaper than those 2CH radios but full of possibilities :)

I have been taking a look to some existing projects in the web about RC Control with Arduino and I think they reached the point of offering quite good features for a very low price, but possibilities are really quite a lot.

So the main idea here is using Arduino Nano for both transmitter and receiver. There are many tutorials out there to understand how an Arduino works with a 2.4GHz RF module, in this case the nRF24L01.

Here I let you the links to the tutos/vids I used to understand and build this radio:

CHOOSING THE RIGH ARDUINOS

I have used two different Arduino Nanos for transmitter and receiver, but you will now understand the difference.

You can find the nRF24L01 module in various formats, being some more powerful than others, more or less complicated to wire. But there is a version of Arduino Nano that includes the RF module, that is the Arduino "rf-nano"... Mines are black and you can see the "antenna" in the other extreme of the arduino than the USB port.

For the receiver I chose this small Arduino rf-nano with its integrated nRF24L01 module. That way, you only need four "dupont" cables to supply the arduino 5V and Ground from ESC and the two outcoming signals for CH1 and CH2, one for the steering and the other for the ESC.

For the Transmitter, you want as powerful as possible version of the nRF24L01 module, that is the one with external antenna and a PA (Power Amplification?) included.
IMPORTANT: To avoid having to use small transistors or resistors etc, I decided to use the Adaptor module for the big RF module which supplies 3.3V to the antenna from the 5V pin of the arduino.

LET'S TAKE IT EASY

To make the build of the radio as simple as possible, I decided to do not use a main board, so there is no need of buying a special board with the soldering involved.
Initially you will need to make a lot of tests to know the arduino, the pots, maybe some joysticks, etc... You can connect most of these elements to the arduino just using some "Dupont" cables, mostly female-female ones if you are using an Arduino with soldered pin-headers.

The Transmitter has initially 2 channels, assigned to the Throttle Trigger and the Steering wheel, but you can add more, using digital or analog inputs in the arduino.

When you read an Analog input in the arduino, you will get a value from 0 (0Volts) to 1023 (5Volts). What you do with this data is up to you.
I added in the code a few more features that can be linked to a particular Analog or Digital input, as they are:

TH_TRIM (Analog In), ST_TRIM (Analog In), ST_AMP (Analog In), TH_REV (Digital In), ST_REV (Digital In).

If you don't want to control them with an external potentiometer or switch you can always set the fixed value you want in the firmware.

But the same way, you can assign any of those pots or switches to a channel, lets imagine a pot will be sent as CH3 (1byte value, from 0 to 255) and a switch could control lights On/Off in a CH4, sending 0 when Off and 255 when On, or whatever values you want...

ARDUINO "NOOB"?

I'm not any expert in Arduino IDE, the environement I use to create and edit the firmware, but there are many examples online with cases very similar to what you need.

If you are completely un-familiar with Arduinos, I try to resume it a lot: You tweak a little a firmware (text file), upload that firmware to your arduino and see what happens but, how?

Serial.print(whatever);
One of the best ways to see it is using the Serial Monitor in the arduino IDE, it will connect to the USB (Serial COMxx) Port it is plugged and read the info is being sent from the arduino to the Serial Port. In normal working mode, you don't need to send things to serial port. This will add a lot of work to the arduino you don't need if you are not "troubleshooting".

// Commented Code
You will see part of the code after those "//"... that code won't affect the program, is just for you to read or... a way to de-activate or activate some features. For example if you un-comment (erase those //) from "// Serial.print(data.Throttle);" the Throttle value will be printed in the serial port

A WAY TO PROCEED STEP BY STEP

If you are new to many of these things, I suggest you to take it slow and think twice or more each step.

1º You will need to connect a rf-nano to the USB in your computer, install the proper driver so it is recognized as a COMxx Serial Port, Open the Arduino IDE, Select the right COM port, the right Arduino Board type, and also the right "bootloader"...
2º Maybe you want to make some of the simplest tests for an arduino, maybe generate a value and "Serial.print(it) to the serial port so you can check with the Serial Monitor, or make the on-board led in the rf-nano blink twice in a second... So the main idea for this step is, you create a very basic firmware, upload it to the arduino and confirm it works...
3º There are many examples out there about simple arduino RF communication, for example one in which the receiver blinks if correctly receiving the signal from the transmitter. I would recommend you to buy 2 RF-Nanos and 2 normal Nano V3... that way you can start your first tests with two RF-Nanos, reducing the error posibilities a lot as no wiring is needed
4º If you reached this point maybe you are ready for my code... If you feel it a little wierd initially, maybe take some other simpler example, but basically the idea is read some of the analog inputs, prepare the value, store it in a data packet and send it "trough the pipe". I bought a pair of "2 axis and a button joysticks". I started connecting just one and seeing what happened. You can connect the joystick to 2 analog inputs, or maybe just one potentiometer to one analog input... You can "Serial.print(analogRead(A0);" to see in your serial port viewer what is happening while you move the joystick or the pot.
5º At this step you should be able to read an input, adecuate the value to 1byte (from 0 to 255), assign it to a "Channel" of the packet that will be sent, receive that packet in your receiver, take the value for that channel and "Serial.print(data.Throttle);" or whatever your "Channel" is named... So, move joystick in the transmitter and confirm it is correctly received seeing it in the Serial Monitor of the arduino IDE, connected to the receiver, of course!
6º If reached this point you consider that my code is better, just start using it, but probably you could also incorporate my "ideas" to your code... I'm talking about the way I manage the variables to use TH_Trim, ST_Trim, ST_Amp, TH_Dead, etc... But anyway, more important than this, at this step you should start using a normal Arduino Nano V3 with an external nRF24L01 module with its adaptor... Use some "dupont" cables to wire it to the arduino, and try to reproduce the previous experiments when needed to see you have same functionality. If your "normal" Nanos are like mine, I needed to install different driver for my windows but also select the (old) bootloader in the arduino IDE. The same way, i felt the USB port where you connect it to the computer must have enough "Amps" to correctly boot it up with the extra antenna consumption.
7º Now you should try to fit both the arduino nano and the wired antenna with the adaptor to the 3D printed Radio Transmitter back part. If you buy the same ones than me and they come with the same measures, you should be able to fit them in the places for them in the Radio Shell... The Arduino USB port should be accesible from the back part of the radio, and the leds and reset button should be visible/accesible from the top of the radio. For this step you could need to solder Ground and 5V of the adaptor board to some "half dupont" cable instead of using a dupont cable normally because they would hit the shell... maybe you can manage the situation just bending a little the Ground and 5V pins in the adaptor, but maybe you preffer to solder there the cable.
8º If you reached this point you now are thinking... but if I'm using the 5V and GND pins to power the antenna, how do I use those pins for my potentiometers?¿?... This is the only part where a PCB would help... What is what I did?¿? I cutted some dupont female-female black/white pairs by half and created a 5V GND multi-ouput octopus... you will need at least 5 pairs of 5V/GND... those would be for arduino, antenna, Throttle Pot, Steering Pot and a last pair for "top-plate" pots and switches... I just cutted, pealed, joined, gave a point with the solder and used some electrical tape to isolate.
9º By now, you can use your radio plugged by USB to something with Amps enough, maybe a 5V usb phone charger but... what about the battery?¿? After some reading, I decided to power up the arduino from a battery using the Vin Pin, which allows 7-12V input to the arduino... The easiest way to achieve this is using 6xAA batteries, but maybe also 6xAAA using some adaptor. The reason why the radio handle is so long is those 6xAA are just in two rows. I had a 4xAA battery box from some toy. This is from where I scrapped the "Negative pole springs" and the "positive" metal plate I used. The springs should be like 10mm tall and 5mm tall when compressed by the batteries. Their diammeter should be like 8mm and the spring wire diameter like 0.6mm... Probably you will have to do some magic here... Maybe some "Clips" can be of help... or some Staples?
10º If you are in the final steps of the radio building you should have your "Throttle Trigger Assembly" done... using a 10k pot you can start closing your radio shell... be sure the pot is working before closing it. If you think something is missing in the throttle trigger for it to work you are right! Those are the springs... which springs?¿? Clipper Lighter springs... They are like 35mm long in their natural position... designed to be compressed but we will use in reverse ;) They are less than 3mm in diameter. You should be able to make the radio work with the batteries without the top front part of the radio shell assembled... The same way you will need a 10x15x4 bearing... i hope you have some spare ones from one of your cars!
11º But now you realize you can only use a little range of the potentiometer this way... not from 0 to 1023 anymore... and you are right. You will have to start using my code or copy the idea to yours... The "idea" is to create 3 variables you must know... the TH_Center, TH_Min and TH_Max... TH_Center should be the value of the pot when the throttle trigger is in the center position... how can you know this? "Serial.print(analogRead(A0)";... and observe the values the pot generates in the center, min and max positions... My code takes those values to generate the proper throttle signal, which must be 127 when idle, from 127 to 255 when you accelerate and from 127 to 0 when you brake or reverse... The same happens to the values generated by the Steering wheel... The steering wheel rotates +-60º so you will need to "Serial.print(analogRead(A1);" and look for those min and max values for your steering wheel... once you have them, you will be able to make them be near 127 when idle using TH_Trim...
12º So... you have a calibrated radio, emmiting values from 0 to 255 for the throttle and the steering, which should be exactly 127 for your throttle and near 127 for your steering when your radio is idle... Time to go with the receiver! From your ESC, take the 3wire connector, plug a male from a male-female dupont in each of the 3wire connector, preferible Brown for GND, Red for 5V and orange for signal... Then connect the female of your duponts to the arduino rf-nano to the correspondant GND, 5V and A0 pins. Just with that, you should be able to control the motor with your Throttle Trigger, you should be able to accelerate, brake, reverse, etc, depending on your ESC habilities...
13º Now you want to connect your servo to the arduino but no 5V pin free... :( I solved it using some "servo connector duplicator cable" that came with some RC Car Lights to duplicate the GND and 5V signal for the servo... You should be able to solve the rest of the puzzle with maybe 3 extra dupont cables... or you can do the same i did for the radio, create an "Octopus" of GND and 5V for as much channels as you want...

As you can see, I am just providing the "bulk" version of the top plate cover... I think this way each one will be free to use the elements (buttons, switches, pots) in the number and size they want (and are able to fit). You will have to drill the holes where you want them, maybe cut some square holes with a exacto knife... or maybe you know how to do some "booleans" with some cylinders and boxes in some 3D editing software...

COMPONENTS YOU NEED, 3D PRINTED PARTS LIST, PRINTING TIPS, ASSEMBLY ORDER and CALIBRATING THE RADIO in the "Printing Details / Tips Technical Info Section"

3D printing settings

COMPONENTS YOU NEED

  • 1x Arduino Nano 5V 16MHz "Nano-Blue" Color (Recommended 2x, remember to do not solder the 3x2 pin-header, or un-solder it)
  • 1x nRF24L01 Module, the big one with antenna and amplifier "NRF24L01 PA" Color (Recommended 2x)
  • 1x Adaptor for nRF24L01, converts 5V to 3.3 for the antenna "Expansion board" Color (Recommended 2x)
  • 1x Arduino RF-Nano recommended, for receiver and tests (Recommended 2x)
  • 2x 10k potentiometers for Throttle and Steering (Recommended 5x)
  • 3x Smaller 10k pots or more for the Top Plate if you want
  • Dupont Cables Female-Female, Male-Female, Male-Male, 10cm or longer (Recommended 10cm and 30cm)
  • 1x 10x15x4 bearing for the throttle
  • 2x Springs from a Clipper Lighter (<3mm diameter, ~30mm long)
  • Spring and positive plate from AA battery box
  • Connected spring and positive plate from AA battery box
  • 1x Power Button (I scrapped mine from an old broken PSU)
  • 2x M3x25mm Shocket-Head Screws
  • 6x M3x16mm Shocket-Head Screws
  • 2x M3x10mm Shocket-Head Screws
  • 8x M3x8mm Shocket-Head Screws
  • 6x AA 1,5V Standard Batteries
  • 1x On-Road RC Car Wheel (3D printed or sourced)

3D PRINTED PARTS LIST

- Main Rear Top
- Main Rear Bottom
- Main Front Top
- Main Front Bottom
- Main Battery Door
- Main Control Plate Bulk

- Throttle Base
- Throttle Trigger
- Throttle Trigger Top
- Throttle Lever Backward
- Throttle Lever Forward
- Throttle Bearing Holder

- Steering Base
- Steering Axle_12mmHEX
- Steering Spring (2x)

- RF-Nano_Shell1
- RF-Nano_Shell2

PRINTING TIPS

In one of the drawings you will see all parts in ready to print position.
You will need a few little supports for the Main Bottom parts, for the Steering Axle and Trigger_Top, but you should be able to print the rest of them without supports
Most of the parts must be printed with 0.4mm perimeter thickness, just the Plate is a 1mm shell and must be printed with 0.48mm perimeter thickness, the same for receiver shells
The overhang wall in Top parts should be perfectly done without supports
The weight of all printed parts should be around 170g of PLA with 2 perimeters, 5/5 Top/Bottom and 15% infill
Clean up the holes with a 3mm philips screw driver or with an exacto knife, I use the first method
Try to print specially accuratelly the Steering Springs and the Throttle Levers, Trigger and Trigger Top
Try to have a very good inter-layer adhesion to avoid tall thin parts breaking while assembling

ASSEMBLY ORDER

1º I would suggest you to start printing the Main Rear parts. You can join them with two M3x8mm Shocket-Head screws
2º Introduce your Arduino and your antenna with the cables in a position than the cables doesn't disturb too much and the arduino mostly stays in place
3º Connect Female-Female Dupont cables to A0 and A1 in the Arduino
4º Introduce the "Octopus" with five GND/5V pairs made with female dupont cables. Two of the pairs should be longer, to reach the control plate and the steering wheel
5aº Time to prepare the Throttle Assembly. Take the Throttle Base and fix the potentiometer to it. Find a near center point of the pot and introduce the Trigger oriented in its final central position
5bº Introduce the throttle parts in the right order and position, use the drawing as a guide. Use one M3x8 screw to finally secure the parts in the trigger and finally use two M3x16 to fix the bearing holder
5cº Connect the A0, 5V and GND to the Throttle Potentiometer and bring the Throttle Assembly to its place. Use two M3x10 screws near the trigger and one M3x12-16 in the other hole
6º With Antenna and Throttle Pot connected to the arduino, connect it by USB to see if things are working at this step, maybe use Serial Port Viewer in arduino IDE connected to the receiver
7º Screw the Front Bottom part with one M3x16 to the Rear Bottom. Also use one of the two M3x25 screws to place Battery Door. You should be able to open it, don't screw too much
8º Add battery spring connected to the positive plate in the Battery Door... I hope the measures of what you have are similar to mines... If they aren't you will need to do some magic
9º Add battery spring and positive plate to the place for it inside Main Rear Top. Connect the spring (GND of battery) to the GND near the Vin pin using F-F dupont cable or some magic
10º If you have a power button in the Control Plate, connect the positive plate from the battery to the button, and the button to the Vin pin in the Arduino, magic needed here probably ;)
11º Time to test the battery connection. Use your power button or close the battery door to see if your arduino starts working. Success?¿?
12aº Mount Steering Base under Main Front Top and screw it from the outside using two M3x8 screws. Install the pot there, then the springs and finally the Axle12mmHEX part
12bº Wire the steering potentiometer to GND, 5V and A1 pin in the arduino. Make some tests connecting the arduino by USB or switching it ON with your battery and check in the receiver
13º If you have to wire some pots / switches in the control plate it is time to do it... Then aproximate Main Front Top part. The hardest part will be making the arduino take its final place
14º If you could close it, it is time to screw! Use two M3x8mm to screw the Main Front Bottom to Main Front Top. Use two M3x16mm to screw Main Front Top to Main Rear Top
15º You have it! Just screw the external Antenna if you didn't before, add the car wheel to the Steering axle and screw it with a M3x8mm screw. Let's start calibrating your Radio :)

CALIBRATING THE RADIO

You will want to send a near 0 value when you go full-reverse, near 255 value when you full-throttle... The same way you will want to send a near 0 value when full steering left, and near 255 when full steering right.

Calibrating Throttle:

The thing is that you are using just a range of your potentiometer bigger range. So you will be reading a value from the pot when the Throttle is in the center, I called that one in the firmware "Th_Center". Discover what's your Th_Center, but also your Th_Min and Th_Max values and introduce those data in the right place in the firmware. Play specially with those min and max values and re-upload firmware until you see you are "sending" the right values when you full-throttle or full-reverse, remember, near 255 and near 0

The next idea, to avoid strange behavours in the car, is to have a constant 127 value (half of the 0-255 range) being sent from the radio when the Throttle trigger is idle. For that I developed the "Th_Dead", the dead-zone near the central position which will make the radio send 127 until you move the trigger beyound certain point from the central position. This is important, increase or decrease the percent value and take a deep look to the code to understand it fully. I'm not using Th_Trim finally as I think can interfere with this code

Finally maybe you want to "cap" the forward or the reverse max speed... look for Th_FWD_Cap and Th_RWD_Cap values and change them between the limits to your likes. Remember that some RC Car ESCs will need you to fully brake before letting you using reverse... You won't be able to reverse if you cap the RWD direction so much. The same way you are capping the brake force too so be careful

Calibrating the Steering:

Find your St_Min and St_Max values un-commenting the right line of the code. Introduce those values in the right place in the firmware, re-upload and lets see how far from the center (127 value) the center position is... The steering system can be inproved, is not as accurate now as the throttle one... So it will probably idle around a range... Use Th_Trim, negative or positive, to correct that middle value until the center of the range is around 127. If you have your Th_Trim "Wired" to a pot, just use the pot to find that spot.

The same I did with the Th_Dead could be done with something like St_Dead... If you review carefully the code, you should be able to implement it relatively easy, will you?¿? ;)

WHAT MORE COULD YOU DO WITH THE SYSTEM:

If you take a look to the web, there are many things than can be incorporated both to the tx and the rx...

  • You could use maybe an accelerometer in the radio to control other 2 channels
  • Add a lot of push buttons to command some channels or params
  • Add a little screen and show up there some values
  • Measure battery voltage and trigger an alarm for low voltage
  • Add a Buzzer in the radio for audible signals
  • Replace 6xAA for a 18650 lipo cell and a boost up module
  • Add an accelerometer (gyro) in the car and program it to drift!
  • Recieve alarm in radio about low voltage in vehicle, or show the car or radio cell voltages in screen
  • Add a front distance sensor to try to avoid front impacts

As you can see, those are just a bunch of ideas, but you could come up with many better ones! I hope you want to give it a try and tell us about it!

WHAT MORE COULD I DO?¿?
- I can design a different shell, maybe for a "more pro" radio, based on li-po, with usb charging, screen, speaker and maybe a menu interface for settings...
- I can work in the line of improving code for more secure RF communication, maybe a binding procedure, storing and reading values from eeprom...
- I can design a "drone" style radio, with two joysticks, many pots and switches and maybe space for a screen...
- I can try to design and code a RC Car light "smart" system for the arduino receiver...
- I can design an arduino based MyRCCar...

Advertising


Issue with this design? Report a problem.

Would you like to support Cults?

You like Cults and you want to help us continue the adventure independently? Please note that we are a small team of 3 people, therefore it is very simple to support us to maintain the activity and create future developments. Here are 4 solutions accessible to all:

  • ADVERTISING: Disable your banner blocker (AdBlock, …) and click on our banner ads.

  • AFFILIATION: Make your purchases online by clicking on our affiliate links here Amazon.

  • DONATE: If you want, you can make a donation via Ko-Fi 💜.

  • WORD OF MOUTH: Invite your friends to come, discover the platform and the magnificent 3D files shared by the community!


Sharing and downloading on Cults3D guarantees that designs remain in makers community hands! And not in the hands of the 3D printing or software giants who own the competing platforms and exploit the designs for their own commercial interests.

Cults3D is an independent, self-financed site that is not accountable to any investor or brand. Almost all of the site's revenues are paid back to the platform's makers. The content published on the site serves only the interests of its authors and not those of 3D printer brands who also wish to control the 3D modeling market.

100% secure payment by credit card, PayPal, Apple Pay, Google Pay, etc.
View all payment options.