Joystick Arduino - холболт ба ноорог. Arduino холболтод зориулж Arduino Joystick дээр өөр joystick (gamepad) хийж байна

Жойстик ашиглах нь Arduino дээр суурилсан хүн болон төхөөрөмж (компьютер, микроконтроллер) хооронд мэдээлэл солилцох нэг арга юм. Ихэнхдээ тэдгээрийг механизм эсвэл роботыг удирдахад ашигладаг. Тоглоомын танил ертөнцтэй адилтгаж, джойстикийг ихэвчлэн gamepad гэж нэрлэдэг. Тоглоомын самбар нь энгийн бөгөөд хэрэглэхэд хялбар. Өнөөдөр эрх чөлөөний зэрэг, мэдээлэл унших давтамж, ашигласан технологийн хувьд маш олон төрлийн joysticks байдаг. Энэ нийтлэлд бид хамгийн алдартай сонголтыг авч үзэх болно, joystick-ыг хэрхэн хянах, хэрхэн холбох талаар сурах болно.

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

Жойстикийг arduino руу холбож байна

Жойстикийг Arduino Uno-д холбох ажлыг доорх диаграммын дагуу гүйцэтгэнэ.

Модуль нь Vcc, Gnd, X, Y, Key гэсэн 5 гаралттай (төхөөрөмжөөс хамааран тэмдэглэгээ өөр байж болно).

X тэнхлэг дээрх өгөгдлийг A0 оролт руу, Y тэнхлэгийн дагуу - A1 руу гаргана. Товчлуур дээр дарахад харааны хяналт тавихын тулд LED D11-ийг холбож болно. Эрчим хүчийг 5 вольтын хүчдэлээр хангадаг. GND зүү нь Arduino самбар дээрх ижил зүүтэй холбогдсон байна. SW зүү нь ямар ч дижитал зүүтэй холбогдож болно.

Таны харж байгаагаар joystick модулийг холбох нь тийм ч хэцүү биш юм. Холболтын дараа төхөөрөмж ажиллахгүй бол бүх зүүг зөв холбосон эсэхээ шалгана уу.

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

Жойстикийг бодит төсөлд ашиглахын тулд бид жолоодлогын ажиллагааны явцад илгээсэн өгөгдлийг боловсруулахын тулд ноорог бичих хэрэгтэй.

Потенциометрийн утгуудаас хамааран төхөөрөмж одоогоор ямар байрлалд байгааг олж мэдэх боломжтой. Хөдөлгөөн нь перпендикуляр байрлах X ба Y тэнхлэгийн чиглэлд явагддаг. Мэдээллийг тоглоомын самбараас уншдаг - энэ нь 0-ээс 1023 хүртэлх утгыг харуулдаг. Аргумент болгон энэ нь тээглүүрүүдийн тоог хүлээн авдаг. Жойстик холбогдсон байна:

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

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

Тохиромжтой болгохын тулд эцсийн кодыг багасгах, хялбарчлахын тулд тогтмол тоонуудыг ашиглахыг зөвлөж байна. Аналог зүүг зүгээр л байнгын гэж зарлаж болно:

const байт PIN_ANALOG_X = A0; // X координатын тогтмол

const байт PIN_ANALOG_Y = A1; // Y координатын тогтмол

Жойстик ашиглан хөдөлгөөний чиглэлийг тодорхойлох

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

X ба Y тэнхлэгүүдийн байрлалын утгын дагуу та джойстик төвд байгаа эсэх эсвэл офсет үүссэн эсэхийг олж мэдэх боломжтой. Өмнө дурьдсанчлан бүх чиглэлийн утгууд 0-ээс 1023 хооронд хэлбэлздэг. Юуны өмнө төв цэг нь ойролцоогоор 511-512 гэсэн утгатай байх болно гэсэн бодол төрж байна. Энэ дүгнэлт нь бүрэн зөв биш, учир нь туйлын тодорхой байр суурийг тодорхойлох боломжгүй юм.

