Из этой заметки вы узнаете, как своими руками сделать пульт для презентаций (a.k.a кликер) из Arduino Leonardo и дешевого радиомодуля на 433 МГц. Помимо прочего, этот проект интересен тем, что в нем реализовано декодирование сигнала с OOK-модуляцией, чему при желании можно найти массу практических применений. Также в проекте утилизируется возможность микроконтроллера ATmega32U4 мастерски притворяться мышью или клавиатурой.

Один из способов развлечения с Software Defined Radio заключается в том, чтобы наблюдать за самолетами. В современных самолетах используется технология ADS-B. Суть ее заключается в том, что самолеты передают номер рейса, скорость, высоту полета, GSP-координаты, и прочую информацию о воздушном судне на частоте 1090 МГц, используя модуляцию DPSK. Передаваемая информация никак не шифруется, и при помощи RTL-SDR принять ее может любой желающий.

Некоторое время назад я сделал несколько несложных модификаций в имеющимся у меня RTL-SDR. В этой заметке я хотел бы вкратце рассказать об этих модификациях, и в чем заключается их практическая ценность. Описанные модификации крайне просты. Их может повторить за один вечер практически любой желающий.

В сети можно найти массу примеров использования радиомодулей на 433 МГц совместно с Arduino. Обычно эти примеры ограничиваются чем-то вроде «а давайте подключим библиотеку VirtualWire, воспользуемся парой процедур из нее, и опа, все магическим образом работает». Само собой разумеется, меня такое положение дел не устраивает, потому что я хочу знать точно, как эти модули общаются с Arduino, и что именно они передают в эфир. Давайте же во всем разберемся!

Ранее в заметке Как я собирал свой первый квадрокоптер на базе PixHawk была описана, так сказать, базовая комплектация квадрокоптера — полетный контроллер, рама, ESC, моторы, пропеллеры, и так далее. Это минимум, необходимый для получения чего-то, что летает. Однако на таком квадрокоптере вы далеко не улетите, так как по мере удаления от вас он очень быстро превращается в небольшое черное пятнышко на небе. Да и не очень-то безопасно на нем летать. В частности, при потери связи с аппаратурой или сильном разряде аккумулятора лучшее, что может сделать квадрокоптер — это успеть автоматически приземлиться (в реку, на дерево, или кому-нибудь на голову). Давайте же выясним, как можно решить эти проблемы.

Вашему вниманию предлагается небольшой крякми. Но не классический софтверный крякми, для которого нужно написать кейген или патч, а полностью железный. Крякми изначально был сделан для конкурса Realtime Hardware Hack, проводимого в рамках конференции Chaos Constructions 2017. Однако организаторы конкурса в лице Hardware Village в итоге решили использовать другой крякми (судя по фото, более простой). Поэтому, насколько мне известно, на момент публикации поста данный крякми еще никем не был пройден.

В этой заметке речь пойдет о Software Defined Radio, или SDR. SDR — это когда у вас есть некое специальное устройство для работы с радио-сигналами, подключенное к компьютеру, а софт на компьютере определяет, что именно это устройство будет принимать и передавать. В сущности, SDR — это отладчик для радио. С его помощью вы можете как отлаживать собственное железо, так и искать баги / уязвимости в чужом, а также реверсить закрытые беспроводные протоколы и притворяться приемником или передатчиком, работающим по определенному протоколу.

Типичная радиоаппаратура работает как-то так. Есть передатчик (собственно, сама аппа) и приемник. Приемник с передатчиком общаются по какому-то своему протоколу, часто закрытому. Приемник декодирует этот протокол и передает положение ручек на аппаратуре дальше, например, полетному контроллеру (ПК) квадрокоптера. ПК и приемник общаются по своему протоколу, который должны понимать оба. В этом месте большой популярностью пользуются PWM и PPM. Есть и другие варианты, в частности, SBUS, DSM2 и DSX, но в рамках данной статьи мы рассмотрим только PWM и PPM.

Тема программирования микроконтроллеров ранее многократно поднималась в этом блоге, но исключительно в контексте микроконтроллеров AVR и, соответственно, Arduino. Сегодня же речь пойдет о микроконтроллере STM32F103C8T6 на базе ядра ARM 32 Cortex-M3. Вы наверняка слышали об архитектуре ARM — она используется в большинстве современных телефонов и планшетов, а также Raspberry Pi, полетных контроллерах для квадрокоптеров, некоторых осциллографах, и много где еще.

Не знаю, как вы, а я лично постоянно забываю, где у полевых МОП-транзисторов (a.k.a MOSFET) находится сток и исток, а также как их использовать в зависимости от того, имеет ли данный МОП-транзистор N-канал или P-канал. Поэтому я решил сделать себе небольшую шпаргалку, ну и заодно поделиться ею с вами. Я также подготовил упрощенную PDF-версию этого поста, которую можно распечатать на половине листа A4 и повесить на стену.