Беспилотники для любознательных [В Н Гололобов] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

Гололобов В.Н. Ульянов В.И.

5

!<

SZ
ГО

о
L fi

2
ос

для любознательных
ПРОСТО)
Осложном.

|5»и,к^мерл MjX С 4 0 0 /

( ДОСТАВ»

760 руб.
—1
яявш

22 руб.

0 ближайшая даст»

VD

пщ ня
V о(ч|'о>

•f fi-Hw.c',

W u e i ib fa ry
(.(»’ A'tJs ! Л / 1Ш < i» * v K O r > tin - A n lu m u

!h r* W jr.u y y f l.w s yn u !u /

Ч'»еГ*< Ч,- ’4 b y Hii ' t >‘ j;i tn ,f ■IU"*.1.« „ i.,isr ! 0 On1AkH pin :in» Ai^win-t ilff- k ' U i i f f j M ) VhfliUiS Au’,:r,1)Л}.

«

,4иИ'1

jлепитьАпМпоипо13
] .„ 1/ор.
Купи it,

:'!)•'.)

28/Т*
I I|iiiTii §«**©§ т а т я *

11111Г... .... "..
М , «»'*«!*/

(,«f г!>Л1

~*f~ $ / \(& -■*-,

V

Рис. 15.10. Результат поиска в Интернете

Глава 15. Приручаем модуль трехосевого гироскопа и акселерометра

163

Новичок: В комментариях дальше упоминается еще что-то,

что это?
Не знаю, что и сказать. Похоже, гироскоп дает не только
координаты в плоскости, но и координаты в пространстве — в
комментариях упоминается гравитация.
Вероятно, следует обратиться к описанию модуля гиро­
скопа, нужно внимательнее прочитать все, что написано в про­
грамме. Это правильный подход. Однако я пока не собираюсь
программировать Arduino для полетов, поэтому хочу найти
что-то более простое и понятное.
Введя в строку поиска на Яндексе arduino mpu6050, я обна­
руживаю такой вариант (рис. 15.10).
Может быть, и вам пригодится ссылка на этот ресурс [22].
Автор урока использует другую библиотеку, добавив ссылку на
нее в свой рассказ. Я скачиваю библиотеку, провожу манипуля­
ции, чтобы превратить ее в zip-файл, который легко импорти­
руется в программу Arduino.
ПРИМЕЧАНИЕ.

Среди установленных ранее библиотек появля­
ется новая, которую я назвал Kalman, когда архи­
вировал содержимое скачанных файлов.
Есть и пример, но он ориентирован на вывод данных через
интерфейс PC на дисплей, библиотеки которого у меня нет.
Но автор урока предлагает свою программу, которую можно
скачать на его странице. Что я и делаю. Хотелось бы сказать: к
своему удовольствию. Но нет.
Предыдущая программа что-то «зацепила» в настройках
модуля MPU-6050, отчего монитор порта показывает мне одно
и то же, как я не меняю положение модуля (рис. 15.11).

Новичок: Придется, видимо, разбираться. Или нет?

Беспилотники для любознательных

164

Х:27 Y:49
Х:27 У:49
Х:27 Y:49
Х:27 Y:49
Х:27 Y:49
Х:27 Y:49
Х:27 Y:49

Рис. 15.11. Работа программы из урока

Будем разбираться. Читая обсуждение статьи, я вижу, что не
только у меня все так плохо, у других не лучше. Один из участ­
ников обсуждения предлагает исправленный код программы:
♦include
♦include «Kalman.h»
Kalman kalmanX;
Kalman kalmanY;
uint8_t IMUAddress = 0x68;
/* IMU Data */
int var;
intl6_t accX;
intl6_t accY;
intl6_t accZ;
intl6_t tempRaw;
intl6_t gyroX;
intl6_t gyroY;
intl6_t gyroZ;
double accXangle; // Расчет углов, используя акселерометр
double accYangle;
double temp;
double gyroXangle = 180; // Расчет углов, используя гироскоп

Глава 15. Приручаем модуль трехосевого гироскопа и акселерометра

165

double gyroYangle = 180;
double compAngleX = 180; // Расчет углов, используя компас
double compAngleY = 180;
double kalAngleX; // Расчет углов с фильтром Kalman
double kalAngleY;
uint32_t timer;
void setup() {
Wire.begin();
Serial.begin(9600);
i2cWrite(ОхбВ,0x00); // Запрещаем ждущий режим
kalmanX.setAngle(180); // Задаем начальные углы
kalmanY.setAngle(180);
timer = micros();
var=0;

}
void loop() {
while (var= 0.0) Serial.print(« «); // добавим пробел для
// положительных значений
Serial.print(а,1);
Serial.print(« meters, «);
if (a >= 0.0) Serial.print(« «); // добавим пробел для
// положительных значений
Serial.print(а*3.28084,0);
Serial.println(« feet»);
delay(500);

}
double getPressure()

{
char status;
double T,P,p0,a;
/ / В ы должны вначале выполнить измерение-температуры,
// чтобы выполнить чтение давления.
// Начинаем измерение температуры:
// Если запрос успешен, требуется некоторое количество ms,
// чтобы дождаться ответа.
// Если запрос неудачен, вернется 0.
status = pressure.startTemperature();
if (status != 0)

{
// Ждем завершения измерения:
delay(status);
//
//
//
//

Извлекаем завершенное измерение температуры:
Заметьте, что измерение сохраняется в переменной Т.
Используйте '&Т' для передачи адреса Т в функцию.
Функция возвращает 1,если все удачно, и 0, если нет.

status = pressure.getTemperature(Т);

Глава 17. Высота полета или модуль барометра

187

if (status != 0)

{
//
//
//
//
//

Начинаем измерение давления:
Параметр является установкой дискредитации, от 0 до 3
(выше разрешение, дольше ждать).
Если запрос удачен, возвращается количество ms ожидания.
Если запрос неудачен,возвращается 0.

status = pressure.startPressure(3);
if (status != 0)

{
// Ждать завершения измерения:
delay(status);
//
//
//
//
//
//
//
//

Извлекаем завершенное измерение давления:
Заметьте, что измерение сохраняется в переменной Р.
Используйте '&Р', чтобы передать адрес Р.
Заметьте также, что функция требует предыдущего
измерения температуры (Т).
(Если температура стабильна, вы можете делать одно
измерение температуры для нескольких измерений давления.)
Функция возвращает 1, если все хорошо, и 0, если нет.

status = pressure.getPressure(Р,Т);
if (status != 0)

{
return(P);

}
else Serial.println(«error retrieving pressure
measurement\n»);

}
else Serial.println(«error starting pressure
measurement\n»);

}
else Serial.println(«error retrieving temperature
measurements»);

}
else Serial.println(«error starting temperature
measurements»);

}

Беспилотники для любознательных

188

relative
relative
relative
relative
relative
relative
relative
relative
relative
relative
relative
relative
relative

altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:
altitude:

1-7
1-5
1-6
2-1
1-8
1-5
1.8
1.7
1.5
1.6
1.4
1-7
1-5

meters,
meters,
meters,
meters,
meters,
meters,
meters,
meters,
meters,
meters,
meters,
meters.
meters,

6
5
5
7
6
5
6
6
5
5
5
6
5

feet
feet
feet
feet
feet
feet
feet
feet
feet
feet
feet
feet
feet

Puc. 17.4. Изменения данных при перемещении датчика

И вот, чем меня программа заинтересовала (рис. 17.4).
Вы догадались! Я поднял датчик вместе с модулем Arduino
на высоту около 2 метров. То есть, если вы используете датчик
на своем беспилотнике, вы сможете использовать относитель­
ную высоту по стартовой позиции, а не измерять ее относи­
тельно уровня моря. Я, к слову, удивился, что смотрю из окна
на высоте около 190 метров (рис. 17.1), это, видимо, от того,
что моря из моего окна не видно.
ПРИМЕЧАНИЕ.

Ошибка измерения высоты в 0,5 метров, навер­
ное, не столь важна при полете на высоте
100 метров, но теперь мне становится ясно, что
при посадке лучше использовать ультразвуковой
датчик.
При размышлениях о высоте полета, я заинтересовался
самим маршрутом. И я решил посмотреть, как работает GPS.

ГЛАВА 18

ПРОКЛАДЫВАЕМ
ИКОНТРОЛИРУЕМ
МАРШРУТ,
ИСПОЛЬЗУЕМ GPS
Для солидных беспилотников можно использовать GPSнавигатор, чтобы отслеживать маршрут передвижения.
Относительно недорогую модель можно купить на Алиэкспресс
(рис. 18.1).

С*?Девают»* *Ш
тжшт* (38добавит)@

Рис. 18.1. GPS-трекер

Беспилотники для любознательных

190

t

ПРИМЕЧАНИЕ.

Г Работа навигатора требует наличия SIM-карты, Л
поскольку команды отправляются через SMS^ сообщения, также приходит ответ.___________ ^

Если верить описанию, формат команды выглядит так:
b e g in l2 3 4 5 6

Здесь 123456 — это пароль «по умолчанию», который вы
можете изменить при настройке. Настройка описана в руко­
водстве, там же вы найдете команду записи номера управляю­
щего телефона.
Навигатор при наличии подключения к Интернету вашего
тарифного плана у вашего провайдера может обращаться к серверу
(рис. 18.2), например, для получения информации о маршруте.

йР1
С1ГО=Ю О

§&£ттш

тш
йт
шЖв0тй, ошштё^гттш

1А»т ч '( «-р ш SPS
>•

т|Ш«рж

-чСС

Шш p*3f»iem w преете#, удобмо* *

>• '

-I

Qtebfliat, Eefeim. TtisnJki, Х«мш.
H m u k , QMxwQPS. Шъщтр. в *
llisre. Ш *тч, ШяФёт, Ш Л т Ш ,
Ш я т Ш и т ф и«сколько д о т о м
медамй Полный список
ш
ат
щшмштлшЛчщмтшмт
можноM j



Рис. 18.2. Сайт, предлагающий услуги GPS-навигации

Глава 18. Прокладываем и контролируем маршрут, используем GPS

191

Рис. 18.3. Отображение маршрута через GPS-навигатор

Для личного пользования услуга может быть бесплатной.
Располагая планшетом или смартфоном, вы получите маршрут
на карте (рис. 18.3).

|

С 0ВЕТ-_______________________________________________

J f

Г Если вы решите купить GPS-трекер, то обраI

тите внимание перед покупкой на гнездо для SIMкарты (рис. 18.4).____________ ____________________________________________________^

Оба гнезда правильные, но первое, похоже, предназначено
для установки карты одного образца, тогда как в руководстве
гнездо для карты другого образца.
Новичок: Можно ли использовать любую карту в любом

гнезде?

192

Беспилотники для любознательных



---

Рис. 18.4. Разные гнезда для SIM-карты:
а) гнездо для SIM-карты у трекера на Алиэкспресс;
6) гнездо для SIM-карты в руководстве

Это предстоит выяснять отдельно.
ВНИМАНИЕ.

Ваша модель будет работать с GPS-навигатором
только там, где есть уверенная связь с вашим
провайдером.
Подумайте — нужно ли это вам? А при наличии желания
использовать навигатор, посмотрите, не сможете ли вы найти
GPS-модуль, который поддерживал бы работу с Arduino, напри­
мер, такой (рис. 18.5).
Есть над чем подумать!?

Глава 18. Прокладываем и контролируем маршрут, используем GPS
SIM900 GFR5/GSM -цун р i нги»ик- t u /t
совм естимый с UNO Mega 2560

193
,ф= 255) {
//уменьшаем скорость, чтобы сбалансировать
spd -= (pi - 255);
continue;

}
if(р2 >= 255) {
spd -= (р2 - 255);
continue;

}
if(рЗ >= 255){
spd -= (рЗ - 255);
continue;

}
if(р4 >= 255){
spd -= (p4 - 255);
continue;

}
analogWrite(propl, pi);
analogWrite(prop2, p2);
analogWrite(ргорЗ, рЗ);
analogWrite(prop4, p4);
// Serial.print(«pi:\t»);
// Serial.print(pi);
// Serial.print(«p2:\t»);
// Serial.print(p2);
// Serial.print(«p4:\t»);
// Serial.print(p3);
// Serial.print(«p4:\t»);
// Serial.println(p4);
//
//
//
//
//

другие детали поведения программы здесь
если вы параноик, вы можете часто
тестировать, чтобы увидеть другие детали
если mpulnterrupt истинно, и, если так, «break;» от
while() loop, чтобы немедленно обработать, данные MPU

}
// сбрасываем флаг прерывания и получаем
// байт статуса INT_STATUS
mpulnterrupt = false;

