Arduino Projects

LoRa RC Controller using Arduino

LoRa RC Controller:

 

LoRa RC Controller using Arduino- If you want to make a long-range RC controller ranging from 1km to 5km using LoRa and Arduino, then this article is for you. Because after reading this article, you will be able to make RC Controllers for RC planes, RC cars, RC trucks, RC boats, RC helicopters, RC robots, and more – basically, anything you wish to wirelessly control over a long distance.

LoRa RC Controller

allpcb circuit

For the past 3 months, I have been using the Ai-thinker’s 433Mhz Ra-02 LoRa SX1278 transceiver modules, and I am completely amazed by their performance. I used the same LoRa transceiver modules to make a long-range water level indicator system, and besides that, I also built a LoRa-based Home Energy Monitoring system. I am very satisfied with the performance and range of these LoRa modules.




LoRa RC Controller

By the way, I have already written an article on LoRa range test in which I used three different types of antennas to determine the maximum wireless communication distance. If you need a distance of up to 1 kilometer, you can use LoRa whip antennas. For distances between 2 to 3 kilometers, you should use Flexible PCB antennas. And if you require a range of 5 kilometers or even more, I suggest using a combination of Suction cup antenna and Flexible PCB antenna.

But just long distance is not enough because Rylr896 LoRa modules by Reyax can send and receive data over a long distance of 15 kilometers, but they are quite slow and can’t be used for making RC Controller for RC planes, RC cars, etc.

So today, we are going to test if the Ai-thinker’s Ra-02 LoRa transceiver modules are fast enough to build an RC controller for controlling planes, cars, trucks, boats, etc.

We need to see if, along with the long-distance capability, its communication speed is also fast. This is crucial because data communication speed matters the most in radio controllers. RC planes, RC cars, and RC boats require control sticks to be highly responsive. If there is any delay or lag in communication, then you won’t be able to fly an RC plane or drive an RC car or a boat effectively.

LoRa RC Controller

For the demonstration purposes, I have built this fully functional prototype model. It’s a 2 channels RC controller, but you can increase the number of channels as per your needs, I will explain this in the programming.



Anyways, I am using one channel for controlling the speed of 775 Dc motor and the other channel for controlling the Servo motor. Instead of using the 775 DC motor you can also use a Brushless DC motor.

On the Transmitter side, a 2-axis analog joystick and LoRa module are connected to the Arduino. For now, forget about the relays and buzzer on the development boards.

On the Receiver side, along with the Lora module, I have also connected a 10kg high torque Servo motor, and a 12V 775 Motor through a 320A Brushed DC Motor controller. I am going to use my created 4S lithium Ion battery to power up the receiver side. Read my article on 775 DC Motor and 320A Brushed DC Motor Controller.

Even this setup is more than enough for building an RC Boat or an RC Car. Because, you can use the servo motor for the steering and the 775 DC motor as the engine. On this development board I have added a 5V and 3A power supply which can power up the Arduino and multiple Servos.

if you remove the relays, terminal blocks, transistors, resistors, female headers, and the Buzzer. You can reduce the circuit size, as we don’t need these components. You can read my article on the Arduino and Lora based development board.

LoRa RC Controller

And if you want to use this setup for controlling a Brushless DC Motor then you will have to replace this controller with this ESC. I am already planning on building an RC Plane so consider subscribing if you don’t want to miss my videos and articles on the LoRa based long range RC Controller. Anyway, let’s start the practical demonstration and afterwards I will explain the circuit diagrams and programming.



LoRa RC Controller

I have powered up the Transmitter and receiver side. When the Joystick is in the middle position, the servo Motor stays at 90 Degrees and the DC motor is completely stopped. “For the practical demonstration, watch the video tutorial given at the end of this article”.

LoRa RC Controller

This is insanely responsive. I have been flying RC Planes and Drones and right now it reminds me of the Throttle and Yaw stick. I can control the motor speed and Servo position both at the same time and I don’t see any delay or lagging issues.

You might be thinking the servo is slow or lagging but it’s not like that; it’s just because of its size; it’s bigger and that’s why to you it might appear a little bit slow. But in reality it’s quite responsive. Normally we use micro servo motors on RC Planes. The reason I am using this Large Servo motor is to let you know, that my RC controller is powerful enough to be used in RC Cars, RC Boats, RC Trucks, and RC Planes etc. In fact, I have also tested it with a 25Kg torque motor. With such high torque servos you can control almost any RC machine.

So, I am pretty satisfied with this first test, and now I can design my own Flight Controller for an RC Plane and radio controlled system for Cars and Boats etc. Now, let’s go ahead and take a look at the Transmitter and Receiver side wiring.



Amazon Links:

Arduino Nano USB-C Type (Recommended)

LoRa Ra-02

LoRa Antennas

25Kg Torque Servo

10Kg Torque Servo

Small Servo

2 axis analog Joystick

775 DC Motor

320A Brushed Motor Controller

*Disclosure: These are affiliate links. As an Amazon Associate I earn from qualifying purchases.




LoRa RC Controller Transmitter Circuit:

