0
\$\begingroup\$

I am creating a small car that is to be controlled by a small hand held joystick remote.

basically I am trying to find the best option for doing this task.

The vehicle has two 24V motors, one for driving forwards and backwards movement, the other is for left and right steering. The motors need to be able to be analog controlled in the sense that their speeds can be varied. The handheld control remote is to have one 2-axis joystick, one axis correlates to the steering motor and the other axis to the driving motor.

In order to properly answer the question, you'll likely need to know what I've done so far. I have managed to do this by using simple RF transmitter and receiver modules from ebay. As seen here, http://www.ebay.com/itm/433Mhz-WL-RF-Transmitter-Receiver-Module-Link-Kit-for-Arduino-ARM-MCU-Wireless-/380717845396?hash=item58a48d4b94:g:x9cAAMXQigBSMp4X I have been using two arduino MCU, one in the remote which is needed to read the joysticks axis values and then send those values via the transmitter unit stated above. The second MCU in the car is used with the RF receiver module to obtain the joystick readings from the transmitter and then accordingly control the cars motor driver board.

This is working exactly how I need it to, however.... is it the best way of doing it?

These are my questions:

1) Do common RC cars perform this analog type control without MCU? If yes, how?

2) The remote I have created, is just a nano, 2-axis joystick and transmitter module but the battery drains very fast. What is the best option for a low power remote that is capable of sending 2-axis joystick readings. I ask this as I feel the nano is high in battery requirements.

3) lastly, The cars are to be used around each other and the RF units I am currently using are all on the same channel and therefore I get interference. How can I pair a transmitter and a receiver so that they will only work with each other? Preferably I would like to be able to use dip switches to set channels so that there could be say 100 of these cars each on a different channel.

P.S. hopefully not, but I get the feeling all of this can be done without 2 MCU, meaning the circuitry will do what my code is currently doing. If this is the case where do I start to learn how to build a circuit that can do this? eeek! way over my abilities!

\$\endgroup\$
  • \$\begingroup\$ EDIT, so that speed and direction* of motors can be varied. \$\endgroup\$ – KiwiOnTheShore Apr 7 '16 at 5:46
  • 1
    \$\begingroup\$ RC toys can work without MCU. The resistance of the joystick is used to influence the length of a PWM signal which is transmitted. The receiver converts the PWM back to an analog value. \$\endgroup\$ – Botnic Apr 7 '16 at 6:33
1
\$\begingroup\$

The 433MHz band is a public band in some countries, where any form of radio interference can appear at any moment. Therefore to begin with, you can rule out any form of analog radio, since such solutions might pick up any interference and treat it as a control signal.

Using a digital radio protocol means you'll either have to use:

  • a MCU
  • or some encoder/decoder integrated circuit
  • or a radio chip with built-in protocol support (basically a built-in MCU)

The 2nd alternative is less common nowadays, manufacturers like to make all such ICs obsolete.

The simplest form of digital protocol involves the analog value and some checksum. It might be wise to also include the dip-switch value as an unique identity code, if you wish to prevent the remote from car 1 to control car 2 etc.

You have to ensure that your cars are not set to work on the same channel. Likely you won't have many options to configure radio channel on some cheap crap radio like the one linked, but at a minimum you need different frequencies for the different cars.

Make sure it is not some wideband crap that smears itself all over the 433 band, because then this won't be possible. Look for modules that have a fixed channel, or the possibility to set the channel. Ideally, one channel in the 433 band should be 25kHz wide, to minimize the chance for interference.

In most countries you are only allowed to transmit up to 1mW E.R.P from 433 to 434 MHz so you need to check this too. Beyond 434,040 MhZ, you can use up to 10mW in most countries. In other countries, any use of the 433MHz band for RC cars would be illegal, as the band is reserved for shipping container RFID systems etc. Where are you located?


Regarding battery life, you could sample the joystick at given intervals. Make sure there is only supply to the joystick at the point when you are reading the value. A simple transistor or MOSFET could be used for this. Similarly, you could power down the radio when it is not used. Keep in mind though that the crappy Ebay radio might need some time to lock on the correct frequency.

\$\endgroup\$
0
\$\begingroup\$

1) RC car transmitters with proportional control generally use a microcontroller to read the pots and generate the transmission protocol. This is cheaper than using discrete components.

2) The Arduino Nano itself only draws about 20mA and the FS1000A tx module draws 4-15mA, so if your battery drains 'very fast' it must have a very low capacity or some other external circuitry is drawing excessively high current.

3) Your receiver uses a superregenerative detector which has poor selectivity, so it will receive anything that is transmitting on the 433MHz band. Theoretically you could have 100 radios on different frequencies, but that would require very narrow-band filters and a low data rate. The other way to go is frequency hopping spread spectrum. But with only 1.75MHz in the band there may still be a fairly low limit on how many transmitters you could operate at once.

It might be better to use 2.4GHz modules. The 2.4GHz band is much wider so it can handle many more transmitters operating at once (example:- 100 Spektrum DSMX transmitters test). The vast majority of hobby RC transmitters today use 2.4GHz, and RC toys are also moving to this band.

With spread spectrum radio control units 'pairing' is usually achieved by each transmitter having a unique ID code which is transmitted along with the data. The receiver has a non-volatile memory which stores this ID code, and only responds to transmissions which include the same ID. The pairing or 'binding' process is often invoked by pressing a button on the transmitter and putting a jumper across 2 pins on the receiver. There are other methods, but all involve switching both transmitter and receiver into 'binding' mode so the receiver knows to store the ID code from that transmitter.

If you don't mind each receiver being permanently assigned to its corresponding transmitter then you could hard-code the ID into the receiver and then it would not have to be paired.

I get the feeling all of this can be done without 2 MCU, meaning the circuitry will do what my code is currently doing.

In the old days these things were done without MCUs, and it wasn't easy to get reliable error-free reception on multiple channels. It was also very expensive.

\$\endgroup\$
  • \$\begingroup\$ There's other problems with 2.4GHz though: it only works at line of sight. But I guess that's not a big issue with RC cars (as opposed to RC planes, drones etc). \$\endgroup\$ – Lundin Apr 7 '16 at 9:54
  • \$\begingroup\$ @Lundin It's hard to fly an RC plane without seeing it. In my country it's illegal unless you have an Unmanned Aircraft Operator Certificate. \$\endgroup\$ – Bruce Abbott Apr 7 '16 at 19:08
  • \$\begingroup\$ Planes might temporarily fly in behind some object, or the operator might move in behind one, a truck stops in front of them, the landscape might be uneven etc etc. Everyday engineering: consider unexpected situations. \$\endgroup\$ – Lundin Apr 8 '16 at 6:13

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.