210

Беспилотники для любознательных

mpuIntStatus = mpu.getlntStatus();
// получим текущий счет FIFO
fifoCount = mpu.getFIFOCount ();
// проверка переполнения (этого не случится
// пока наш код не будет слишком неработоспособный)
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
// сброс, так что мы можем продолжать чисто
mpu.resetFIFOO;
Serial .println (F («FIFO overflow!»));
// иначе проверим прерывание готовности данных DMP
// (это будет случаться часто)
} else if (mpuIntStatus & 0x02) (
// ждем правильной длины доступных данных, должно быть
// ОЧЕНЬ короткое ожидание
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount ();
// читаем пакет из FIFO
mpu.getFIFOBytes (fifoBuffer, packetSize);
// проследив счет FIFO, в случае, когда > 1, пакет доступен
// (это позволит нам сразу читать дальше без ожидания
// прерывания)
fifoCount -= packetSize;
// отображает углы Euler (Эйлера) в градусах
mpu.dmpGetQuaternion (&q, fifoBuffer);
три.dmpGetGravity(Sgravity, &q);
три.dmpGetYawPitchRoll (ypr,-■&% &gravit-y)pitch = (ypr[1] * 180/M_PI);
roll = (ypr[2] * 180/M_PI);
#ifdef OUTPUT_READABLE_YAWPITCHROLL
Serial.print(«ypr\t»);
Serial.print(ypr[0] * 180/M_PI);
Serial.print(«\t»);
Serial.print(pitch);
Serial.print(«\t»);
Serial.println(roll);
#endif

Глава 19. Бортовой компьютер - командир квадрокоптера

211

// Обновляем Pidbi
pitchPID.Compute();
rollPID.Compute();
// Увеличиваем spd, если мы уменьшали spd
if(spd < UP){
spd++;

}
}
}
Это, вы понимаете, не весь текст программы, часть его
скрывается за лаконичными строками #i n c l u d e . Но мне этого
хватило, чтобы познакомиться с тем, кто будет «пилотом» бес­
пилотника.
Новичок: В бортовой компьютер можно загрузить про­