Төвийн утгыг буруу тодорхойлсон нь хөдөлгөөнгүй байдалд байгаа бол joystick-ийн хөдөлгөөний талаархи алдаатай мэдээлэлд хүргэж болзошгүй юм. Үүнийг хийхийн тулд тоон мужийг сонгоод, доторх аливаа утга нь төв цэг болно гэж нөхцөлтөөр тооцно. Жойстикийн төрөл бүрийн утгыг тохируулах шаардлагатай боловч ойролцоогоор 505-518 хооронд байх болно. Үр дүнгийн утгуудыг кодонд тогтмол хэлбэрээр бичнэ.

const int X_THRESHOLD_LOW = 505;

const int X_THRESHOLD_HIGH = 518;

const int Y_THRESHOLD_LOW = 500;

const int Y_THRESHOLD_HIGH = 510;

Дараагийн алхам бол координатыг -1-ээс 1 хүртэлх муж болгон хувиргах явдал юм. Х-1 нь зүүн тийш шилжиж байгаа, 0 нь хөдөлгөөнгүй, 1 нь баруун тийшээ. Y -1 дээр - доошоо чиглэсэн хөдөлгөөн, 0 - төвийн утга, 1 - дээш. Эхэндээ бид бүх утгыг 0-ийн төвд тохируулдаг. Хөдөлгөөн байгаа эсэхийг шалгахын тулд if / else хэллэгийг ашигладаг.

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

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

Хоёрдахь асуудлыг үхсэн бүс гэж нэрлэж болно. Хамгийн их хазайлттай хоёр туйлын утга нь 0 В ба тэжээлийн хүчдэлтэй тэнцүү байх ёстой. Бодит байдал дээр эдгээр утгууд нь өөр өөр байж болно, учир нь эсэргүүцлийн өөрчлөлтийн бүх цахилгаан хязгаарыг ашигладаггүй. Энэ асуудлыг шийдэхийн тулд туйлын цэгүүд нь 1 кОм ба 9 кОм утгатай тохирч болно.

JoyStick бамбайг өргөтгөх самбар

Робот эсвэл бусад механизмыг удирдахын тулд заримдаа товчлуурууд болон холболтуудад зориулсан джойстик ашиглах шаардлагатай байдаг. Шинэ загвар гаргахгүйн тулд бүх шаардлагатай элементүүдийг гагнах боломжтой arduino-ийн бэлэн самбар худалдаж авахыг зөвлөж байна.

Дэлхийд алдартай arduino үйлдвэрлэгч Sparkfun-ийн энэхүү бамбай нь юу болохыг авч үзье. Энэ gamepad сайн ажилладаг бөгөөд харьцангуй хямд юм. Төхөөрөмжийг бага зэрэг задалсан хэлбэрээр нийлүүлж болох тул эхлээд угсарсан байх ёстой.


Бамбай нь хэд хэдэн стандарт товчлууруудыг агуулдаг (хажуу талд 4 энгийн товчлуур ба сонгох товчлуур). Загвараас хамааран bluetooth эсвэл wifi модулийг холбох холбогчийг самбарт нэмж болно. Уламжлал ёсоор, зүү болон самны гаралтыг ашиглан та гадны төхөөрөмжүүдийг холбож болно.

Дүгнэлт

Arduino joystick бол миний төслүүдэд зайлшгүй шаардлагатай зүйл юм. Энэ төрлийн мэдрэгчийн ачаар та төхөөрөмждөө тохиромжтой, орчин үеийн удирдлагыг нэмж болно. Зарим тохиолдолд джойстикгүйгээр хийх нь бараг боломжгүй юм: Arduino joystick нь робот, ухаалаг машин, серво, хөгжмийн дууны хэмжээ, дэлгэц дээрх арын гэрлийн тод байдлыг хянах, янз бүрийн тоглоомууд болон бусад олон төслүүдэд навигац хийхэд ашиглагддаг.

