Управление с джойстик на arduino. Джойстик Arduino - връзка и скица. Свързване към платката Arduino

Това е модул за въвеждане на данни. Може да се използва за управление на роботи, манипулатори, металорежещи машини, различни модели (автомобили, танкове, самолети, хеликоптери, квадрокоптери, лодки и др.), както и за създаване на игрови конзоли, избор на елементи от менюто на дисплеи и индикатори, въвеждане на стойности , и т.н. Джойстикът може не само да се движи по осите X и Y, но и да се натиска.

Видео:

Спецификация:

  • Захранващо напрежение: 5 V / 3,3 V (и двете напрежения са в допустимия диапазон).
  • Текуща консумация:< 10 мА
  • Размери: 30х30 мм

Всички модули от линията "Trema" са направени в същия формат

Връзка:

  • Изходите "X" и "Y" на модула са свързани към всякакви аналогови входове на Arduino. Стойностите, прочетени от тези щифтове, се увеличават, когато джойстикът се движи отляво надясно и отдолу нагоре.
  • Пинът "K" е цифров и се свързва с всеки щифт Arduino. В нормално състояние нивото на логическа „0“ е на него и когато натиснете джойстика, то се променя на логическо „1“.
  • Щифтове "V" и "G" са захранващи щифтове.

Удобно е да свържете модула по 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 V или 3,3 V DC, приложено към щифтовете Vcc (V) и GND (G).

Повече за модула:

Данните на модула се четат от два потенциометра и тактичен бутон, механично свързан към лоста на джойстика. Бутонът е свързан към захранването Vcc и изхода "K", който се натиска към GND чрез резистор. Следователно на изхода "K" могат да бъдат зададени само две състояния: логическа "0" (бутонът е освободен) или "1" (бутонът е натиснат). Координатните щифтове "X" и "Y" са аналогови изходи на модула, те са свързани към потенциометри, така че напрежението, взето между тези изводи и GND, се увеличава при преместване на джойстика отляво надясно и отдолу нагоре.

Примери:

Открийте позицията на джойстика и включете светодиода при натискане на бутон

const int8_t Xaxis = A0; // Определете номера на щифта, към който е свързан щифтът на оста X на джойстика const int8_t Yaxis = A1; // Определете номера на щифта, към който е свързан щифтът на оста Y на джойстика const int8_t Button = 2; // Определете номера на щифта, към който е свързан щифтът на бутона на джойстика const int8_t LED = 7; // Определете номера на щифта, към който е свързан светодиодът uint16_t XborderMIN = 505; // Задаване на границата на стойностите, ПОД които ще се счита, че джойстикът е отклонен по оста X наляво uint16_t XborderMAX = 515; // Задаване на границата на стойностите, НАД която ще се счита, че джойстикът е отклонен по оста X надясно uint16_t YborderMIN = 505; // Задаване на границата на стойностите, ПОД които ще се счита, че джойстикът е отклонен надолу по оста Y uint16_t YborderMAX = 515; // Задаване на границата на стойностите, НАД която ще се счита, че джойстикът е наклонен нагоре по оста Y uint16_t Xvol = 0, Yvol = 0; // Задаване на променливи, които ще приемат стойности, прочетени от осите на джойстика void setup() ( Serial.begin(9600); // Иницииране на трансфер на данни към монитора на серийния порт pinMode(LED, OUTPUT); // Задаване на LED изхода за работа в изходен режим pinMode(Button, INPUT); // Задаване на щифта за бутон да работи в режим на въвеждане ) void loop() ( Xvol = analogRead(Xaxis); // Четене на стойностите на оста X Yvol = analogRead(Yaxis); // Прочетете стойностите на оста, ако (Xvol< XborderMIN) { // Проверяем, полученное значение Х меньше нижней границы центрального положения или нет. Если да, то if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Left-Down"); // значит джойстик находится в положении ВЛЕВО-ВНИЗ } else if (Yvol >YborderMAX) ( // Ако получената стойност Y е по-голяма от горната граница на централната позиция, тогава Serial.println("Left-Up"); // означава, че джойстикът е в позиция НАЛЯВО-ГОРЕ ) иначе ( Serial. println("Left"); // Ако получената стойност Y е в границите на централната позиция по оста Y, тогава джойстикът се отклонява НАЛЯВО ) ) иначе if (Xvol > XborderMAX) ( // Проверете дали получената стойност X е по-голяма от горната граница на централната позиция или не. Ако да, тогава ако (Yvol< YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Right-Down"); // значит джойстик находится в положении ВПРАВО-ВНИЗ } else if (Yvol >YborderMAX) ( // Ако получената стойност Y е по-голяма от горната граница на централната позиция, тогава Serial.println("Right-Up"); // означава, че джойстикът е в позиция НАДЯСНО НАГОРЕ) иначе ( Serial. println("Right"); // Ако получената стойност на Y е в границите на централната позиция по оста Y, тогава джойстикът се отклонява НАДЯСНО ) ) else ( // Ако получената стойност на X е в рамките на границите на централната позиция по оста X, тогава ако (Yvol< YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Down"); // значит джойстик находится в положении ВНИЗ } else if (Yvol >YborderMAX) ( // Ако получената стойност Y е по-голяма от горната граница на централната позиция, тогава Serial.println("Up"); // означава, че джойстикът е в позиция UP ) иначе ( Serial.println("Center "); // Ако получената стойност на Y е в границите на централната позиция по оста Y, което означава, че джойстикът е в центъра. ) ) if (digitalRead(Button)) ( // Проверете дали бутонът е натиснат закъснение(1); // Ако бутонът е бил натиснат, тогава потиснете отскачането digitalWrite(LED, !digitalRead(LED)); // и променете изходното състояние на серийния LED. println("Щракване с бутон!"); // Отпечатайте текста, че бутонът е бил натиснат, докато (digitalRead(Button)) () // Ако бутонът е задържан, тогава не правете нищо забавяне(10); // Ако бутонът е освободен, тогава потискайте отскачането ) )