грамму полета. Но если эту программу прихо­
дится менять в полете?

ГЛАВА 20

СВЯЗЬ «ЗЕМЛИ»

с «пилотом»

БЕСПИЛОТНИКА
Радиосвязь
в управлении беспилотником

I

Задавая вопрос об изменении плана полета, следует вспом­
нить...
Новичок: Я понял, как отправлять аппарат в полет?
Правильно, мы оправляем аппарат в полет с пульта. А пульт,
естественно, должен иметь радиосвязь. Я не радиоинженер. Не
буду даже уверять, что полностью владею информацией. И о
пультах уже упоминалось ранее, как и про протоколы радио­
связи. Я попробую еще раз пересказать все то, что сам прочи­
тал по этому вопросу, и можно подумать, какой пульт управле­
ния лучше выбрать?
Основные вопросы при выборе радиоуправления:
♦цена оборудования;
♦совместимость пультов управления с уже имеющимся
приемником;
♦количество каналов управления (главный критерий выбора).

Глава 20. Связь «земли» с «пилотом» беспилотника

213

СОВЕТ.

Пульт управления лучше покупать вместе с при­
емником, хотя это дорогостоящее оборудование.
Самый дешевый, наверное, пульт имеет 4 канала
управления (рис. 20.1).

Рис. 20.1. Недорогой пульт управления на 4 канала
с приемником в магазине rc-today.ru

