FlySky i6

FlySky i6 — это готовая аппаратура радиоуправления: передатчик с двумя стиками держит оператор, а приёмник стоит на роботе. Для первого мобильного робота такой пульт удобен тем, что не нужно писать приложение для телефона или настраивать Wi-Fi сеть. Пульт уже формирует команды, а Arduino остаётся только прочитать каналы и превратить их в скорость моторов.
Пульт FlySky i6 сам не управляет мотором. Он передаёт положения стиков на приёмник. Приёмник выдаёт сигналы каналов, Arduino читает эти сигналы, а драйвер L298P уже подаёт питание на мотор. Обязательно проверяют направление, диапазон канала, нейтраль стика и остановку при потере связи.
Зачем это нужно
Телефонный Bluetooth-пульт хорош для первых опытов, но экранные кнопки не всегда удобны для точного движения. У FlySky i6 есть стики, которые возвращаются в центр, отдельные тумблеры и настройка каналов. Поэтому такой пульт часто используют для учебных машинок, роботов с манипулятором и стендов, где оператору нужно плавно менять скорость.
При этом пульт не отменяет программу безопасности. Если приёмник потерял связь или провод канала выпал, робот должен остановиться, а не продолжать последнюю команду.
Примеры аппаратуры
| Аппаратура | Чем похожа | Что проверить перед проектом |
|---|---|---|
| FlySky i6 | базовый учебный пульт на несколько каналов | какой приёмник в комплекте и какие выходы он даёт |
| FlySky i6X | похожий пульт из той же линейки | режимы приёмника, настройку каналов и совместимость |
| Turnigy 9X | распространённая аппаратура для хобби-проектов | тип модуля, приёмник и питание |
| Radiolink T8FB | компактный многоканальный пульт | способ настройки и формат выходных сигналов |
| RadioMaster Pocket | современный компактный пульт | протокол, приёмник и сложность настройки |
Главный вопрос не в форме корпуса пульта, а в том, что именно выдаёт приёмник: отдельные PWM-каналы, общий iBUS/SBUS-поток или другой протокол.
Главная идея
Цепочка управления состоит из нескольких частей:
стик пульта -> радиоканал -> приёмник -> Arduino -> драйвер мотора -> мотор
Если стик отклонён вперёд, приёмник не подаёт питание на мотор. Он только сообщает контроллеру новое значение канала. Поэтому направление, ограничение скорости, плавность и аварийная остановка задаются в программе.
PWM и iBUS
У приёмников FlySky часто встречаются два удобных для Arduino варианта.
| Вариант | Как выглядит для Arduino | Когда удобно |
|---|---|---|
| PWM-каналы | каждый канал подключается отдельным проводом к отдельному пину | простой опыт с 1–3 каналами на Arduino Uno |
| iBUS | много каналов идут одним последовательным потоком | когда каналов много или нужна более аккуратная проводка |
PWM проще объяснить: один провод канала даёт импульсы примерно от 1000 до 2000 микросекунд. Библиотека считывает длительность импульса и переводит её в удобный диапазон, например от -255 до 255.
iBUS удобнее для большого робота, но требует подходящего приёмника и свободного последовательного порта. На Arduino Mega или ESP32 это проще, чем на Arduino Uno.
Подключение одного PWM-канала
Для первого опыта достаточно одного канала газа и одного мотора.
| Приёмник FlySky | Arduino Uno | Зачем |
|---|---|---|
VCC | 5V | питание приёмника, если это разрешено его документацией |
GND | GND | общий провод с Arduino и драйвером |
CH2 или канал газа | D2 | вход, где Arduino измеряет PWM-импульс |
У драйвера L298P питание мотора подключают отдельно от логики Arduino. Земля силового питания, драйвера, Arduino и приёмника должна быть общей.
Пример: FlySky i6 и мотор через L298P
Пример ниже рассчитан на один PWM-канал приёмника и один мотор на L298P-совместимом шилде. В библиотеке FlySky_pwm.h функция readChannel() читает импульс канала и сразу масштабирует его в заданный диапазон.
#include <FlySky_pwm.h>
const int rcPin = 2;
const int dirPin = 12;
const int pwmPin = 3;
const int brakePin = 9;
void setup() {
pinMode(rcPin, INPUT);
pinMode(dirPin, OUTPUT);
pinMode(pwmPin, OUTPUT);
pinMode(brakePin, OUTPUT);
digitalWrite(brakePin, HIGH);
analogWrite(pwmPin, 0);
Serial.begin(9600);
}
void loop() {
int speed = flysky.readChannel(rcPin, -255, 255, 0, 20);
driveMotor(speed);
Serial.print("speed = ");
Serial.println(speed);
delay(20);
}
void driveMotor(int speed) {
speed = constrain(speed, -255, 255);
if (speed == 0) {
analogWrite(pwmPin, 0);
digitalWrite(brakePin, HIGH);
return;
}
digitalWrite(brakePin, LOW);
if (speed > 0) {
digitalWrite(dirPin, HIGH);
analogWrite(pwmPin, speed);
} else {
digitalWrite(dirPin, LOW);
analogWrite(pwmPin, -speed);
}
}
Что важно заметить:
rcPinподключён к каналу приёмника, а не к мотору;- диапазон
-255...255удобен дляanalogWrite(); - последнее число
20задаёт мёртвую зону около центра стика; - при
speed == 0мотор останавливается; - перед реальным заездом нужно проверить, какое направление считается вперёд.
Проверка перед запуском мотора
- Подключите только приёмник и Arduino.
- Откройте Serial Monitor на скорости
9600. - Двигайте стик и убедитесь, что значение около центра равно
0. - Проверьте, что крайние положения дают примерно
-255и255. - Только после этого подключайте питание мотора к L298P.
- Поставьте робота на подставку, чтобы колёса не касались стола.
- Проверьте направление и поменяйте провода мотора или направление в коде, если оно обратное.
Failsafe
Failsafe — это поведение при потере связи. Его проверяют отдельно: выключают пульт при поднятом роботе и смотрят, что приходит с приёмника. В хорошем варианте канал возвращается в нейтраль или Arduino получает значение по умолчанию.
В примере readChannel() возвращает 0, если импульс канала не прочитан. Но это не заменяет проверку конкретного приёмника: некоторые модели могут некоторое время удерживать последнее значение.
Что запомнить про FlySky i6
- FlySky i6 передаёт положения стиков, а не питание моторов.
- Arduino читает каналы приёмника и сама решает, что делать.
- Для простого опыта удобны PWM-выходы каналов.
- Для большого числа каналов лучше рассмотреть iBUS.
- Перед заездом обязательно проверяют нейтраль, направление и failsafe.
Практика
- Выведите в Serial Monitor один канал приёмника и найдите его нейтраль.
- Измените мёртвую зону с
20на40и сравните поведение около центра. - Подключите второй канал и выведите два значения в одну строку.
- Опишите, что должен делать робот, если связь с пультом пропала.
Проверьте себя
- Почему пульт FlySky i6 нельзя подключить напрямую к мотору?
- Чем PWM-каналы отличаются от iBUS?
- Зачем нужна мёртвая зона около центра стика?
- Почему первую проверку мотора делают на подставке?
- Что нужно проверить при выключении пульта?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Аппаратура радиоуправления — комплект из пульта, приёмника и радиоканала.
- Передатчик — пульт в руках оператора.
- Приёмник — модуль на роботе, который выдаёт каналы управления.
- Канал — отдельное значение от стика, тумблера или регулятора.
- PWM-сигнал приёмника — импульс, длительность которого кодирует значение канала.
- iBUS — последовательный протокол, в котором несколько каналов передаются одним потоком.
- Failsafe — заранее заданное поведение при потере связи.
Связанные темы
- Радиомодули — чем готовый пульт отличается от отдельного радиомодуля.
- Выбор способа связи — как сравнить FlySky с Bluetooth и Wi-Fi.
- Bluetooth — альтернативный ручной пульт через телефон.
Источники
- Ni3nayka. FlySky Arduino library.
- DroneBot Workshop. Radio Control with Arduino.