В монитора на серийния порт ще видите.

Един ден попаднах на интересен малък модул за джойстик в eBay, който много прилича на тези, използвани в контролерите за PlayStation 2. Оказа се, че модулът е много лесен за използване с Arduino и струва само няколко долара.

Има няколко производители на джойстици за Arduino, включително Adafruit, Sparkfun и огромен брой китайски компании. Радвам се, че принципът на тяхното действие е напълно идентичен.

Обща информация за модула на джойстика за Arduino

На модула има 5 пина: Vcc, Ground, X, Y, Key. Моля, имайте предвид, че нотацията на вашия модул може да се различава. Зависи от производителя. Джойстикът е аналогов и осигурява по-голяма прецизност от обикновените "насочени" джойстици, които използват бутони и механични превключватели. Освен това джойстикът може да бъде натиснат (при моя модел това изисква прилично усилие. Може просто да не е разработено още). След щракване, бутонът "натиснете, за да изберете" ще работи.

За да четете данни от щифтовете X / Y, трябва да използвате аналоговите изходи на Arduino. Ключовият щифт е заземен при натискане. Иначе не участва в нито една верига. За стабилно четене на данните от щифтовете Key/Select, те трябва да бъдат свързани към източник на захранване (Vcc) чрез издърпващ резистор. Стойността на вградените резистори на Arduino ще бъде достатъчна за това.

Вижте видео пример за това как джойстикът работи с Arduino:

Схема на свързване на джойстика за Arduino

    Arduino GND - GNG

    ARDUINO A0 - VER/Y

    Arduino A1 - HOR/X

Основна скица за използване на джойстик с Arduino

int бутонПин = 2;

int xPosition = 0;

int yPosition = 0;

int buttonState = 0;

// инициализация на обмен на данни чрез серийния протокол със скорост 9600 bps:

Serial.begin(9600);

pinMode(xpin, INPUT);

pinMode(yPin, INPUT);

// активиране на издърпващия резистор на щифта на бутона

pinMode(buttonPin, INPUT_PULLUP);

// За по-ранни версии на Arduino (по-малко от 1.0.1)

// pinMode(buttonPin, INPUT);

// digitalWrite(buttonPin, HIGH);

