Радиомодули 433mhz rf tx-rx. взаимодействие с ардуино

Структурная схема работы передающей части проекта

В передающей части нашего проекта, которое, по сути, представляет собой пульт дистанционного управления, у нас есть 4 кнопки, с помощью которых мы управляем направлением движения лодки (вперед, назад, направо и налево). К сожалению, нажатия этих кнопок нельзя непосредственно подавать на кодирующее устройство (encoder), поэтому сначала мы подаем их в плату Arduino, а затем уже на кодирующее устройство. Фактически, плата Arduino здесь используется для того, чтобы при движении лодки вперед или назад одновременно управлять двумя параллельными входами кодирующего устройства, что нельзя сделать только при помощи кнопок. Затем кодирующее устройство преобразует эти параллельно поступающие данные в последовательные, которые после этого и подаются на передающий радио модуль.

Arduino with RF 433MHz Transmitter/Receiver Modules

In this section, we’ll build a simple example that sends a message from an Arduino to another Arduino board using 433 MHz. An Arduino board will be connected to a 433 MHz transmitter and will send the “Hello World!” message. The other Arduino board will be connected to a 433 MHz receiver to receive the messages.

Parts Required

You need the following components for this example:

  • 2x Arduino – read Best Arduino Starter Kits
  • RF 433MHz Receiver/Transmitter 
  • Breadboard
  • Jumper wires

You can use the preceding links or go directly to MakerAdvisor.com/tools to find all the parts for your projects at the best price!

Installing the RadioHead Library

The RadioHead library provides an easy way to work with the 433 MHz transmitter/receiver with the Arduino. Follow the next steps to install that library in the Arduino IDE:

  1. Click here to download the RadioHead library. You should have a .zip folder in your Downloads folder.
  2. Unzip the RadioHead library.
  3. Move the RadioHead library folder to the Arduino IDE installation libraries folder.
  4. Restart your Arduino IDE

The RadioHead library is great and it works with almost all RF modules in the market. You can read more about the RadioHead library here.

Transmitter Circuit

Wire the transmitter module to the Arduino by following the next schematic diagram.

Important: always check the pinout for the transmitter module you’re using. Usually, there are labels next to the pins. Alternatively, you can also take a look at your module’s datasheet.

Transmitter Sketch

Upload the following code to the Arduino board that will act as a transmitter.

How the transmitter sketch works

First, include the RadioHead ASK library.

This library needs the SPI library to work. So, you also need to include the SPI library.

After that, create a RH_ASK object called driver.

In the setup(), initialize the RH_ASK object by using the init() method.

In the loop(), we write and send our message. The message is saved on the msg variable. Please note that the message needs to be of type char.

This message contains the “Hello World!” message, but you can send anything you want as long as it is in char format.

Finally, we send our message as follows:

The message is being sent every second, but you can adjust this delay time.

Receiver Circuit

Wire the receiver module to another Arduino by following the next schematic diagram.

Important: always check the pinout for the transmitter module you’re using. Usually, there are labels next to the pins. Alternatively, you can also take a look at your module’s datasheet.

Receiver Sketch

Upload the code below to the Arduino connected to the receiver.

How the receiver sketch works

Similarly to the previous sketch, you start by including the necessary libraries:

You create a RH_ASK object called driver:

In the setup(), initialize the RH_ASKobject.

In the loop(), we need to set a buffer that matches the size of the message we’ll receive. “Hello World!” has 12 characters. You should adjust the buffer size accordingly to the message you’ll receive (spaces and punctuation also count).

Then, check if you’ve received a valid message. If you receive a valid message, print it in the serial monitor.

Demonstration

In this project the transmitter is sending a message “Hello World!” to the receiver via RF. Those messages are being displayed in receiver’s serial monitor. The following figure shows what you should see in your Arduino IDE serial monitor.

Двигатели и пропеллеры для лодки

Здесь также необходимо учитывать вес компонентов, поэтому в качестве двигателей мы выбрали электродвигатели постоянного тока типа n20, работающие от 5 В и отличающиеся малыми размерами и массой. Для предотвращения появления радиопомех необходимо подключить конденсатор 0,1 мкФ параллельно входным контактам двигателя.

Пропеллеры (воздушные винты) для лодки мы изготовили из листов пластмассы, но при желании их можно купить в соответствующих магазинах. Мы же просто вырезали из пластика необходимые полоски, согнули их при помощи нагрева от свечи и проделали в них небольшой отверстие чтобы закрепить их на осях двигателей.