Четырех каналов управления должно хватать для управле­
ния такими функциями:
♦газ (быстрее, медленнее);
♦повороты (влево, вправо);
♦подъем (вверх, вниз);
♦наклоны при поворотах.
Новичок: Если нужны дополнительные функции, то будут

нужны и дополнительные каналы?
Безусловно! У беспилотных летательных аппаратов, пред­
назначенных для производственных целей, каналов может
быть очень много, если учитывать, что они могут осуществлять
самостоятельный полет по предварительному заданию. У них
могут быть резервные каналы, на которые беспилотник пере­
ходит, если связь становится плохой.

214

Беспилотники для любознательных

Новичок: И кроме авиамоделей, есть и модели кораблей,

модели автомобилей.
Конечно, и об этом тоже не следует забывать.

Стандарты передачи
управляющего сигнала

I

Радиоуправляемые модели существуют давно. За это время
появилось много стандартов. Можно встретить загадочную
аббревиатуру, например: PWM, PPM, SBUS, DSM2, DSMX, SUMD.
И к этому добавляются разные частоты для управления моде­
лями. Я могу сослаться на оригинальные статьи, которые читал
[23], но постараюсь изложить это в той мере, в какой запомнил
и понял сам.
PW M — это наиболее широко применяемый способ пере­
дачи управляющего сигнала. Широтно-импульсная модуляция
подразумевает сохранение периода повторения импульсов при
изменении соотношения длительностей высокого и низкого
уровня.