xPosition = analogRead(xpin);

yPosition = analogRead(yPin);

buttonState = digitalRead(buttonPin);

Serial.print("X: ");

Serial.print(xPosition);

Serial.print(" | Y: ");

Serial.print(yPosition);

Serial.print(" | Бутон: ");

Сериен println(buttonState);

забавяне (100); // добавяне на забавяне между четенето на данни

Както бе споменато по-горе, много хора произвеждат модули за джойстик. Sparkfun има интересно решение. Те пускат Joystick Shield, за който ще говорим по-нататък. Външният вид на щита на джойстика е показан на фигурата по-долу.


Монтаж на щит на джойстика

Тук си струва да се спомене, че щитът се доставя несглобен. Така че трябва да работите с поялник. Пълни инструкции за сглобяване можете да намерите на този адрес: Ръководство за сглобяване на щит на джойстика. Материалът от производителя е на английски, но има достатъчно снимков материал. Така че е лесно да се разбере.

За какво може да се използва джойстикът?

Щитът на джойстика има четири бутона отдясно, един бутон директно върху джойстика и самия аналогов джойстик. Щитът може да се използва за управление на мелодията или пикселите на монитора. Бутоните могат да се използват за навигация и управление на игри.

За допълнителна мотивация можете да разгледате видеото по-долу:

След като сте сглобили щита на джойстика, можете безопасно да правите промени в скиците, за да постигнете целите си.

Как да проследите текущата позиция на джойстика?

Позицията на джойстика се изчислява в зависимост от стойностите на двата потенциометра, които са инсталирани в него. Джойстикът се движи в две посоки, които обикновено се обозначават като X и Y. За да четем данни от потенциометрите, използваме функцията analogRead (), която връща стойност в диапазона от 0 до 1023. За да направите това, предайте числата на щифтовете, към които е свързан джойстикът към функцията. В този пример се свързваме с аналогов пин 0 за X и аналогов пин 1 за Y.

Serial.println(analogRead(0)); // показва текущата координата X на позицията

Serial.println(analogRead(1)); // показва координатата на текущата позиция Y

Много удобен подход е да използвате константи за стойности, които няма да се променят в цялата програма. Така че в кода по-долу ще декларираме константи за аналоговите щифтове, които използваме, и ще покажем текущата позиция X и Y в серийния монитор на Arduino IDE:

константен байт PIN_ANALOG_X = 0;

константен байт PIN_ANALOG_Y = 1;

Serial.begin(9600);

Serial.print("x:");

сериен печат(" ");

Serial.print("y:");

сериен печат(" ");

Serial.println();

Как да проследите текущата посока на джойстика?

Много полезен код. Въз основа на стойностите на позицията X и Y можем да определим дали джойстикът е центриран или изместен в една от осемте посоки (нагоре, надясно нагоре, надясно, надясно надолу, надолу, наляво-надолу, наляво, наляво нагоре).

Тъй като стойностите във всяка от посоките ще бъдат в диапазона от 0 до 1023, можем да предположим, че центърът ще бъде в диапазона 511-512. Но не е така. Няма да получим толкова точно текущата стойност. И ако дефинираме неправилна стойност, можем да получим информация за движението на джойстика, въпреки че той беше в центъра и не се движи.

За да направим това, ще въведем диапазон от стойности и ще приемем, че всяка стойност в този диапазон ще се счита за център:

Този диапазон не е "върховната истина". Трябва да го настроите към джойстика си, нали. Тези стойности се въвеждат в кода като константи:

Сега ще преобразуваме всяка координата от 0 до 1023 в -1 към 1. За координатата X 1 означава преместване наляво, 0 означава без движение, а 1 означава движение надясно. За посоката Y -1 означава движение надолу, 0 означава липса на движение, а 1 означава движение нагоре.

Ще започнем, като зададем стойността във всяка посока на 0 („център“). След това използваме изрази if/else, за да проверим дали стойността на позицията в която и да е посока е по-голяма или по-малка от нашия диапазон:

x_direction = 0;

y_direction = 0;

