====== Projektas Nr. 8. Vienas servo mechanizmas ====== **Ką darome?** Sukti motorą yra smagu, tačiau kai ateina metas daryti projektus, kur yra reikalinga judesio kontrolė, mums reikia kažko kito. Kas gi tai galėtų būti? Ogi servo varikliai, arba tiesiog liaudiškai vadinama "servas". Jie yra masiškai gaminami, plačiai aptinkami ir kainuoja nuo kelių iki kelių šimtų dolerių.Viduje yra nedidelė pavarų dėžė, tam kad būtų stipresnis judesys, ir šiek tiek elektronikos, tam kad būtų lengviau kontroliuoti. Standartinė servo padėtis gali būti nuo 0 iki 180 laipsnių. Padėties kitimas yra kontroliuojamas per impulsą, pasikartojanti kas kažkiek laiko, tarp 1.25 milisekundės (0 laipsnių) ir 1.75 milisekundės (180 laipsnių) (1.5 milisekundės atitinka 90 laipsnių). Laikas skiriasi tarp skirtingų gamintojų. Jei pulsas yra siunčiamas kas 25-50 milisekundžių, servo mechanizmas veiks sklandžiai. Vienas iš didžiausių „Arduino“ pliusų yra tai, kad „Arduino“ turi programinės įrangos biblioteką, kuri leidžia kontroliuoti dvi servas(prijungtas į 9 ir 10 jungtis) viena kodo eilute. **Grandinės dalys** * CIRC-04 Plokštė x1 * 2 Jungtys x4 * 3 Jungtys x1 * Mini servas x1 * Laidai **Grandininė schema** {{:arduwork1.jpg?300|}} **Grandinės šablonas** {{:ardu_pro68.jpg?300}} **Surinkta grandinė** {{:ardu_pro69.jpg?600|}} **Šaltiniai** [[http://ardx.org/BBLS03|Plokštės maketas]] [[http://ardx.org/VIDE04|Surinkimo video]] **Kodas** File > Examples > Servo > Sweep (pavyzdys iš [[arduino.cc|]] tinklalapio, pažiūrėk daugiau gerų idėjų) // Sweep // by BARRAGAN #include Servo myservo; // sukuria servo objektą kontroliuoti servo mechanizmui // max 9 servo objektai gali būti sukurti int pos = 0; // kintamasis servos pozicijai void setup() { myservo.attach(9); // prijungia servo mechanizmą 9 jungtyje prie servo objekto } void loop() { for(pos = 0; pos < 180; pos+=1) // sukasi nuo 0 iki 180 laipsnių { // palengva, po 1 laipsnį myservo.write(pos); // liepia servai suktis į kintamojo "pos" poziciją delay(15); // palaukia 15ms pasiekti pozicijai } for(pos = 180; pos>=1; pos-=1) // sukasi nuo 180 iki 0 laipsnių { myservo.write(pos); // liepia servai suktis į kintamojo "pos" poziciją delay(15); // palaukia 15ms pasiekti pozicijai } } **Neveikia?** (trys dalykai kuriuos galime padaryti) **Nesisuka?** Pažiūrėk, ar servo mechanizmas įjungtas teisinga puse. **Vis dar neveikia?** Patikrink ar prijungei į maitinimą. **Fits and Starts** Jei servas pradeda suktis, tačiau trūkčioja ir mirksi lemputė ant https://www.dropbox.com/sh/odq6i9nvq00vrja/AADuT-Uocgv5tiQg5496ybJ4a/Rinkinys%20-%20ARDUINO?dl=0 plokštės, reiškia energijos šaltinis yra per silpnas. Naudojant šviežią bateriją vietoj USB turėtų išspręsti problemą. **Nori dar?** **Potenciometro Kontrolė:** Eik čia: File > Library-Servo > Knob. Tai naudoja potenciometrą (CIRC08) kontroliuoti servo mechanizmui. Instrukcijas gali rasti čia: [[http://ardx.org/KNOB]] **Laiko kontroliavimas:** Nesunku servą valdyti naudojant „Arduino“ biblioteką, tačiau pabandykime "suprogramuoti" kažką patys. Mes kontroliuojame impulsus tiesiogiai , taigi šis metodas tinka kontroliuot servo mechanizmams bet kurioje iš 20 „Arduino“ jungčių (reiktų gerai optimizuoti kodą prieš tai darant). int servoPin = 9; void setup() { pinMode(servoPin,OUTPUT); } void loop() { int pulseTime = 2100; //(pauzės laikas mikrosekundėmis (1500 90 laipsnių // 900 0 laipsnių 2100 180 laipsnių) digitalWrite(servoPin, HIGH); delayMicroseconds(pulseTime); digitalWrite(servoPin, LOW); delay(25); } **Puikios idėjos:** Štai kelios puikios idėjos, kaip galima panaudoti servo mechanizmus: Kalėdinis smūgių skaičiuotuvas [[http://ardx.org/XMAS]] Atviro kodo robotinė ranka [[http://ardx.org/RARM]] Vaikščiojantis robotas [[http://ardx.org/SEWA]] [[projektas_nr.9|Kitas projektas. Muzikos kūrimas Pjezo signalizatoriumi.]] [[arduivadas_projektai|Atgal į projektus]]