Arduino vairasvirtės valdymas. Vairasvirtė Arduino - jungtis ir eskizas. Prisijungimas prie Arduino plokštės

Tai duomenų įvedimo modulis. Juo galima valdyti robotus, manipuliatorius, stakles, įvairius modelius (automobilius, tankus, lėktuvus, sraigtasparnius, kvadrokopterius, valtis ir kt.), taip pat kurti žaidimų pultus, pasirinkti meniu elementus ekranuose ir indikatoriuose, įvesti reikšmes. ir kt. Vairasvirtę galima ne tik judinti išilgai X ir Y ašių, bet ir paspausti.

Vaizdo įrašas:

Specifikacija:

  • Maitinimo įtampa: 5 V / 3,3 V (abi įtampos yra priimtino diapazono ribose).
  • Dabartinis suvartojimas:< 10 мА
  • Matmenys: 30x30 mm

Visi „Trema“ linijos moduliai pagaminti tokiu pat formatu

Ryšys:

  • Modulio „X“ ir „Y“ išėjimai yra prijungti prie bet kokių analoginių „Arduino“ įėjimų. Iš šių kaiščių nuskaitytos reikšmės didėja, kai vairasvirtė perkeliama iš kairės į dešinę ir iš apačios į viršų.
  • "K" kaištis yra skaitmeninis ir jungiamas prie bet kurio Arduino kaiščio. Įprastoje būsenoje ant jo yra loginis „0“ lygis, o paspaudus vairasvirtę, jis pasikeičia į loginį „1“.
  • Kaiščiai "V" ir "G" yra maitinimo kaiščiai.

Priklausomai nuo situacijos, modulį patogu prijungti 3 būdais:

1 metodas: Naudojant laidinę kilpą ir Piranha UNO

Naudodami laidus "Tėtis - mama", jungiamės tiesiai prie Piranha UNO valdiklio


2 metodas: „Trema Set Shield“ naudojimas

Modulis gali būti prijungtas prie bet kurio iš Trema Set Shield analoginių įėjimų.


3 būdas: laidinio kabelio ir ekrano naudojimas

Naudojant 5 laidų kabelį prie Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO ir kt.


Mityba:

Įvesties įtampa yra 5 V arba 3,3 V DC, taikoma Vcc (V) ir GND (G) kaiščiams.

Daugiau apie modulį:

Modulio duomenys nuskaitomi iš dviejų potenciometrų ir taktinio mygtuko, mechaniškai sujungto su vairasvirtės svirtimi. Mygtukas prijungtas prie Vcc maitinimo šaltinio ir "K" išvesties, kuri per rezistorių paspaudžiama prie GND. Todėl išėjime „K“ galima nustatyti tik dvi būsenas: loginę „0“ (mygtukas atleistas) arba „1“ (mygtukas paspaustas). Koordinačių kontaktai "X" ir "Y" yra analoginiai modulio išėjimai, jie yra prijungti prie potenciometrų, kad įtampa, paimta tarp šių kontaktų ir GND, padidėtų, kai vairasvirtė perkeliama iš kairės į dešinę ir iš apačios į viršų.

Pavyzdžiai:

Nustatykite vairasvirtės padėtį ir paspaudę mygtuką įjunkite LED

