Projektas #5: Valdykite 2 vykdomuosius variklius 1 vairasvirte (5º žingsniais)
Sukonstruokite ir užprogramuokite grandin?, kad 2 vykdom?j? varikli? pad?ties valdymui, naudotum?te tik 1 vairasvirt?.
Atminkite, kad vairasvirt?je yra 2 potenciometrai, tod?l kiekvienas potenciometras bus susietas su skirtingu vykdomuoju varikliu. Judindami vairasvirt? aukštyn ir žemyn valdysite vien? vykdom?j? varikl?, o judindami vairasvirte ? kair? ir ? dešin?, valdysite kit? vykdom?j? varikl?.
SUD?TINGUMO LYGIS: Vidutinis.
PRATIMO TRUKM?: 30 min.
MEDŽIAGOS:
- 1 Vairasvirt?
- 2 Vykdomieji varikliai
- 1 „Build & Code UNO“ plokšt?
- 1 „Build&Code“ jutiklio apsauga
- 1 USB - USB B tipo kabelis
- Kompiuteris
JUNGTYS:
- 1. Prijunkite vairasvirt? prie „Build & Code 4in1“ plokšt?s analogini? jung?i? A0 ir A1.
Prijungimai prie analogin?s jungties A0:- Prijunkite ?ŽEMINIM? (GND) prie G kontakto.
- Prijunkite Vcc prie V kontakto.
- Prijunkite VRx prie S kontakto.
Prijungimai prie analogin?s jungties A1:
- Prijunkite VRy prie S kontakto.
Kaip ir prisimenate, prijung?me vairasvirt? prie analogini? jung?i? A0 ir A1, nes joje yra du potenciometrai, kurie yra analoginiai jutikliai.
- 2. Prijunkite vykdomuosius variklius prie „Build & Code 4in1“ plokšt?s.
- Prijunkite vykdom?j? varikl? S1 prie skaitmenin?s jungties 6. Prijunkite rud? kabel? prie G kontakto, raudon? kabel? prie V kontakto, o oranžin? kabel? prie S kontakto.
- Prijunkite vykdom?j? varikl? S2 prie skaitmenin?s jungties 9. Prijunkite rud? kabel? prie G kontakto, raudon? kabel? prie V kontakto, o oranžin? kabel? prie S kontakto.
Prijung?me vykdomuosius variklius prie skaitmenini? jung?i? 6 ir 9, nes jie turi PPM išvest?. Ši išvestis bus atsakinga už vykdomojo variklio sukim?si, kuris daugiau ar mažiau priklausys nuo iš vairasvirt?s gaut? ver?i?.
- 3. Toliau pateiktame paveiksl?lyje parodytos jungtys. Remkit?s juo kaip vadovu.
PROGRAMOS KODAS
Galite atlikti š? projekt? naudodami „Arduino“ program? arba suderinam? vaizdin? programavimo programin? ?rang?, naudojan?i? blokus. Toliau pateikiamas reikiamas kodas.
„Arduino“ kodas
Sukursite program?, kuri nuolat nuskaitys informacij? iš 2 vairasvirt?s išves?i? ir remiantis iš vairasvirt?s gautomis vert?mis kreips vykdomuosius variklius viena ar kita kryptimi 5º žingsniais. Tokiu atveju vairasvirt? atleidus, vykdomasis variklis pasiliks toje pad?tyje.
Prieš prad?dami, atminkite, kad:
- Potenciometras yra analoginis jutiklis, tod?l jo rodmenys bus nuo 0 iki 1023, priklausomai nuo to, kiek j? pasuksite
- Skaitmeniniai PPM kontaktai veiks kaip išvesties kontaktai, ta?iau vietoj nuolat siun?iamos aukštos arba žemos vert?s, jie gal?s atlikti labai greitus pakeitimus, kad gal?t? pasi?sti tarpines vertes. Tai leis išsi?sti skirtingo lygio išvesties ?tamp?.
- Nor?dami naudoti vykdomuosius variklius, naudosite vykdom?j? varikli? bibliotek? „#include“, nes ji supaprastins vis? proces?.
- Vykdomasis variklis gali pasisukti nuo 0º iki 180º, tod?l tur?site susieti analogines skaitymo vertes su vykdomojo variklio jud?jimo vert?mis, naudodami „žem?lapio“ instrukcijas.
- Nor?dami, kad vykdomasis variklis pasisukt? ? vien? arba kit? pad?t?, naudokite s?lygin? nurodym? „if/else“.
- Jei vairasvirt?s nuskaitoma vert? X arba Y ašyse yra didesn? nei 550, vairasvirt? judinate ? priek?, tod?l ši? pad?t? tur?site susieti su teigiamu vykdomojo variklio jud?jimu. Tai reiškia, kad vykdomojo variklio pad?tis padid?s 5º.
- Jei vairasvirt?s nuskaitoma vert? X arba Y ašyse yra mažesn? nei 480, vairasvirt? judinate atgal, tod?l ši? pad?t? tur?site susieti su neigiamu vykdomojo variklio jud?jimu. Tai reiškia, kad j?s mažinsite dabartin? vykdomojo variklio pad?t? 5º.
- Jei vykdomojo variklio nuskaitoma vert? yra nuo 480 iki 550, reiškia, kad j?s nejudinate vairasvirt?s. Tokiu atveju jums nereikia keisti laipsnio kintamojo, kuris kei?ia vykdomojo variklio pad?t?.
Dabar atlikite šiuos veiksmus:
- Parsisi?skite ir ?diekite „Arduino IDE“ program?. Ji si?loma „Windows“, „Mac OS“ ir „Linux“.
- Sukonfig?ruokite ir ?kelkite kod? vadovaudamiesi instrukcijomis pateiktomis „Arm Robot“ roboto rankos pirm?j? veiksm? vadove.
- Paleiskite „Arduino“ program? ir nukopijuokite ? j? toliau pateikt? kod?:
#include <Servo.h> int valueX = 0; // X-AXIS READINGS int valueY = 0; // Y-AXIS READINGS int pinJX = A0; // X-AXIS ANALOG PIN A0 int pinJY = A1; // Y-AXIS ANALOG PIN A1 Servo motor1; // DECLARE SERVO 1 Servo motor2; // DECLARE SERVO 2 int degree1 = 0; // DEL SERVO 1 DEGREES int degree2 = 0; // DEL SERVO 2 DEGREES void setup() { Serial.begin(9600); // ACTIVATE THE COMMUNICATION WITH THE BUILD&CODE UNO motor1.attach (9); // PWM DIGITAL PIN 9 WHERE THE SERVO 1 IS CONNECTED motor1.write (0); motor2.attach (10); // PWM DIGITAL PIN 10 WHERE THE SERVO 2 IS CONNECTED motor2.write (0); } void loop() { valueX = analogRead ( pinJX); // A0 ANALOG PORT READING OF THE X-AXIS valueY = analogRead ( pinJY); // A1 ANALOG PORT READING OF THE Y-AXIS // INCREASE MOTOR1 DEGREES if ( (valueX > 550 ) && (valueX <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550 { degree1 = degree1 + 1; } // DECREASE MOTOR1 DEGREES if ( (valueX >= 0 ) && (valueX < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480 { degree1 = degree1 - 1; } else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK { degree1 = degree1; } // INCREASE MOTOR 2 DEGREES if ( (valueY > 550 ) && (valueY <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550 { degree2 = degree2 + 1; } // DECREASE MOTOR 2 DEGREES if ( (valueY >= 0 ) && (valueY < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480 { degree2 = degree2 - 1; } else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK { degree2 = degree2; } motor1.write (degree1); // SEND THE DEGREES TO SERVO 1 motor2.write (degree2); // SEND THE DEGREES TO SERVO 2 delay (500); // PRINT ON THE SCREEN THE VALUES WHICH YOU ARE WORKING WITH Serial.print (valueX); // PRINT ON SCREEN X-AXIS VALUES FROM 0 TO 1023 Serial.print("\t"); Serial.print (valueY); // PRINT ON SCREEN Y-AXIS VALUES FROM 0 TO 1023 Serial.print("\t"); Serial.print (degree1); // PRINT ON SCREEN THE SERVO1 DEGREES VALUE FROM 0 TO 1023 Serial.print("\t"); Serial.println (degree2); // DISPLAY ON SCREEN THE SERVO2 DEGREE VALUE FROM 0 TO 180 }
Kodas vaizdinio programavimo programinei ?rangai naudojan?iai blokus
- Parsisi?skite ir ?diekite program?
- Nor?dami sukurti š? kod?, naudosite kintamuosius. Kintamieji yra blokai, kuriems j?s suteiksite vard?. Šiame bloke j?s išsaugosite vertes.
- Kintamieji blokai yra „Duomenys“ ir „Blokai“. Nor?dami sukurti kintam?j?, spustel?kite „Sukurti kintam?j?“, pavadinkite kintam?j? ir jums bus pateikti kintamajam skirti blokai.
- J?s? sukurti kintamieji yra vadinami „DEGREE1“ ir „DEGREE2“. Jiems bus suteikiamos laipsni? vert?s iš 1 ir 2 vykdom?j? varikli?, kuri? pad?tis kis atsižvelgiant ? vairasvirt?s jud?jim?.
- Paleiskite program? ir nukopijuokite toliau pateikt? kod?:
- Sukonfig?ruokite program?, kad išsaugotum?te kod? „Build & Code UNO“ plokšt?je. Instrukcijos pateikiamos „Arm Robot“ roboto rankos vadovo pirmuosiuose veiksmuose.
PRATIMO REZULTATAS:
Programa nuolat nuskaitys informacij? iš dviej? vairasvirt?s išves?i?: VRx ir VRy.
Jei vert? padid?ja iki daugiau nei 550, vykdom?j? varikli? pad?tis did?s 5°, o jeigu vert? sumaž?s iki mažiau nei 480, vykdom?j? varikli? pad?tis maž?s po 5°, kol atitinkamai pasieks didžiausi? arba mažiausi? vertes: 180º ir 0º.
Vairasvirt?s ver?i? did?jimas ir maž?jimas atitinka judes? pirmyn, atgal, kair?n ir dešin?n. Jei vairasvirt? nejuda, vykdomasis variklis išlieka paskutin?je pad?tyje.