Программа для передатчика

Для работы с радиомодулями воспользуемся библиотекой RCSwitch. Напишем программу, которая будет каждую секунду по-очереди отправлять два разных сообщения.

Разберем программу. Первое что мы сделали — объявили объект для работы с передатчиком и назвали его mySwitch.

RCSwitch mySwitch = RCSwitch();

Затем, внутри стандартной функции setup включили передатчик и указали вывод, к которому он подключен:

mySwitch.enableTransmit(2);

Наконец, в основном цикле программы loop отправляем сначала одно сообщение, а затем и второе с помощью функции send:

mySwitch.send(B1000, 4);

Функция send имеет два аргумента. Первый — это отправляемое сообщение, которое будет отправляться в эфир в виде пачки импульсов. Второй аргумент — это размер отправляемой пачки.

В нашей программе мы указали сообщения в формате двоичного числа. На это указывает английская буква «B» в начале кода B1000. В десятеричном представлении это число превратится в восьмерку. Так что мы могли вызвать функцию send так:

mySwitch.send(8, 4);

Также send умеет принимать двоичные строки:

mySwitch.send("1000", 4);

Задания

Теперь можно попробовать потренироваться и сделать разные полезные устройства. Вот несколько идей.

Пульт для светильника

На стороне приемника модуль реле, включенный в цепь питания светильника (осторожно, 220 Вольт!). На стороне передатчика: тактовая кнопка

Написать программы для приемника и передатчика, которые по нажатию кнопки будут включать удаленное реле. При повторном нажатии кнопки реле будет выключаться.
Уличный термометр с радиоканалом. На стороне передатчика разместить датчик температуры. Предусмотреть автономное питание от батареек. На стороне приемника: символьный ЖК дисплей. Написать программы для приемника и передатчика, которые позволят выводить показания температуры с удаленного датчика на дисплее.

Arduino Code – For 433MHz RF Receiver

Connect the receiver Arduino to the computer and load the following code:

Just like the transmitter cade, receiver code starts by loading both the RadioHead and SPI libraries and creating an ASK object.

In the setup function: we initialize the ASK object and also set up the serial monitor as this is how we will view our received message.

In loop function: we create a buffer of size same as the transmitted message. In our case, it’s 11, remember? You will need to adjust this to match your message length. Be sure to include any spaces and punctuation as they all count as characters.

Next, we call a function. This turns the receiver on if it not already on. If there is a valid message available, it copies the message to its first parameter buffer and return true else return false. If the function returns true, the sketch enters into if statement and prints the received message on the serial monitor.

Then we go back to the start of the loop and do it all over again.

After loading the sketch open your serial monitor. If all is OK you should see your message.


433MHz Wireless RF Module Output on Serial Monitor – Receiver

Step 8: Future Work and Applications

Things I plan to do in future include:

  1. Include control of IR devices e.g. TV and air-conditioning remotes.
  2. Switch appliances, lights etc on/off via a webpage or phone app.
  3. Switch lights, TV, radio etc on and off on a schedule whilst I’m holidays so it looks like I’m still at home. To improve the illusion, the schedule could be varied randomly.
  4. Automatically turn off appliances & lights if unintentionally left on.
  5. P̶l̶a̶y̶ ̶p̶r̶a̶n̶k̶s̶ ̶o̶n̶ ̶p̶e̶o̶p̶l̶e̶ ̶b̶y̶ ̶r̶a̶n̶d̶o̶m̶l̶y̶ ̶o̶p̶e̶n̶i̶n̶g̶ ̶a̶n̶d̶ ̶c̶l̶o̶s̶i̶n̶g̶ ̶t̶h̶e̶i̶r̶ ̶g̶a̶r̶a̶g̶e̶ ̶d̶o̶o̶r̶s̶.̶ (You shouldn’t do this, it’s naughty.)
  6. Port to Raspberry Pi (rc-switch has a rpi port).

Схема подключения передатчика и приемника 433 МГц к Arduino UNO

Теперь, когда мы знаем все о модулях, пришло время использовать их!

Поскольку мы будем передавать данные между двумя платами Arduino, нам, конечно, понадобятся две платы Arduino, две макетные платы и пара соединительных проводов.

