Tavs šīs stundas izaicinājums: 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.)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);
}