This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| et:arduino:motors:project1 [2017/06/26 12:11] – kaupo.raid | et:arduino:motors:project1 [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Projekt 5 Alalisvoolumootor ja selle kiirus | ||
| + | |||
| + | Antud projekt eeldab, et kasutatakse juba kokku pandud kahe mootoriga roboti komplekti. Mootorite juhtmooduli ühendamisel tuleb jälgida, et sisendsignaalid oleks ühendatud õigetesse Arduino plaadi viikudesse. Vastasel juhul juhtmoodul ei toimi korrektselt. Mootorite juhtmed ühendada juhtmooduli kruviklemmide külge. | ||
| + | Juhtsignaalide juhtmed ühendada Arduino plaadiga järgnevalt: | ||
| + | * Juhtmoodul A-1A -> Arduino D10 | ||
| + | * Juhtmoodul A-1B -> Arduino D12 | ||
| + | * Juhtmoodul B-1A -> Arduino D11 | ||
| + | * Juhtmoodul B-1B -> Arduino D13 | ||
| + | **NB!** Jälgida ühendamisel juhtmooduli toite polaarsust. | ||
| + | |||
| + | {{: | ||
| + | ===== Näide #5.1 Alalisvoolumootor ja H-sild ===== | ||
| + | Mootori juhtimiseks on soovitav eelnevalt uurida H-silla tööpõhimõtet. Tööpõhimõtte tundmine lihtsustab näidetest arusaamist. Kui mõni mootor peaks juhtumisi pöörlema vastupidiselt programmis määratud suunale, siis vahetada omavahel selle mootori juhtmed juhtmooduli küljes.\\ | ||
| + | Programmis alustame ühendusviikude määramisega ning seejärel määrame vastavad viigud ka väljundiks. Mootorite juhtimiseks tekitame juurde funktsiooni // | ||
| + | |||
| + | <code c> | ||
| + | /* Nimetus: Näide #5.1 | ||
| + | Kirjeldus: Alalisvoolumootor ja H-sild | ||
| + | */ | ||
| + | // Mootori viikude määramine juhtmooduli juhtimiseks. | ||
| + | // Mootori liikumissuund sõltub ka mootori ühendamise polaarsusest. | ||
| + | const int vasak_A = 10; // juhtmooduli viik A-1A | ||
| + | const int vasak_B = 12; // juhtmooduli viik A-1B | ||
| + | const int parem_A = 11; // juhtmooduli viik B-1A | ||
| + | const int parem_B = 13; // juhtmooduli viik B-2A | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // Mootori juhtviikude väljundiks seadistamine | ||
| + | pinMode(vasak_A, | ||
| + | pinMode(vasak_B, | ||
| + | pinMode(parem_A, | ||
| + | pinMode(parem_B, | ||
| + | |||
| + | mootorid(0, | ||
| + | delay(2000); | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | | ||
| + | mootorid(1, | ||
| + | delay(2000); | ||
| + | | ||
| + | mootorid(-1, | ||
| + | delay(500); | ||
| + | } | ||
| + | |||
| + | // Funktsioon mootori liikumissuundade määramiseks | ||
| + | void mootorid(int vasak, int parem) | ||
| + | { | ||
| + | // Vasak mootor | ||
| + | if(vasak == 1) | ||
| + | { // Vasak mootor edasi | ||
| + | digitalWrite(vasak_A, | ||
| + | digitalWrite(vasak_B, | ||
| + | } | ||
| + | else if(vasak == -1) | ||
| + | { // Vasak mootor tagasi | ||
| + | digitalWrite(vasak_A, | ||
| + | digitalWrite(vasak_B, | ||
| + | } | ||
| + | else | ||
| + | { // Vasak mootor seisma | ||
| + | digitalWrite(vasak_A, | ||
| + | digitalWrite(vasak_B, | ||
| + | } | ||
| + | |||
| + | // Parem mootor | ||
| + | if(parem == 1) | ||
| + | { // Parem mootor edasi | ||
| + | digitalWrite(parem_A, | ||
| + | digitalWrite(parem_B, | ||
| + | } | ||
| + | else if(parem == -1) | ||
| + | { // Parem mootor tagasi | ||
| + | digitalWrite(parem_A, | ||
| + | digitalWrite(parem_B, | ||
| + | } | ||
| + | else | ||
| + | { // Parem mootor seisma | ||
| + | digitalWrite(parem_A, | ||
| + | digitalWrite(parem_B, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Näide #5.2 Alalisvoolumootori kiirus ===== | ||
| + | Mootori kiiruse juhtimiseks on vaja pulsilaiusmodulatsioon ehk PWM signaali. Tegemist on praktiliselt sama signaali tüübiga, mida kasutasime LED-i ereduse juhtimisel. PWM signaaliga lülitatakse viiku pidevalt kõrgesse ja madalasse olekusse, mis tekitab mootorile toitepingest madalama keskmise pinge. Näiteks toitepinge 5 V ja 50% töötsükliga PWM signaali puhul tekib mootori klemmidele keskmine pinge 2,5 V.\\ | ||
| + | Programmi töö on sarnane näitele #5.1, kus mootoreid juhiti diskreetselt ehk liigub või ei liigu. Antud näites juhime lisaks mootori kiirust ning selleks on vaja kasutada käsku // | ||
| + | |||
| + | <code c> | ||
| + | /* Nimetus: Näide #5.2 Alalisvoolumootori kiiruse reguleerimine | ||
| + | | ||
| + | L9110 mootori juhtmooduli näitel. | ||
| + | */ | ||
| + | // Mootori viikude määramine juhtmooduli juhtimiseks | ||
| + | // Mootori liikumissuund sõltub ka mootori ühendamise polaarsusest | ||
| + | const int vasak_A = 10; // juhtmooduli viik A-1A | ||
| + | const int vasak_B = 12; // juhtmooduli viik A-1B | ||
| + | const int parem_A = 11; // juhtmooduli viik B-1A | ||
| + | const int parem_B = 13; // juhtmooduli viik B-2B | ||
| + | |||
| + | void setup() | ||
| + | { | ||
| + | // Mootori juhtviikude väljundiks seadistamine | ||
| + | pinMode(vasak_A, | ||
| + | pinMode(vasak_B, | ||
| + | pinMode(parem_A, | ||
| + | pinMode(parem_B, | ||
| + | |||
| + | mootorid(0, | ||
| + | delay(2000); | ||
| + | } | ||
| + | void loop() | ||
| + | { | ||
| + | mootorid(100, | ||
| + | delay(2000); | ||
| + | mootorid(100, | ||
| + | delay(2000); | ||
| + | mootorid(-255, | ||
| + | delay(2000); | ||
| + | mootorid(-255, | ||
| + | delay(2000); | ||
| + | mootorid(150, | ||
| + | delay(2000); | ||
| + | } | ||
| + | |||
| + | // Funktsioon mootori liikumissuuna ja kiiruse määramiseks | ||
| + | void mootorid(int vasak, int parem) | ||
| + | { | ||
| + | // Vasak mootor | ||
| + | if(vasak > 0 && vasak <= 255) | ||
| + | { // Vasak mootor otse | ||
| + | analogWrite(vasak_A, | ||
| + | digitalWrite(vasak_B, | ||
| + | } | ||
| + | else if(vasak < 0 && vasak >= -255) | ||
| + | { // Vasak mootor tagurpidi | ||
| + | analogWrite(vasak_A, | ||
| + | digitalWrite(vasak_B, | ||
| + | } | ||
| + | else | ||
| + | { // Vasak mootor seisma | ||
| + | digitalWrite(vasak_A, | ||
| + | digitalWrite(vasak_B, | ||
| + | } | ||
| + | |||
| + | // Parem mootor | ||
| + | if(parem > 0 && parem <= 255) | ||
| + | { // Parem mootor otse | ||
| + | analogWrite(parem_A, | ||
| + | digitalWrite(parem_B, | ||
| + | } | ||
| + | else if(parem < 0 && parem >= -255) | ||
| + | { // Parem mootor tagurpidi | ||
| + | analogWrite(parem_A, | ||
| + | digitalWrite(parem_B, | ||
| + | } | ||
| + | else | ||
| + | { // Parem mootor seisma | ||
| + | digitalWrite(parem_A, | ||
| + | digitalWrite(parem_B, | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Harjutused ===== | ||
| + | |||
| + | ==== Harjutus #5.1 ==== | ||
| + | Modifitseerida näiteprogrammi nii, et robot sõidab kaheksa kujulist trajektoori. | ||
| + | |||
| + | ==== Harjutus #5.2 ==== | ||
| + | Modifitseerida näiteprogrammi nii, et robot teeb iseseisvalt paralleelparkimist ette määratud kohta. | ||