Ш

ПРИМЕЧАНИЕ.
Г~1------------------------------------ N

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

\ ____________________________________________ J
PPM — это позиционированная импульсная модуляция.
Как я понял, для самолета выглядит все так:
♦мы управляем мотором модели самолета и двумя сервод­
вигателями;

Глава 20. Связь «земли» с «пилотом» беспилотника

215

♦для каждого из моторов формируется свой широтно-им­
пульсный сигнал, и от каждого из них берется по одному
импульсу.
Полученные последовательности трех импульсов с корот­
кими промежутками разделяют более длинной паузой
(рис. 20.2). Такой сигнал, представляющий три PWM сигнала,
модулируется высокой частотой. Так я это понял.
________ Кадр

1 | 2 | 3 |4 j..Me)KKaApoBbi^nHTepBa^
СН1 р —-

2000

С Н 2 ____

1000

СНЗ

1500

СН4

700

Рис. 20.2. Сигнал PPM

SBUS — это разновидность последовательной передачи
данных. Многие микроконтроллеры имеют встроенный модуль
последовательного обмена данными (UART). SBUS инверти­
рует сигналы UART, что, наверное, получается при добавлении
транзисторного ключа к выводу Тх микроконтроллера.
DSM2 — протокол разработан для Spektrum приемо-передатчиков управления летающими аппаратами. Передаваемые
каждые 11 мс или 22 мс 16 байт от UART содержат в первых
двух байтах, например, информацию:
♦об идентификаторе канала;
♦о положении сервопривода.
За этими байтами следует 14 байтов данных.
Массив 16 битовых чисел отправляется, начиная с 15 бита
(MSB). Последним приходит 0 бит (LSB). Протокол предусма­
тривает смену канала связи, если прежний работает неудовлет­
ворительно.
DSMX следующее поколение после DSM2. И это не един­
ственные протоколы работы пультов управления и приемни­
ков аппаратов.

Беспилотники для любознательных

216

Рабочие частоты для управления моделями 27 МГц, 72 МГц,
433 МГц, 900 МГц, 1,3 ГГц и 2,4 ГГц. Из которых частота 27 МГц
применялась давно, и хорошо себя зарекомендовала: даль­
ность и малая чувствительность к помехам в виде препятствий.
Но это не тогда, когда рядом работает такой же передатчик.
ПРИМЕЧАНИЕ.

Сейчас частота 2,4 ГГц используется чаще
остальных.

В первую очередь, достоинство частоты 2,4 ГГц, если срав­
нивать с управлением на частоте 27 МГц — это небольшая
антенна! Это очень важно и для пульта управления, и особенно
для приемника, расположенного на модели.
Пульты управления имеют два джойстика, но разные
модели могут различаться тем, что делает каждый из них. Не
помню, все модели пультов или только дорогие модели позво­
ляют подключить их к программе симулятору полета. Практика
виртуальных полетов очень помогает сберечь летательной
аппарат.
Новичок: А все-таки, что лучше: создать свой пульт управ­

ления или взять готовый?
Если бы мне задали такой вопрос, я бы ответил: создавать
свой пульт с радиоканалом —это интересно, но я предпочел бы
купить готовый.
Прочитав про радиоканал на частоте 2,4 ГГц, я вспомнил,
что у меня есть модули nRF24L01, работающие на этой частоте.

ГЛАВА 21

ЗНАКОМЬТЕСЬ:
МОДУЛИ РАДИОСВЯЗИ
С ЧАСТОТОТАМИ
2,4 ГГц И 433 МГц