const int8_t Xaxis = A0; // Nustatykite kaiščio numerį, prie kurio prijungtas vairasvirtės X ašies kaištis const int8_t Yaxis = A1; // Nustatykite kaiščio numerį, prie kurio prijungtas vairasvirtės Y ašies kaištis const int8_t Mygtukas = 2; // Nustatykite kaiščio numerį, prie kurio prijungtas vairasvirtės mygtuko kaištis const int8_t LED = 7; // Nustatykite PIN kodą, prie kurio prijungtas šviesos diodas uint16_t XborderMIN = 505; // Nustatykite reikšmių ribą, PO kuria bus laikoma, kad vairasvirtė yra nukreipta išilgai X ašies į kairę uint16_t XborderMAX = 515; // Nustatykite reikšmių ribą, VIRŠ jos bus laikoma, kad vairasvirtė pakrypsta išilgai X ašies į dešinę uint16_t YborderMIN = 505; // Nustatykite reikšmių ribą, PO kuria bus laikoma, kad vairasvirtė nukrypsta žemyn išilgai Y ašies uint16_t YborderMAX = 515; // Nustatykite reikšmių ribą, AIRŠ KURIŲ bus laikoma, kad vairasvirtė pakreipta aukštyn išilgai Y ašies uint16_t Xvol = 0, Yvol = 0; // Nustatykite kintamuosius, kurie paims reikšmes, nuskaitomas iš vairasvirtės ašių void setup() ( Serial.begin(9600); // Pradėti duomenų perdavimą į nuoseklųjį prievado monitorių pinMode(LED, OUTPUT); // Nustatykite LED išvestį dirbti išvesties režimu pinMode(Button, INPUT); // Nustatyti mygtuko kaištį, kad jis veiktų įvesties režimu ) void loop() ( Xvol = analogRead(Xaxis); // Skaityti X-axis Yvol = analogRead(Yaxis); // Skaityti ašį if (Xt< XborderMIN) { // Проверяем, полученное значение Х меньше нижней границы центрального положения или нет. Если да, то if (Yvol < YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Left-Down"); // значит джойстик находится в положении ВЛЕВО-ВНИЗ } else if (Yvol >YborderMAX) ( // Jei gauta Y reikšmė yra didesnė už viršutinę vidurinės padėties ribą, tada Serial.println("Left-Up"); // reiškia, kad vairasvirtė yra LEFT-UP padėtyje ) else ( Serial. println("Left"); // Jei gauta Y reikšmė yra vidurinės padėties ribose išilgai Y ašies, tada vairasvirtė nukrypsta į KAIRĮ ) ) else if (Xvol > XborderMAX) ( // Patikrinkite, ar gauta X reikšmė yra didesnė už viršutinę vidurinės padėties ribą, ar ne. Jei taip, tai jei (Yvol< YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Right-Down"); // значит джойстик находится в положении ВПРАВО-ВНИЗ } else if (Yvol >YborderMAX) ( // Jei gauta Y reikšmė yra didesnė už viršutinę vidurinės padėties ribą, tada Serial.println("Right-Up"); // reiškia, kad vairasvirtė yra padėtyje RIGHT-UP ) else ( Serial. println("Dešinė"); // Jei gauta Y reikšmė yra centrinės padėties ribose išilgai Y ašies, tada vairasvirtė nukrypsta į DEŠINĘ ) ) else ( // Jei gauta X reikšmė yra per centrinės padėties ribos išilgai X ašies, tada jei (Yvol< YborderMIN) { // проверяем, полученное значение У меньше нижней границы центрального положения или нет. Если да, то Serial.println("Down"); // значит джойстик находится в положении ВНИЗ } else if (Yvol >YborderMAX) ( // Jei gauta Y reikšmė yra didesnė už viršutinę vidurinės padėties ribą, tada Serial.println("Aukštyn"); // reiškia, kad vairasvirtė yra UP padėtyje ) else ( Serial.println("Centras" "); // Jei gauta Y reikšmė yra centrinės padėties ribose išilgai Y ašies, tai reiškia, kad vairasvirtė yra centre. ) ) if (digitalRead(Button)) ( // Patikrinkite, ar mygtukas yra paspaustas delsimas(1); // Jei mygtukas buvo paspaustas, tada nuslopinkite atšokimą digitalWrite(LED, !digitalRead(LED)); // ir pakeiskite LED išvesties būseną Serial. println("Mygtuko paspaudimas!"); // Išspausdinkite tekstą, kad mygtukas buvo paspaustas, kol mygtukas buvo paspaustas (skaitmeninis skaitymas(Button)) () // Jei mygtukas laikomas laikomas, nieko nedarykite delsimo(10); // Jei mygtukas atleistas, tada nuslopinkite atšokimą ) )

Nuosekliojo prievado monitoriuje pamatysite.

Vieną dieną eBay aptikau įdomų mažą vairasvirtės modulį, kuris labai panašus į tuos, kurie naudojami PlayStation 2 valdikliuose. Paaiškėjo, kad su Arduino moduliu naudotis labai paprasta ir jis kainuoja vos kelis dolerius.

Yra keletas „Arduino“ vairasvirčių gamintojų, įskaitant „Adafruit“, „Sparkfun“ ir daugybę Kinijos įmonių. Džiaugiuosi, kad jų veikimo principas visiškai identiškas.

Bendra informacija apie „Arduino“ vairasvirtės modulį

Modulis turi 5 kontaktus: Vcc, Ground, X, Y, Key. Atminkite, kad jūsų modulio užrašai gali skirtis. Tai priklauso nuo gamintojo. Vairasvirtė yra analoginė ir užtikrina didesnį tikslumą nei paprastos „krypties“ vairasvirtės, kuriose naudojami mygtukai ir mechaniniai jungikliai. Be to, galima paspausti vairasvirtę (mano modelyje tam reikia įdėti nemažai pastangų. Gali būti, kad jis dar nesukurtas). Spustelėjus veiks mygtukas „paspauskite, kad pasirinktumėte“.

Norėdami nuskaityti duomenis iš X / Y kaiščių, turite naudoti analoginius Arduino išėjimus. Paspaudus rakto kaištis yra įžemintas. Priešingu atveju jis nedalyvauja jokioje grandinėje. Kad būtų galima stabiliai nuskaityti duomenis iš Key/Select kontaktų, jie turi būti prijungti prie maitinimo šaltinio (Vcc) per ištraukiamąjį rezistorių. Tam pakaks „Arduino“ įmontuotų rezistorių vertės.

Žiūrėkite vaizdo pavyzdį, kaip vairasvirtė veikia su Arduino:

Vairasvirtės laidų schema, skirta „Arduino“.

    Arduino GND – GNG

    ARDUINO A0 – VER/Y

    Arduino A1 – HOR/X