LoRa RC Controller

The +5V and GND pins of the analog Joystick are connected to the Arduino 5V and GND pins. The VRX and VRY pins are connected to the Arduino Analog pins A0 and A1.

The LoRa Ra-02 433Mhz transceiver module NSS, SCK, MOSI, and MISO pins are connected to the Arduino pins 10, 13, 11, and 12. The reset pin of the LoRa module is connected to the Arduino pin 9. And its 3.3V and GND pins are connected to the Arduino 3.3V and GND pins.

The VIN and GND wires can be connected to an external Regulated 5V power supply.

LoRa RC Controller

On my board I have this 5V and 3A power supply and if you too want to make this power supply then you can follow this circuit diagram.

LoRa RC Controller



Altium Designer + Altium 365 + Octopart:

Arduino LoRa Free SMS

Altium 365 lets you hold the fastest design reviews ever. Share your designs from anywhere and with anyone with a single click. it’s easy, leave a comment tagging your teammate and they’ll instantly receive an email with a link to the design. Anyone you invite can open the design using a web browser. Using the browser interface, you’re able to comment, markup, cross probe, inspect, and more. Comments are attached directly to the project, making them viewable within Altium designer as well as through the browser interface. Design, share, and manufacture, all in the same space with nothing extra to install or configure. Connect to the platform directly from Altium Designer without changing how you already design electronics. Altium 365 requires no additional licenses and comes included with your subscription plan.

Get real-time component insights as you design with Octopart built into Altium 365. Octopart is the fastest search engine for electronic parts and gives you the most up-to-date part data like specs, datasheets, cad models, and how much the part costs at different amounts etc. Right in the design environment so you can focus on your designs. Start with Altium Designer and Activate Altium 365. Search for electronic parts on Octopart.



LoRa RC Controller Receiver Circuit:

LoRa RC Controller

The Servo motor VCC and GND wires are connected to the Arduino VIN and GND pins which are connected to the 5V and 3A power supply. The Servo Motor Signal Wire is connected to the Arduino PWM Pin 9.

The VCC and GND wires of the Brushed Motor Controller are connected to the same Vin and GND pins. The signal Wire is connected to the Arduino PWM Pin 3.

These Red and Black wires with the XT60 connector are used to connect a 3S, 4S, or 5S Lipo or Lithium Ion battery to power up the DC Motor. In my case, I have connected the 775 Brushed DC motor with the controller output wires.

The LoRa Module and 5V Power supply wiring remain exactly the same. Now, let’s go ahead and take a look at the programming.



Required Library:

LoRa.h Library

LoRa RC Controller Transmitter Programming:

The Joystick two pins VRX and VRY are connected to the Arduino Pins A0 and A1. I have defined two variables for storing the values of VRX and VRY.

And I am using the same localAddress and destination address. These are the same addresses I have been using in majority of my LoRa based projects. By using addresses you get a full control over which LoRa module you want to send Data. You can define multiple LoRa nodes if in case you want to send control signals to multiple receivers. Anyway, you can read my article on how to use multiple loRa Nodes.

Code inside the setup function is exactly the same.

Inside the loop() function, we simply read the Joystick X-axis and Y-axis values and store them in variables joyVal and joyValy.

Then we create a message and use comma to separate those values. On the receiver side, I am going to use the comma as the delimiter to split and retrieve those values. So, right now, it’s a two channel RC controller. You can add another joystick, some potentiometers, and buttons. Read values from the desired components, store them in variables, and then add those variables in the message and don’t forget to add commas.

So, this is how, you can add more channels. Anyway, once the message is ready, then we simply send it to the receiver side LoRa. Now, let’s go ahead and take a look at the receiver side programming.  



LoRa RC Controller Receiver Programming:

On the receiver side, things are pretty straightforward and easy, and I am sure you already know about how to use Servos if not then you can watch my videos on Servo motors. Anyways, you can see I have defined some variables and I am using the same addresses. But this time the localAddress is 0xFF and the destination address is 0xBB.

Inside the setup() function we activated the ESC and Servo which are connected to pins 3 and 9. These are PWM pins. Now, let’s go to the loop function.

Inside the loop() function we simply read the entire message and then using the getValue function we split the entire message using comma as the delimiter and store the corresponding values in variables to control the motor speed and servo angle.  And then there are if conditions to control the speed of DC Motor and Angle of the Servo as per the Joystick movement. So, that’s all for now.




Watch Video Tutorial:

 

Engr Fahad

My name is Shahzada Fahad and I am an Electrical Engineer. I have been doing Job in UAE as a site engineer in an Electrical Construction Company. Currently, I am running my own YouTube channel "Electronic Clinic", and managing this Website. My Hobbies are * Watching Movies * Music * Martial Arts * Photography * Travelling * Make Sketches and so on...

Related Articles

One Comment

  1. Hello!
    Help please. How to add more channels, I need 4-channels

    I set here:
    Mymessage = Mymessage + button_1 +”,” + button_2 + “,” + pinX_1 + “,” + pinY_1;

    Where edit else?

    Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button