Tehtävä
Tee ohjelma joka liikuttaa servon ääriasennosta toiseen yhden sekunnin viiveellä. Kopioi alla oleva koodi, mutta kirjoita itse loop-metodin kaksi viimeistä riviä.
Tähän mennessä olemme hyödyntäneet kytkiminä erilaisia mekanismeja, joilla laitteen voi laitteita päälle tai pois päältä. Ulostulona olemme kuitenkin käyttäneet melkein pelkästään ledejä. Mitä muuta kuin valoa kytkimillä voisi kontrolloida?
Tässä harjoituksessa pääset tuottamaan liikettä servomoottorin avulla. Servoihin perehdytään enemmän viidennessä luvussa “Liike”, mutta saat tässä harjoituksessa hieman esimakua niiden käytöstä.
Alla olevassa videossa on tehty robottikäsi neljän 180-asteen servomoottorin avulla. Minkälaisen servoprojektin sinä haluaisit tehdä?
Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.
Osa | Kuva | Kuvaus |
---|---|---|
180-asteen servo-moottori | Ottaa asennon välillä 0-180 astetta riippuen syötetystä arvosta. Servossa on kolme johdinta, jotka kytketään piikkiriman avulla digitaaliseen porttiin, 5 voltin jännitteeseen ja maahan. Huom: Maker Kitin servo on väriltään sininen! | |
Piikkirima | Voit taittaa piikkirimasta kolmen piikin palasen irti ja liittää sen servon johtimien päähän. Näin saat kiinnitettyä servon koekytkentälevyyn. HUOM! Mustaa muoviosaa voi painaa keskemmälle! | |
Painonappi | Mehackit Maker Kitin painonappi on valkoinen, ei ruskea. |
Kun nappia klikataan, servon viisari kääntyy viisi pykälää edemmäksi. Kun arvo on 180, servo palaa takaisin lähtötilaan. Tarvittavat komennot
Tutut komennot
Uudet komennot
Servon liikuttaminen vaatii joukon omia komentoja. Näihin ehditään perehtyä tarkemmin myöhemmissä luvuissa! Alkuun pääsee seuraavalla komennolla:
#include <Servo.h> //Lisätään ohjelmaan Servo-kirjasto.
Servo myServo; //Luodaan Servo-tyypin muuttuja nimeltä "myServo"
void setup() {
myServo.attach(6); //Kerrotaan ohjelmalle, että servo on
//kiinnitetty porttiin 6.
}
void loop(){
myServo.write(0);
delay(1000);
// Aseta servo toiseen ääriasentoon (180).
// Odota yksi sekunti.
}
#include <Servo.h>
// Luo muuttuja buttonState ja aseta sen alkuarvoksi 0
// Luo muuttuja lastButtonState ja aseta sen alkuarvoksi 0
// Luo muuttuja kulma ja aseta sen alkuarvoksi 0
Servo myServo;
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(6, OUTPUT);
myServo.attach(6);
Serial.begin(9600);
}
void loop(){
buttonState = digitalRead(2);
// Jos buttonState on erisuuri kuin lastButtonState ja jos buttonState on HIGH, lisää muuttujaan kulma arvo 5.
myServo.write(kulma);
if(kulma >= 180){
kulma = 0;
}
lastButtonState = buttonState;
Serial.println(kulma);
}
Tutustu alempaa löytyvään ohjelmaan. Ohjelma on samantapainen kuin edellisellä sivulla kirjoittamasi ohjelma, mutta nyt servo ottaa sattumanvaraisen asennon, kun nappia klikataan. Tähän on käytetty yhtä uutta komentoa:
#include <Servo.h>
int buttonState = 0;
int lastButtonState = 0;
int kulma = 0;
Servo myServo;
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(6, OUTPUT);
myServo.attach(6);
Serial.begin(9600);
}
void loop(){
buttonState = digitalRead(2);
if(buttonState != lastButtonState){
if(buttonState == LOW){
kulma = random(0, 180); //Arvotaan luku väliltä 0-180 ja tallennetaan se muuttujaan kulma
myServo.write(kulma);
}
}
lastButtonState = buttonState;
Serial.println(kulma);
}