Бэлэн модулийг холбох нь тийм ч хэцүү биш бөгөөд хяналтын ноорог өөрөө маш хүртээмжтэй байдаг. Ихэнхдээ джойстикийг товчлууртай, утасгүй интерфейстэй хослуулсан газар ашигладаг, учир нь хурдан хөдөлдөг төхөөрөмжтэй утсан дээрх джойстикийг удирдах нь бараг боломжгүй юм. Тиймээс танд хэрэгтэй бүх зүйл байгаа бэлэн бамбайг ажилд ашиглахыг зөвлөж байна.

Шинэ нийтлэлүүд

● Төсөл 18: Жойстикээс өгөгдөл боловсруулах. Joystick Pan/Tilt Bracket Control

Энэ туршилтаар бид хоёр тэнхлэгтэй аналог джойстикийг Arduino-д холбох талаар авч үзэх болно.

Шаардлагатай бүрэлдэхүүн хэсгүүд:

Жойстик нь 2D координатын системд хөдөлдөг Arduino-д суурилсан аливаа төхөөрөмжийг удирдахад тохиромжтой. Arduino хавтангийн хувьд X, Y тэнхлэг (10 кОм потенциометр) ба нэмэлт товчлуур бүхий Z тэнхлэгтэй аналог joystick модулиуд байдаг. Жойстик нь тэг цэгээс хазайлтын зэргийг жигд, нарийвчлалтай хянах боломжийг олгодог. Жойстик өөрөө пүрштэй тул тодорхой байрлалаас суллагдсаны дараа төвийн төлөв рүү буцна.
Бүх гурван зүү бүлгийн хоорондох Vcc болон GND зүү холбогдсон байна. Тиймээс холбохын тулд 5 утас шаардлагатай: X тэнхлэг, Y тэнхлэг, Z товчлуур, Vcc хүч ба нийтлэг GND. Жойстикууд нь идэвхгүй модулиуд бөгөөд Arduino самбараас ямар ч хүч авдаггүй. VERT ба HORZ зүү нь Arduino-ийн A0 ба A1 аналог оролттой, SEL - D2 дижитал оролттой холбогдсон. Холболтын диаграммыг зурагт үзүүлэв. 18.1.

Цагаан будаа. 18.1. Жойстик самбарыг Arduino руу холбох диаграмм

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

Const int axisX=A0 // X тэнхлэг нь A0-д холбогдсон const int axisY=A1 // Y тэнхлэг A1-тэй холбогдсон const int axisZ=2 // Z тэнхлэг (жойстик товчлуур) D2-д холбогдсон int valX, valY, valZ = 0; хүчингүй тохиргоо()( PinMode(axis_Z, INPUT_PULLUP); // D2-г INPUT болгон тохируулна // процессор дотор татах резистор Serial.begin(9600); ) хүчингүй давталт()( valX = analogRead(axisX); // X тэнхлэгийн утга valY = analogRead(axisY); // Y тэнхлэгийн утга valZ = 1 -digitalRead(axisZ); // Z тэнхлэгийн утга (товчлуур) // монитор руу утгыг гаргана Serial.print("X:" );Serial.print(valX, DEC); Serial.print(" | Y:" );Serial.print(valY, DEC) Serial.print(" | Z: " );Serial.println(valZ, DEC); саатал (500); // дараагийн өгөгдлийг уншихаас өмнө түр зогсоо }
Холболтын дараалал:

1. Зураг дээрх диаграммын дагуу бид joystick-ыг Arduino самбарт холбоно. 18.2.
2. Жагсаалтын 18.1-ийн ноорог зургийг Arduino самбарт ачаална уу.
3. Бид Arduino IDE-ийн цуваа портын дэлгэцээс X ба Y тэнхлэгийн дагуух офсетийн утгууд болон товчлуурын төлөвийг (Z тэнхлэг) хардаг.

Цагаан будаа. 18.2. Arduino-д зориулсан Joystick самбар ба Пан / Гарчиг хаалтны холболтын схем