ако (x_position > X_THRESHOLD_HIGH) (

x_direction = 1;

) иначе if (x_position

x_direction = -1;

if (y_position > Y_THRESHOLD_HIGH) (

y_direction = 1;

) иначе if (y_position

y_direction = -1;

Arduino IDE има функция map(), която на теория може да се използва вместо if/else, но в този случай методът става по-сложен поради проблеми с центрирането, така че няма да използваме map тук.

В примера по-долу ще видите, че if/else се използва по-късно за показване на посоката - можете лесно да модифицирате този пример, за да отговаря на вашите нужди:

константен байт PIN_ANALOG_X = 0;

константен байт PIN_ANALOG_Y = 1;

const int X_THRESHOLD_LOW = 505;

const int X_THRESHOLD_HIGH = 515;

const int Y_THRESHOLD_LOW = 500;

const int Y_THRESHOLD_HIGH = 510;

int x_direction;

int y_direction;

Serial.begin(9600);

x_direction = 0;

y_direction = 0;

x_position = analogRead(PIN_ANALOG_X);

y_position = analogRead(PIN_ANALOG_Y);

ако (x_position > X_THRESHOLD_HIGH) (

x_direction = 1;

) иначе if (x_position

x_direction = -1;

if (y_position > Y_THRESHOLD_HIGH) (

y_direction = 1;

) иначе if (y_position

y_direction = -1;

ако (x_direction == -1) (

ако (y_direction == -1) (

Serial.println("вляво надолу");

Serial println("вляво");

// y_direction == 1

Serial.println("вляво нагоре");

) иначе ако (x_direction == 0) (

ако (y_direction == -1) (

Serial.println("надолу");

) иначе if (y_direction == 0) (

Serial.println("центрирано");

// y_direction == 1

Serial.println("нагоре");

// x_direction == 1

ако (y_direction == -1) (

Serial.println("вдясно-надолу");

) иначе if (y_direction == 0) (

Serial.println("вдясно");

// y_direction == 1

Serial.println("вдясно нагоре");

Как да настроя Arduino да проследява състоянието на бутон (независимо дали е натиснат)?

Преди да разберете дали бутон на щита на джойстика е натиснат, трябва да настроите Arduino да разпознава бутоните. Изненадващо, това е реализирано в тялото на функцията setup()!

Първо, ние дефинираме константи за щифтовете на Arduino, които са свързани с бутоните:

// Избор на бутон, който работи при натискане на джойстика

константен байт PIN_BUTTON_UP = 4;

Ако някога сте използвали бутони с Arduino преди, може да сте забелязали, че трябва да използвате резистор, за да откриете напрежението, когато бутонът е натиснат. За да се намали броят на частите, щитът на джойстика е проектиран по такъв начин, че не са необходими резистори. Може би се питате: „Ако бутоните се нуждаят от резистори, защо щитът работи без тях?“. Просто не сте взели предвид, че Arduino има вградени резистори. Можете просто да ги активирате и да ги използвате с нашия щит!

За да активирате тези вградени издърпващи резистори, трябва да настроите щифта в режим INPUT и след това да го активирате, като използвате следните редове:

Ако използвате издърпващ резистор, важно е да запомните, че ненатиснат бутон дава ВИСОК сигнал, а натиснат - НИСК.

За да настроите всеки щифт да работи във входен режим и да активирате издърпващите резистори, можете да използвате следния код:

pinMode(PIN_BUTTON_RIGHT, INPUT);

digitalWrite(PIN_BUTTON_RIGHT, HIGH);

Как да разберете кога е натиснат бутон на щита на джойстика?

След преодоляване на предишните точки е възможно да се определи дали бутонът е натиснат с помощта на функцията digitalRead (). Когато отчетената стойност е НИСКА, бутонът се натиска, а когато стойността е ВИСОКА, бутонът не се натиска.

if (digitalRead(PIN_BUTTON_LEFT) == LOW) (

// Бутонът е натиснат

// Бутонът не е натиснат

Следният пример ще покаже състоянието на всеки бутон и стойностите от джойстика в серийния монитор на Arduino IDE:

константен байт PIN_BUTTON_SELECT = 2;

константен байт PIN_BUTTON_RIGHT = 3;

константен байт PIN_BUTTON_UP = 4;

константен байт PIN_BUTTON_DOWN = 5;

константен байт PIN_BUTTON_LEFT = 6;

константен байт PIN_ANALOG_X = 0;

константен байт PIN_ANALOG_Y = 1;

Serial.begin(9600);

pinMode(PIN_BUTTON_RIGHT, INPUT);

digitalWrite(PIN_BUTTON_RIGHT, HIGH);

pinMode(PIN_BUTTON_LEFT, INPUT);

digitalWrite(PIN_BUTTON_LEFT, HIGH);

pinMode(PIN_BUTTON_UP, INPUT);

digitalWrite(PIN_BUTTON_UP, HIGH);

pinMode(PIN_BUTTON_DOWN, INPUT);

digitalWrite(PIN_BUTTON_DOWN, HIGH);

pinMode(PIN_BUTTON_SELECT, INPUT);

digitalWrite(PIN_BUTTON_SELECT, HIGH);

Serial.print("l:");

Serial.print(digitalRead(PIN_BUTTON_LEFT));

сериен печат(" ");

Serial.print("r:");

Serial.print(digitalRead(PIN_BUTTON_RIGHT));

сериен печат(" ");

Serial.print("u:");

Serial.print(digitalRead(PIN_BUTTON_UP));

сериен печат(" ");

Serial.print("d:");

Serial.print(digitalRead(PIN_BUTTON_DOWN));

сериен печат(" ");

Serial.print("x:");

Serial.print(analogRead(PIN_ANALOG_X));

сериен печат(" ");

Serial.print("y:");

Serial.print(analogRead(PIN_ANALOG_Y));

сериен печат(" ");

сериен печат("s:");

Serial.print(digitalRead(PIN_BUTTON_SELECT));

сериен печат(" ");

Serial.println();

Оставете вашите коментари, въпроси и споделете личния си опит по-долу. В дискусията често се раждат нови идеи и проекти!

Джойстиците са чудесен източник на информация за проект по роботика. Производителите на електроника винаги са обичали този вид неща. Въпреки това, за начинаещите може да им е трудно да схванат концепцията, докато кодират и други подобни. Статията по-долу описва подробно механизма за сглобяване на ардуино джойстик и принципа на неговата работа.

Много роботизирани проекти се нуждаят от джойстик. Модулът за джойстик arduino е подобен на тези, използвани в игровите конзоли. Това става чрез настройка на два потенциометра под ъгъл от 90 градуса. Потенциометрите са свързани към къса пръчка, центрирана от пружини.

Този модул извежда около 2.5V от X и Y, когато е в покой. Преместването на джойстика ще промени изходния сигнал от 0V на 5V в зависимост от неговата посока. Ако свържете този модул към микроконтролер, можете да очаквате стойността да бъде около 512 в покой.

Когато преместите джойстика, можете да видите, че стойностите се променят от 0 до 1023 в зависимост от позицията на джойстика.

Принцип на действие

В кода по-долу сме дефинирали осите X и Y на модула на джойстика за аналогов изход A0 и A1 съответно:

#define joysX Ad0 #define joysY As1

Сега в кода по-долу ще инициализираме PIN 2 за arduino за превключване на модула Joystick и стойността на buttonsdtate и buttonsdtate1 ще бъде 0 в началото на описаната програма:

int бутони = 2; int buttonSdtate = 0; int бутонSdtate1 = 0;

В кода по-долу ние задаваме необходимата скорост на предаване на 9600 и дефинираме пин 7 като изходен щифт и щифт на бутона като входен щифт. Първоначално контактният бутон остава нагоре, докато потребителят не натисне съответния превключвател.

Void setups() ( pinModde(7, OUTPUTs); pinModes(бутони, INPUT); digitalWritesd(бутони, HIGH); Serial.beginsdf(9600); )

Тук, в този код, ние четем стойностите​​от аналоговия изход A0 и A1 и последователно извеждаме към устройството:

Int xValues ​​= analogReadd(joysX); int yValuef = analogReadd(joysY); Serial.prints(xValues); Serial.print("\f"); Serial.printlns(yValues);

Условията за включване и изключване на светодиода според движението на вала на джойстика са дефинирани в кода по-долу. Тук просто вземаме аналоговите стойности на напрежението на щифтовете A0 и A1 на arduino. Тези аналогови стойности ще се променят при преместване на джойстика и светодиодът ще светне според движението на джойстика.

Това е условието за преместване на вала на джойстика в посока Y:

Ако (xValues ​​>= 0 && yValues<= 10){ digitalWrites (10, HIGHd); } else { digitalWrites (10, LOWd); }

Ако (x стойности<= 10 && yValued>= 500) ( digitalWrites (11, HIGHd); ) друго ( digitalWrites (11, LOWsd); )

Това е условието за преместване на вала на джойстика в посока X:

Ако (xValues ​​>= 1020 && yValues ​​>= 500) ( digitalWrites (9, HIGHd); ) else ( digitalWrites (9, LOWf); )

Следният код е условието за преместване на вала на конструираното приспособление в посока Y:

if (xValues>= 500 && yValues>= 1020) ( digitalWrites (8, HIGHf); ) else ( digitalWrites (8, LOWf); )

Когато преместим оста на джойстика диагонално, тогава една позиция идва, когато аналоговата стойност на X и Y е съответно 1023 и 1023 и светодиодите на Pin 9 и Pin 8 ще светнат. Тъй като отговаря на състоянието на LED. Така че, за да се премахне това несъответствие, е посочено условието, че ако стойността на (X, Y) е (1023, 1023), тогава и двата светодиода остават изключени:

Ако (xValues ​​>= 1020 && yValues ​​>= 1020) ( digitalWrites(9, LOWfy); digitalWrites(8, LOWyf); )

Следното условие се използва за управление на светодиода, свързан към превключвателя с бутони. Когато натиснем джойстика, светодиодът се включва и остава заключен, докато бутонът не бъде натиснат надолу. По-добре е да използвате превключвател с бутон.

If (buttonStatesy == LOWfy) ( Serial.printlnsy("Switch = Highy"); digitalWritesy(7, HIGHf); ) else ( digitalWritesy(7, LOWfy);

Необходими инструменти, материали и програми

За да реализирате проекта за джойстик Arduino, ще ви трябват следните материали:

  • джойстик модул;
  • Светодиоди - 5 броя;
  • резистор 100 ома - 3 броя;
  • свързващи проводници;
  • оформление.

Сглобяване на устройството

Джойстиците се предлагат в различни форми и размери. Типичен модул на описаното устройство е показан на фигурата по-долу. Този модул обикновено осигурява аналогови изходи и изходните напрежения, обработвани от този модул, се променят в зависимост от посоката, в която потребителят го движи. Възможно е да се получи посоката на движение чрез интерпретиране на тези промени с помощта на някакъв микроконтролер.

Този модул на джойстика има две оси. Те са ос X и ос Y. Всяка ос е монтирана на потенциометър или саксия. Средните точки на тези потове са определени като Rx и Ry. Така че Rx и Ry са променливите точки за тези потове. Когато инструментът е в режим на готовност, Rx и Ry действат като делител на напрежението.

Когато arduino джойстикът се движи по хоризонталната ос, напрежението на щифта Rx се променя. По същия начин, докато се движи по вертикалната ос, напрежението върху Ry пиксела се променя. Така че имаме четири посоки на устройство на два ADC изхода. Когато пръчката се премести, напрежението на всеки щифт трябва да е високо или ниско, в зависимост от посоката.

Настройка и отстраняване на грешки

След качване на кода в arduino и свързване на компонентите според схемата на свързване, сега управляваме светодиодите с джойстика. Четири светодиода могат да бъдат включени във всяка посока според движението на вала на устройството. Вътре има два потенциометъра, единият за движение по оста X, а другият за движение по оста Y. Всеки потенциометър получава 5v от arduino. Докато преместваме устройството, стойността на напрежението ще се промени и аналоговата стойност на щифтовете A0 и A1 също ще се промени.

И така, от микроконтролера arduino четем аналоговата стойност за оста X и Y и включваме светодиодите в съответствие с движението на оста на устройството. Натискаме превключвателя на модула и го използваме за управление на единичен светодиод във веригата.

Кодът е представен по-долу:

Тестване

За да тествате джойстика за arduino, ще ви трябват следните компоненти:

  1. Микроконтролер (всякакъв съвместим arduino).
  2. джойстик модул.
  3. 1 пин MM конектор.
  4. Оформление.
  5. USB кабел.

Алгоритъм за тестване:

  1. Свържете компонентите с помощта на MM конектор. +5V е свързан към 5V захранване, щифтът GND е свързан към GND, щифтовете VRx и VRy са свързани към аналогов вход, щифтовете и заглавката на щифта са свързани към цифров I/O щифт.
  2. ПИН номерът ще се основава на действителния програмен код.
  3. След хардуерната връзка, поставете примерната скица в средата за разработка на arduino.
  4. С помощта на USB кабел свържете портовете от микроконтролера към компютъра.
  5. Изтеглете програмата.
  6. Вижте резултатите на серийния монитор.

Свързването на джойстика към Arduino ще ви позволи да управлявате дистанционно кола или робот на Arduino с помощта на джойстик. Нека разгледаме в статията как сами да свържете щита на джойстика и да управлявате сервото с помощта на джойстика на Arduino. Нека представим няколко скици и да дадем диаграма за свързване на джойстик към микроконтролер Arduino Nano или Arduino Uno.

Схема на свързване на джойстика за Arduino

Аналоговият стик е въртящо се копче с два потенциометра, които определят позицията на джойстика в посоките X и Y и бутон Z. Наклонете копчето, за да завъртите потенциометрите и да промените изходното напрежение, което ви позволява да наблюдавате степента на отклонение на пръчката от централната точка. Когато копчето на джойстика се освободи, той плавно се връща в централна (нулева) позиция.

Как да свържете джойстика към Arduino Nano и Arduino Uno

Модулът на джойстика KY-023 има своите недостатъци. Факт е, че копчето на джойстика не винаги се връща точно в централната позиция, така че централната позиция на копчето трябва да се вземе предвид в програмата като определен диапазон от стойности, а не като точна стойност. Тоест, когато джойстикът е в центъра, стойността на координатите X и Y може да бъде в диапазона от 490 до 530, вместо 512.

Свързване на джойстик към Arduino UNO

За урока ни трябват следните подробности:

  • платка Arduino Uno / Arduino Nano / Arduino Mega;
  • джойстик модул ky-023;
  • 2 светодиода и 2 резистора;
  • дъска за хляб;
  • проводници "баща-майка", "баща-баща".
Схема на свързване на аналогов джойстик към Arduino Uno

След като свържете джойстика към Arduino, качете следната скица. В този пример мониторът на порта ще показва данни от джойстика и когато бутонът е натиснат, светодиодът на платката, свързан успоредно към щифт 13, ще се изключи. Сглобете веригата на джойстика, както е показано на диаграмата по-горе, качете скицата и отворете монитора на портовете на програмата Arduino IDE.

Скица. Свързване на джойстик към Arduino

#define pinX A2 // Оста X на джойстика#define pinY A1 // ос y на джойстика#define swPin 2 // бутон на джойстика#define ledPin 13 // LED на щифт 13 void setup() ( Serial .begin(9600); pinMode (ledPin, OUTPUT ); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); digitalWrite (swPin, HIGH); ) void loop; ()(boolean ledState = digitalRead(swPin); // вкл. изкл. Светодиод // четене на стойността на оста x // четене на стойността на оста y Serial.print(X); // извеждане към сериен монитор Serial.print("\t"); // раздел Сериен .println(Y); )

Скица. Джойстик LED управление

Сега можете да усложните веригата, като накарате светодиода да се включва плавно, контролирано от джойстика. За да направите това, свържете два светодиода през резистор към аналогови портове 5 и 6. В следващата скица, като използвате функцията карта (), променливите X и Y се преобразуват от диапазона от числа от 0 до 1023 в диапазона от числа от 0 до 255. Свържете светодиодите към щифтове 5 и 6 на Arduino и качете следната скица.

#define pinX A2 // Оста X на джойстика#define pinY A1 // ос y на джойстика#define swPin 2 // бутон на джойстика#define ledPin 13 // LED на щифт 13#define ledX 5 // LED на щифт 5#define ledY 6 // LED на щифт 6 void setup() ( pinMode (ledX, OUTPUT ); pinMode (ledY, OUTPUT); pinMode (ledPin, OUTPUT); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); in digitalWrite (swP , HIGH ); ) void loop() ( boolean ledState = digitalRead(swPin); // четене на състоянието на бутона digitalWrite(ledPin, ledState); // вкл. изкл. Светодиод intX = analogRead(pinX); // четене на стойността на оста x intY = analogRead(pinY); // четене на стойността на оста y X = карта (X, 0, 1023, 0, 255); // преобразуване на стойността X в друг диапазон Y = карта (Y, 0, 1023, 0, 255); // преобразуване на Y стойност в друг диапазон analogWrite(ledX, X); // Включете светодиодите с различна яркостаналогов запис (LEDY, Y); )

Обяснения за кода:

  1. с помощта на функцията map() можете да зададете всякакви, включително обратния диапазон от числа. Можете също да използвате отрицателни стойности.


Процес на домашно сглобяване:

Стъпка първа. Свързваме серводвигатели
Процесът на сглобяване на домашен продукт започва със свързването на серводвигатели. За да се сглоби предварително оформление, се използва платка. След това можете да направите отделен щит. На фигурата можете да видите как точно всичко е свързано.


Червеният кабел е захранващ и се свързва към 5V щифт на Arduino.
Черният проводник е отрицателен (заземен) и се свързва към щифт Arduino, наречен GND.
Жълтият кабел от десния и левия серводвигател трябва да бъде свързан към щифт 11. При някои модели може да е и бял.
Подобен жълт кабел нагоре и надолу трябва да бъде свързан към щифт 4. Може също да е бял на някои модели двигатели.
Важно е да запомните, че сигналните конектори, които управляват двигателя, идват от PWM изходите.

Стъпка втора. Свързваме джойстика

Как е свързан джойстика се вижда на снимката. В началото схемата може да изглежда доста сложна, но всъщност тук няма нищо сложно. Както в случая с двигателите, тук за свързване се използва платка.


1. U/R+ и L/R+ изходи могат да бъдат намерени на модула на джойстика. Захранването се свързва през тези изходи. Съответно, тук трябва да се приложи напрежение + 5V от съответния щифт на Arduino.

2. Има и два конектора на джойстика, наречени L/R и два U/D конектора. Те трябва да бъдат свързани към аналогови изходи A3 и A4.

3. И накрая, земята на джойстика трябва да бъде свързана със земята на Arduino.

След монтажа връзката трябва да се провери отново. Поради грешки при свързване в повечето случаи възникват проблеми. Това е особено вярно, когато се използва платка и има много връзки на нея.

Стъпка трета. Скица за Arduino
Кодът е много прост и съдържа подробни коментари. Горният код просто трябва да бъде копиран в Arduino IDE. След зареждане на кода, двигателите не трябва да се движат. Те трябва да започнат да се движат само когато се натисне бутон на джойстика.


Проблеми, които могат да възникнат и как да ги разрешим
1. Ако двигателите не се включат, трябва да проверите отново връзката. PWM изходи се използват за свързване на двигатели, а аналоговите изходи се използват за свързване на джойстици.

2. Случва се веднага след зареждане на кода двигателите да започнат да вибрират. Това се случва, ако щифтовете U / D + L / R + са свързани неправилно. Връзката трябва да бъде внимателно проверена. За да не изгори платката по време на теста, тя трябва да бъде изключена от компютъра.

3. Ако всичко е проверено отново, но двигателите все още не искат да работят, можете да опитате да свържете отново джойстика. Тя трябва да бъде отстранена от платката и след това да се инсталира обратно с известно усилие. Конекторите на джойстика трябва да се вписват добре в макетната платка.

Ако всичко се получи, сега можете да започнете да създавате всякакви домашни продукти с управление на джойстика. Например, можете да направите робот, който може да се управлява с джойстик, и много други.