Анализ протокола игрушечного вертолёта на ИК-управлении

    Недавно друг притащил ко мне простенький игрушечный вертолёт:

    image

    Управляется он не по радио, а посредством инфракрасных сигналов. На самом вертолёте стоит обычный ДУ-приёмник, а значит используется несущая частота в 36-40кГц, и не составит труда разобраться в структуре сигналов, которые посылает пульт, чем я и решил заняться.

    Сразу скажу, что вся эта затея изначально не имела никакого смысла, это просто статья о том, как развлекаются айтишники :)


    После анализа сигнала с помощью ДУ-приёмника стало ясно, что используется модифицированный протокол пультов ДУ от Sony, который выглядит примерно так:
    image

    В протоколе Sony сначала посылается стартовый сигнал длительностью в 2,4мс, а затем передаются данные, которые кодируются длительностью паузы между сигналами: логический ноль — это 600 микросекунд, логическая единица — 1200 микросекунд.

    В протоколе вертолётика отличается только длительность временных интервалов. Стартовый бит — примерно 2мс, ноль — 300 микросекунд, единица — 600 микросекунд. Увы, забыл сделать скриншот временной диаграммы. Таким образом передаются 4 байта. Оставалось только выяснить — за что они отвечают?

    Делалось это тупо опытным путём. Выяснилось, что данные передаются старшими битами вперёд, а байты это:
    • Первый — поворот влево-вправо (разница в скорости вращения основных пропеллеров)
    • Второй — движение вперёд-назад (управление пропеллером на хвосте)
    • Третий — тяга вверх (скорость вращения пропеллеров)
    • Четвёртый — положение ручки калибровки поворота, непонятно, зачем оно вообще передаётся

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

    Если передать значения 128, 128, 254, 128 (0x80, 0x80, 0xFE, 0x80), то верторёт на полной скорости взлетает вертикально вверх. Плавно изменяя третий байт можно заставить его зависнуть в воздухе на одной высоте. Уменьшаем первый байт — вертолёт поворачивает влево, увеличиваем — вправо. Увеличиваем второй байт — летим вперёд, уменьшаем — назад. Всё достаточно просто, оставалось воспроизвести эти сигналы так, чтобы вертолёт поверил, что им управляет настоящий пульт.

    У меня уже было самодельное устройство, которое имитировало пульты ДУ для управления телевизором и ресивером, не составило особого труда модифицировать его прошивку так, чтобы он посылал сигналы вертолётику. И ура, оно заработало!

    Дальше было интересно это как-то использовать, например, управлять им с помощью каких-то необычных устройств. Выбор пал на виимоут и нунчак от Nintendo Wii, тем более там ещё и акселерометры есть. Если кто не в курсе, виимоут подключается к Wii через обычный блютус, соответственно без особых проблем его можно подключить и к компьютеру. Правда, видится он только как неизвестное HID устройство, а не игровой контроллер, но под Windows уже есть утилита, которая умеет с ним работать — GlovePIE.

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

    Надо сказать, что таким образом управлять вертолётом стало гораздо удобнее, т.к. на родном пульте ручка тяги пружинит и стремится вернуться в первоначальное положение.

    Видео этого безумия:

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 37

      +4
      Класти, как всегда, на высоте!

      Предлагаю замкнуть круг: подвесить к вертолётику другой Wiimote, подключенный к Wii, и играть таким образом в нее. :D
        0
        Прекрасный вариант машины Голдберга!
          +1
          Мсье знает толк (оба)
            +2
            Этот момент, когда человек, который на десять лет младше тебя, упрекает в том, что ты всё ещё способен дурачиться и получать от этого удовольствие… Чёрт, я чувствую себя совсем молодым!
              +3
              Почему упрекает-то?) Эта фраза, имхо, произносится с восхищением! :)
                0
                Действительно. Я бы просто не додумался до таких извращений. Хотя все это, несомненно, жутко увлекательно.
                  0
                  Хотя доля упрека, насколько я помню, здесь таки была.
            +14
            Видео — отдельная песня. Проплюсовал уже просто из-за него.
            Вы упоротые и офигенные одновременно.
              0
              У меня недавно такой вертолетик в дерево врезался (порыв ветра был, да и сам вертолет очень легкий, сносит буквально сквозняком) и нижий пропеллер перестал вращаться. Теперь думаю, чтобы интересного сделать из останков.
                0
                Если только пропеллер не крутится, то купить новый мотор и летать дальше. Но лучше в помещении — эта мелюзга не предназначена для улицы.
                  0
                  Гыыы, смотря какая мелюзга! Мелкие соосники ветер компенсировать нормально не способны, а вот одноосники шансы имеют :)
                  Мне тут на ДР задарили WL Toys v911, так он на улице очень даже хорошо спралвяется.
                  Там два режима управления, 1 мене резкий — а-ля маневровый. Дома полетать, потренироваться сажать на табурет, пролететь под спинкой советского стула и т.п. :)
                  А второй режим делает из вертолета нервную пулю :) Чуть подвинешь рычаг и вертолет уже несется выполнять команду :) В таком режиме по квартире долго не полетаешь — или будет не интересно медленно, или долбанешься в стену :) А вот на улице сей режим просто шикарен.
                0
                Я аналогичным образом развлекался с китайскими клонами AirSwimmers. Правда, от протокола там одно название, всё через пень-колоду. Но рулить рыбками с ардуинки вполне комфортно было.
                  0
                  А если добавить пару фотодиодов и батарейку к ардуине, рыбина сможет взлететь? Милая такая автономность получится.
                    0
                    Ну разве что нано ардуинку, эт пробовать надо. Я только на родной рыбкин приёмник команды слал, ардуину на рыбу не вешал. Вообще рыбины очень разочаровали — прожили пару дней всего, потом появились трещины и вообще гелий держать перестали :-( Может быть у оригинальных с этим получше дело обстоит, но китайские разочаровали очень.
                  0
                  У меня тоже такой вертолетик, но в нём аккумулятор сдох. Кто знает где взять такой новый?
                    0
                    Можно по характеристикам попробовать подобрать в магазине радиодеталей. Наверняка выйдет дешевле, чем официальные, если они вообще есть.
                      +2
                      На aliexpress.
                        0
                        Во-во! Я там посмотрел, вертолеты стоят целиком с пультом в 2 раза дешевле чем у нас. А без пульта — в 4 раза.
                      +9
                      А у меня такой в лес улетел :( потерял сигнал с пульта и как летел вверх и вправо так и улетел… ну и хрен с ним :)
                        0
                        Ну вот, меня опередили, сам протокол курить собирался, в прочем есть ещё надежда, тк на моём пульте ещё управление подсветкой и ещё хз.что, что внешне никак не сказывается на полёте, но характер звука двигателей от этого меняется…
                          +1
                          О! У меня такой же вертолет! Только ручка тяги не пружинит, и управлять удобно :)
                            0
                            Дальше было интересно это как-то использовать, например, управлять им с помощью каких-то необычных устройств.

                            Следующий шаг — привлечение машинного обучения для демонстрации фигур высшего пилотажа.

                            Stanford Autonomous Helicopter - Airshow


                              0
                              На этом вертолете не получится. Вертолёты для 3д пилотирования используют радиоаппаратуру минимум с 6 каналами и имеют управляемый угол атаки винта.
                            • UFO just landed and posted this here
                                0
                                Я такой разобрал и прикрутил движки напрямую(через ключи) к микроконтроллеру, вроде работает :)
                                Написать прошивку пока руки не доходят.
                                  0
                                  Это круто, можно ик датчиков для предотвращения столкновений добавить!
                                  0
                                  После анализа сигнала с помощью ДУ-приёмника стало ясно
                                  А можно про приемник рассказать?
                                    0
                                    Обычный TSOP1736, очень простая в использовании штука.
                                    0
                                    Интересная статья, жаль у меня Wii нет. Самому такой же вертолет жена на НГ подарила, теперь чувствую себя состоявшимся мужчиной:)
                                      0
                                      Четвёртый — положение ручки калибровки поворота, непонятно, зачем оно вообще передаётся

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

                                      на родном пульте ручка тяги пружинит и стремится вернуться в первоначальное положение

                                      Это «косяк» всех игрушечных 2d вертолетов. В технике посерьезней ручка не пружинит и на нее посажены повороты по оси (рыскание). На правом стике — крен и тангаж.
                                        0
                                        Просто я так понимаю, что положение ручки определяет, при каком значении первого байта пропеллеры должны вращаться с одинаковой скоростью, т.е. из одного вычитается другое, и эти действия можно было бы выполнять на самом пульте.
                                          0
                                          Мне кажется что это все-таки просто сдвиг оборотов движка нижнего или верхнего винтов. В чем он выражается — непонятно. В такой простой модели думаю просто в виде понижения-повышения вольтажа. Т.е. 128 — 100% относительного другого движка.
                                        0
                                        Ваша программа считывает координаты курсора мыши, это только две оси, как удается управлять по трем осям (газ, вращение и наклон вперед назад)?
                                          0
                                          Прибавление/убавление тяги делалась тупо нажиманием клавиш. Это даже удобнее, т.к. значение остаётся постоянным, его сложно сбить случайно.
                                          0
                                          Любопытно, а по маршруту его летать можно заставить?
                                            +1
                                            Слишком низкая точность у него. Даже чтобы просто зависнуть в воздухе, приходилось каждый раз заново подбирать значения, т.к. они зависели от заряда аккумулятора.
                                            0
                                            У меня какраз тяга на пульте сломалась. Вот только вия нет.

                                            Only users with full accounts can post comments. Log in, please.