Схема для передатчика довольно проста. У него всего три соединения. Подключите контакт VCC к контакту 5 В и минус к Arduino. Контакт Data-In должен быть подключен к цифровому контакту Arduino № 12. Вы должны использовать  контакт 12, так как по умолчанию библиотека, которую мы будем использовать в нашем скетче, использует этот контакт для ввода данных.

На следующем рисунке показана схема соединения.

После подключения передатчика вы можете перейти к приемнику. Подключение приемника так же просто, как и передатчика.

Так же нужно сделать только три соединения. Подключите контакт VCC к контакту 5 В и минус на Arduino. Любой из двух средних выводов Data-Out должен быть подключен к цифровому выводу № 11 на Arduino.

Вот так должна выглядеть схема соединения для приемника.

Теперь, когда передатчик и приемник подключены, нам нужно написать код и отправить его на соответствующие платы Arduino. Поскольку у вас, вероятно, только один компьютер, мы начнем с передатчика. Как только код будет загружен, мы перейдем к приемнику. Arduino, к которому подключен передатчик, может питаться от источника питания или батареи.

Объяснение программы для Raspberry Pi

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Программировать плату Raspberry Pi в нашем проекте мы будем с использованием языка Python3. Также можно использовать и язык C/C++ как и в плате Arduino, однако в данном случае преимуществом написания программы на языке python является то, что на нем написана специальная библиотека для работы с модулями nRF24l01, которую можно скачать с ее официальной страницы на github. Но здесь необходимо отметить, что наша программа на python и указанная библиотека должны находиться в одном и том же каталоге, иначе программа на python не сможет найти библиотеку. После скачивания библиотеки извлеките ее из архива и создайте отдельный каталог, в котором будут храниться все программы и библиотеки вашего проекта. Когда установка библиотеки будет закончена, можно приступать к написанию программы.

Первым делом в программе необходимо подключить (импортировать) все используемые библиотеки.

Python

import RPi.GPIO as GPIO
import time
import spidev
from lib_nrf24 import NRF24

1
2
3
4

importRPi.GPIO asGPIO

importtime

importspidev

fromlib_nrf24 importNRF24

Далее установим режим работы контактов (GPIO mode) платы Raspberry Pi «Broadcom SOC channel», что будет означать что мы будем обращаться к контактам платы по их физическим номерам (а не по их номерам на плате).

Python

GPIO.setmode(GPIO.BCM)

1 GPIO.setmode(GPIO.BCM)

Далее в программе мы зададим адреса каналов (pipe address) – они будут нужны для взаимодействия с приемной частью проекта на основе платы Arduino. Адреса укажем в шестнадцатеричном коде.

Python

pipes = , ]

1 pipes=0xE0,0xE0,0xF1,0xF1,0xE0,0xF1,0xF1,0xF0,0xF0,0xE0

Инициализируем модуль nRF24l01 используя контакты GPIO08 в качестве CE и GPIO25 в качестве CSN.

Python

radio.begin(0, 25)

1 radio.begin(,25)

Установим размер пакета (payload size) 32 бита, адрес канала 76, скорость передачи данных 1 Мбит/с и выходную мощность модуля на минимум.

Python

radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)

1
2
3
4

radio.setPayloadSize(32)

radio.setChannel(0x76)

radio.setDataRate(NRF24.BR_1MBPS)

radio.setPALevel(NRF24.PA_MIN)

Откроем каналы и начнем в них запись данных. Также будем выводить на экран основные параметры (details) работы модуля nRF24l01.

Python

radio.openWritingPipe(pipes)
radio.printDetails()

1
2

radio.openWritingPipe(pipes)

radio.printDetails()

Подготовим сообщение в форме строки. Это сообщение мы будем передавать плате Arduino UNO.

Python

sendMessage = list(«Hi..Arduino UNO»)
while len(sendMessage) < 32:
sendMessage.append(0)

1
2
3

sendMessage=list(«Hi..Arduino UNO»)

whilelen(sendMessage)<32

sendMessage.append()

Начнем запись информации в радио модуль и будем продолжать запись пока не закончится вся строка для передачи. Одновременно с этим зафиксируем текущее время и выведем на экран сообщение об успешной передаче (в целях отладки).

Python

while True:
start = time.time()
radio.write(sendMessage)
print(«Sent the message: {}».format(sendMessage))
send
radio.startListening()

