4.03.4. Лабораторная работа №4.3.4.md
Джойстик
Тема работы
Мы научились управлять сервоприводом с помощью потенциометра. Но что, если нам нужно управлять сразу несколькими параметрами? В этой лабораторной работе мы познакомимся с джойстиком — устройством, которое объединяет в себе сразу два потенциометра и кнопку. Мы соберём схему, в которой движение джойстика по оси X будет управлять углом поворота сервопривода, а движение по оси Y — яркостью светодиода.
Цель
- Научиться подключать и считывать данные с аналогового джойстика.
- Освоить одновременное управление двумя разными устройствами (
сервопривод
исветодиод
) на основе данных с двух аналоговых входов. - Закрепить использование функций
analogRead()
,analogWrite()
иmap()
.
Оборудование и материалы
- Отладочная плата
Рудирон
. - Макетная плата и модуль питания.
- Аккумуляторная батарея 9В.
- 1 аналоговый джойстик.
- 1 сервопривод
MG995
. - 1 светодиод (любого цвета).
- 1 резистор номиналом 220 Ом.
- Соединительные провода.
- USB-кабель для подключения
Рудирона
. - Компьютер с
Arduino IDE
.
Ход работы
-
Как устроен джойстик?
Аналоговый джойстик — это очень удобный орган управления. В его основе лежат два потенциометра, расположенные перпендикулярно друг другу.
- Один потенциометр отслеживает отклонение ручки по оси X (влево-вправо).
- Второй потенциометр отслеживает отклонение по оси Y (вверх-вниз).
- Также в большинстве модулей есть кнопка, которая срабатывает при нажатии на ручку сверху.
Таким образом, с одного устройства мы можем получать сразу три типа данных: два аналоговых (положение по осям) и один цифровой (нажатие кнопки).
-
Сборка схемы
Нам нужно подключить к
Рудирону
сразу три устройства - джойстик, сервопривод и светодиод.- Питание. Используйте внешний источник питания 5В для сервопривода и джойстика, подключив его к макетной плате. Не забудьте соединить земли (
GND
)Рудирона
и макетной платы. - Подключите джойстик:
- Вывод
GND
джойстика — к шине GND на макетной плате. - Вывод
+5V
джойстика — к шине 5V на макетной плате. - Вывод
VRx
(ось X) — к аналоговому входуA0
Рудирона
. - Вывод
VRy
(ось Y) — к аналоговому входуA1
Рудирона
. - Вывод
SW
(кнопка) мы использовать не будем.
- Вывод
- Подключите сервопривод
MG995
:- Питание — от шин 5V и GND на макетной плате.
- Сигнальный провод — к ШИМ-пину 9.
- Подключите светодиод:
- Длинную ножку (анод) — к ШИМ-пину 5.
- Короткую ножку (катод) — через резистор 220 Ом к GND.
- Питание. Используйте внешний источник питания 5В для сервопривода и джойстика, подключив его к макетной плате. Не забудьте соединить земли (
-
Написание и загрузка кода
- Установите перемычку
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», чтобы загрузить код на плату.
- Установите перемычку
-
Проверка работы
- После загрузки кода начните двигать ручку джойстика:
- Движение влево-вправо (по оси X) будет заставлять сервопривод поворачиваться.
- Движение вверх-вниз (по оси Y) будет плавно менять яркость светодиода.
- Вы можете управлять обоими устройствами одновременно!
- После загрузки кода начните двигать ручку джойстика:
Результаты
Вы создали полноценный пульт управления! Ваше устройство считывает данные сразу с двух аналоговых осей джойстика и преобразует их в два независимых управляющих сигнала - один для точного позиционирования сервопривода, другой для плавной регулировки яркости светодиода.
Анализ результатов
В функции loop()
мы последовательно выполняем две независимые задачи: 1. Считываем значение с пина A0
(joyXValue
), масштабируем его в диапазон углов (0-180) и отправляем команду на сервопривод. 2. Считываем значение с пина A1
(joyYValue
), масштабируем его в диапазон яркости (0-255) и отправляем ШИМ-сигнал на светодиод.
Поскольку микроконтроллер делает это очень быстро, для нас оба действия выглядят одновременными и мгновенными.
Выводы
В этой лабораторной работе вы научились работать с более сложным аналоговым компонентом — джойстиком. Вы закрепили навыки одновременного считывания нескольких аналоговых сигналов и управления несколькими исполнительными устройствами. Этот проект является отличной основой для создания пульта управления роботом, игрового контроллера или любого другого устройства, требующего многоосевого управления.
Вопросы для самопроверки
- Из каких основных компонентов состоит аналоговый джойстик?
- Сколько аналоговых и цифровых сигналов можно получить с типового модуля джойстика?
- Почему для считывания положения по осям X и Y мы использовали разные аналоговые пины (
A0
иA1
)? - Как изменить код, чтобы ось Y управляла сервоприводом, а ось X — светодиодом?
- Как можно использовать сигнал с кнопки джойстика (
SW
)? Придумайте и опишите идею для программы.
Вы проделали огромную работу и создали сложную интерактивную систему! В следующей лабораторной работе мы будем использовать фоторезистор для создания «умного» света, который реагирует на окружающее освещение.
- Страницы
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home
-
imgs
- 1. Введение
- 1.01. Лабораторная работа №1.1
- 1.02. Лабораторная работа №1.2
- 1.03. Лабораторная работа №1.3
- 1.04. Лабораторная работа №1.4
- 1.05. Лабораторная работа №1.5
- 2. Основы электроники
- 2.01. Электрический ток и параметры цепи
- 2.01.1. Лабораторная работа №2.1.1
- 2.01.2. Лабораторная работа №2.1.2
- 2.02. Сопротивление в цепи
- 2.02.1. Лабораторная работа №2.2.1
- 2.02.2. Лабораторная работа №2.2.2
- 2.03. Полупроводники
- 2.03.1. Лабораторная работа №2.3.1
- 2.03.2. Лабораторная работа №2.3.2
- 3. Основы программирование на C++
- 3.01. Типы данных и переменные
- 3.01.1. Практикум
- 3.02. Операторы в C++
- 3.02.1. Практикум
- 3.03. Структуры ветвления
- 3.03.1. Практикум
- 3.04. Структуры повторения
- 3.04.1. Практикум
- 3.05. Массивы
- 3.05.1. Практикум
- 3.06. Функции
- 3.06.1. Практикум
- 3.07. Решения задач
- 4. Программирование микроконтроллеров
- 4.01. Цифровые сигналы и GPIO
- 4.01.1. Лабораторная работа №4.1.1
- 4.01.2. Лабораторная работа №4.1.2
- 4.01.3. Лабораторная работа №4.1.3
- 4.01.4. Лабораторная работа №4.1.4
- 4.01.5. Лабораторная работа №4.1.5
- 4.01.6. Лабораторная работа №4.1.6
- 4.01.7. Лабораторная работа №4.1.7
- 4.01.8. Лабораторная работа №4.1.8
- 4.02. Аналоговые сигналы и ШИМ
- 4.02.1. Лабораторная работа №4.2.1
- 4.02.2. Лабораторная работа №4.2.2
- 4.02.3. Лабораторная работа №4.2.3
- 4.02.4. Лабораторная работа №4.2.4
- 4.02.5. Лабораторная работа №4.2.5
- 4.03. Аналоговый сигнал и АЦП
- 4.03.1. Лабораторная работа №4.3.1
- 4.03.2. Лабораторная работа №4.3.2
- 4.03.3. Лабораторная работа №4.3.3
- 4.03.4. Лабораторная работа №4.3.4
- 4.03.5. Лабораторная работа №4.3.5
- 4.04. Аналоговый сигнал и ЦАП
- 4.04.1. Лабораторная работа №4.4.1
- 4.04.2. Лабораторная работа №4.4.2
- 4.05. Генерация и измерение импульсов
- 4.05.1. Лабораторная работа №4.5.1
- 4.05.2. Лабораторная работа №4.5.2
- 4.06. Аппаратные прерывания
- 4.06.1. Лабораторная работа №4.6.1
- 4.06.2. Лабораторная работа №4.6.2
- 4.07. Псевдопараллелизм
- 4.07.1. Лабораторная работа №4.7.1
- 4.07.2. Лабораторная работа №4.7.2
- 4.08. Интерфейсы связи - UART
- 4.08.1. Лабораторная работа №4.8.1
- 4.09. Интерфейсы связи - I2C
- 4.09.1. Лабораторная работа №4.9.1
- 4.10. Интерфейсы связи - SPI
- 4.10.1. Лабораторная работа №4.10.1
- home