ADVANCED
CONTROL FOR
MOBILE ROBOTS
LECTURE 05: TRANSMITTER AND RECEIVER
INTRODUCTION
One of the crucial pieces of equipment necessary for flying a multirotor is a FPV Drone Radio
Transmitter (Tx) and Radio Receiver (Rx).
FPV Drone Radio Transmitters
An FPV Drone Radio Transmitter is an electronic device that uses radio signals to transmit
commands wirelessly via a set radio frequency over to the Radio Receiver, which is connected
to an aircraft or multirotor being remotely controlled. In other words, it’s the device that
translates pilot’s commands into movement of the multirotor.
In some radios there is an option to connect an external transmitter module. This makes it
possible to use a different frequency (for instance, 900MHz in a 2.4GHz radio) or a different
receiver from another brand/protocol (Crossfire CRSF module with Crossfire V2 Micro
Receiver in FrSky Taranis).
CHANNELS
A FPV Drone Radio Transmitter transmits commands via channels. Each channel is an individual
action being sent to the aircraft.
Throttle, Yaw, Pitch and Roll are the four main inputs required to control the quad. Each of
them uses one channel, so there is minimum of four channels required. Every switch, slider
or knob on the transmitter uses one channel to send the information through to the receiver.
The following is an example of the typical channel setup for FPV Racing: a switch for arming the
aircraft, a switch for turning on the buzzer and a switch used to select different flight modes. For
this reason, it is advised to have a 6 channel radio.
Basic 4-6 channel radios are usually the cheapest. Radios with more than 6 channels are typically
more expensive.
GIMBALS
Gimbals are the sticks that translate a pilots input into the digital data transmitted to the
radio receiver.
There are two types of gimbals commonly used :
•Hall Effect Gimbal (digital)
•Potentiometer type Gimbal (analogue)
Hall Effect gimbals use hall sensors with magnets to capture the stick position values and is
therefore more resistant to wear. These gimbals are also more precise.
Potentiometer type gimbals uses a brush to capture the value of stick inputs and is therefore
prone to wear out much quicker.
GIMBALS
FREQUENCIES
An FPV Drone Radio Transmitter commonly use the following frequencies: 27MHz, 72MHz,
433MHz, 900MHz, 1.3GHz and 2.4Ghz
433Mhz, 900Mhz and 1.3GHz are typically used in long range FPV and RC systems.
2.4GHz is most popular frequency. It is a newer technology and it offers “frequency hopping”
which does the job of managing multiple users frequency transmitting at the same time. This
is done by scanning the frequency band and finding the best available channel during the
transmission.
2.4GHz antennas are very compact as well. Generally speaking the lower the frequency, the
larger the antenna. For that reason, 2.4GHz quickly became the “go to” frequency.
Telemetry
Telemetry is the data transmitted from the Radio Receiver back to the Radio Transmitter.
It usually contain a variety information, depending on the type of radio and flight controller.
The most crucial pieces of information are battery voltage reading, current draw and “RSSI”
(Radio Signal Strength Indication).
This Telemetry Data can be displayed on the telemetry screen (in OpenTX), and can also be
customized as audio warnings.
Radio Receivers
A Radio Receiver is the device capable of receiving commands from the Radio Transmitter,
interpreting the signal via the flight controller where those commands are converted into
specific actions controlling the aircraft.
Radio Receivers can have the following features:
•Telemetry (sending data back to transmitter)
•Redundancy function (two receivers connected together, if one loses connection, second one
takes over)
•Easy removable antennas (more convenient with connectors if antenna is to be replaced)
•Possibility of firmware upgrades (for bug fixes)
RADIO RECEIVERS
PROTOCOLS
Radio communication protocols can split into two groups:
•TX Protocols between Radio Transmitter and Radio Receiver.
•RX Protocols between Radio Receiver and Flight Controller
PROTOCOLS
TX PROTOCOLS
TX Protocols are in most cases specific to brands:
•FrSky: D8, D16, LR12
•Spektrum: DSM, DSM2, DSMX
•FlySky: AFHDS, AFHDS 2A
•Futaba: FASST
•Hitec: A-FHSS
•Devo: Hi-Sky
RX PROTOCOLS
As for RX Protocols, some of them are universal:
•PCM, PWM, PPM, SBUS
A Receiver must be compatible with the Radio Transmitter which in most cases means that
the same brand of Rx and Tx need to be purchased in order to establish a communication.
There are however radio receivers that may work with the same protocol but are not from the
same brand.
Frequencies must also be the same on both Rx and Tx. For instance; a 2.4GHz Transmitter can
only work with 2.4GHz Radio Receiver.
Binding
A Radio Transmitter will only communicate with a Radio Receiver if the two are “binded”. This
process might differ on specific receivers and radios. Usually, this can be done by starting the
bind process on the Radio and pressing BIND button on the receiver. The best would be to
refer to the user manual of your specific Rx and Tx combo.
It’s important to note that a single Radio Transmitter can be bound to multiple different
Receivers. At the same time, a single receiver can only be bound to a single transmitter, not
multiple transmitters.
Radio Receiver Antennas
Receiver antennas are usually soldered directly to the receiver main board or attached by U.FL
connectors. Antennas are made from a coax cable where the main wire is separated from
“ground”. Radio Receivers are usually manufactured with two antennas to ensure the best
reception.
Receivers usually come with two antennas for 2.4GHz Frequency. To achieve the best signal
reception it is recommended to keep them at a 90degree angle in relation to each other
when installed on the multi rotor.
PWM – Pulse Width Modulation
This is the most common and basic radio control protocol. In the old days when there were only
RC fixed wings planes, the receivers were used to control the servos or ESC directly with standard
PWM signal, one channel for each servo. Until today the same technology is still being used in
many models.
Multirotor require at least 4 to 5 channels (sometimes even more) and you will see the same
numbers of servo leads connected between the receiver and flight controller.
PWM stands for pulse width modulation. It’s an analog signal where the length of the pulse
specifies the servo output or throttle position. The length of the signal pulse normally varies
between 1000µs and 2000µs (micro seconds), with 1000µs being the minimum & 2000µs the
maximum.
PWM radio receiver is the most common and usually the cheapest option. However due to the
messy wiring, hobbyists now prefer PPM or SBUS over PWM.
PPM – Pulse Position Modulation
PPM is also known as CPPM or PPMSUM. The advantage of PPM is that only one signal
wire is needed for several channels (typically 8 channels max), instead of a number
of individual wires. So you should only connect the ground, power and signal cable.
A PPM signal where basically a series of PWM signals sent one after another on the same
wire, but the signal is modulated differently.
PPM is what they call “analog signal in time domain” (although it can be a bit controversial at
times), channels are sent one after another and not at the same time. Therefore it’s not as
accurate or jitter free as serial communications, but it’s more widely available and supported
by many Flight controllers.
PCM – Pulse Code Modulation
PCM stands for pulse code modulation, it’s a data types similar to PPM. However PCM
signal is digital signal (using ones and zeros) while PPM signal is analogue, which is the
length of time the signal is on. PCM has the potential of signal error detection even error
correction, but this still depends on the product you buy.
PCM is more reliable and less susceptible to interference, but additional conversion is
required so the equipment tends to be more expensive.
Serial Protocols
Serial Receiver is a digital loss-less protocol that uses only 3 wires (signal, power, ground)
for multiple channels. As the name suggests this type of receiver requires serial port on the
flight controller. This includes SBUS, XBUS, MSP, IBUS, and SUMD.
SBUS (S.BUS, Serial BUS)
SBUS is a type of serial communication protocols, used by Futaba and FrSky. It supports
up to 18 channels using only one signal cable.
SBUS is an inverted UART communication signal. Many flight controllers can read UART
input, but cannot accept inverted one (such as the Naze32 Rev5) and an inverted is
required.
MSP (multiwii serial protocol)
Protocol that was created as part of the multiwii software. Basically it allows you to use MSP
commands as the RC input and it supports 8 channels in one signal cable.
What Receiver Protocol and Should I use?
First of all, it depends on your radio transmitter. Personally I would prefer PPM or SBUS for
multicopter in general because of the simple wiring. However for drone racing and freestyle I
would choose SBUS due to it’s minimal lag.
TX and RX Latency
In a radio control system, the latency happens in multiple places. There is latency between
your sticks and the RF module on the TX (before it’s transmitted through the air). And also
there is latency between the receiver and your flight controller.
NRF24L01
Let’s take a closer look at the NRF24L01
transceiver module. It uses the 2.4 GHz
band and it can operate with baud rates
from 250 kbps up to 2 Mbps. If used in
open space and with lower baud rate its
range can reach up to 100 meters.
NRF24L01
The module can use 125 different channels which gives a possibility to have a network of
125 independently working modems in one place. Each channel can have up to 6 addresses,
or each unit can communicate with up to 6 other units at the same time.
The power consumption of this module is just around 12mA during transmission, which is
even lower than a single LED. The operating voltage of the module is from 1.9 to 3.6V, but
the good thing is that the other pins tolerate 5V logic, so we can easily connect it to an
Arduino without using any logic level converters
NRF24L01 CHANNELS
NRF24L01
Three of these pins are for the SPI communication and they need to be connected to the SPI
pins of the Arduino, but note that each Arduino board has different SPI pins. The pins CSN
and CE can be connected to any digital pin of the Arduino board and they are used for
setting the module in standby or active mode, as well as for switching between transmit or
command mode. The last pin is an interrupt pin which doesn’t have to be used.
There are several variations of the NRF24L01 modules. The most popular is the one with on-
board antenna. This makes the module to be more compact, but on the other hand, lowers
the transmission range to a distance of about 100 meters.
NRF24L01 PINOUT
Both modules, the NRF24L01 and the NRF24L01+ PA/LNA have the same pinout, so we can
connect them in our circuit the same way.
NRF24L01 SPI PINS
As I already mentioned, each Arduino
board has different SPI pins, so keep that
in mind when connecting the modules to
your Arduino board.
TROUBLESHOOTING NRF24L01
It’s worth noting that power supply noise is one of the most common issues people
experience when trying to make successful communication with the NRF24L01 modules.
Generally, RF circuits or radio frequency signals are sensitive to power supply noise. Therefore,
it’s always a good idea to include a decoupling capacitor across the power supply line. The
capacitor can be anything from 10uF to 100uF.
Another common issue is that the 3.3V pin of the Arduino boards, cannot always supply
enough power to the NRF24L01 module. So, powering the module with an external power
source is also a good idea.
TRANSMITTER CODE
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
void loop() {
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
delay(1000);
}
RECEIVER CODE
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
void loop() {
if (radio.available()) {
char text[32] = "";
radio.read(&text, sizeof(text));
Serial.println(text);
}
USING THE CODE
TO BUILD OUR RC
TX AND RX
.
IMPORTANT LINKS
https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-
tutorial/
https://code.google.com/archive/p/generate-ppm-signal/