Хоёр серво бүхий Pan/Titl хаалтны байрлалыг удирдахын тулд жишээлбэл, камер байрлуулж, камерын байрлалыг зүүн/баруун, доош/дээш сольж өөрчлөх боломжтой илүү ойлгомжтой жишээг бий болгоё. joystick. Энэхүү туршилтын холболтын диаграммыг зурагт үзүүлэв. 18.2.
Жойстикийг X тэнхлэгийн дагуу хөдөлгөснөөр бид доод серво (зүүн/баруун) эргэлтийг удирдаж, Y тэнхлэгийн дагуу джойстикийг хөдөлгөснөөр бид дээд сервогийн эргэлтийг (дээш/доош) хянах болно. Тэнхлэг тус бүр дээрх джойстикийн дундаж төвийг сахисан байрлал (аналог утга нь 512) нь 90 ° өнцгөөр серво эргэх өнцөгтэй тохирч байна. Зургийн агуулгыг Жагсаалт 18.2-т үзүүлэв.

#оруулах // Servo номын санг холбох Servo servo1, servo2; const int pinServo1=8; // 1 серво холбох зүү const int pinServo2=9; // 2 серво холбохын тулд зүү // сервогуудын эргэлтийн өнцгийг хадгалах хувьсагч int angleServo1,angleServo2 = 0 ; const int axisX=A0; // X тэнхлэг нь A0-д холбогдсон const int axisY=A1; // Y тэнхлэг A1-тэй холбогдсон int valX, valY = 0 ; // тэнхлэгийн утгыг хадгалах хувьсагч хүчингүй тохиргоо(){ // servo1 хувьсагчийг pinServo1 зүү рүү холбоно servo1.attach(pinServo1); // servo2 хувьсагчийг pinServo2 зүү рүү холбоно Servo2.attach(pinServo2); ) хүчингүй давталт()( valX = analogRead(axisX); // X тэнхлэгийн утга valY = analogRead(axisY); // Y тэнхлэгийн утга // утгыг 0-180 хүртэлх интервалд хуваана angleServo1=газрын зураг (valX,0 ,1023 ,0 ,180 ); angleServo2=газрын зураг (valY,0 ,1023 ,0 ,180 ); // сервонуудыг хүлээн авсан өнцөг рүү эргүүлнэ servo1.write(angleServo1); servo2.write(angleServo2); саатал(15); // серво эргэхийг хүлээхийн тулд түр зогсооно }
Холболтын дараалал:

1. Пан/Гарчиг хаалт болон сервог угсарна.
2. Зураг дээрх диаграммын дагуу бид joystick болон Пан / Гарчиг хаалтыг Arduino самбарт холбоно. 18.2.
3. 18.2 жагсаалтын ноорог зургийг Arduino самбарт ачаална уу.
4. Жойстикийг X ба Y тэнхлэгийн дагуу хөдөлгөж, Pan/Title Bracket-ийн байрлалыг удирдана.

Програмын жагсаалт

Arduino самбарт зориулсан аналог joystick модулиуд байдаг. Дүрмээр бол X, Y тэнхлэгтэй, товчлууртай - Z тэнхлэгтэй. Жойстик нь тэг цэгээс хазайх зэргийг илүү жигд, нарийвчлалтай хянах боломжийг олгодог. Товчлууртай харьцуулахад тав тухтай байдлаас гадна энэ нь илүү дэвшилтэт интерфейсүүдийг хэрэгжүүлэх боломжийг олгодог. Жишээлбэл, цэсэнд ямар нэг утгыг өөрчлөхдөө та джойстикийн тэнхлэгийг хазайлгах тусам хувьсагчийн утга хурдан өөрчлөгдөх байдлаар програм бичиж болно. Жишээлбэл, бид 0-ээс 2000 хүртэлх утгыг 1-ийн алхмаар өөрчлөх хэрэгтэй. Та товчлуурыг хэдэн удаа дарах эсвэл тусгай алгоритм бичих шаардлагатайг төсөөлөөд үз дээ, жишээлбэл, хэрэв та 3 секундээс дээш дарвал нэмэхийн тулд өөрчлөх хэрэгтэй. алхам нь 10 эсвэл 100. Мөн joystick ашиглах үед үүнийг хэрэгжүүлэхэд илүү хялбар болно.

Ийм модулиудын дундаж үнэ нэг модулийн 1-2 доллар орчим хэлбэлздэг (Орос руу үнэгүй хүргэлттэй). AliExpress дэлгүүрээс модулиудыг хайх

