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


В данной статье мы рассмотрим подключение модуля аналогового джойстика к плате Raspberry Pi Pico W. Статья послужит профессиональным руководством, предлагающим пошаговые инструкции о том, как установить соединение и эффективно вводить данные с джойстика с помощью мощной платы Raspberry Pi Pico W.

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

Также на нашем сайте мы рассматривали подключение джойстика к другим микроконтроллерам (платам):

Более наглядно посмотреть представленный в статье материал вы можете в следующем видео:

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

  1. Плата Raspberry Pi Pico W (купить на AliExpress).
  2. Модуль джойстика (купить на AliExpress).
  3. Соединительные провода.
  4. Макетная плата.
  5. OLED дисплей с интерфейсом I2C и диагональю экрана 1.3 дюйма (1.3 inch I2C OLED display) (купить на AliExpress - для данного проекта выбирайте вариант дисплея с 4 контактами) - не обязательно.

Распиновка модуля джойстика

Распиновка модуля джойстика

Модуль джойстика обычно имеет пять контактов, их назначение следующее:

VCC - этот вывод подключается к источнику питания, обычно +5 В от микроконтроллера или платы разработки.

GND (Земля) - этот вывод подключен к земле (0 В) источника питания и служит опорным напряжением для модуля.

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

VRy - Этот вывод аналогичен VRx, но представляет собой аналоговый выход для оси Y джойстика, обеспечивая переменное напряжение, соответствующее вертикальному перемещению джойстика.

SW - это контакт переключателя модуля джойстика. При нажатии джойстика на этот контакт подается уровень LOW (заземляется). В противном случае оно остается на высоком уровне напряжения (обычно VCC).

Часто задаваемые вопросы о модуле джойстика

Могу ли я использовать несколько джойстиков одновременно?

Да, вы можете использовать несколько джойстиков одновременно, подключив их к разным аналоговым входам микроконтроллера. Считывая значения с каждого джойстика независимо, вы можете одновременно управлять несколькими осями или устройствами в своем проекте.

Какие существуют типы джойстиков?

Существуют различные типы джойстиков, предназначенные для разных приложений, таких как игры, робототехника, авиация и промышленное управление. Некоторые распространенные типы включают аналоговые джойстики (на основе потенциометра), цифровые джойстики (с использованием переключателей или энкодеров), джойстики полета и джойстики аркадного типа.

В этом уроке мы используем аналоговый джойстик.

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

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

Схема подключения джойстика к плате Raspberry Pi Pico W

Выполните в схеме следующие соединения.

Подключите контакт VCC модуля джойстика к контакту Vbus на Raspberry Pi Pico W.

Подключите контакт GND модуля джойстика к контакту GND (земля) на Raspberry Pi Pico W.

Подключите контакт VRx модуля джойстика к одному из контактов аналогового входа на Raspberry Pi Pico W (например, ADC0).

Подключите контакт VRy модуля джойстика к другому аналоговому входу на Raspberry Pi Pico W (например, ADC1).

Программирование Raspberry Pi для джойстика с помощью Micropython

  1. Сначала открой thonny ide.
  2. Загрузите прошивку micropython для Raspberry Pi Pico W с официального сайта .
  3. Перейдите в tools> options>interpreter («Инструменты»> «Параметры»> «Интерпретатор») и выберите Raspberry Pi Pico в качестве интерпретатора.
  4. Скопируйте приведенный ниже код в thonny ide и сохраните его на своей плате.

Приведенный ниже код объясняет взаимодействие Raspberry Pi Pico W с аналоговым джойстиком и последующую печать его на экране.

Сначала в коде программы импортируем необходимые модули: Pin и ADC из модуля machine для работы с GPIO (контактами ввода/вывода) и ADC (АЦП), а также utime для работы с функциями времени.

Затем мы создаем три объекта: xAxis, yAxis и кнопку. Мы настроили объекты xAxis и yAxis для чтения аналоговых значений с выводов 27 и 26 соответственно, используя конструктор АЦП (аналого-цифрового преобразователя). Мы также настроили объект кнопки для чтения цифрового ввода с контакта 16. Аргумент Pin.IN устанавливает режим работы контакта для ввода данных, а Pin.PULL_UP позволяет внутреннему подтягивающему резистору поддерживать высокий уровень на контакте, когда кнопка не нажата.

