SG90 - Servomoottori

Pienistä servomoottoreista suosituin on SG90 - servomoottori. Se on pienikokoinen ja edullinen. Servomoottori kääntyy noin 180 astetta, 90 astetta molempiin suuntiin. Se on hyvä valinta aloittelijalle. Sen helppoutta lisää se, ettei moottori tarvitse erillistä ohjainkorttia tai vaihteistoa toimiakseen. Kytkentä esimerkiksi Arduinoon onnistuu suoraan kolmella johtimella.  

Kuva 1. Johdotus. Ruskea (GND), punainen (+5V) ja oranssi (PWM eli esim pin 9).

Kuva 2. Dimensiot ja määritykset.

Toimiakseen SG90 kytketään Arduino Unoon kolmella johtimella. Oranssin (PWM) johtimen kanssa täytyy olla tarkkana. Se tulee kytkeä sellaiseen porttiin, jossa digitaaliseen porttiin voidaan antaa erilaisia jännitearvoja (esim. ~9). Muita mahdollisia portteja ovat Arduino Unon PWM - porteista  ~3, ~5, ~6, ~9, ~10 ja ~11. Myös analogisia portteja voidaan käyttää. Punainen johdin kytketään (+5V) porttiin ja ruskea (GND) porttiin.

Kuva 3. Kytkentäkaavio.

Kun SG90 on johdotettu, voidaan siirtyä Arduino Ideen ja koodin pariin. SG90 - servomoottori toimii kaikilla yleisillä servo - kirjastoilla. Tässä esimerkissä käytetään Arduino Iden omaa <Servo.h> - kirjastoa.

#include <Servo.h>
int servoPin = 9;

Servo servo;

int servoAngle = 0;   // servo position in degrees

void setup()
{
 
Serial.begin(9600);
 servo.
attach(servoPin);
}


void loop()
{
 
//control the servo's direction and the position of the motor
 servo.
write(0);      // Turn SG90 servo Left to 0 degrees
 
delay(3000);          // Wait 3 second
 servo.
write(45);      // Turn SG90 servo Left to 45 degrees
 
delay(1000);          // Wait 1 second
 servo.
write(90);      // Turn SG90 servo back to 90 degrees

                        // (center position)
 
delay(1000);          // Wait 1 second
 servo.
write(135);     // Turn SG90 servo Right to 135 degrees
 
delay(1000);          // Wait 1 second
 servo.
write(90);      // Turn SG90 servo back to 90 degrees

                        // (center position)
 
delay(1000);

 
//end control the servo's direction and the position of the motor


 
//control the servo's speed

 
//if you change the delay value (from example change 50 to 10),

  //the speed of the servo changes
 
for (servoAngle = 0; servoAngle < 180; servoAngle++)

  //move the micro servo from 0 degrees to 180 degrees
 {
   servo.
write(servoAngle);
   
delay(50);
 }

 
for (servoAngle = 180; servoAngle > 0; servoAngle--)

  //now move back the micro servo from 0 degrees to 180 degrees
 {
   servo.
write(servoAngle);
   
delay(10);
 }
 
//end control the servo's speed
}

Koodi 1. Servon käyttöä havainnollistava koodi.

Muutamista Arduino valmis paketeista löytyy servomoottorin ja potentiometrin yhdistävä projekti. Tässä se seuraavaksi. Servomoottorilla toteutettu projekti “Servo Mood Indicator”: https://youtu.be/8-w_8izUO38.

Sama koodi löytyy myös Arduino projektit kirjasta: https://philectron.github.io/arduino/2015/11/21/arduino-projects-book-project-05/

Kuva 4. Servo Mood Indicator - projektin kytkentäkaavio.

Kuvassa 4 on projektin kytkentäkaavio. Siniset “tynnyrit” ovat kondensaattoreita. Servomoottori käyttää enemmän virtaa liikkeessä. Tämä aiheuttaa jännitteen laskun Arduino levylle. Asettamalla 100-𝞵F (micro Faradin) -kondensaattorin (+5V):n ja (GND):n yli, voidaan mahdolliset jännitemuutokset tasoittaa. Kytkentä toimii myös ilman kondensaattoreita. Kondensaattorit kytketään (-) - jalka (GND) -puolelle ja (+) - jalka (+5V) puolelle.  

/*
 Arduino Starter Kit example
 Project 5 - Servo Mood Indicator

 This sketch is written to accompany Project 5 in the Arduino Starter Kit

 Parts required:
 - servo motor
 - 10 kilohm potentiometer
 - two 100 uF electrolytic capacitors

 created 13 Sep 2012
 by Scott Fitzgerald

 http://www.arduino.cc/starterKit

 This example code is part of the public domain.
*/


// include the Servo library
#include <Servo.h>

Servo myServo;  // create a servo object

int const potPin = A0; // analog pin used to connect the potentiometer
int potVal;  // variable to read the value from the analog pin
int angle;   // variable to hold the angle for the servo motor

void setup() {
 myServo.
attach(9); // attaches the servo on pin 9 to the servo object
 
Serial.begin(9600); // open a serial connection to your computer
}

void loop() {
 potVal =
analogRead(potPin); // read the value of the potentiometer
 
// print out the value to the Serial Monitor
 
Serial.print("potVal: ");
 
Serial.print(potVal);

 
// scale the numbers from the pot
 angle =
map(potVal, 0, 1023, 0, 179);

 
// print out the angle for the servo motor
 
Serial.print(", angle: ");
 
Serial.println(angle);

 
// set the servo position
 myServo.
write(angle);

 
// wait for the servo to get there
 
delay(15);
}

Koodi 2. Servo Mood Indicator - projektin koodi.

SG90 -servomoottoriin palaamme vielä tuonnempana, kun suunnittelemme robottiautoa. Siellä pikku servolle löytyy luontevasti tärkeitä tehtäviä.