Общие сведения:
Trema-модуль 3D-джойстик - является модулем ввода данных. С его помощью можно управлять роботами, манипуляторами, станками, различными моделями (машинки, танки, самолёты, вертолёты, квадрокоптеры, лодки и т.д.), а также использовать для создания игровых приставок, выбора пунктов меню на дисплеях и индикаторах, ввода значений, и т.д. Джойстик можно не только перемещать по осям X и Y, но и нажимать на него.
Видео:
Спецификация:
- Напряжение питания: 5 В / 3,3 В (оба напряжения входят в диапазон допустимых значений).
- Потребляемый ток: < 10 мА
- Габариты: 30x30 мм
Все модули линейки "Trema" выполнены в одном формате
Подключение:
- Выводы «X» и «Y» модуля подключается к любым аналоговым входам Arduino. Значения, считываемые с этих выводов, растут при перемещении джойстика слева на право и снизу вверх.
- Вывод «K» является цифровым и подключается к любому выводу Arduino. В обычном состоянии на нём уровень логического «0», а при нажатии на джойстик, он меняется на логическую «1».
- Выводы «V» и «G» являются выводами питания.
Схема установки модуля при его подключении через Trema Set Shield.
Модуль удобно подключать 3 способами, в зависимости от ситуации:
Способ - 1 : Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO

Способ - 2 : Используя Trema Set Shield
Модуль можно подключить к любому из аналоговых входов Trema Set Shield.

Способ - 3 : Используя проводной шлейф и Shield
Используя 5-и проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.

Питание:
Входное напряжение 5 В или 3,3 В постоянного тока, подаётся на выводы Vcc (V) и GND (G).
Подробнее о модуле:
Данные модуля считываются с двух потенциометров и тактовой кнопки, механически связанных с рычагом джойстика. Кнопка подключена в разрыв питания Vcc и выхода «K», который прижат к GND через резистор. Следовательно, на выходе «K» может устанавливаться только два состояния: логический «0» (кнопка отпущена) или «1» (кнопка нажата). Выводы координат «X» и «Y» являются аналоговыми выходами модуля, они подключены к потенциометрам так, что напряжение снимаемое между этими выводами и GND растет при перемещении джойстика слева на право и снизу вверх.
Примеры:
Определение положения джойстика и включение светодиода по нажатию кнопки
const int8_t Xaxis = A0; // Определяем номер вывода, к которому подключен контакт оси Х джойстика
const int8_t Yaxis = A1; // Определяем номер вывода, к которому подключен контакт оси У джойстика
const int8_t Button = 2; // Определяем номер вывода, к которому подключен контакт кнопки джойстика
const int8_t LED = 7; // Определяем номер вывода, к которому подключен светодиод
uint16_t XborderMIN = 505; // Задаём границу значений, НИЖЕ которой будет считаться, что джойстик отклонён по оси Х влево
uint16_t XborderMAX = 515; // Задаём границу значений, ВЫШЕ которой будет считаться, что джойстик отклонён по оси Х вправо
uint16_t YborderMIN = 505; // Задаём границу значений, НИЖЕ которой будет считаться, что джойстик отклонён по оси У вниз
uint16_t YborderMAX = 515; // Задаём границу значений, ВЫШЕ которой будет считаться, что джойстик отклонён по оси У вверх
uint16_t Xvol = 0, Yvol = 0; // Задаём переменные, которые будут принимать значения, считанные с осей джойстика
void setup() {
Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта
pinMode(LED, OUTPUT); // Настраиваем вывод LED на работу в режиме выхода
pinMode(Button, INPUT); // Настраиваем вывод Button на работу в режиме входа
}
void loop() {
Xvol = analogRead(Xaxis); // Считываем значения оси Х
Yvol = analogRead(Yaxis); // Считываем значения оси У
if (Xvol < XborderMIN) { // Проверяем, полученное значение Х меньше нижней границы центрального положения или нет. Если да, то
if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то
Serial.println("Left-Down"); // значит джойстик находится в положении ВЛЕВО-ВНИЗ
}
else if (Yvol > YborderMAX) { // Если же полученное значение У больше верхней границы центрального положения, то
Serial.println("Left-Up"); // значит джойстик находится в положении ВЛЕВО-ВВЕРХ
}
else {
Serial.println("Left"); // Если же полученное значение У входит в границы центрального положения по оси У, значит джойстик отклонён ВЛЕВО
}
}
else if (Xvol > XborderMAX) { // Проверяем, полученное значение Х больше верхней границы центрального положения или нет. Если да, то
if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то
Serial.println("Right-Down"); // значит джойстик находится в положении ВПРАВО-ВНИЗ
}
else if (Yvol > YborderMAX) { // Если же полученное значение У больше верхней границы центрального положения, то
Serial.println("Right-Up"); // значит джойстик находится в положении ВПРАВО-ВВЕРХ
}
else {
Serial.println("Right"); // Если же полученное значение У входит в границы центрального положения по оси У, значит джойстик отклонён ВПРАВО
}
}
else { // Если полученное значение Х входит в границы центрального положения по оси Х, значит
if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то
Serial.println("Down"); // значит джойстик находится в положении ВНИЗ
}
else if (Yvol > YborderMAX) { // Если же полученное значение У больше верхней границы центрального положения, то
Serial.println("Up"); // значит джойстик находится в положении ВВЕРХ
}
else {
Serial.println("Center"); // Если же полученное значение У входит в границы центрального положения по оси У, значит джойстик находится в центре.
}
}
if (digitalRead(Button)) { // Проверяем, нажата ли кнопка
delay(1); // Если кнопка была нажата, то подавляем дребезг
digitalWrite(LED, !digitalRead(LED)); // и меняем состояние на выходе светодиода
Serial.println("Button click!"); // Выводим текст о том, что кнопка была нажата
while (digitalRead(Button)) {} // Если кнопка удерживается, то ничего не делаем
delay(10); // Если кнопка отпускается, то подавляем дребезг
}
}
В мониторе последовательного порта вы увидите:

Применение:
- Управление, джойстики, контроллеры;

Обсуждение