Stundas uzdevums: Izprast Servo motora darbības principu, pievienot to mikrokontrolierim un uzrakstīt programmu, kas ļauj fiziski kontrolēt motora leņķi, izmantojot potenciometra kloķi.
Datorika 7. klase (D.7.1.1., D.7.4.2., D.7.6.1.)70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un pieraksti, kas strādā. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Priekšzināšanu robeža: uzdevumos izmanto tikai iepriekš apgūto un šīs lapas teorijas/koda piemēros parādīto. Ja parādās jauna komanda vai rīks, vispirms atrod tās paraugu teorijas blokā.
Atšķirībā no parastajiem motoriem (kā ventilatoriem), kas griežas uz riņķi nepārtraukti, Servo motors ir īpašs – tam var pateikt precīzu leņķi (parasti no 0° līdz 180°), un tas turēs šo pozīciju. Tas ir ideāli piemērots robotu rokām, stūres mehānismiem un durvju slēdzenēm.
#include <Servo.h>.Servo mansMotors;.map(vērtība, no_min, no_max, uz_min, uz_max).Tinkercad vidē pievienojiet "Micro Servo" un pareizi savienojiet tā trīs vadus ar Arduino un maketo plati.
Uzrakstiet kodu, kas liek motoram automātiski pagriezties uz 0 grādiem, tad uz 90 grādiem un tad uz 180 grādiem, radot logu tīrītāja efektu.
setup()) pievienojiet bibliotēku: #include <Servo.h> un izveidojiet motoru: Servo mansMotors;setup() pasakiet, pie kura pina motors pieslēgts: mansMotors.attach(9);loop() dodiet komandu pagriezties uz 0 grādiem: mansMotors.write(0); un pagaidiet sekundi: delay(1000);Apvienojiet iepriekšējās stundas zināšanas! Pievienojiet potenciometru un izmantojiet to kā "stūri", lai kontrolētu motora leņķi reāllaikā.
loop() izdzēsiet iepriekšējo kodu. Izveidojiet mainīgo nolasīšanai: int kloķis = analogRead(A0);int lenkis = map(kloķis, 0, 1023, 0, 180);mansMotors.write(lenkis); un pievienojiet īsu delay(15);, lai motors paspēj noreaģēt.Ātrākajām komandām – noņemiet potenciometru un pievienojiet divas spiedpogas. Kreisā poga griež motoru pa kreisi (-10 grādi), labā – pa labi (+10 grādi).
INPUT_PULLUP loģiku pie portiem (piem., 2 un 3).int pozicija = 90; virs setup().pozicija = pozicija - 10; (un obigāti delay(100);, lai nepārlektu pārāk ātri).pozicija = pozicija + 10;.pozicija vērtību uz motoru: mansMotors.write(pozicija);#include <Servo.h>, vai arī uzrakstījāt vārdu "servo" ar mazo burtu. C++ ir ļoti jutīgs pret lielo/mazo burtu lietojumu!loop() beigās pievienot delay(15);. Ja mikrokontrolieris sūta komandas tūkstošiem reižu sekundē, fiziskais motors nespēj tikt līdzi un sāk vibrēt.map? Motors saprot tikai vērtības no 0 līdz 180!
#include <Servo.h> // Pievieno Servo bibliotēku
Servo mansMotors; // Izveido motora objektu
int potPin = A0; // Potenciometra ports
void setup() {
// Pievieno motoru 9. portam
mansMotors.attach(9);
}
void loop() {
// 1. Nolasa potenciometra stāvokli (0 līdz 1023)
int klokaStavoklis = analogRead(potPin);
// 2. Pārveido šos datus leņķu skalā (0 līdz 180)
int motoraLenkis = map(klokaStavoklis, 0, 1023, 0, 180);
// 3. Pasaka motoram fiziski pagriezties uz šo leņķi
mansMotors.write(motoraLenkis);
// 4. Pagaida, lai motors pabeidz kustību
delay(15);
}