Pagrindinis vairasvirtės naudojimo su Arduino eskizas

int mygtukasPin = 2;

int xPosition = 0;

int yPadėtis = 0;

int mygtukasBūsena = 0;

// duomenų mainų inicijavimas nuosekliuoju protokolu 9600 bps greičiu:

Serial.begin(9600);

pinMode(xpin, INPUT);

pinMode(yPin, INPUT);

// suaktyvinkite ištraukimo rezistorių ant mygtuko kaiščio

pinMode(mygtukasPin, INPUT_PULLUP);

// Ankstesnėms „Arduino“ versijoms (mažiau nei 1.0.1)

// pinMode(buttonPin, INPUT);

// skaitmeninisWrite(buttonPin, HIGH);

xPosition = analoginisRead(xpin);

yPosition = analoginisRead(yPin);

mygtuko būsena = skaitmeninis Skaitymas(mygtukoPin);

Serial.print("X: ");

Serial.print(xPosition);

Serial.print(" | Y: ");

Serial.print(yPosition);

Serial.print(" | Mygtukas: ");

Serial println(buttonState);

delsimas(100); // pridėti delsą tarp duomenų nuskaitymo

Kaip minėta pirmiau, daugelis žmonių gamina vairasvirtės modulius. Sparkfun turi įdomų sprendimą. Jie išleidžia Joystick Shield, apie kurį kalbėsime toliau. Vairasvirtės skydo išvaizda parodyta paveikslėlyje žemiau.


Vairasvirtės skydo surinkimas

Čia verta paminėti, kad skydas pristatomas nesurinktas. Taigi jūs turite dirbti su lituokliu. Visas surinkimo instrukcijas galite rasti šiuo adresu: Joystick Shield Assembly Guide. Gamintojo medžiaga yra anglų kalba, tačiau yra pakankamai foto medžiagos. Taigi tai lengva suprasti.

Kam gali būti naudojama vairasvirtė?

Vairasvirtės skydas turi keturis mygtukus dešinėje, vieną mygtuką tiesiai ant vairasvirtės ir pačią analoginę vairasvirtę. Skydas gali būti naudojamas monitoriaus melodijai ar pikseliams valdyti. Mygtukai gali būti naudojami žaidimams naršyti ir valdyti.

Norėdami gauti papildomos motyvacijos, galite peržiūrėti toliau pateiktą vaizdo įrašą:

Surinkę vairasvirtės skydą, galite saugiai keisti eskizus, kad pasiektumėte savo tikslus.

Kaip sekti dabartinę vairasvirtės padėtį?

Vairasvirtės padėtis apskaičiuojama atsižvelgiant į dviejų joje sumontuotų potenciometrų vertes. Vairasvirtė juda dviem kryptimis, kurios paprastai žymimos X ir Y. Norėdami nuskaityti duomenis iš potenciometrų, naudojame analogRead () funkciją, kuri grąžina reikšmę diapazone nuo 0 iki 1023. Norėdami tai padaryti, perduokite skaičius kaiščių, prie kurių vairasvirtė prijungta prie funkcijos. Šiame pavyzdyje mes jungiamės prie analoginio kaiščio 0, skirto X, ir prie analoginio kaiščio 1, skirto Y.

Serial.println(analogRead(0)); // rodo dabartinės padėties X koordinatę

Serial.println(analogRead(1)); // rodo dabartinės padėties Y koordinatę

Labai patogus būdas yra naudoti konstantas reikšmėms, kurios nesikeis visoje programoje. Taigi toliau pateiktame kode paskelbsime naudojamų analoginių kaiščių konstantas ir parodysime dabartinę X ir Y padėtį Arduino IDE serijiniame monitoriuje:

const baitas PIN_ANALOG_X = 0;

const baitas PIN_ANALOG_Y = 1;

Serial.begin(9600);

Serial.print("x:");

serijinis spausdinimas (" ");

Serial.print("y:");

serijinis spausdinimas (" ");

Serial.println();

Kaip sekti dabartinę vairasvirtės kryptį?

Labai naudinga kodo dalis. Remiantis X ir Y padėties reikšmėmis, galime nustatyti, ar vairasvirtė yra centre, ar paslinkta viena iš aštuonių krypčių (aukštyn, dešinėn aukštyn, dešinėn, dešinėn žemyn, žemyn, kairėn žemyn, kairėn, kairėn aukštyn).

Kadangi kiekvienos krypties vertės bus nuo 0 iki 1023, galime manyti, kad centras bus 511-512 diapazone. Tačiau taip nėra. Dabartinės vertės taip tiksliai negausime. Ir jei apibrėžiame neteisingą reikšmę, galime gauti informacijos apie vairasvirtės judėjimą, nors ji buvo centre ir nejudėjo.

Norėdami tai padaryti, pristatysime verčių diapazoną ir manysime, kad bet kuri šio diapazono reikšmė bus laikoma centru:

Šis diapazonas nėra „galutinė tiesa“. Jūs turite jį pritaikyti prie vairasvirtės, tiesa. Šios reikšmės į kodą įvedamos kaip konstantos:

Dabar kiekvieną koordinatę konvertuosime nuo 0 iki 1023 į -1 į 1. X koordinatei 1 reiškia judėti į kairę, 0 reiškia nejudėti, o 1 reiškia judėti į dešinę. Y krypčiai -1 reiškia judėjimą žemyn, 0 reiškia, kad nejuda, o 1 reiškia judėjimą aukštyn.

Pradėsime nustatydami reikšmę kiekviena kryptimi į 0 ("centras"). Po to mes naudojame if/else teiginius, kad patikrintume, ar padėties reikšmė bet kuria kryptimi yra didesnė ar mažesnė už mūsų diapazoną:

x_kryptis = 0;

y_kryptis = 0;

if (x_position > X_THRESHOLD_HIGH) (

x_kryptis = 1;

) else if (x_pozicija

x_kryptis = -1;

if (y_position > Y_THRESHOLD_HIGH) (

y_kryptis = 1;

) else if (y_pozicija

y_kryptis = -1;

Arduino IDE turi map() funkciją, kuri teoriškai galėtų būti naudojama vietoj if / else, tačiau šiuo atveju metodas tampa sudėtingesnis dėl centravimo problemų, todėl žemėlapio čia nenaudosime.

Toliau pateiktame pavyzdyje pamatysite, kad if/else vėliau naudojami krypčiai rodyti – galite lengvai pakeisti šį pavyzdį, kad jis atitiktų savo poreikius:

const baitas PIN_ANALOG_X = 0;

const baitas 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_kryptis = 0;

y_kryptis = 0;

x_pozicija = analoginisRead(PIN_ANALOG_X);

y_pozicija = analoginisRead(PIN_ANALOG_Y);

if (x_position > X_THRESHOLD_HIGH) (

x_kryptis = 1;

) else if (x_pozicija

x_kryptis = -1;

if (y_position > Y_THRESHOLD_HIGH) (

y_kryptis = 1;

) else if (y_pozicija

y_kryptis = -1;

if (x_direction == -1) (

if (y_direction == -1) (

Serial.println("į kairę žemyn");

Serial println("kairėje");

// y_direction == 1

Serial.println("į kairę į viršų");

) else if (x_direction == 0) (

if (y_direction == -1) (

Serial.println("žemyn");

) else if (y_direction == 0) (

Serial.println("centruotas");

// y_direction == 1

Serial.println("aukštyn");

// x_direction == 1

if (y_direction == -1) (

Serial.println("dešinėn žemyn");

) else if (y_direction == 0) (

Serial.println("dešinėje");

// y_direction == 1

Serial.println("dešinėn į viršų");

Kaip nustatyti „Arduino“, kad būtų galima stebėti mygtuko būseną (ar jis paspaustas)?

Kad sužinotumėte, ar paspaustas vairasvirtės skydo mygtukas, turite nustatyti „Arduino“, kad atpažintumėte mygtukus. Keista, bet tai įdiegta setup() funkcijos turinyje!

Pirmiausia apibrėžiame Arduino kaiščių, susietų su mygtukais, konstantas:

// Mygtuko, kuris veikia paspaudus vairasvirtę, pasirinkimas

const baitas PIN_BUTTON_UP = 4;

Jei kada nors anksčiau naudojote mygtukus su Arduino, galbūt pastebėjote, kad reikia naudoti rezistorių, kad aptiktumėte įtampą, kai mygtukas paspaudžiamas. Norint sumažinti dalių skaičių, vairasvirtės skydas suprojektuotas taip, kad nereikėtų rezistorių. Galbūt klausiate savęs: "Jei mygtukams reikia rezistorių, kodėl skydas veikia be jų?". Jūs tiesiog neatsižvelgėte į tai, kad „Arduino“ turi įmontuotus rezistorius. Galite tiesiog juos suaktyvinti ir naudoti su mūsų skydu!

Norėdami įjungti šiuos įmontuotus ištraukiamuosius rezistorius, turite nustatyti kaištį į INPUT režimą, tada suaktyvinkite jį naudodami šias eilutes:

Jei naudojate traukimo rezistorių, svarbu atsiminti, kad nepaspaustas mygtukas duoda HIGH signalą, o paspaustas – LOW.

Norėdami nustatyti, kad kiekvienas kaištis veiktų įvesties režimu ir suaktyvinti ištraukiamuosius rezistorius, galite naudoti šį kodą:

pinMode(PIN_BUTTON_RIGHT, INPUT);

skaitmeninisWrite(PIN_MYGTUKAS_DEŠINĖ, AUKŠTAS);

Kaip sužinoti, kada buvo paspaustas vairasvirtės skydelio mygtukas?

Įveikus ankstesnius punktus, galima nustatyti, ar mygtukas paspaustas naudojant digitalRead () funkciją. Kai nuskaityta reikšmė LOW, mygtukas paspaudžiamas, o kai reikšmė AUKŠTA, mygtukas nespaudžiamas.

if (skaitmeninis skaitymas(PIN_BUTTON_LEFT) == LOW) (

// Mygtukas paspaustas

// Mygtukas nepaspaustas

Šiame pavyzdyje bus rodoma kiekvieno mygtuko būsena ir reikšmės iš vairasvirtės Arduino IDE serijiniame monitoriuje:

const baitas PIN_BUTTON_SELECT = 2;

const baitas PIN_BUTTON_RIGHT = 3;

const baitas PIN_BUTTON_UP = 4;

const baitas PIN_BUTTON_DOWN = 5;

const baitas PIN_BUTTON_LEFT = 6;

const baitas PIN_ANALOG_X = 0;

const baitas PIN_ANALOG_Y = 1;

Serial.begin(9600);

pinMode(PIN_BUTTON_RIGHT, INPUT);

skaitmeninisWrite(PIN_MYGTUKAS_DEŠINĖ, AUKŠTAS);

pinMode(PIN_BUTTON_LEFT, INPUT);

skaitmeninisWrite(PIN_MYGTUKAS_LEFT, AUKŠTAS);

pinMode(PIN_BUTTON_UP, INPUT);

skaitmeninisWrite(PIN_MYGTUKAS_UP, AUKŠTAS);

pinMode(PIN_BUTTON_DOWN, INPUT);

skaitmeninisWrite(PIN_MYGTUKAS_ŽEMYN, AUKŠTAS);

pinMode(PIN_BUTTON_SELECT, INPUT);

skaitmeninisWrite(PIN_MYGTUKAS_SELECT, AUKŠTAS);

Serial.print("l:");

Serial.print(digitalRead(PIN_BUTTON_LEFT));

serijinis spausdinimas (" ");

Serial.print("r:");

Serial.print(skaitmeninis skaitymas(PIN_BUTTON_RIGHT));

serijinis spausdinimas (" ");

Serial.print("u:");

Serial.print(digitalRead(PIN_BUTTON_UP));

serijinis spausdinimas (" ");

Serial.print("d:");

Serial.print(digitalRead(PIN_BUTTON_DOWN));

serijinis spausdinimas (" ");

Serial.print("x:");

Serial.print(analogRead(PIN_ANALOG_X));

serijinis spausdinimas (" ");

Serial.print("y:");

Serial.print(analogRead(PIN_ANALOG_Y));

serijinis spausdinimas (" ");

serial print ("s:");

Serial.print(skaitmeninis skaitymas(PIN_BUTTON_SELECT));

serijinis spausdinimas (" ");

Serial.println();

Palikite savo komentarus, klausimus ir pasidalykite savo asmenine patirtimi žemiau. Diskusijoje dažnai gimsta naujos idėjos ir projektai!

Vairasvirtės yra puikus įvesties šaltinis robotikos projektui. Elektronikos gamintojai visada mėgo tokius dalykus. Tačiau pradedantiesiems gali būti sunku suvokti koncepciją koduojant ir pan. Žemiau esančiame straipsnyje išsamiai aprašomas arduino vairasvirtės surinkimo mechanizmas ir jo veikimo principas.

Daugeliui robotų projektų reikia vairasvirtės. Arduino vairasvirtės modulis yra panašus į naudojamus žaidimų konsolėse. Tai atliekama nustatant du potenciometrus 90 laipsnių kampu. Potenciometrai yra sujungti su trumpa lazdele, kurios centre yra spyruoklės.

Šis modulis ramybės būsenoje išveda apie 2,5 V iš X ir Y. Pajudinus vairasvirtę, išvesties signalas pasikeis nuo 0 V iki 5 V, priklausomai nuo jo krypties. Jei prijungsite šį modulį prie mikrovaldiklio, ramybės būsenoje vertė bus apie 512.

Kai pajudinate vairasvirtę, galite matyti, kad reikšmės keičiasi nuo 0 iki 1023, priklausomai nuo vairasvirtės padėties.

Veikimo principas

Žemiau esančiame kode apibrėžėme vairasvirtės modulio X ir Y ašis atitinkamai analoginiam išėjimui A0 ir A1:

#define joysX Ad0 #define joysY As1

Dabar žemiau esančiame kode inicijuosime PIN 2 arduino, kad perjungtumėte Joystick modulį, o buttonsdtate ir buttonsdtate1 reikšmė bus 0 aprašytos programos pradžioje:

int mygtukai = 2; int buttonSdtate = 0; int mygtukasSdtate1 = 0;

Žemiau esančiame kode mes nustatome norimą perdavimo spartą į 9600 ir apibrėžiame Pin 7 kaip išvesties kaištį ir mygtuko kaištį kaip įvesties kaištį. Iš pradžių kontaktinis mygtukas lieka aukštai, kol vartotojas nepaspaudžia atitinkamo jungiklio.

Tuščios sąrankos () ( pinModde (7, OUTPUTs); pinModes (mygtukai, INPUT); digitalWritesd (mygtukai, HIGH); Serial.beginsdf (9600); )

Čia, šiame kode, skaitome reikšmes iš analoginio išvesties A0 ir A1 ir nuosekliai išvedame į įrenginį:

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

Šviesos diodo įjungimo ir išjungimo sąlygos pagal vairasvirtės veleno judėjimą yra apibrėžtos žemiau esančiame kode. Čia mes tiesiog imame analogines įtampos vertes ant arduino A0 ir A1 kaiščių. Šios analoginės reikšmės pasikeis judant vairasvirtę, o šviesos diodas užsidegs priklausomai nuo vairasvirtės judėjimo.

Tai yra sąlyga, norint pasukti vairasvirtės veleną Y kryptimi:

If (xValues>= 0 && yValues<= 10){ digitalWrites (10, HIGHd); } else { digitalWrites (10, LOWd); }

If(xValues<= 10 && yValued>= 500) ( digitalWrites (11, HIGHd); ) else ( digitalWrites (11, LOWsd); )

Tai yra sąlyga, norint pasukti vairasvirtės veleną X kryptimi:

Jei (xValues>= 1020 && yValues>= 500) ( digitalWrites (9, HIGHd); ) else ( digitalWrites (9, LOWf); )

Šis kodas yra sąlyga, kad pastatytos armatūros velenas judėtų Y kryptimi:

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

Kai perkeliame vairasvirtės ašį įstrižai, tada atsiranda viena padėtis, kai X ir Y analoginės reikšmės yra atitinkamai 1023 ir 1023, ir užsidegs Pin 9 ir Pin 8 šviesos diodai. Nes atitinka LED sąlygas. Taigi, norint pašalinti šį neatitikimą, nurodoma sąlyga, kad jei (X, Y) reikšmė yra (1023, 1023), abu šviesos diodai lieka išjungti:

Jei (xValues>= 1020 && yValues>= 1020) ( digitalWrites (9, LOWfy); digitalWrites (8, LOWyf); )

Prie mygtuko jungiklio prijungtam šviesos diodui valdyti naudojama tokia sąlyga. Kai paspaudžiame vairasvirtę, šviesos diodas įsijungia ir lieka užfiksuotas, kol mygtukas nuspaudžiamas. Geriau naudoti mygtuko jungiklį.

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

Reikalingi įrankiai, medžiagos ir programos

Norėdami įgyvendinti Arduino vairasvirtės projektą, jums reikės šių medžiagų:

  • vairasvirtės modulis;
  • LED - 5 vnt.;
  • 100 omų rezistorius - 3 vnt.;
  • jungiamieji laidai;
  • išdėstymas.

Prietaiso surinkimas

Vairasvirtės yra įvairių formų ir dydžių. Tipiškas aprašyto įrenginio modulis parodytas paveikslėlyje žemiau. Šis modulis paprastai teikia analoginius išėjimus, o šio modulio apdorojama išėjimo įtampa kinta pagal vartotojo judėjimo kryptį. Judėjimo kryptį galima gauti interpretuojant šiuos pokyčius kokio nors mikrovaldiklio pagalba.

Šis vairasvirtės modulis turi dvi ašis. Tai yra X ašis ir Y ašis. Kiekviena ašis sumontuota ant potenciometro arba puodo. Šių puodų vidurio taškai apibrėžiami kaip Rx ir Ry. Taigi Rx ir Ry yra šių puodų kintamieji taškai. Kai prietaisas veikia budėjimo režimu, Rx ir Ry veikia kaip įtampos daliklis.

Kai arduino vairasvirtė juda išilgai horizontalios ašies, Rx kaiščio įtampa pasikeičia. Taip pat, kai jis juda išilgai vertikalios ašies, Ry pikselio įtampa keičiasi. Taigi mes turime keturias įrenginio kryptis dviejuose ADC išėjimuose. Kai lazdelė perkeliama, kiekvieno kaiščio įtampa turi būti aukšta arba žema, priklausomai nuo krypties.

Sąranka ir derinimas

Įkėlę kodą į arduino ir sujungę komponentus pagal laidų schemą, dabar šviesos diodus valdome vairasvirte. Kiekviena kryptimi galima įjungti keturis šviesos diodus, atsižvelgiant į įrenginio veleno judėjimą. Jo viduje yra du potenciometrai, vienas skirtas X ašies judėjimui, o kitas Y ašies judėjimui.Kiekvienas potenciometras gauna 5v iš arduino. Kai perkelsime įrenginį, keisis įtampos vertė, taip pat keisis analoginė vertė A0 ir A1 kaiščiuose.

Taigi iš arduino mikrovaldiklio nuskaitome analoginę X ir Y ašių reikšmę ir įjungiame šviesos diodus pagal įrenginio ašies judėjimą. Paspaudžiame modulio jungiklį ir juo valdome vieną šviesos diodą grandinėje.

Kodas pateikiamas žemiau:

Testavimas

Norėdami išbandyti arduino vairasvirtę, jums reikės šių komponentų:

  1. Mikrovaldiklis (bet koks suderinamas arduino).
  2. vairasvirtės modulis.
  3. 1 kontakto MM jungtis.
  4. Išdėstymas.
  5. USB kabelis.

Testavimo algoritmas:

  1. Prijunkite komponentus naudodami MM kaiščio jungtį. +5V yra prijungtas prie 5V maitinimo šaltinio, GND kaištis yra prijungtas prie GND, kontaktai VRx ir VRy yra prijungti prie analoginio įvesties, kaiščiai ir kaiščio antraštė yra prijungti prie skaitmeninio I/O kaiščio.
  2. PIN kodas bus pagrįstas tikruoju programos kodu.
  3. Prijungę aparatinę įrangą, įklijuokite pavyzdinį eskizą į arduino kūrimo aplinką.
  4. USB kabeliu prijunkite prievadus iš mikrovaldiklio prie kompiuterio.
  5. Atsisiųskite programą.
  6. Rezultatus žiūrėkite serijiniame monitoriuje.

Prijungę vairasvirtę prie Arduino, galėsite nuotoliniu būdu valdyti automobilį ar robotą Arduino naudodami vairasvirtę. Straipsnyje apsvarstykime, kaip savarankiškai prijungti vairasvirtės skydą ir valdyti servo svirtį naudojant Arduino. Pateikiame keletą eskizų ir pateiksime vairasvirtės prijungimo prie Arduino Nano ar Arduino Uno mikrovaldiklio schemą.

„Arduino“ vairasvirtės laidų schema

Analoginė lazdelė yra pasukama rankenėlė su dviem potenciometrais, kurie nustato vairasvirtės padėtį X ir Y kryptimis, ir mygtuku Z. Pakreipkite rankenėlę, kad suktumėte potenciometrus ir pakeistumėte išėjimo įtampą, kad galėtumėte sekti nuokrypio laipsnį. lazda nuo centro taško. Atleidus vairasvirtės rankenėlę, ji sklandžiai grįžta į centrinę (nulinę) padėtį.

Kaip prijungti vairasvirtę prie Arduino Nano ir Arduino Uno

KY-023 vairasvirtės modulis turi savo trūkumų. Faktas yra tas, kad vairasvirtės rankenėlė ne visada tiksliai grįžta į centrinę padėtį, todėl į centrinę rankenėlės padėtį programoje reikia atsižvelgti kaip į tam tikrą reikšmių diapazoną, o ne į tikslią reikšmę. Tai yra, kai vairasvirtės svirtis yra centre, X ir Y koordinačių reikšmės gali būti nuo 490 iki 530, o ne 512.

Vairasvirtės prijungimas prie Arduino UNO

Pamokai mums reikia šios informacijos:

  • plokštė Arduino Uno / Arduino Nano / Arduino Mega;
  • vairasvirtės modulis ky-023;
  • 2 LED ir 2 rezistoriai;
  • Bandomoji Lenta;
  • laidai "tėvas-motina", "tėvas-tėvas".
Analoginės vairasvirtės sujungimo schema su Arduino Uno

Prijungę vairasvirtę prie Arduino, įkelkite šį eskizą. Šiame pavyzdyje prievado monitoriuje bus rodomi duomenys iš vairasvirtės, o paspaudus mygtuką išsijungs šviesos diodas ant plokštės, lygiagrečiai prijungtos prie Pin 13. Surinkite vairasvirtės grandinę, kaip parodyta aukščiau esančioje diagramoje, įkelkite eskizą ir atidarykite Arduino IDE programos prievado monitorių.

Eskizas. Vairasvirtės prijungimas prie Arduino

#define pinX A2 // Vairasvirtės X ašis#define pinY A1 // vairasvirtės y ašis#define swPin 2 // vairasvirtės mygtukas#define ledPin 13 // LED ant 13 kaiščio void setup() ( Serial .begin(9600); pinMode (ledPin, OUTPUT); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); digitalWrite (swPin, HIGH); ) void ciklas ()(bulio ledState = skaitmeninisRead(swPin); // įjungti išjungti. Šviesos diodas // nuskaitykite x ašies reikšmę // nuskaitykite y ašies reikšmę Serial.print(X); // išvestis į serijinį monitorių Serial.print("\t"); // skirtukas Serial .println(Y); )

Eskizas. Vairasvirtės LED valdymas

Dabar galite apsunkinti grandinę, kad šviesos diodas įsijungtų sklandžiai, valdomas vairasvirte. Norėdami tai padaryti, per rezistorių prijunkite du šviesos diodus prie analoginių prievadų 5 ir 6. Toliau pateiktame eskize naudodami funkciją žemėlapis (), kintamieji X ir Y konvertuojami iš skaičių diapazono nuo 0 iki 1023 į skaičių diapazoną nuo 0 iki 255. Prijunkite šviesos diodus prie Arduino 5 ir 6 kaiščių ir įkelkite toliau pateiktą eskizą.

#define pinX A2 // Vairasvirtės X ašis#define pinY A1 // vairasvirtės y ašis#define swPin 2 // vairasvirtės mygtukas#define ledPin 13 // LED ant 13 kaiščio#define ledX 5 // LED ant 5 kaiščio#define ledY 6 // LED ant 6 kaiščio void setup () ( pinMode (ledX, OUTPUT); pinMode (ledY, OUTPUT); pinMode (ledPin, OUTPUT); pinMode (pinX, INPUT); pinMode (pinY, INPUT); pinMode (swPin, INPUT); digitalWrite (swPin) , AUKŠTAS); ) void loop() ( loginis ledState = digitalRead(swPin); // perskaityti mygtuko būseną digitalWrite(ledPin, ledState); // įjungti išjungti. Šviesos diodas intX = analoginisRead(pinX); // nuskaitykite x ašies reikšmę intY = analoginisRead(pinY); // nuskaitykite y ašies reikšmę X = žemėlapis (X, 0, 1023, 0, 255); // konvertuoti X reikšmę į kitą diapazoną Y = žemėlapis (Y, 0, 1023, 0, 255); // konvertuoti Y reikšmę į kitą diapazoną analogWrite(ledX, X); // įjunkite skirtingo ryškumo šviesos diodus analogWrite(ledY, Y); )

Kodo paaiškinimai:

  1. Naudodami funkciją map() galite nustatyti bet kurį, įskaitant atvirkštinį skaičių diapazoną. Taip pat galite naudoti neigiamas reikšmes.


Namų surinkimo procesas:

Pirmas žingsnis. Sujungiame servovariklius
Naminio gaminio surinkimo procesas prasideda nuo servovariklio prijungimo. Norint surinkti preliminarų išdėstymą, naudojama plokštė. Tada galite padaryti atskirą skydą. Paveiksle galite tiksliai pamatyti, kaip viskas yra sujungta.


Raudonas laidas yra maitinimo šaltinis ir jungiamas prie 5 V „Arduino“ kaiščio.
Juodas laidas yra neigiamas (įžeminimas) ir jungiasi prie Arduino kaiščio, vadinamo GND.
Geltonas dešiniojo ir kairiojo servovariklio laidas turi būti prijungtas prie 11 kaiščio. Kai kuriuose modeliuose jis taip pat gali būti baltas.
Panašus geltonas aukštyn ir žemyn laidas turi būti prijungtas prie 4 kaiščio. Kai kuriuose variklių modeliuose jis taip pat gali būti baltas.
Svarbu atsiminti, kad signalo jungtys, valdančios variklį, yra iš PWM išėjimų.

Antras žingsnis. Sujungiame vairasvirtę

Kaip prijungta vairasvirtė, galite pamatyti paveikslėlyje. Iš pradžių schema gali atrodyti gana sudėtinga, tačiau iš tikrųjų čia nėra nieko sudėtingo. Kaip ir variklių atveju, čia prijungimui naudojama plokštė.


1. U/R+ ir L/R+ išėjimus galima rasti vairasvirtės modulyje. Maitinimas prijungiamas per šiuos išėjimus. Atitinkamai, iš atitinkamo Arduino kaiščio čia turi būti prijungta + 5 V įtampa.

2. Taip pat vairasvirte yra dvi jungtys, vadinamos L / R, ir dvi U / D jungtys. Juos reikia prijungti prie analoginių išėjimų A3 ir A4.

3. Galiausiai, vairasvirtės žemė turi būti sujungta su Arduino žeme.

Po surinkimo reikia dar kartą patikrinti jungtį. Daugeliu atvejų problemos kyla dėl ryšio klaidų. Tai ypač aktualu, kai naudojama grandinės plokštė ir joje yra daug jungčių.

Trečias žingsnis. Arduino eskizas
Kodas yra labai paprastas ir jame yra išsamių komentarų. Aukščiau pateiktą kodą tereikia nukopijuoti į Arduino IDE. Įkėlus kodą, varikliai neturėtų judėti. Jie turėtų pradėti judėti tik paspaudus vairasvirtės mygtuką.


Problemos, kurios gali kilti ir kaip jas spręsti
1. Jei varikliai neįsijungia, reikia dar kartą patikrinti jungtį. PWM išėjimai naudojami varikliams prijungti, o analoginiai – vairasvirtėms.

2. Pasitaiko, kad iškart įkėlus kodą varikliai pradeda vibruoti. Taip atsitinka, jei U / D + L / R + kaiščiai yra prijungti neteisingai. Ryšys turi būti atidžiai patikrintas. Kad bandymo metu plokštė nesudegtų, ją reikia atjungti nuo kompiuterio.

3. Jei viskas dar kartą patikrinta, bet varikliai vis tiek nenori veikti, galite pabandyti vėl prijungti vairasvirtę. Jį reikia išimti iš grandinės plokštės, o po to su tam tikromis pastangomis vėl sumontuoti. Vairasvirtės jungtys turi gerai tilpti į duonos lentą.

Jei viskas pavyko, dabar galite pradėti kurti bet kokius naminius gaminius naudodami vairasvirtę. Pavyzdžiui, galite pagaminti robotą, kurį galima valdyti vairasvirte, ir daug daugiau.