Модулиуд нь өөрөө иймэрхүү харагдаж байна.

Зүүгүүдийн тоогоор бүү ай, энэ нь олон талт байдал, холболтод хялбар байх үүднээс хийгддэг. Бүх гурван зүү бүлгийн хоорондох Vcc болон GND зүү холбогдсон байна. Тэр. Холбохын тулд 5 утас шаардлагатай: X тэнхлэг, Y тэнхлэг, Z товчлуур, V cc хүч ба нийтлэг GND. Жойстикууд нь идэвхгүй модулиуд бөгөөд Arduino самбараас ямар ч хүч авдаггүй. V cc хангамж нь зөвхөн татах резисторуудад л хэрэгтэй. Татах резисторгүй модулиуд байдаг бөгөөд энэ тохиолдолд товчлуурын холболтын гаралтыг 1-10 кОм эсэргүүцэлээр + V cc хүртэл татах шаардлагатай.

Arduino-ийн холболтын диаграм:

Хөтөлбөрт joystick-тай ажиллах нь маш энгийн:

#define axis_X 0 // X тэнхлэгийг аналог 0-д холбосон #define тэнхлэгийг_Y 1 // Y тэнхлэгийг аналог 1-д холбосон #define axis_Z 2 // Z тэнхлэгийг (жойстик товч) Дижитал 2-д холбосон int утга_X, утга_Y, утга_Z = 0; // Тэнхлэгийн утгыг хадгалах хувьсагч void setup() ( pinMode(axis_Z, INPUT); // Serial.begin(9600); ) void loop() оролтоор тохируулах (утга_X = analogRead(axis_X); // Унших X тэнхлэгийн аналог утга Serial.print("X:"); Serial.print(value_X, DEC); // Цуваа дэлгэцийн утгыг хэвлэх_Y = analogRead(axis_Y); // Y-ийн аналог утгыг унших axis Serial.print(" | Y:" ); Serial.print(value_Y, DEC); // Цуваа дэлгэцийн утгыг хэвлэх утга_Z = digitalRead(axis_Z); // Z тэнхлэгийн дижитал утгыг унших (товчлуур) утга_Z = утга_Z ^ 1; // утгыг эргүүлэх Serial.print(" | Z: "); Serial.println(value_Z, DEC); // Утгыг Цуваа мониторын саатал(250) болгон хэвлэх; // 250мс саатал )

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

Таны харж байгаагаар бүх зүйл маш энгийн. Эцэст нь, тэг цэгээс Y тэнхлэгийн дагуух джойстикийн хазайлтаас хамааран хувьсагчийн утгыг өөрчлөх зорилготой жижиг програм бичье. Мөн та joystick товчийг дарахад хувьсагч тэг болж дахин тохируулагдах болно.

#define axis_Y 1 // Y тэнхлэгийг аналог 1-д холбосон #define axis_Z 2 // Z тэнхлэг (жойстик товчлуур) Дижитал 2-д холбогдсон int утга, утга_Y, утга_Z = 0; // Тэнхлэгийн утгыг хадгалах хувьсагчид void setup() ( pinMode(axis_Z, INPUT); // Serial.begin(9600); ) void loop() оролтоор тохируулах (утга_Y = analogRead(axis_Y); // Унших Y тэнхлэгийн аналог утга хэрэв(утга_Y >= 0 && утга_Y< 100) value = value - 10; if(value_Y >100 && утга_Y< 300) value = value - 5; if(value_Y >300 && утга_Y< 520) value = value - 1; if(value_Y >535 && утга_Y< 700) value = value + 1; if(value_Y >700 && утга_Y< 900) value = value + 5; if(value_Y >900) утга = утга + 10; утга_Z = дижитал Унших(тэнхлэг_Z); // Z тэнхлэгийн тоон утгыг унших (товчлуур) if(value_Z == 0) утга = 0; // утгыг дахин тохируулах Serial.println(утга, DEC); // Цуваа мониторын саатал дахь утгыг харуулах (500); // саатал)