1
2
3
4
5
6

whileTrue

start=time.time()

radio.write(sendMessage)

print(«Sent the message: {}».format(sendMessage))

send

radio.startListening()

Если передача сообщения завершена и радио канал закрыт (не доступен) более 2-х секунд, то выведем на экран сообщение о том, что время истекло (timed out).

Python

while not radio.available(0):
time.sleep(1/100)
if time.time() — start > 2:
print(«Timed out.») # print error message if radio disconnected or not functioning anymore
break

1
2
3
4
5

whilenotradio.available()

time.sleep(1100)

iftime.time()-start>2

print(«Timed out.»)# print error message if radio disconnected or not functioning anymore

break

Закрываем прослушивание (listening) радио канала, закрываем соединение и заново открываем соединение спустя 3 секунды чтобы передать другое сообщение.

Python

radio.stopListening() # close radio
time.sleep(3) # give delay of 3 seconds

1
2

radio.stopListening()# close radio

time.sleep(3)# give delay of 3 seconds

Description

Throughout this tutorial we’ll be using the FS1000A transmitter and corresponding receiver, but the instructions provided also work with other 433MHz transmitter/receiver modules that work in a similar fashion. These RF modules are very popular among the Arduino tinkerers and are used on a wide variety of applications that require wireless control.

These modules are very cheap and you can use them with any microcontroller, whether it’s an Arduino, ESP8266, or ESP32.

Specifications RF 433MHz Receiver

  • Frequency Range: 433.92 MHz
  • Modulation: ASK
  • Input Voltage: 5V
  • Price: $1 to $2

Specifications RF 433MHz Transmitter

  • Frequency Range: 433.92MHz
  • Input Voltage: 3-12V
  • Price: $1 to $2

Where to buy?

You can purchase these modules for just a few dollars. Click here to compare the RF 433MHz transmitter/receiver on several stores and find the best price.

Примеры кода для работы с передатчиком MX-F01 с использованием библиотеки VirtualWire

Пример 1

Данный скетч будет отправлять раз в секунду сообщение «Hello World». Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.

const int led_pin = 13; // Пин светодиода const int transmit_pin = 12; // Пин подключения передатчика

void setup() vw_set_tx_pin(transmit_pin); vw_setup(2000); // Скорость передачи (Бит в секунду) pinMode(led_pin, OUTPUT); >

void loop() const char *msg = «Hello World»; // Передаваемое сообщение digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи delay(1000); // Пауза 1 секунда >

Пример 2

Данный скетч будет отправлять раз в секунду сообщение, которое содержит количество миллисекунд, прошедшее с момента начала выполнения текущей программы. Для наглядности, в начале передачи будет загораться светодиод, а после окончания – гаснуть.

const int led_pin = 13; // Пин светодиода const int transmit_pin = 12; // Пин подключения передатчика

void setup() vw_set_tx_pin(transmit_pin); vw_setup(2000); // Скорость передачи (Бит в секунду) pinMode(led_pin, OUTPUT); >

void loop() digitalWrite(led_pin, HIGH); // Зажигаем светодиод в начале передачи

String millisresult = String(millis()); // Присваиваем переменной значение, равное количеству миллисекунд с момента начала выполнения текущей программы char msg; millisresult.toCharArray(msg, 14);

vw_send((uint8_t *)msg, strlen(msg)); // Отправка сообщения vw_wait_tx(); // Ожидаем окончания отправки сообщения digitalWrite(led_pin, LOW); // Гасим светодиод в конце передачи delay(1000); // Пауза 1 секунда >

Что такое LoRa?

Термин LoRa означает Long Range. Это беспроводная технология радиочастот, представленная компанией Semtech. Технология LoRa может использоваться для передачи двунаправленной информации на большие расстояния без больших затрат энергии. Это свойство может использоваться удаленными датчиками, которые должны передавать свои данные, просто работая на одном заряде небольшой батареи.

Сигналы LoRa при определенных условиях могут преодолевать расстояние 15-20 км и работать от батареи в течение многих лет. Помните, что LoRa, LoRaWAN и LPWAN – это три разных термина, и их не следует путать друг с другом.

Принципиальная схема передающей части проекта

Схема пульта дистанционного управления лодкой на основе платы Arduino представлена на следующем рисунке.

