Рубрики
Проекты на Raspberry Pi

Подключение джойстика к Raspberry Pi

В данной статье мы рассмотрим подключение джойстика к плате Raspberry Pi. Джойстики в настоящее время чаще всего применяются для игры в различные электронные/компьютерные игры, одна могут использоваться и для управления различными механизмами, в том числе роботизированными руками. Хотя сейчас достаточно много джойстиков, которые подключаются через порт USB, в этой статье мы рассмотрим подключение джойстика к контактам ввода/вывода (GPIO pins) платы Raspberry Pi, это может быть удобнее в ряде случаев чем подключение джойстика через USB.

Принципы подключения джойстика к Raspberry Pi

Джойстики сейчас доступны различных форм и размеров, внешний вид типового джойстика показан на рисунке ниже. Чаще всего джойстики имеют аналоговые выходы – значения аналогового напряжения на выходах джойстика изменяются в зависимости от направления, в котором мы наклоняем его рычаг. Анализируя эти уровни напряжений мы можем определить направление перемещения джойстика. Этот подход мы уже рассматривали на нашем сайте в статьях про подключение джойстика к микроконтроллеру AVR и плате Arduino.

Джойстик имеет 2 оси: ось X и ось Y. Цепь каждой оси джойстика содержит потенциометр, средние точки этих потенциометров на схемах обозначаются как Rx и Ry. Когда джойстик находится в состоянии покоя, Rx и Ry играют роль делителя напряжения.

Когда рычаг джойстика движется в горизонтальной оси, напряжение на контакте Rx изменяется. Аналогично, когда рычаг джойстика движется в вертикальной оси, напряжение на контакте Ry изменяется. Таким образом, у нас есть 4 направления движения джойстика и два выхода АЦП (аналого-цифрового преобразователя), напряжение на которых изменяется в зависимости от направления движения джойстика.

Но плата Raspberry Pi, как мы знаем, не имеет встроенных АЦП на своих входах (контактах), поэтому джойстик нельзя непосредственно подключить к плате Raspberry Pi. Поэтому мы будем использовать компараторы на основе операционных усилителей чтобы проверять уровни напряжений на выходах джойстика. Выходные сигналы с компараторов будут поступать на входы Raspberry Pi, которая будет включать/выключать соответствующие светодиоды в зависимости от направления движения джойстика. Мы использовали 4 светодиода чтобы с их помощью показывать направление движения джойстика. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Каждый из 17 контактов ввода/вывода платы Raspberry Pi не может выдерживать напряжение большее +3.3V, поэтому напряжение на выходах операционных усилителей не должно превышать этого значения. В связи с этим для нашего проекта мы выбрали микросхему LM324, которая содержит четыре операционных усилителя, способных работать от 3V, поэтому ее выходы отлично согласуются со входами платы Raspberry Pi.

Необходимые компоненты

  1. Плата Raspberry Pi (купить на AliExpress).
  2. Джойстик (купить на AliExpress).
  3. Микросхема операционных усилителей LM324 (купить на AliExpress).
  4. Конденсатор 1000 мкФ (купить на AliExpress).
  5. Резистор 1 кОм – 12 шт. (купить на AliExpress).
  6. Резистор 2,2 кОм – 4 шт. (купить на AliExpress).
  7. Светодиод – 4 шт. (купить на AliExpress).
  8. Макетная плата.
  9. Соединительные провода.

Схема проекта

Микросхема LM324 содержит в своем составе 4 компаратора на основе операционных усилителей – их мы будем использовать для определения направления движения джойстика. На следующем рисунке показана структурная схема микросхемы LM324.

Схема подключения джойстика к плате Raspberry Pi представлена на следующем рисунке.

На представленной схеме U1:A, U1:B, U1:C, U1:D обозначают четыре компаратора внутри микросхемы LM324. Также на схеме номера контактов, показанные рядом с компараторами, соответствуют их номерам контактов в микросхеме LM324.

Объяснение работы проекта

Для обнаружения движения джойстика вдоль оси Y мы используем OP-AMP1 (операционный усилитель) или U1:A и OP-AMP2 или U1:B, а для обнаружения движения джойстика вдоль оси X мы используем OP-AMP3 или U1:C и OP-AMP4 или U1:D.

OP-AMP1 обнаруживает движение джойстика вниз по оси Y:
На отрицательный вывод компаратора U1:A подается напряжение 2.3V (с использованием делителя напряжения на резисторах 1 кОм и 2,2 кОм), а его положительный вывод подключен к Ry. При движении джойстика вниз по оси Y напряжение на Ry увеличивается. И когда это напряжение становится больше чем 2.3V, OP-AMP (операционный усилитель) обеспечивает напряжение +3.3V на своем выходном контакте. Это напряжение высокого уровня (HIGH) на выходе операционного усилителя обнаруживается платой Raspberry Pi, которая при обнаружении этого уровня включает соответствующий светодиод.

OP-AMP2 обнаруживает движение джойстика вверх по оси Y:
На отрицательный вывод компаратора U1:B подается напряжение 1.0V (с использованием делителя напряжения на резисторах 1 кОм и 2,2 кОм), а его положительный вывод подключен к Ry. При движении джойстика вверх по оси Y напряжение на Ry уменьшается. И когда это напряжение становится меньше чем 1.0V, OP-AMP (операционный усилитель) обеспечивает напряжение низкого уровня (LOW) на своем выходном контакте. Это напряжение низкого уровня (LOW) на выходе операционного усилителя обнаруживается платой Raspberry Pi, которая при обнаружении этого уровня включает соответствующий светодиод.

OP-AMP3 обнаруживает движение джойстика влево по оси X:
На отрицательный вывод компаратора U1:C подается напряжение 2.3V (с использованием делителя напряжения на резисторах 1 кОм и 2,2 кОм), а его положительный вывод подключен к Rx. При движении джойстика влево по оси X напряжение на Rx увеличивается. И когда это напряжение становится больше чем 2.3V, OP-AMP (операционный усилитель) обеспечивает напряжение +3.3V на своем выходном контакте. Это напряжение высокого уровня (HIGH) на выходе операционного усилителя обнаруживается платой Raspberry Pi, которая при обнаружении этого уровня включает соответствующий светодиод.

OP-AMP4 обнаруживает движение джойстика вправо по оси X:
На отрицательный вывод компаратора U1:4 подается напряжение 1.0V (с использованием делителя напряжения на резисторах 1 кОм и 2,2 кОм), а его положительный вывод подключен к Rx. При движении джойстика вправо по оси X напряжение на Rx уменьшается. И когда это напряжение становится меньше чем 1.0V, OP-AMP (операционный усилитель) обеспечивает напряжение низкого уровня (LOW) на своем выходном контакте. Это напряжение низкого уровня (LOW) на выходе операционного усилителя обнаруживается платой Raspberry Pi, которая при обнаружении этого уровня включает соответствующий светодиод.

Таким образом, мы с помощью платы Raspberry Pi и компараторов сможем определять движение джойстика во всех 4-х осях и включать соответствующий светодиод. Также направление движения джойстика мы будем выводить в терминале Raspberry Pi.

Исходный код программы на Python

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *