4.03.4. Лабораторная работа №4.3.4.md


Джойстик

Тема работы

Мы научились управлять сервоприводом с помощью потенциометра. Но что, если нам нужно управлять сразу несколькими параметрами? В этой лабораторной работе мы познакомимся с джойстиком — устройством, которое объединяет в себе сразу два потенциометра и кнопку. Мы соберём схему, в которой движение джойстика по оси X будет управлять углом поворота сервопривода, а движение по оси Y — яркостью светодиода.

Цель

  • Научиться подключать и считывать данные с аналогового джойстика.
  • Освоить одновременное управление двумя разными устройствами (сервопривод и светодиод) на основе данных с двух аналоговых входов.
  • Закрепить использование функций analogRead(), analogWrite() и map().

Оборудование и материалы

  • Отладочная плата Рудирон.
  • Макетная плата и модуль питания.
  • Аккумуляторная батарея 9В.
  • 1 аналоговый джойстик.
  • 1 сервопривод MG995.
  • 1 светодиод (любого цвета).
  • 1 резистор номиналом 220 Ом.
  • Соединительные провода.
  • USB-кабель для подключения Рудирона.
  • Компьютер с Arduino IDE.

Ход работы

  1. Как устроен джойстик?

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

    • Один потенциометр отслеживает отклонение ручки по оси X (влево-вправо).
    • Второй потенциометр отслеживает отклонение по оси Y (вверх-вниз).
    • Также в большинстве модулей есть кнопка, которая срабатывает при нажатии на ручку сверху.

    Таким образом, с одного устройства мы можем получать сразу три типа данных: два аналоговых (положение по осям) и один цифровой (нажатие кнопки).

  2. Сборка схемы

    Нам нужно подключить к Рудирону сразу три устройства - джойстик, сервопривод и светодиод.

    • Питание. Используйте внешний источник питания 5В для сервопривода и джойстика, подключив его к макетной плате. Не забудьте соединить земли (GND) Рудирона и макетной платы.
    • Подключите джойстик:
      • Вывод GND джойстика — к шине GND на макетной плате.
      • Вывод +5V джойстика — к шине 5V на макетной плате.
      • Вывод VRx (ось X) — к аналоговому входу A0 Рудирона.
      • Вывод VRy (ось Y) — к аналоговому входу A1 Рудирона.
      • Вывод SW (кнопка) мы использовать не будем.
    • Подключите сервопривод MG995:
      • Питание — от шин 5V и GND на макетной плате.
      • Сигнальный провод — к ШИМ-пину 9.
    • Подключите светодиод:
      • Длинную ножку (анод) — к ШИМ-пину 5.
      • Короткую ножку (катод) — через резистор 220 Ом к GND.
  3. Написание и загрузка кода

    • Установите перемычку PRG | RUN в положение PRG.
    • В Arduino IDE введите следующий код:

      #include <Servo.h>
      
      Servo myServo; 
      
      // Пины для джойстика
      const int joyXPin = A0;
      const int joyYPin = A1;
      
      // Пин для сервопривода
      const int servoPin = 9;
      
      // Пин для светодиода
      const int ledPin = 5;
      
      void setup() {
        myServo.attach(servoPin);
        pinMode(ledPin, OUTPUT);
      }
      
      void loop() {
        // --- Управление сервоприводом по оси X ---
        int joyXValue = analogRead(joyXPin);
        int servoAngle = map(joyXValue, 0, 4095, 0, 180);
        myServo.write(servoAngle);
      
        // --- Управление яркостью светодиода по оси Y ---
        int joyYValue = analogRead(joyYPin);
        int ledBrightness = map(joyYValue, 0, 4095, 0, 255);
        analogWrite(ledPin, ledBrightness);
      
        delay(15); // Небольшая задержка для стабильности
      }
      
    • Нажмите кнопку «Upload», чтобы загрузить код на плату.
  4. Проверка работы

    • После загрузки кода начните двигать ручку джойстика:
      • Движение влево-вправо (по оси X) будет заставлять сервопривод поворачиваться.
      • Движение вверх-вниз (по оси Y) будет плавно менять яркость светодиода.
    • Вы можете управлять обоими устройствами одновременно!

Результаты

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

Анализ результатов

В функции loop() мы последовательно выполняем две независимые задачи: 1. Считываем значение с пина A0 (joyXValue), масштабируем его в диапазон углов (0-180) и отправляем команду на сервопривод. 2. Считываем значение с пина A1 (joyYValue), масштабируем его в диапазон яркости (0-255) и отправляем ШИМ-сигнал на светодиод.

Поскольку микроконтроллер делает это очень быстро, для нас оба действия выглядят одновременными и мгновенными.

Выводы

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

Вопросы для самопроверки

  1. Из каких основных компонентов состоит аналоговый джойстик?
  2. Сколько аналоговых и цифровых сигналов можно получить с типового модуля джойстика?
  3. Почему для считывания положения по осям X и Y мы использовали разные аналоговые пины (A0 и A1)?
  4. Как изменить код, чтобы ось Y управляла сервоприводом, а ось X — светодиодом?
  5. Как можно использовать сигнал с кнопки джойстика (SW)? Придумайте и опишите идею для программы.

Вы проделали огромную работу и создали сложную интерактивную систему! В следующей лабораторной работе мы будем использовать фоторезистор для создания «умного» света, который реагирует на окружающее освещение.