Я и раньше встречал рассказ на одном из сайтов [6] о том,
как создать передатчик и приемник с модулями nRF24L01,
которые с внешней антенной могут работать на расстоянии до
километра. Модули используют интерфейс SPI, который отли­
чается от интерфейса 12С, в первую очередь, наличием отдель­
ных линий для приема и передачи данных.
Для упорядочения работы по протоколу SPI разделяют:
♦ведущее устройство (как и Master в PC);
♦ведомые устройства, которых может быть несколько.
Для обращения к ним ведущее устройство использует
линии выбора ведомого устройства.
Новичок: А сколько этих линий?
Этих линий будет столько, сколько ведомых устройств есть
в аппарате (рис. 21.1).
Выводы SS служат для выбора одного из устройств на шине
SPI. Как работает этот интерфейс можно посмотреть в про­
грамме ISIS, используя готовый проект с сайта [12], спасибо
автору статьи, который не только рассказал о работе карты SD.

Беспилотники для любознательных

218
Ведущее
устройство

Ведомые
устройства

Рис. 21.1. Включение устройств интерфейса SPI

ПРИМЕЧАНИЕ.

Автор статьи подготовил и программу для
микроконтроллера, и образ карты SD для экспе­
римента.
Модель карты SD есть в программе ISIS (Proteus); для
поиска достаточно ввести в строку Keywords название модели
т т с (рис. 21.2).
ПРИМЕЧАНИЕ.

Обратите внимание, что микроконтроллер,
используемый автором, базовый для модуля
Arduino Uno.
При использовании готового проекта, если вы поместили
папку в удобное для вас место, не меняя в ней ничего, допол­
нительных усилий не требуется. Но, если вы захотите изменить

Глава 21. Знакомьтесь: модули радиосвязи с частототами 2,4 ГГц и 433 МГц 219

Рис. 21.2. Поиск модели SD-карты

Рис. 21.3. Выбор образа карты

содержание SD-карты, вам потребуется в свойствах карты ука­
зать ее образ (рис. 21.3) с помощью отмеченной справа кнопки.
Новичок: А... причем здесь SD карта?
Упреждая все вопросы о роли карты SD, ведь говорим-то
мы о радиомодуле, я хочу заметить, что эту карту можно

Беспилотники для любознательных

220

использовать в качестве «черного ящика» авиамодели! Можно,
вероятно, записать на карту сигналы модели парохода, кото­
рые воспроизводить соответствующей командой. И, сознаюсь,
модели nRF24L01 для Proteus я не нашел, иначе рассказал бы
про интерфейс с помощью модели радиомодуля.
Итак. Общение с картой SD начинается с ее инициализа­
ции. Доверимся автору статьи —для этого сигналы линии MOSI
(на модели DI) и SS (на модели CS, выбор кристалла) перево­
дятся в высокий логический уровень.
ПРИМЕЧАНИЕ.
' Напомню, что активный уровень выбора кри­

сталла - низкий.

Затем следует подать не менее 74 тактовых импульсов.
Чтобы установить высокий уровень на линии MOSI, отправ­
ляют шестнадцатеричное число OxFF. Для 74 тактовых импуль­
сов потребуется отправить OxFF раз десять. Затем активируется
сигнал выбора (SS, на модели CS) установкой его в низкий уро­
вень, чтобы подать команду CMD0 (число 0x40) без аргументов
и с CRC 0x95. На это SD-карта должна ответить, установив 0x01
(рис. 21.4).
СОВЕТ.

Я рекомендую вам прочитать статью и рассмо­
треть, если у вас есть программа Proteus или
осциллограф. Вам будет понятнее то, как рабо­
тает интерфейс SPI.
А я хочу еще раз поблагодарить автора статьи, поскольку
мне, например, статья однажды помогла найти неисправность
гнезда для SD-карты.

Глава 21. Знакомьтесь: модули радиосвязи с частототами 2,4 ГГц и 433 МГц 221

Рис. 21.4. Начало работы с SD-картой

Вернемся к радиомодулю, который работает похожим обра­
зом. Ведущий отправляет команды, nRF24L01 их выполняет.
Сегодня модуль с антенной можно приобрести на Алиэкспресс
относительно недорого (рис. 21.5).
Еще дешевле он обойдется, если вы решите сделать антенну
самостоятельно. Стоимость одного модуля без антенны сегодня
порядка 40 рублей. Если вы закажите несколько штук, а в этом
есть смысл, то за доставку вам придется платить только один
раз, и я посчитал бы это очень выгодной покупкой.
В один из дней меня заинтересовала работа этого радио­
модуля в паре с модулем Arduino, о чем я упоминал в своей
книге [1].
Когда-то мне приходилось сталкиваться с тем, что есть
необходимость с нескольких пультов управлять разными
устройствами, но так, чтобы работа пультов была независимой.
Узнав, что модуль nRF24L01 имеет множество каналов управ­
ления, я занялся опытами с ним.

