Как подключить ультразвуковой датчик Lego Mindstorms NXT к Raspberry Pi
Аннотация
Подключите ультразвуковой датчик Lego Mindstorms NXT напрямую к Raspberry Pi. Необходим буфер шины TCA9517 I2C и дополнительный вывод GPIO для SCL. Предоставляется короткая программа на C ++ для считывания измеренного расстояния.Введение
Raspberry Pi (Pi), несмотря на некоторые недостатки, однозначно мой любимый SBC. Безусловно, самое большое сообщество, и каждая деталь хорошо задокументирована. С другой стороны, Lego Mindstorms, мой любимый конструктор роботов. В отличие от других комплектов для роботов, он дает неограниченные возможности для создания роботов. Сегодня автомобильный бот, завтра гусеничный бот, а завтра шестиосевой робот-манипулятор - все возможно. Версия набора NXT оснащена мощным микроконтроллером на базе ARM, которого достаточно для большинства простых приложений роботов, но недостаточно для любых продвинутых проектов, таких как компьютерное зрение. Недавно Lego опубликовала EV3, новый комплект с гораздо более мощным мозгом, который, как и Raspberry Pi, управляется Linux. Но все же этот мозг не способен обрабатывать изображения с высоким разрешением с разумной скоростью. Поэтому я все еще хочу объединить мощь Raspberry Pi с неограниченными возможностями Lego. Насколько мне известно, есть один проект, позволяющий добиться этого, под названием BrickPi. Хотя он довольно успешен, я думаю, что он имеет несколько недостатков, которые я хочу рассмотреть в этой и следующих статьях. Прежде всего, он совместим только со старыми датчиками NXT на основе I2C, а не с новыми датчиками EV3 на основе UART. Более того, он не подключает датчики напрямую к пи, но использует два микроконтроллера Atmega (совместимые с Arduino) для связи с датчиками. Для добавления новых датчиков или любых других изменений требуется новая прошивка. Кроме того, BrickPi использует драйверы двигателя L293D, которые способны выдавать ток только около 0,6 А, в то время как двигатель Lego NXT потребляет до 2 А при остановке [Характеристики двигателя NXT]. В этой статье я хочу показать вам, как напрямую подключить Lego Mindstorms Ультразвуковой датчик (датчик США) к Pi без использования какого-либо дополнительного микроконтроллера.Проблемы
Моя первая попытка подключить датчик США к Pi была простой. Просто соедините обе сигнальные линии I2C с помощью простого переключателя уровня с двумя полевыми транзисторами [AppNote]. Переключатель уровня должен быть необходим, потому что датчик US использует логические уровни 5 В, а пи только 3,3 В. Затем подключите 5 В и 9 В к датчику и запустите простую тестовую программу и не получил - ничего. Дважды проверив провода и программное обеспечение, я подключил логический анализатор и понял, что датчик US не может ответить ни на один запрос, даже не подтвердит свой собственный адрес. Первая и основная проблема - это аппаратное соединение между Pi и датчиком. Аппаратные и программные протоколы хорошо описаны Lego, включая схемы [Lego HDK], и хотя он использует I2C, мы не можем напрямую подключить датчик к пианино. Как вы можете видеть на схеме 1, датчик имеет очень слабые подтягивающие резисторы (82 k) и очень сильные последовательные резисторы (4,7 кОм) на его линиях I2C. Вторые резисторы - наша основная проблема. Как вы, возможно, знаете, Pi использует мощные подтягивающие резисторы 1,8 кОм на своих линиях I2C. Из-за последовательного резистора датчик не может отключить ни одну из линий I2C и, следовательно, не может отвечать на какие-либо запросы ведущего устройства I2C. На Рисунке 1 показано грубое моделирование этой ситуации. Синяя линия показывает данные, которые датчик пытается отправить, зеленая линия показывает данные, полученные Pi. Как вы можете видеть, датчик не может снизить уровень смоделированной линии данных. Вы также можете отметить, что в этом состоянии нет необходимости в какой-либо схеме сдвига уровня, потому что сильный подтягивающий резистор до 3,3 В доминирует в линии также и на высоком уровне. Единственное решение этой проблемы, которое я нашел до сих пор, - это использование TCA9517, 2-канального двунаправленного буфера для I2C. Кроме того, этот чип заботится о сдвиге уровня. Вторая проблема связана с ошибкой прошивки в американском датчике. Это описано здесь, например, на форумах mbed. Также есть статья, описывающая, как анализировать связь между Lego Mindstorms NXT и датчиком США с помощью логического анализатора (немецкий). Подводя итог, необходим дополнительный тактовый цикл (переключение на линии SCL) между записью регистра в датчик и фактическим чтением данных с датчика. Это, конечно, несовместимо с какой-либо стандартной аппаратной или программной реализацией I2C. Вы можете написать специальную программную реализацию I2C, используя любую пару GPIO, но проще просто подключить другой GPIO от Pi к линии SCL и переключать его между записью регистра в датчик и чтением содержимого регистров.Аппаратное обеспечение
Необходимое оборудование для простого прототипа:- Ультразвуковой датчик Lego Mindstorms NXT
- Кабель Mindstorms + разъем / отрезанный кабель Mindstorms
- TCA9517 и гнездо DIP 8 или любой другой переходник SO8 → DIP8 и некоторые базовые навыки пайки SMD.
- Raspberry Pi (я использовал Raspberry Pi A) с обычными аксессуарами.
- Макетная доска и кабели
Производственный процесс
- Базовый IoT - RaspberryPI HDC2010 как
- Регистратор температуры Raspberry Pi
- Мониторинг температуры на Raspberry Pi
- Датчик температуры Python и Raspberry Pi
- Метеостанция Raspberry Pi
- Интеграция данных датчика с микропроцессором Raspberry Pi
- Ультразвуковой датчик (HC-SR04) + Raspberry Pi
- Датчик движения с использованием Raspberry Pi
- Датчик влажности почвы Raspberry Pi
- Датчик температуры и освещенности Raspberry Pi