Төсөл нь джойстик болон Arduino ашиглан хоёр серво моторын удирдлагыг хэрэгжүүлдэг.

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

Шаардлагатай материал

  • Arduino самбар (энэ тохиолдолд Arduino Uno Rev 3 ашигладаг).
  • 2 Параллакс серво.
  • Жойстик нь мөн Параллаксаас гаралтай.
  • Жижиг хэлхээний самбар.
  • Холболтын холболтууд.
  • Сервомоторуудын хөдөлгөөнийг хянах ямар нэг зүйл (жишээлбэл, эвдэрсэн вэб камер болон Lego блокуудыг энд ашигладаг. Эдгээр зангилааг нийтлэлд нарийвчлан авч үзэхгүй, гэхдээ та үүнийг зурган дээрээс харж болно).

Угсарсан төслийг доорх зурагт үзүүлэв.

Бид сервомоторуудыг холбодог

Хоёр серво моторыг холбож эхэлцгээе (урьдчилсан схемд хэлхээний самбарыг ашигладаг. Дараа нь тусдаа бамбайг овоолж болно).

Доорх зураг нь холболтын талаархи дэлгэрэнгүй мэдээллийг харуулж байна.


Arduino дээрх 5V зүү хүртэлх улаан мотор кабель (хүч).

Моторын хар кабель (газар) - Arduino дээрх GND зүү хүртэл

Моторын баруун ба зүүнээс (зарим загварт цагаан) 11 зүү хүртэл шар кабель.

Дээш ба доош моторын шар кабель (зарим загварт цагаан өнгөтэй) - 4-р зүү.

Серво дээрх хяналтын дохионы холбогч нь Arduino-ийн PWM гаралттай холбогдсон байх ёстойг бүү мартаарай.

Бид джойстикийг холбодог

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


1. Жойстикийн модуль дээр нэг U/R+ гаралт, нэг L/R+ гаралт байна. Эдгээр нь цахилгааны залгуурууд юм. Эдгээр гаралтууд нь Arduino дээрх 5V зүүтэй холбогдсон байна.

2. Мөн хоёр L/R холбогч, хоёр U/D холбогч байна. Тэдгээр нь А3 ба А4 аналог оролттой холбогдсон байна.

3. Жойстик дээрх газар нь Arduino дээрх газартай холбогдсон.

Холболтоо дахин шалгахаа бүү мартаарай. Төслийн ихэнх алдаа нь буруу холболтоос болж үүсдэг гэдгийг санаарай. Ялангуяа та олон тооны холбогчоор ургасан хэлхээний самбар ашиглаж байгаа бол.

Arduino-д зориулсан ноорог

Зургийн үндсэн тайлбарыг тайлбар дээр өгсөн болно. Дараах код нь Arduino IDE-д хуулж буулгахад хангалттай. Зургийг самбарт байршуулсны дараа та joystick ашиглах хүртэл серво хөдлөх ёсгүй.

#include <servo.h>

const int servo1 = 3; // эхний үйлчилгээ

const int servo2 = 10; // хоёр дахь сервер

const int joyH = 3; // Parallax joystick-ийн L/R гаралт

const int joyV = 4; // гаралт U/D joystick Parallax

inservoVal; // аналог зүүгээс өгөгдөл хадгалах хувьсагч

Servo myservo1; // эхний сервог удирдахын тулд Servo объект үүсгэ

Servo myservo2; // хоёр дахь сервог удирдахын тулд Servo объект үүсгэ

myservo1.attach(servo1); // серверийг холбоно уу

myservo2.attach(servo2); // серверийг холбоно уу

// Цуваа холбооны протоколыг эхлүүлэх

Serial.begin(9600);

// цуваа дэлгэц ашиглан joystick утгыг харуулах

гаралтын Joystick();

// joystick-аас утгыг хэвтээ байдлаар унших (0-ээс 1023 хүртэлх утга)

servoVal = analogRead(joyH);

servoVal = газрын зураг (servoVal, 0, 1023, 0, 180); // үр дүнгийн утгыг servo-д ашиглахын тулд масштаблах (үр дүн 0-ээс 180 хүртэлх мужид буцаж ирдэг)