В схеме одни концы кнопок подключены к цифровым контактам D6-D9 платы Arduino, а другие их концы подключены к общему проводу (земле). Соответственно, если мы нажимает одну из кнопок, на соответствующий цифровой контакт платы Arduino подается напряжение низкого уровня (low). Четыре параллельных входа микросхемы HT12E подключены к цифровым контактам D2-D5 платы Arduino, поэтому с помощью платы Arduino мы можем легко управлять состоянием этих контактов.

Микросхема HT12E представляет собой 12-битное кодирующее устройство (encoder, энкодер), которое преобразует параллельные входные данные в последовательные выходные данные. Из этих 12 бит 8 бит представляют собой биты адреса, которые можно использовать для управления несколькими приемниками. Контакты A0-A7 микросхемы HT12E являются контактами входного адреса. В нашем проекте мы будем управлять только одним приемником, поэтому нам не нужно изменять этот адрес и поэтому мы замкнули эти контакты на землю. Если вам необходимо с помощью HT12E управлять несколькими приемниками с помощью одного передатчика, то вам в этом случае можно использовать двухрядные переключатели (dip switches). AD8-AD11 – это входные контакты, с их помощью можно управлять выходными контактами D0-D3 декодера HT12D. Также нам в нашей схеме необходим излучатель с частотой 3 кГц, работающий от 5V. Также при питании от 5V нам необходим резистор сопротивлением 1.1 МОм. Выход микросхемы HT12E мы подключили к передающему радио модулю. Поскольку все компоненты нашей схемы работают от напряжения 5V, то в схему мы добавили регулятор напряжения 7805 – поэтому мы можем подавать напряжение на вход схемы в диапазоне 6-12 В.

Необходимые компоненты

  1. Кнопки – 4 шт.
  2. Электродвигатели постоянного тока – 2 шт.
  3. Пропеллеры для двигателей (мы использовали самодельные) – 2 шт.
  4. Common PCB (печатная плата).

Внешний вид необходимых для проекта компонентов показан на следующем рисунке.

Передающие и приемные радиочастотные модули (RF-модули) на 433 МГц

Данные типы радио модулей пользуются большой популярностью у радиолюбителей вследствие их низкой стоимости и простоты работы с ними. Они идеально подходят для радиосвязи на небольшие расстояние для передачи небольших объемов информации. Они используют простейший вид модуляции – амплитудную манипуляцию (АМ, АТ). При данном виде модуляции при передаче 1 в окружающее пространство излучается радиоволна с фиксированной (неизменной) частотой, а при передаче 0 ничего не излучается. То есть при передаче логического нуля данные модули не расходуют энергии поскольку в эфир ничего не излучается, что делает подобные модули весьма энергоэффективными, что особенно полезно в устройствах, работающих от батарей.

Принципиальная схема приемной части проекта

Схема приемной части дистанционно управляемой лодки представлена на следующем рисунке.

Микросхема HT12D представляет собой 12-битный декодер, который преобразует данные из последовательного вида в параллельный. Входные контакты HT12D подключены к последовательному выходу приемного радио модуля. Среди этих 12 бит 8 бит (A0-A7) являются битами адреса и микросхема HT12D будет декодировать входные данные только при совпадении адреса. Чтобы соответствовать передающей части проекта мы контакты адреса микросхемы HT12D подключили к общему проводу схемы (ground). D8-D11 являются выходными контактами микросхемы HT12D – с них мы будем получать данные в параллельном виде. Чтобы получить нужную частоту работы схемы необходимо подключить к контактам осциллятора микросхемы HT12D резистор сопротивлением 33-56 кОм. Светодиод, подключенный к 17-му контакту микросхемы HT12D, будет свидетельствовать о корректном приеме данных, он будет зажигаться только когда у приемника будет связь с передатчиком. Входное напряжение приемной части проекта также может составлять 6-12 В.

Для управления двигателями с целью уменьшения веса конструкции мы использовали микросхему драйвера двигателей L293D. Данная микросхема отлично подходит для управления 2-мя двигателями в 2-х направлениях. Микросхема L293D имеет 16 контактов, на следующем рисунке показана ее распиновка.