Далее у нас будет цикл, который будет работать бесконечно. Код внутри цикла будет выполняться неоднократно, пока программа не будет остановлена.

Затем у нас будет идти код, в котором мы будем считывать аналоговые значения из объектов xAxis и yAxis с помощью метода read_u16(). Метод возвращает необработанные 16-битные аналоговые значения с соответствующих контактов. Мы также считываем цифровой ввод из объекта кнопки с помощью метода value(), который возвращает 0, если кнопка нажата, и 1, если она не нажата.

В следующем фрагменте кода мы выводим на консоль необработанные аналоговые значения для xValue и yValue, а также цифровое значение для buttonValue. При этом значения будут отображаться непрерывно каждые 0,1 секунды.

Функция utime.sleep(0.1) приостанавливает выполнение кода на 0,1 секунды перед началом следующей итерации цикла. Это создает небольшую задержку между каждым чтением и печатью значений, предотвращая чрезмерную загрузку ЦП (центрального процессора).

На следующем видео вы можете посмотреть тестирование работы проекта.

Схема проекта с OLED дисплеем

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

Схема подключения джойстика и OLED дисплея к плате Raspberry Pi Pico W

В приведенном ниже коде объясняется, как принимать вводимые данные с аналогового джойстика и выводить их на экран OLED-дисплея.

Объяснение кода проекта с OLED дисплеем

Вначале импортируем необходимые модули: Pin, ADC и SoftI2C из machine модуля для работы с GPIO (контактами ввода/вывода), аналого-цифрового преобразователя и функций для работы с интерфейсом I2C. Также импортируем ssd1306 для управления OLED-дисплеем и utime для работы с функциями времени.

Затем мы создаем объект i2c с помощью SoftI2C, который устанавливает программный протокол связи I2C. Мы указываем вывод SCL (контакт синхронизации) как контакт 5, а контакт SDA (данные) как контакт 4. Эти контакты используются для связи между Raspberry Pi Pico и OLED-дисплеем SSD1306.

В следующем фрагменте кода настраивается джойстик путем создания трех объектов:

xAxis: считывает аналоговые значения с контакта 27 с помощью АЦП.

yAxis: считывает аналоговые значения с контакта 26 с помощью АЦП.

Кнопка: считывает цифровой входной сигнал с контакта 16. Режим контакта установлен на вход (Pin.IN), и включен внутренний подтягивающий резистор (Pin.PULL_UP), который удерживает контакт на высоком уровне когда кнопка не нажата.

В следующих строках кода мы задаем ширину и высоту OLED-дисплея (128x64 пикселей) и создаем oled-объект с помощью SSD1306_I2C. Это инициализирует OLED-дисплей с указанными размерами и связью по интерфейсу I2C.

Далее у нас цикл, который будет работать бесконечно. Код внутри цикла будет выполняться неоднократно, пока программа не будет остановлена.

В следующем фрагменте кода мы считываем аналоговые значения из xAxis и yAxis с помощью метода read_u16(), который возвращает необработанные 16-битные аналоговые значения с соответствующих контактов. Мы также считываем цифровой ввод с кнопки с помощью метода value(), который возвращает 0, если кнопка нажата, и 1, если она не нажата.

Затем мы очищаем OLED-дисплей, заполняя его черными (0) пикселями.

Далее мы используем метод text() для отображения аналоговых значений xValue и yValue на OLED-дисплее. Текст будет отображаться в координатах (0, 0) по оси X и (0, 20) по оси Y.

Следующий условный оператор проверяет значение buttonValue. Если оно равно 0 (кнопка нажата), на OLED-дисплее в координатах (0, 40) отображается надпись «Btn: Pressed». В противном случае в тех же координатах отображается надпись «Btn: Not Pressed».

После настройки дисплея с текстом и изображениями метод show() используется для обновления OLED-дисплея, делая изменения видимыми на экране.

Функция utime.sleep(0.1) приостанавливает выполнение кода на 0,1 секунды перед началом следующей итерации цикла. Это создает небольшую задержку между каждым чтением и обновлением значений на OLED дисплее, предотвращая чрезмерную загрузку ЦП. Затем цикл повторяется, постоянно обновляя OLED-дисплей новыми значениями джойстика и состоянием кнопок.

Тестирование работы этого варианта проекта вы можете посмотреть в следующем видео.

Источник статьи

(Проголосуй первым!)
Загрузка...
65 просмотров

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

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