Новичок: Опыты с помощью Arduino?

Беспилотники для любознательных

222

Рис. 21.5. Модуль nRF24L01 с антенной на Aliexpress

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

фрсшм-ртлишм

.

Рис. 21.6. Команда радиомодулю, линия MOSI

о к

Глава 21. Знакомьтесь: модули радиосвязи с частототами 2,4 ГГц и 433 МГц 223

Команда — записать в регистр состояния: легко убедиться,
что это число 00100111. Чтение происходит по заднему фронту
тактовых импульсов (на верхней диаграмме). То, каким фрон­
том производить чтение, можно изменить программно. В дан­
ном случае я использовал программный интерфейс SPI, но у
модуля Arduino есть и аппаратный модуль этого интерфейса.
Вид сигнала несколько отличается, как и способ чтения — по
переднему фронту тактовых импульсов. Вот пример сигнала на
шине MISO (рис. 21.7).

Рис. 21.7. Отклик радиомодуля
Как вы видите, можно разобраться в том, что говорит веду­
щий, что отвечает ведомый. Но удобнее с этим разбираться
тогда, когда вы можете видеть все четыре линии (рис. 21.8).
Для подключения к Arduino Uno я использовал выводы:
♦СЕ - вывод 9;
♦CS (SS) - вывод 10;
♦M O SI-вывод 11;
♦M ISO -вывод 12;
♦SCLK - вывод 13.

224

Беспилотники для любознательных

Рис. 21.8. Наблюдение за всеми линиями интерфейса радиомодуля

Для питания радиомодуля хватило того, что предоставляет
Arduino —внешнего питания не потребовалось.
У радиомодуля есть еще один сигнал — переключение с
приема на передачу. Но в данном случае радиомодуль работал
только на прием. Так произошло потому, что я для получения
осциллограмм использовал программу сканирования каналов
с помощью модуля Arduino.
Программа полезна, например, в том случае, когда вы пред­
варительно оцениваете ситуацию, но может использоваться и
для перехода модели на запасную частоту. Эта программа ска­
нирует все каналы модуля nRF24L01, определяя интенсивность
работы других устройств на частоте канала.
Называется программа scanner и она есть в примерах
библиотеки RF24. Не могу не привести вид монитора порта
Arduino при работе этой программы (рис. 21.9). Верхние две
строки —это номер канала. Ниже числа отображают интенсив­
ность работы на данном канале.
Приведенный рисунок показывает и количество каналов, и
«занятость» каждого из каналов.

Глава 21. Знакомьтесь: модули радиосвязи с частототами 2,4 ГГц и 433 МГц 225

Рис. 21.9. Работа программы сканирования каналов на 2,4 ГГц

ПРИМЕЧАНИЕ.

Поскольку исходный код программы доступен, вы
можете использовать его для программы связи
своего аппарата в той части, где нужен переход
на резервный канал.
Если использовать PPM протокол, если ваш летательный
аппарат будет использоваться в чистом поле, вы можете при­
менить радиоуправление на частоте 443 МГц. Этот вариант
проще, поскольку передатчик только заполняет ваш сигнал
несущей частотой, то есть, вам достаточно подвести сигнал
PPM к входу передатчика, который выглядит так (рис. 21.10).
1

ЗГ q ia c h ip

Moду'!и

i.у? ,«4W^ ' н ; , " f>

"} M! i, Г'Ф

и мригмни»

rwt'jH'K’ малый (м ш ер /1;м Аыиню о‘ о О;у коммягны

W i'u Пу.'Ь'.'Ь' ЛИ,'

у: :ро!!/;!4Ч1'1И

■ЙК
4 ^ M h ?

ftp t r a n s m i t t e r A n d r 4 » e m \m r

Л
ЬеиlAJiiid»дсч. f4йшJ п ilmsktn i oiet Altai1*/'■.1W“»«,'/’/


' ^ чащ 1ч>»»

>i1?,V
!«*гU1\Цн\.»?А
Г

*