Контакты 1, 9 дают разрешение на работу (enable pin), на них мы подаем 5 В. Контакты 1A, 2A, 3A и 4A являются контактами управления. Двигатель будет вращаться вправо если на контакт 1A подано low, а на контакт 2A подано high. Двигатель будет вращаться влево если на контакт 1A подано high, а на контакт 2A подано low. Соответственно, мы подключили эти контакты к выходам микросхемы декодера. К контактам 1Y, 2Y, 3Y и 4Y подключаются двигатели. На контакт Vcc2 подается питающее напряжение. Если вы используете высоковольтные моторы, то на этот контакт необходимо подать соответствующее напряжение.

Сборка корпуса передающей части проекта

Для пульта дистанционного управления (ДУ) нашей лодкой необходимо подходящий корпус – вы можете изготовить его по своему усмотрению. Мы для изготовления корпуса пульта ДУ использовали листы MDF толщиной 4mm, также для этого можно использовать клееную фанеру, пенопластовый лист или картон. Из этих листов мы вырезали два кусочка длиной 10 см и шириной 5 см – на них мы обозначили позиции кнопок. Кнопки вправо-влево мы разместили с левой стороны листа, а кнопки вперед-назад – с правой. С другой стороны листа мы подключили кнопки к основной части схемы. Помните о том, что обычная кнопка (pushbutton) имеет 4 контакта – по два на каждой стороне. Один контакт кнопки необходимо подключить к плате Arduino, а другой – к общему проводу (ground).

После этого мы поместили основную плату нашего пульта ДУ между двумя листами MDF и скрепили эти листы между собой с помощью длинных болтов.

Принципы работы дистанционно управляемой лодки на Arduino

Лодка имеет два двигателя, назовем их правым и левым двигателями. Если двигатель вращается по часовой стрелке, то при соответствующей форме пропеллера воздух забирается спереди и выталкивается сзади. Таким образом, создается движущая вперед сила.

Движение вперед: если оба двигателя вращаются по часовой стрелке, то лодка движется вперед.

Движение назад: если оба двигателя вращаются против часовой стрелки, то лодка движется назад.

Движение влево: если вращается только правый мотор, то движущая сила вперед создается только с правой стороны, поэтому лодка поворачивается влево.

Движение вправо: если вращается только левый мотор, то лодка поворачивает вправо.

Мы подключили входные контакты драйвера двигателей к четырем выходным битам декодера (D8-D11). Мы можем управлять этими 4-мя выходами при помощи замыкания контактов AD8-AD11 в передающей части проекта на землю (ground). К примеру, если мы замкнем на землю AD8, то это приведет к срабатыванию (активации) D8. Таким образом мы можем управлять вращением двух моторов в двух направлениях с использованием этих 4-х выходов. Но мы не можем непосредственно управлять двумя двигателями (а это необходимо для движения вперед и назад) с помощью одной кнопки, поэтому для этой цели мы в проекте и использовали плату Arduino – с ее помощью мы можем управлять входными контактами кодирующего устройства по нашему желанию.

Improving range of 433MHz RF modules

The antenna that you use for both the transmitter and receiver can really affect the range you’ll be able to obtain with these RF modules. In fact without an antenna you’d be lucky to communicate over a distance of more than a meter.

With a proper antenna design, you’ll be able to communicate over a distance of 50 meters. Of course that is outdoors in an open space. Your range indoors, especially through walls, will be slightly weakened.

The antenna need not be complicated. A simple piece of single core wire can make an excellent antenna for both the transmitter and receiver. The antenna diameter hardly has any importance, as long as the length of the antenna is maintained.

The most effective antenna has the same length as the length of the wave it is used for. For practical purposes, half or a quarter of that length will suffice.

The wavelength of a frequency is calculated as:

Wavelength of frequency = Speed of the transmission (v)
Transmission frequency (f)

In air, speed of transmission is equal to the speed of light, which is 299,792,458 m/s to be precise. So, For the 433 MHz band the wavelength is:

Wavelength of frequency = 299,792,458 m/s
433,000,000 Hz
= 0.6924 meters
= 69.24 cm

As full wave 69.24 cm antenna is a pretty long antenna, it is not very practical to use. That’s why we’ll opt for a quarter wave antenna which works out to about 17.3 cm or 6.8 inches.

Just in case, if you are experimenting with other radio transmitters that use different frequencies, you can use the same formula to calculate the required antenna length. Pretty easy, Right?

Even a 17.3 cm antenna can seem inconvenient in your tiny Arduino project. But Do NOT be tempted to coil the antenna to make it more compact as this will seriously impact range. A straight antenna is always best!