Skip to content

Latest commit

 

History

115 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Робототехника Битва роботов


Team

Статус: В разработке

Студенты СибГУТИ, работающие над созданием робота для битвы роботов.

~ 22.06.26

Участники


Содержание

  1. Как работает передача

Как работает передача


Шаг 1. Считывание физического действия (Аналого-цифровое преобразование)

Когда отклоняется джойстик, на его контактах изменяется напряжение (от 0 до 5 Вольт).

  1. Команда analogRead(pinY) превращает это напряжение в цифровое число от 0 до 1023.
  2. Микроконтроллер Arduino с помощью конструкции if-else мгновенно переводит это число в понятный код команды (например, если наклон вперед, то command = 1).

Шаг 2. Формирование пакета данных и отправка (radio.write)

Строка radio.write(&command, sizeof(command)) запускает аппаратную отправку.

  1. Сборка пакета: Чип NRF24L01 берет наше число command (в памяти оно занимает 2 байта) и «упаковывает» его в радиопакет. К числу автоматически добавляется преамбула (чтобы приемник настроился на волну), адрес трубы ("00001") и CRC-код (контрольная сумма для проверки на ошибки).
  2. Модуляция: Передатчик +PA+LNA превращает эти цифровые нули и единицы в высокочастотный радиосигнал (2.4 ГГц) и через усилитель мощности (PA) выбрасывает его в эфир через антенну.

Шаг 3. Прием и фильтрация (Работа приемника)

В этот момент приемник находится в режиме постоянного «прослушивания» эфира благодаря функции radio.startListening().

  1. Захват сигнала: Внешняя антенна приемника улавливает радиоволну, а встроенный усилитель (LNA) вытягивает даже слабый сигнал из шума.
  2. Проверка адреса: Чип приемника считывает адрес из пакета. Если адрес совпадает с его собственным ("00001"), он забирает пакет. Если адрес чужой — модуль мгновенно его игнорирует, даже не отвлекая процессор Arduino.
  3. Проверка целостности: Приемник пересчитывает контрольную сумму (CRC). Если пакет исказился из-за помех от мотора L298N, он просто удаляется. Если всё отлично, пакет сохраняется в буфер, и функция radio.available() возвращает значение true.

Шаг 4. Квитирование (Автоподтверждение / Auto-Ack)

Так как мы включили функцию radio.setAutoAck(true);, NRF24L01 работает по принципу обратной связи:

  1. Как только приемник успешно принял чистый пакет, он автоматически на долю миллисекунды переключается в режим передатчика и посылает обратно короткий сигнал: «Пакет №... получен, всё супер!».
  2. Если передатчик пульта получает этот сигнал, функция radio.write() возвращает true (успех). Если сигнал подтверждения не дошел (например, машинка уехала слишком далеко), передатчик автоматически повторит попытку отправки до 15 раз. Если все попытки провалились, radio.write() вернет false (ошибка).

Шаг 5. Исполнение команды моторами

Внутри бесконечного цикла void loop() команда считывается: radio.read(&command, sizeof(command)).

Конструкция switch(command) проверяет, какое именно число прилетело. Если это 1, Arduino мгновенно подает напряжение на пины драйвера L298N, силовые транзисторы внутри драйвера открываются, и аккумуляторы начинают вращать моторы вперед.

Выбор пинов


В строке RF24 radio(7, 8); мы вручную назначаем управляющие пины CE и CSN.

  1. CE (Chip Enable): Пин 7. Он управляет режимом работы радиочипа. Переводит его из режима ожидания в режим передачи или прослушивания эфира.
  2. CSN (Chip Select Not): Пин 8. Этот контакт «будит» радиомодуль, когда Arduino хочет передать ему настройки или забрать из него принятые данные.
  3. Аппаратные пины SPI (11, 12, 13): Они не прописываются в коде, но подключение к ним строго обязательно (MOSI → 11, MISO → 12, SCK → 13). На платах Arduino Uno/Nano эти контакты жестко привязаны к встроенному аппаратному контроллеру SPI для обеспечения максимальной скорости обмена данными.
  4. Пины драйвера L298N(5, 6, 9, 10): поддерживают аппаратный ШИМ (PWM). Это сделано специально «на вырост»: если в будущем понадобится плавно регулировать скорость робота, не придется переделывать схему — достаточно будет заменить команду digitalWrite() на analogWrite().
  5. SPI (Serial Peripheral Interface) — это очень быстрый и простой протокол связи, который используется для обмена данными между микроконтроллерами (например, Arduino) и различными электронными компонентами.

Выбор адреса трубы


Строка const byte address = "00001"; задает уникальный идентификатор канала связи.

Зачем он нужен: Радиоэфир на частоте 2.4 ГГц сильно зашумлен (Wi-Fi, Bluetooth, радионяни). Адрес трубы работает как уникальное имя или номер телефона. Приемник, настроенный на этот же адрес, программно игнорирует весь чужой радиомусор и считывает только те пакеты, адрес которых совпадает с его собственным.

About

My library picture

Topics

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors