Arduino жолооны хүрдний жолооны удирдлага. Joystick Arduino - холболт ба ноорог. Arduino самбарт холбогдож байна

Энэ нь өгөгдөл оруулах модуль юм. Үүний тусламжтайгаар та робот, манипулятор, машин хэрэгсэл, төрөл бүрийн загвар (машин, танк, онгоц, нисдэг тэрэг, квадрокоптер, завь гэх мэт) -ийг удирдахаас гадна тоглоомын консол үүсгэх, дэлгэц, заагч дээр цэсийн зүйлийг сонгох, утгыг оруулах гэх мэт. Жойстикийг зөвхөн X ба Y тэнхлэгийн дагуу хөдөлгөхөөс гадна түүн дээр дарж болно.

Видео:

Үзүүлэлт:

  • Нийлүүлэлтийн хүчдэл: 5V / 3.3V (хоёр хүчдэл нь зөвшөөрөгдөх хязгаарт байна).
  • Эрчим хүчний хэрэглээ:< 10 мА
  • Хэмжээ: 30x30 мм

"Трема" шугамын бүх модулиудыг ижил форматаар хийсэн

Холболт:

  • Модулийн "X" ба "Y" зүү нь Arduino-ийн аль ч аналог оролттой холбогдсон байна. Жойстикийг зүүнээс баруун тийш, доороос дээш хөдөлгөхөд эдгээр зүүнээс уншсан утгууд нэмэгддэг.
  • K зүү нь дижитал бөгөөд Arduino дээрх дурын зүүтэй холбогддог. Хэвийн төлөвт энэ нь логик "0" түвшинтэй бөгөөд та joystick дээр дарахад энэ нь логик "1" болж өөрчлөгддөг.
  • V ба G зүү нь цахилгаан зүү юм.

Нөхцөл байдлаас хамааран модулийг 3 аргаар холбоход тохиромжтой.

Арга - 1:Утастай тууз кабель болон Piranha UNO ашиглан

"Papa - Mama" утсыг ашиглан бид Piranha UNO хянагчтай шууд холбогддог


Арга - 2: Trema Set Shield ашиглах

Модуль нь Trema Set Shield-ийн аль ч аналог оролттой холбогдож болно.


Арга - 3: Утастай туузан кабель ба Shield ашиглах

5 утастай туузан кабель ашиглан Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO гэх мэт.


Тэжээл:

Vcc (V) ба GND (G) шон дээр 5V эсвэл 3.3V DC оролтын хүчдэлийг нийлүүлдэг.

Модулийн талаар дэлгэрэнгүй:

Модулийн өгөгдлийг хоёр потенциометрээс уншиж, жолоодлогын хөшүүрэгтэй механикаар холбосон тактик товчлуурыг уншина. Товчлуур нь Vcc тэжээлийн хангамжийн тасалдал болон "K" гаралттай холбогдсон бөгөөд энэ нь резистороор GND дээр дарагдсан байна. Тиймээс "K" гаралт дээр зөвхөн хоёр төлөвийг тохируулж болно: логик "0" (товчлуур суллагдсан) эсвэл "1" (товчлуур дарагдсан). "X" ба "Y" координатуудын зүү нь модулийн аналог гаралт бөгөөд тэдгээр нь потенциометртэй холбогдсон тул joystick-ыг зүүнээс баруун тийш, доороос дээш шилжүүлэх үед эдгээр зүү ба GND хооронд авсан хүчдэл нэмэгддэг.

Жишээ нь:

Жойстикийн байрлалыг тодорхойлж, товчлуурыг дарж LED-ийг асаана

const int8_t Xaxis = A0; // Жойстикийн X тэнхлэгийн контактыг холбосон шонгийн дугаарыг тодорхойлох const int8_t Yaxis = A1; // Жойстикийн Y тэнхлэгийн контакт холбогдсон зүүний дугаарыг тодорхойлох const int8_t Button = 2; // Жойстикийн товчлуурын контактыг холбосон шонгийн дугаарыг тодорхойлох const int8_t LED = 7; // LED холбогдсон зүү дугаарыг тодорхойлох uint16_t XborderMIN = 505; // Утгуудын хил хязгаарыг ДООРОНД тохируулна уу. Жойстик X тэнхлэгийн дагуу зүүн тийш хазайсан uint16_t XborderMAX = 515; // Утгын хил хязгаарыг ДЭЭРЭЭР тохируулна уу. ДЭЭГЭЭР Жойстик нь X тэнхлэгийн дагуу баруун тийш хазайсан uint16_t YborderMIN = 505; // Утгауудын хил хязгаарыг тогтоо, ДЭЭРД нь joystick нь Y тэнхлэгийн дагуу доошоо хазайсан гэж үзнэ uint16_t YborderMAX = 515; // Утгын хил хязгаарыг ДЭЭРЭЭС, Жойстикийг Y тэнхлэгийн дагуу дээшээ хазайсан гэж үзнэ uint16_t Xvol = 0, Yvol = 0; // Жойстикийн тэнхлэгээс унших утгуудыг авах хувьсагчдыг тохируулна уу () (Serial.begin (9600); // Цуваа портын мониторын pinMode (LED, OUTPUT) руу өгөгдөл дамжуулалтыг эхлүүлэх); // Тохируулах Гаралтын горимд ажиллах LED гаралт pinMode (Товч, INPUT); // Товчлуурын зүүг оролтын горимд ажиллуулахаар тохируулах) хүчингүй давталт () (Xvol = analogRead (Xaxis); // X тэнхлэгийн утгыг уншина уу Yvol). = analogRead (Yaxis); // Хэрэв тэнхлэгийн утгыг уншина уу (Xvol< XborderMIN) { // Проверяем, полученное значение Х меньше нижней границы центрального положения или нет. Если да, то if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Left-Down"); // значит джойстик находится в положении ВЛЕВО-ВНИЗ } else if (Yvol >YborderMAX) (// Хэрэв хүлээн авсан Y утга нь төвийн байрлалын дээд хилээс их байвал Serial.println ("Зүүн-Дээш"); // нь joystick ЗҮҮН-ДЭЭД байрлалд байна гэсэн үг) өөр (Цуврал. println ("Зүүн"); // Хэрэв олж авсан Y утга нь Y тэнхлэгийн дагуу төв байрлалын хилийн дотор байвал джойстик ЗҮҮН тийш хазайсан байна)) өөрөөр хэлбэл (Xvol> XborderMAX) (// Авсан X байгаа эсэхийг шалгана уу. утга нь төвийн байрлалын дээд хилээс их эсвэл үгүй. Хэрэв тийм бол (Y vol< YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Right-Down"); // значит джойстик находится в положении ВПРАВО-ВНИЗ } else if (Yvol >YborderMAX) (// Хэрэв хүлээн авсан Y утга нь төвийн байрлалын дээд хилээс их байвал Serial.println ("Баруун-Дээш"); // гэдэг нь джойстик баруунаас дээш байрлалд байна гэсэн үг) өөр (Цуврал. println ("Баруун"); // Хэрэв хүлээн авсан Y утга нь Y тэнхлэгийн дагуу төв байрлалын хил хязгаарт багтаж байвал джойстик баруун тийш хазайсан байна)) өөрөөр (// Хүлээн авсан X утга нь хил хязгаарт багтсан бол X тэнхлэгийн дагуух төв байрлал, хэрэв (Y vol< YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Down"); // значит джойстик находится в положении ВНИЗ } else if (Yvol >YborderMAX) (// Хэрэв хүлээн авсан Y утга нь төв байрлалын дээд хилээс их байвал Serial.println ("Дээш"); // нь джойстик ДЭЭШ байрлалд байна гэсэн үг) өөр (Serial.println ("Төв"). "); // Хэрэв үүссэн Y утга нь Y тэнхлэгийн дагуух төв байрлалын хилийн дотор байвал джойстик голд байна гэсэн үг.)) if (digitalRead (Товч)) (// Саатал гарсан эсэхийг шалгана уу (1). ) товчлуур дарагдсан; // Хэрэв товчлуур дарагдсан бол яриаг дарж, digitalWrite (LED,! digitalRead (LED)); // болон LED Serial.println гаралтын төлөвийг өөрчлөх ("Товчлуур дээр дар!") ; // Товчлуур дээр дарагдсан текстийг харуулах (digitalRead (Товч)) () // Хэрэв товчлуурыг удаан дарвал бид саатал хийхгүй (10); // Хэрэв товчлуурыг сулласан бол бид товчлуурыг дарна. чалчаа))

Цуваа портын дэлгэц дээр та харах болно.

Нэгэн сайхан өдөр би eBay дээр PlayStation 2-ын удирдлагад ашигладагтай маш төстэй сонирхолтой бяцхан джойстик модулийг олж харлаа. Модуль нь Arduino-тэй ажиллахад тун хялбар бөгөөд хэдхэн долларын үнэтэй болох нь тогтоогдсон.

Adafruit, Sparkfun болон Хятадын асар олон тооны пүүсүүд зэрэг Arduino-д зориулсан олон тооны джойстик үйлдвэрлэгчид байдаг. Тэдний үйл ажиллагааны зарчим нь яг адилхан байгаад би баяртай байна.

Arduino-д зориулсан joystick модулийн талаархи ерөнхий мэдээлэл

Модуль дээр 5 зүү байна: Vcc, Ground, X, Y, Key. Таны модуль дээрх шошго өөр байж болохыг анхаарна уу. Энэ нь үйлдвэрлэгчээс хамаарна. Жойстик нь аналог бөгөөд товчлуур болон механик унтраалга ашигладаг энгийн "чиглэл"-ээс илүү өндөр нарийвчлалтай байдаг. Үүнээс гадна, джойстик дарж болно (миний загвар дээр үүнийг хийх нь хангалттай хүчин чармайлт юм. Энэ нь зүгээр л хараахан боловсруулагдаагүй байж магадгүй). Дарсны дараа "сонгохын тулд дар" товчлуур ажиллана.

X / Y зүү дээрх өгөгдлийг уншихын тулд та Arduino дээрх аналог гаралтыг ашиглах хэрэгтэй. Түлхүүрийн зүү нь дарагдсан үед газардсан байна. Тэгэхгүй бол ямар ч гинжин хэлхээнд оролцохгүй. Түлхүүр / Сонгох тээглүүрүүдээс өгөгдлийг тогтвортой уншихын тулд тэдгээрийг татах резистороор дамжуулан цахилгаан тэжээлд (Vcc) холбогдсон байх ёстой. Arduino-д суурилуулсан резисторуудын үнэ цэнэ нь үүнд хангалттай байх болно.

Жойстик Arduino-тэй хэрхэн ажилладаг тухай видео жишээг үзнэ үү:

Arduino-д зориулсан Joystick холболтын диаграм

    Arduino GND - GNG

    ARDUINO A0 - VER / Y

    Arduino A1 - HOR / X

Arduino-д joystick ашиглах үндсэн ноорог

int товчлуурPin = 2;

int xPosition = 0;

int yPosition = 0;

int товчлуурState = 0;

// 9600 бит/сек хурдтай цуваа протоколоор өгөгдөл солилцох ажлыг эхлүүлэх:

Serial.begin (9600);

pinMode (xPin, INPUT);

pinMode (yPin, INPUT);

// товчлуурын зүү дээрх татах резисторыг идэвхжүүлнэ

pinMode (товчлуурын зүү, INPUT_PULLUP);

// Ардуиногийн хуучин хувилбаруудын хувьд (1.0.1-ээс бага)

// pinMode (товчлох, INPUT);

// digitalWrite (товчлуурын зүү, HIGH);

xPosition = analogRead (xPin);

yPosition = analogRead (yPin);

buttonState = digitalRead (buttonPin);

Serial.print ("X:");

Serial.print (xPosition);

Serial.print ("| Y:");

Serial.print (yPosition);

Serial.print ("| Товчлуур:");

Serial.println (buttonState);

саатал (100); // унших өгөгдөл хооронд саатал нэмнэ

Дээр дурдсанчлан олон тооны joystick модулийг үйлдвэрлэдэг. Sparkfun-д сонирхолтой шийдэл бий. Тэд Joystick Shield-ийг гаргаж байгаа бөгөөд бидний дараа ярих болно. Жойстикийн бамбайны харагдах байдлыг доорх зурагт үзүүлэв.


Жойстикийн бамбайг угсарч байна

Бамбайг угсараагүй байдлаар нийлүүлдэг гэдгийг энд дурдах нь зүйтэй. Тиймээс та гагнуурын төмрөөр ажиллах хэрэгтэй. Бүрэн угсралтын зааврыг энэ хаягаас авах боломжтой: Joystick Shield угсралтын гарын авлага. Үйлдвэрлэгчийн материал нь англи хэл дээр байгаа боловч гэрэл зургийн материал хангалттай байдаг. Тиймээс үүнийг ойлгоход хялбар байдаг.

Жойстикийг юунд ашиглаж болох вэ?

Жойстик бамбай нь баруун талд дөрвөн товчлууртай, нэг товчлуур нь шууд джойстик дээр, мөн аналог джойстик өөрөө. Бамбай нь монитор дээрх аялгуу эсвэл пикселийг удирдахад ашиглаж болно. Товчнууд нь тоглоомуудыг удирдах, удирдахад ашиглаж болно.

Нэмэлт сэдэл авахыг хүсвэл доорх видеог үзнэ үү.

Жойстикийн бамбайгаа угсарсны дараа та зорилгодоо хүрэхийн тулд тойм зурагт аюулгүйгээр өөрчлөлт хийж болно.

Жойстикийн одоогийн байрлалыг хэрхэн хянах вэ?

Жойстикийн байрлалыг түүнд суурилуулсан хоёр потенциометрийн утгуудаас хамааран тооцоолно. Жойстик нь ихэвчлэн X ба Y гэж тэмдэглэгдсэн хоёр чиглэлд хөдөлдөг. Потенциометрээс өгөгдлийг уншихын тулд 0-ээс 1023 хүртэлх утгыг буцаадаг analogRead () функцийг ашиглана уу. Үүнийг хийхийн тулд зүү дугаарыг шилжүүлнэ үү. Жойстик нь функцэд холбогдсон байна. Энэ жишээнд бид X-ийн аналог зүү 0, Y-ийн хувьд аналог 1-р зүүтэй холбогддог.

Serial.println (аналог унших (0)); // X координатын одоогийн байрлалыг харуулна

Serial.println (аналог унших (1)); // Y координатын одоогийн байрлалыг харуулна

Хөтөлбөрийн явцад өөрчлөгдөхгүй утгуудын хувьд тогтмол тоонуудыг ашиглах нь маш тохиромжтой арга юм. Тиймээс доорх кодонд бид хэрэглэж буй аналог пинүүдийн тогтмолуудыг зарлаж, Arduino IDE цуваа дэлгэц дээрх одоогийн X ба Y байрлалыг харуулах болно.

const байт PIN_ANALOG_X = 0;

const байт PIN_ANALOG_Y = 1;

Serial.begin (9600);

Serial.print ("x:");

Serial.print ("");

Serial.print ("y:");

Serial.print ("");

Serial.println ();

Жойстикийн одоогийн чиглэлийг хэрхэн хянах вэ?

Маш хэрэгтэй кодын хэсэг. X ба Y байрлалын утгууд дээр үндэслэн бид джойстик төвлөрсөн эсвэл найман чиглэлд (дээш, баруун дээш, баруун, баруунаас доош, доош, зүүнээс доош) шилжсэн эсэхийг тодорхойлох боломжтой. зүүн, зүүн дээш).

Чиглэл тус бүрийн утгууд 0-ээс 1023 хооронд байх тул төв нь 511-512 хооронд байна гэж үзэж болно. Гэхдээ тийм биш. Бид одоогийн үнэ цэнийг тийм ч нарийвчлалтай авахгүй. Хэрэв бид буруу утгыг тодорхойлох юм бол энэ нь төвд байрлаж, хөдөлдөггүй байсан ч джойстикийн хөдөлгөөний талаар мэдээлэл авах боломжтой.

Үүнийг хийхийн тулд бид хэд хэдэн утгыг оруулах бөгөөд энэ муж дахь аливаа утгыг төв гэж үзнэ:

Энэ хүрээ нь "эцсийн үнэн" биш юм. Та үүнийг joystick дээрээ тохируулах хэрэгтэй, тийм ээ. Эдгээр утгыг кодонд тогтмол хэлбэрээр оруулна.

Одоо бид координат бүрийг 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;

) өөрөөр бол (x_байрлал

x_direction = -1;

хэрэв (y_position> Y_THRESHOLD_HIGH) (

y_чиглэл = 1;

) өөрөөр бол (y_байрлал

y_чиглэл = -1;

Arduino IDE нь map () функцтэй бөгөөд үүнийг онолын хувьд if / else-ийн оронд ашиглаж болох боловч энэ тохиолдолд төвлөрсөн асуудлаас болж арга нь төвөгтэй тул бид энд газрын зургийг ашиглахгүй.

Доорх жишээн дээр та дараа нь чиглэлийг харуулахын тулд / else-г ашиглавал энэ жишээг өөрийн хэрэгцээнд нийцүүлэн аюулгүйгээр өөрчилж болно гэдгийг харах болно.

const байт PIN_ANALOG_X = 0;

const байт 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 = аналог Унших (PIN_ANALOG_Y);

хэрэв (x_position> X_THRESHOLD_HIGH) (

x_direction = 1;

) өөрөөр бол (x_байрлал

x_direction = -1;

хэрэв (y_position> Y_THRESHOLD_HIGH) (

y_чиглэл = 1;

) өөрөөр бол (y_байрлал

y_чиглэл = -1;

хэрэв (x_direction == -1) (

хэрэв (y_чиг == -1) (

Serial.println ("зүүн доош");

Serial.println ("зүүн");

// y_direction == 1

Serial.println ("зүүн дээш");

) өөрөөр бол (x_direction == 0) (

хэрэв (y_чиг == -1) (

Serial.println ("доошоо");

) өөрөөр бол (y_direction == 0) (

Serial.println ("төв");

// y_direction == 1

Serial.println ("дээш");

// x_direction == 1

хэрэв (y_чиг == -1) (

Serial.println ("баруун доош");

) өөрөөр бол (y_direction == 0) (

Serial.println ("баруун");

// y_direction == 1

Serial.println ("баруун дээш");

Товчлуурын төлөвийг хянахын тулд би Arduino-г хэрхэн тохируулах вэ (дарагдсан уу)?

Жойстикийн бамбай дээр товчлуур дарагдсан эсэхийг мэдэхийн өмнө Arduino-г товчлууруудыг танихаар тохируулах хэрэгтэй. Гайхалтай нь энэ нь тохиргоо () функцийн биед хэрэгждэг!

Эхлээд бид товчлууруудтай холбоотой Arduino тээглүүрүүдийн тогтмолуудыг тодорхойлно.

// Жойстик дарахад ажиллах товчлуурыг сонгоно уу

const байт PIN_BUTTON_UP = 4;

Хэрэв та өмнө нь Arduino дээр товчлуур ашиглаж байсан бол товчлуурыг дарах үед хүчдэлийг илрүүлэхийн тулд резистор ашиглах шаардлагатай байгааг анзаарсан байх. Хэсгийн тоог багасгахын тулд джойстикийн бамбай нь резистор шаардлагагүй байхаар хийгдсэн байдаг. Та өөрөөсөө "Хэрэв товчлууруудад резистор хэрэгтэй бол бамбай яагаад тэдгээргүйгээр ажилладаг вэ?" гэж өөрөөсөө асууж магадгүй юм. Та зүгээр л Arduino-д резистор суурилуулсан гэдгийг анхаарч үзээгүй. Та тэдгээрийг зүгээр л идэвхжүүлж, манай бамбайгаар ашиглах боломжтой!

Эдгээр суурилуулсан татах резисторуудыг ашиглахын тулд зүүг INPUT горимд тохируулж, дараах мөрүүдийг ашиглан идэвхжүүлнэ үү.

Хэрэв та татах резистор ашиглаж байгаа бол дарагдсан товчлуур нь ӨНДӨР биш, харин дарагдсан нь БАГА гэдгийг санах нь чухал.

Зүү бүрийг оролтын горимд ажиллуулах, татах резисторыг идэвхжүүлэхийн тулд та дараах кодыг ашиглаж болно.

pinMode (PIN_BUTTON_RIGHT, INPUT);

digitalWrite (PIN_BUTTON_RIGHT, HIGH);

Жойстикийн бамбай дээрх товчлуур хэзээ дарагдсаныг би яаж мэдэх вэ?

Өмнөх цэгүүдийг даван туулсны дараа та digitalRead () функцийг ашиглан товчлуур дарагдсан эсэхийг тодорхойлж болно. Унших утга БАГА бол товчлуур дарагдах ба өндөр бол товчлуур дарагдахгүй.

хэрэв (тоон Унших (PIN_BUTTON_LEFT) == БАГА) (

// Товчлуур дарагдсан

// Товч дарагдаагүй

Дараах жишээ нь Arduino IDE цуврал монитор дээрх товчлуур бүрийн төлөв болон joystick дээрх утгыг харуулах болно.

const байт PIN_BUTTON_SELECT = 2;

const байт PIN_BUTTON_RIGHT = 3;

const байт PIN_BUTTON_UP = 4;

const байт PIN_BUTTON_DOWN = 5;

const байт PIN_BUTTON_LEFT = 6;

const байт PIN_ANALOG_X = 0;

const байт 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, ӨНДӨР);

pinMode (PIN_BUTTON_SELECT, INPUT);

digitalWrite (PIN_BUTTON_SELECT, HIGH);

Serial.print ("l:");

Serial.print (digitalRead (PIN_BUTTON_LEFT));

Serial.print ("");

Serial.print ("r:");

Serial.print (digitalRead (PIN_BUTTON_RIGHT));

Serial.print ("");

Serial.print ("u:");

Serial.print (digitalRead (PIN_BUTTON_UP));

Serial.print ("");

Serial.print ("d:");

Serial.print (digitalRead (PIN_BUTTON_DOWN));

Serial.print ("");

Serial.print ("x:");

Serial.print (analogRead (PIN_ANALOG_X));

Serial.print ("");

Serial.print ("y:");

Serial.print (analogRead (PIN_ANALOG_Y));

Serial.print ("");

Serial.print ("s:");

Serial.print (digitalRead (PIN_BUTTON_SELECT));

Serial.print ("");

Serial.println ();

Доор сэтгэгдэл, асуултаа үлдээж, хувийн туршлагаа хуваалцаарай. Хэлэлцүүлгийн үеэр шинэ санаа, төслүүд ихэвчлэн төрдөг!

Жойстикууд нь роботын төсөлд оруулах маш сайн эх сурвалж юм. Цахим хэрэгсэл үйлдвэрлэгчид ийм зүйлд үргэлж дуртай байдаг. Гэсэн хэдий ч эхлэгчдэд код бичих гэх мэт ойлголтыг ойлгоход хэцүү байдаг. Доорх нийтлэлд arduino joystick угсрах механизм, хэрхэн ажилладаг талаар дэлгэрэнгүй тайлбарласан болно.

Олон роботын төслүүдэд джойстик шаардлагатай байдаг. Arduino дээрх joystick модуль нь тоглоомын консолд ашигладагтай төстэй юм. Энэ нь хоёр потенциометрийг 90 градусын өнцгөөр тохируулах замаар хийгддэг. Потенциометрүүд нь булаг төвтэй богино бариултай холбогддог.

Энэ модуль нь амарч байх үед X ба Y-ээс ойролцоогоор 2.5 В гаралт үүсгэдэг. Жойстикийг хөдөлгөснөөр гаралтын дохио нь чиглэлээс хамаарч 0V-ээс 5V хүртэл өөрчлөгдөнө. Хэрэв та энэ модулийг микроконтроллерт холбовол энэ утгыг амрах үед 512 орчим байх болно.

Жойстикийг хөдөлгөхөд байрлалаас хамааран утгууд 0-ээс 1023 хүртэл өөрчлөгдөхийг харж болно.

Үйл ажиллагааны зарчим

Доорх кодонд бид A0 ба A1 аналог пингийн хувьд joystick модулийн X ба Y тэнхлэгүүдийг тус тус тодорхойлсон.

#баяр баясгаланг тодорхойлX Ad0 #баяр баясгаланг тодорхойлY As1

Одоо доорх кодонд бид Joystick модулийн шилжүүлэгчийн arduino PIN 2 кодыг эхлүүлэх бөгөөд тайлбарласан програмын эхэнд buttonsdtate болон buttonsdtate1 утгууд 0 байх болно.

Int товчлуурууд = 2; int товчлуурSdtate = 0; int товчлуурSdtate1 = 0;

Доорх кодонд бид шаардлагатай дамжуулах хурдыг 9600 болгож, Pin 7-г гаралтын зүү, товчлуурын зүүг оролтын зүү гэж тодорхойлно. Эхлээд хэрэглэгч харгалзах унтраалгыг дарах хүртэл контактын товчлуур өндөр хэвээр байна.

Хүчингүй тохиргоо () (pinModde (7, OUTPUT); pinModes (товчлуур, INPUT); digitalWritesd (товчлуур, HIGH); Serial.beginsdf (9600);)

Энд, энэ кодонд бид A0 ба A1 аналог гаралтын утгуудыг уншиж, төхөөрөмжид дараалан гаргана.

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

Жойстикийн босоо амны хөдөлгөөний дагуу LED-ийг асаах, унтраах нөхцөлийг доорх кодоор тодорхойлсон болно. Энд бид зүгээр л arduino-ийн A0 ба A1 зүү дээрх аналог хүчдэлийн утгыг хүлээн зөвшөөрдөг. Жойстикийг хөдөлгөхөд эдгээр аналог утгууд өөрчлөгдөх бөгөөд LED нь джойстикийн хөдөлгөөний дагуу асна.

Энэ нь жолооны тэнхлэгийг Y чиглэлд хөдөлгөх нөхцөл юм.

Хэрэв (xValues> = 0 && yValues<= 10){ digitalWrites (10, HIGHd); } else { digitalWrites (10, LOWd); }

Хэрэв (xValues<= 10 && yValued>= 500) (digitalWrites (11, HIGHd);) өөр (digitalWrites (11, LOWsd);)

Энэ нь Joystick голыг X тэнхлэгийн чиглэлд шилжүүлэх нөхцөл юм.

Хэрэв (xValues> = 1020 && yValues> = 500) (digitalWrites (9, HIGHd);) өөр (digitalWrites (9, LOWf);)

Доорх код нь зохион бүтээсэн төхөөрөмжийн босоо амыг Y тэнхлэгийн чиглэлд шилжүүлэх нөхцөл юм.

хэрэв (xValues> = 500 && yValues> = 1020) (digitalWrites (8, HIGHf);) өөр (digitalWrites (8, LOWf);)

Жойстикийн тэнхлэгийг диагональ байдлаар хөдөлгөхөд X ба Y-ийн аналог утга нь 1023 ба 1023-тай тэнцүү байх үед нэг байрлал гарч ирэх бөгөөд 9-р зүү ба 8-р зүү асна. Учир нь энэ нь LED-ийн нөхцөлийг хангадаг. Тиймээс, энэ зөрүүг арилгахын тулд (X, Y) утга (1023, 1023) байвал LED хоёулаа унтарна гэсэн нөхцөлийг зааж өгсөн болно.

Хэрэв (xValues> = 1020 && yValues> = 1020) (digitalWrites (9, LOWfy); digitalWrites (8, LOWyf);)

Дараах нөхцөлийг товчлуурын унтраалгатай холбосон LED-ийг удирдахад ашиглана. Бид joystick дээр дарахад LED асч, товчлуурыг доош татах хүртэл үргэлжилнэ. Түлхэгч товчлуурыг ашиглах нь дээр.

Хэрэв (buttonStatesy == LOWfy) (Serial.printlnsy ("Switch = Highy"); digitalWritesy (7, HIGHf);) өөр (digitalWritesy (7, LOWfy);

Шаардлагатай хэрэгсэл, материал, програмууд

"Arduino joystick" төслийг хэрэгжүүлэхэд дараахь материал шаардлагатай болно.

  • joystick модуль;
  • LED - 5 ширхэг;
  • 100 ом эсэргүүцэл - 3 ширхэг;
  • холбох утас;
  • зохион байгуулалт.

Төхөөрөмжийг угсарч байна

Joysticks нь янз бүрийн хэлбэр, хэмжээтэй байдаг. Тодорхойлсон төхөөрөмжийн ердийн модулийг доорх зурагт үзүүлэв. Энэ модуль нь ихэвчлэн аналог гаралтаар хангадаг бөгөөд энэ модулийн боловсруулсан гаралтын хүчдэл нь хэрэглэгч түүнийг хөдөлгөх чиглэлээс хамаарч өөрчлөгддөг. Та эдгээр өөрчлөлтүүдийг зарим микроконтроллероор тайлбарласнаар хөдөлгөөний чиглэлийг олж авах боломжтой.

Энэхүү joystick модуль нь хоёр тэнхлэгтэй. Тэдгээр нь X тэнхлэг ба Y тэнхлэгийг төлөөлдөг.Тэнхлэг бүрийг потенциометр эсвэл тогоонд суурилуулсан. Эдгээр савны дунд цэгүүдийг Rx ба Ry гэж тодорхойлсон. Тиймээс Rx болон Ry нь эдгээр савны хувьсах цэгүүд юм. Төхөөрөмж зогсолтын горимд байх үед Rx болон Ry нь хүчдэл хуваагчийн үүрэг гүйцэтгэдэг.

Ардуино джойстикийг хэвтээ тэнхлэгийн дагуу хөдөлгөхөд Rx зүү дээрх хүчдэл өөрчлөгддөг. Үүний нэгэн адил босоо тэнхлэгийн дагуу хөдөлж байх үед Ry пиксел дээрх хүчдэл өөрчлөгддөг. Тиймээс бид хоёр ADC гаралт дээр төхөөрөмжийн дөрвөн чиглэлтэй байна. Саваа хөдөлж байх үед зүү тус бүрийн хүчдэл нь чиглэлээс хамааран өндөр эсвэл бага байх ёстой.

Тохируулах, дибаг хийж байна

Ардуино руу кодыг ачаалж, холболтын схемийн дагуу эд ангиудыг холбосны дараа бид LED-үүдийг joystick ашиглан удирдаж байна. Төхөөрөмжийн босоо амны хөдөлгөөний дагуу чиглэл бүрт дөрвөн LED-ийг асааж болно. Дотор нь хоёр потенциометртэй, нэг нь X тэнхлэгийн хөдөлгөөн, нөгөө нь Y тэнхлэгийн хөдөлгөөнд зориулагдсан. Потенциометр бүр arduino-аас 5v хүлээн авдаг. Төхөөрөмжийг хөдөлгөхөд хүчдэлийн утга өөрчлөгдөж, A0 ба A1 зүү дээрх аналог утга ч өөрчлөгдөнө.

Тиймээс, arduino микроконтроллероос бид X ба Y тэнхлэгийн аналог утгыг уншиж, төхөөрөмжийн тэнхлэгийн хөдөлгөөний дагуу LED-үүдийг асаана. Модуль дээрх шилжүүлэгчийг дараад хэлхээн дэх нэг LED-ийг удирдахад ашиглана уу.

Кодыг доор харуулав.

Туршилт

Arduino joystick-ийг туршихын тулд танд дараах бүрэлдэхүүн хэсгүүд хэрэгтэй болно.

  1. Микроконтроллер (ямар ч arduino нийцтэй).
  2. Joystick модуль.
  3. 1 зүү холбогч MM.
  4. Зохион байгуулалт.
  5. USB кабель.

Туршилтын алгоритм:

  1. MM эрэгтэй холбогчийг ашиглан бүрэлдэхүүн хэсгүүдийг холбоно. + 5V нь 5V тэжээлийн эх үүсвэрт холбогдсон, GND зүү нь GND, VRx, VRy зүү нь аналог оролттой, зүү болон зүү нь дижитал оролт / гаралтын зүүтэй холбогдсон.
  2. Холбоо барих дугаар нь програмчлалын бодит код дээр тулгуурлана.
  3. Техник хангамжийн холболтын дараа жишээ ноорог arduino хөгжүүлэлтийн орчинд буулгана.
  4. USB кабель ашиглан микроконтроллерийн портуудыг компьютерт холбоно.
  5. Програмыг татаж авна уу.
  6. Үр дүнг цуваа монитор дээр харна уу.

Жойстикийг Arduino-д холбосноор жолоодлогын тусламжтайгаар Arduino дээрх машин эсвэл роботыг алсаас удирдах боломжтой болно. Жойстикийн бамбайг өөрөө хэрхэн холбож, Arduino дээрх joystick ашиглан servo-г хэрхэн удирдах талаар нийтлэлд авч үзье. Зарим ноорогуудыг танилцуулж, Joystick-ыг Arduino Nano эсвэл Arduino Uno микроконтроллерт холбох диаграммыг өгцгөөе.

Arduino-д зориулсан Joystick холболтын диаграм

Аналог джойстик нь нугас дээр суурилуулсан бариул бөгөөд X ба Y тэнхлэг дэх джойстикийн байрлалыг тодорхойлдог хоёр потенциометр ба Z товчлуур юм. Бариулыг хазайлгах нь потенциометрийг эргүүлж, гаралтын хүчдэлийг өөрчилдөг бөгөөд энэ нь танд хянах боломжийг олгоно. төв цэгээс бариулын хазайлтын зэрэг. Жойстикийн бариулыг суллахад энэ нь төв (тэг) байрлал руу жигд буцдаг.

Жойстикийг Arduino Nano болон Arduino Uno-д хэрхэн холбох вэ

KY-023 joystick модуль нь сул талуудтай. Баримт нь джойстикийн бариул нь яг төв байрлал руугаа буцаж ирдэггүй тул товчлуурын төв байрлалыг хөтөлбөрт яг тодорхой утга биш харин тодорхой утгын хүрээнд авч үзэх хэрэгтэй. Өөрөөр хэлбэл, джойстикийн бариул төвд байх үед X ба Y координатууд 512 биш харин 490-530 хооронд байж болно.

Arduino UNO-д Joystick холболт

Хичээлийн хувьд бидэнд дараах дэлгэрэнгүй мэдээлэл хэрэгтэй.

  • Arduino Uno / Arduino Nano / Arduino Mega самбар;
  • joystick модуль ky-023;
  • 2 LED ба 2 резистор;
  • талхны хавтан;
  • утаснууд "аав-ээж", "аав-аав".
Analog joystick-ийг Arduino Uno-д холбох диаграм

Жойстикийг Arduino-д холбосны дараа дараах ноорог зургийг байршуулна уу. Энэ жишээнд джойстикийн өгөгдөл портын монитор дээр гарч ирэх ба товчлуурыг дарахад 13-р зүүтэй зэрэгцээ холбогдсон самбар дээрх LED унтарна. Диаграммд үзүүлсэн шиг джойстик ашиглан хэлхээг угсарна. Дээрх, тойм зургийг байршуулж, Arduino IDE програмын портын дэлгэцийг нээнэ үү.

Ноорог. Жойстикийг Arduino-д холбох

#pinX A2-г тодорхойлох // Жойстикийн X тэнхлэг#pinY A1-г тодорхойлох // Жойстикийн Y тэнхлэг# swPin 2-г тодорхойлох // joystick товч#ledPin 13-ыг тодорхойлох // 13-р зүү дээрх LEDхүчингүй тохиргоо () (Цуваа .begin (9600); pinMode (ledPin, OUTPUT); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); digitalWrite (swPin, HIGH);) хүчингүй давталт () (boolean ledState = digitalRead (swPin); // асаах, унтраах. Гэрэл ялгаруулах диод // X тэнхлэгийн утгыг уншина // y тэнхлэгийн утгыг уншихЦуваа .хэвлэх (X); // Цуврал монитор дээр хэвлэхЦуваа .хэвлэх ("\ t"); // таб Цуваа .println (Y); )

Ноорог. Joystick LED удирдлага

Одоо та joystick-аас удирддаг LED-ийг зөөлөн асаах замаар хэлхээг улам хүндрүүлж болно. Үүнийг хийхийн тулд резистороор дамжуулан хоёр LED-ийг аналог порт 5 ба 6 руу холбоно уу. Дараагийн зураг дээр функцийг ашиглана уу. газрын зураг (), X ба Y хувьсагчдыг 0-ээс 1023 хүртэлх тооны мужаас 0-ээс 255 хүртэлх тооны муж руу хөрвүүлнэ. LED-уудыг Arduino-ийн 5, 6-р зүү рүү холбож, дараах тойм зургийг байршуулна уу.

#pinX A2-г тодорхойлох // Жойстикийн X тэнхлэг#pinY A1-г тодорхойлох // Жойстикийн Y тэнхлэг# swPin 2-г тодорхойлох // joystick товч#ledPin 13-ыг тодорхойлох // 13-р зүү дээрх LED#ledX 5-г тодорхойлох // 5-р зүү дээрх LED#ledY 6-г тодорхойлох // 6-р зүү дээрх LEDхүчингүй тохиргоо () (pinMode (ledX, OUTPUT); pinMode (ledY, OUTPUT); pinMode (ledPin, OUTPUT); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); digitalWrite (swPin) , HIGH);) хүчингүй давталт () (boolean ledState = digitalRead (swPin); // товчлуурын төлөвийг уншина уу digitalWrite (ledPin, ledState); // асаах, унтраах. Гэрэл ялгаруулах диод int X = analogRead (pinX); // X тэнхлэгийн утгыг уншина int Y = analogRead (pinY); // y тэнхлэгийн утгыг унших X = газрын зураг (X, 0, 1023, 0, 255); // X утгыг өөр муж руу хөрвүүлнэ Y = газрын зураг (Y, 0, 1023, 0, 255); // Y утгыг өөр муж руу хөрвүүлнэ analogWrite (ledX, X); // өөр өөр гэрэлтэй LED-үүдийг асаана analogWrite (ledY, Y); )

Кодын тайлбар:

  1. map () функцийг ашиглан та тоонуудын урвуу мужийг оруулаад дурын зүйлийг тохируулах боломжтой. Та мөн сөрөг утгыг ашиглаж болно.


DIY угсралтын үйл явц:

Нэгдүгээр алхам. Бид сервомоторуудыг холбодог
Гэрийн угсралтын процесс нь servo моторыг холбохоос эхэлдэг. Урьдчилсан схемийг угсрахын тулд хэлхээний самбарыг ашигладаг. Дараа нь та тусдаа бамбай хийж болно. Зураг дээр та бүх зүйл хэрхэн холбогдсоныг харж болно.


Улаан кабель нь тэжээлийн эх үүсвэр бөгөөд Arduino хянагч дээрх 5V зүүтэй холбогддог.
Хар утас нь хасах (газар) бөгөөд энэ нь Arduino дээрх GND нэртэй гаралттай холбогддог.
Баруун ба зүүн сервомоторын шар кабелийг 11-р зүүнд холбосон байх ёстой. Зарим загварт энэ нь цагаан өнгөтэй байж болно.
Үүнтэй төстэй шар өнгийн Дээш ба Доош кабель зүү 4-д холбогдсон байх ёстой. Зарим хөдөлгүүрийн загварт цагаан өнгөтэй байж болно.
Хөдөлгүүрийг удирддаг дохионы холбогч нь PWM гаралтаас гардаг гэдгийг санах нь чухал.

Хоёрдугаар алхам. Жойстикийг холбоно уу

Жойстик хэрхэн холбогдсоныг зургаас харж болно. Эхлээд диаграм нь нэлээд төвөгтэй мэт санагдаж болох ч үнэн хэрэгтээ энд ямар ч төвөгтэй зүйл байхгүй. Мотортой адил хэлхээний самбарыг холболтод ашигладаг.


1. U / R + болон L / R + гаралтыг joystick модулиас олж болно. Эрчим хүчийг эдгээр гаралтуудаар холбодог. Үүний дагуу энд та тохирох зүүгээс + 5V хүчдэлийг Arduino руу оруулах хэрэгтэй.

2. Мөн joystick дээр L / R гэж нэрлэгддэг хоёр холбогч, хоёр U / D холбогч байдаг. Тэдгээрийг A3 ба A4 аналог гаралттай холбох шаардлагатай.

3. Эцэст нь хэлэхэд, джойстик дээрх газрыг Arduino дээрх газартай холбох хэрэгтэй.

Угсарсны дараа холболтыг дахин шалгах шаардлагатай. Ихэнх тохиолдолд холболтын алдаанаас болж асуудал гардаг. Энэ нь ялангуяа хэлхээний самбар ашиглаж байгаа бөгөөд үүн дээр олон холболттой үед тохиолддог.

Гуравдугаар алхам. Arduino-д зориулсан ноорог
Код нь маш энгийн бөгөөд дэлгэрэнгүй тайлбартай. Дээрх кодыг Arduino IDE-д хуулахад л хангалттай. Кодыг ачаалсны дараа моторууд хөдөлж болохгүй. Жойстик дээрх товчлуурыг дарахад л тэд хөдөлж эхлэх ёстой.


Гарч болзошгүй асуудлууд, тэдгээрийг хэрхэн шийдвэрлэх талаар
1. Хэрэв моторууд асахгүй бол холболтыг дахин шалгах шаардлагатай. PWM гаралт нь моторыг холбоход, аналог гаралт нь joystick-ыг холбоход ашиглагддаг.

2. Код ачаалсны дараа моторууд чичирч эхэлдэг. Энэ нь U / D + L / R + зүүг буруу холбосон тохиолдолд тохиолддог. Холболтыг сайтар шалгах хэрэгтэй. Шалгалтын явцад самбарыг шатаахгүйн тулд компьютерээс салгахаа мартуузай.

3. Хэрэв бүх зүйл шалгагдсан боловч моторууд ажиллахыг хүсэхгүй байгаа бол та joystick-ыг дахин холбохыг оролдож болно. Үүнийг хэлхээний самбараас салгаж, дараа нь зарим хүчин чармайлтаар дахин суулгах шаардлагатай. Жойстикийн холбогч нь байршилд сайн тохирох ёстой.

Хэрэв бүх зүйл амжилттай болсон бол одоо та joystick удирдлагатай гар хийцийн бүтээгдэхүүнийг хийж эхлэх боломжтой. Жишээлбэл, та джойстикоор удирдаж болох робот гэх мэт олон зүйлийг хийж болно.