myservo2.write(servoVal); // хүлээн авсан масштабын утгын дагуу серво роторыг байрлалд оруулна

// босоо тэнхлэгийн дагуу джойстикийн утгыг унших (0-ээс 1023 хүртэлх утга)

servoVal = analogRead(joyV);

servoVal = газрын зураг (servoVal, 0, 1023, 70, 180); //үр дүнгийн утгыг servo-д ашиглахын тулд масштаблах (хүрээ: 70-180)

myservo1.write(servoVal); // хүлээн авсан масштабын утгын дагуу хоёр дахь сервогийн роторыг гаргана

саатал(15); // servo өгөгдсөн байрлалыг өгөхийг хүлээнэ үү

* joystick утгыг харуулах

хүчингүй гаралт Joystick()(

Serial.print(analogRead(joyH));

Serial.print("---");

Serial.print(analogRead(joyV));

Serial.println("----------------");

Үр дүнг доорх видеон дээр харуулав.

Боломжит асуудал, шийдэл

1. Серво нь хөдөлдөггүй.

Холболтыг шалгана уу. PWM гаралтыг servo холбоход ашигладаг бөгөөд аналог гаралтыг joystick-д ашигладаг гэдгийг бүү мартаарай.

2. Ноорог Arduino-д оруулсны дараа сервонууд чичирч эхэлнэ.

U / D + L / R + зүү нь буруу холбогдсон байх магадлалтай. Холболтыг маш болгоомжтой шалгана уу. Зүү болон холболтыг шалгахын өмнө хөтөч эсвэл самбарыг санамсаргүйгээр шатаахгүйн тулд Arduino-г хувийн компьютерээс салгахаа мартуузай.

3. Би холболтыг сайтар шалгасан боловч серво нь хөдөлдөггүй.

Жойстикийг салгаад дахин холбож үзнэ үү. Энэ тохиолдолд хэлхээний самбараас joystick-ийг салгах нь дээр. Дахин суулгахдаа хэлхээний самбарт бага зэрэг хүчээр дар. Joystick холбогч нь талхны самбар дээр сайн сууж байх ёстой.

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

Надад ардуино нано (RobotDyn-ийн өндөр чанартай хятад клон) хэвтэж байсан. Нөгөө өдөр Хятадаас сервомотор, манипулятор ирсэн бөгөөд үүнийг бага зэрэг ойлгох цаг байсан. Тиймээс миний зорилго энгийн байсан: arduino nano, servo мотор болон joystick-ийг холбож, joystick эргэх үед серво эргүүлэх. Практик зорилгоор үүнийг жишээ нь камерын эргэлтийг хянахад ашиглаж болно.

Үүнээс харахад энэ нь тийм ч хэцүү биш юм. Холболтын схем дараах байдалтай байна.

1. Arduino болон servo холболт:

  • бор (миний servo дээр) утас - газар (gnd);
  • улаан утас - 5V;
  • улбар шар утас - 8 зүү.

2. Arduino болон joystick холболт:

  • gnd - gnd;
  • 5v - 5v (би 3.3v-д холбогдсон);
  • VRX (X координатын дохио) - A1;
  • VRY (Y координатын дохио) - A0;
  • SW (товчлуурын горим - дарагдсан эсвэл суллагдсан) - 2 зүү.

Бид Хятадад хийсэн бүх гайхамшгуудаа холбож, arduino-г компьютерт холбож, Arduino IDE-г нээж, доорх ноорог зургийг байршуулна. Ноорог ачаалсны дараа та манипуляторыг хажуу тийш нь хөдөлгөж болно, серво эргэх болно.

#оруулна //Сервомотортой ажиллах номын сан int xPin = A1; //A1 - аналог дохио X joystick-ын координат int yPin = A0; //A0 - аналог дохио Y координат нь joystick int buttonPin = 2; // Товчлуурын горимын зүү (дарагдсан эсвэл суллагдсан) int xPosition = 0; // X тэнхлэгийн дагуу джойстикийн одоогийн байрлалыг хадгалах хувьсагч int yPosition = 0; // Y тэнхлэгийн дагуу джойстикийн одоогийн байрлалыг хадгалах хувьсагч int buttonState = 0; //одоогийн товчлуурын төлөв (дарагдсан) int servoPin = 8; // servo мотор Servo servo-ийн дохионы зүү; // Servo төрлийн хувьсагч int өнцөг = 90; //сервомоторын эргэлтийн эхлэх өнцөг int currentXpos = 0; //Одоогийн X байрлалын хүчингүй тохиргоо() ( pinMode(xPin, INPUT); // xPin-тэй дохио нь pinMode(yPin, INPUT) оролтын дохиогоор тодорхойлогддог; // yPin-тэй дохио нь оролтын дохиогоор тодорхойлогддог pinMode(buttonPin, INPUT_PULLUP); / / товчлуур дээр татах резисторыг идэвхжүүлэх servo.attach(servoPin); // pin залгах servo.write(өнцөг); // Servo-г 90 градус эргүүлэх ) хүчингүй давталт() ( xPosition = analogRead(xPin); // xPin утгыг унших yPosition = analogRead(yPin); // yPin-ийн утгыг уншState = digitalRead(buttonPin); // товчлуурын "төлөв"-ийг унших // хэрэв xPosition утга 360-аас их бол if(xPosition >). 360) ( өнцөг = өнцөг-10; // өнцгийн эргэлтийг 10 градусаар бууруулна // өнцөг нь 0-ээс бага бол (өнцөг)< 0) { angle = 0; //устанавливаем значение угла 0 градусов } } //если xPosition меньше 300 if(xPosition < 300) { angle = angle+10; // увеличиваем угол поворота сервомотора на 10 градусов //если угол поворота больше 180 градусов if(angle >180) ( өнцөг = 180; //өнцгийн утгыг 180 градус болгох ) ) // хэрэв joystick товчлуурыг дарвал if(buttonState == 0) ( өнцөг = 90; //өнцгийг 90 градус болгох ) servo.write (өнцөг); // сервог хүссэн өнцгийн саатал руу эргүүлэх(50); // унших өгөгдөл хооронд саатал нэмэх)

Жойстикийг 3.3V цахилгаан тэжээлд холбох үед утгыг шалгахын тулд X ба Y байрлалын үндсэн утга нь 330 байсан (5V-д холбогдсон үед утгууд өөр байж болно). одоогийн уншилтаар би 30 нэгжийн анхны утгаас хазайсан.

Та цуваа портын дэлгэц ашиглан аналог дохионы утгыг хянах боломжтой (та үүнийг дараах байдлаар нээж болно: хэрэгслүүд -> портын дэлгэц эсвэл CTRL + SHIFT + M). Үүний тулд функцэд тохируулах()та дараах зүйлийг бичих хэрэгтэй.

Serial.begin(9600); // 9600 бит/с хурдтайгаар цуваа протоколоор өгөгдөл солилцох ажлыг эхлүүлэх

Функцэд давталт()дараахыг бичнэ үү.

Serial.print("X:"); Serial.print(xPosition); Serial.print(" | Y: "); Serial.print(yPosition); Serial.print(" | Товчлуур: "); Цуваа хэвлэх(buttonState);

Болсон явдлын видеог энд үзүүлэв.

Тиймээс, энэ нийтлэлд servo мотор ба джойстикийг Arduino Nano-д холбох үйл явцыг авч үзэх бөгөөд ноорог зургийн жишээг өгсөн болно. Ирээдүйд би джойстикийн чадварыг бүрэн ашиглаж, X, Y тэнхлэгийн дагуу эргүүлэхийн тулд хоёр дахь серво моторыг холбохоор төлөвлөж байна.

Шинэ нийтлэлүүд


C# WPF хэл дээр текст оруулах үед унадаг зөвлөмжүүдтэй (Yandex болон Google хайлттай төстэй) текст талбарын энгийн хэрэгжилт. C#/ хэл дээр хэрэглэгчийн хяналтыг хэрэгжүүлэх