1 of 16

Servo Motor

Tower Pro SG90 Mini Servo Motor

2 of 16

Servo Motor

Tower Pro SG90 Mini Servo Motor

SG90 Servo motor, en çok kullanılan servo motor çeşididir. Mikro Servo motor olarak da geçmektedir.

Servo motorlar düşük devirli(hızlı), yüksek torklu motorlardır. Bundan dolayı robotik uygulamalarda sıklıkla tercih edilmektedir. RC araba, RC uçak, Robot kol, RC gemi vb. birçok kullanım alanına sahiptir.

3 of 16

Servo motor için

Arduino PWM pinlerini kullanmak gerekir.

-TOPRAK (GND)

+5v

PWM pini

4 of 16

SERVO TEST 1 (Servo motorun hareketini gözlemleyelim)

SERVO motor SAĞA-SOLA hareket edecek.

Servo motor için Ardui̇no PWM pinlerini kullanmak gerekir.

#include <Servo.h> //Servo kütüphanemizi ekliyoruz.

int servoPin = 9; //Servoyu takacağımız pin

Servo motor; //Servo motor değişkeni/nesnesi tanımlandı.

void setup() {

motor.attach(servoPin); //Servomuzu 9.pin ile ilişkilendiriyoruz.

}

void loop() {

motor.write(150);

delay(2000);

motor.write(30);

delay(2000);

}

5 of 16

SERVO TEST 2 (Servo motorun yavaş hareket etmesi için)

SERVO motor SAĞA-SOLA hareket edecek.

Servo motorun yavaş hareket etmesi için alttaki kodu eklemeliyiz.

Bu kod satırları ile servo motorumuz

  • 1’er derecelik açı ile,
  • 10’ar milisaniye bekleyerek

dönecektir.

**Siz de bu açı miktarını ve bekleme süresini değiştirebilirsiniz.

//Yavaş hareket olması için

for (int i = 0; i < 40; i++) {

motor.write(i); #Açı 1 er derece artıyor.

delay(10);

}

delay(1000);

for (int i = 40; i > 0; i--) {

motor.write(i); #Açı 1 er derece azalıyor.

delay(10);

}

delay(1000);

6 of 16

Hareket Eden Bayrağımız

Bayrak sağa-sola

servoya bağlı

7 of 16

Hareket Eden Bayrağımız

Bayrak sağa-sola

servoya bağlı

8 of 16

Hareket Eden Gözler

sabit, 1.katman

gözler sağa-sola, 2.katman

servoya bağlı

9 of 16

PIR ve Servo Motor ile proje

10 of 16

11 of 16

12 of 16

KOD

PIR sensörü çalışınca,

LED yanacak ve SERVO motor çalışacak.

Servo motor için Ardui̇no PWM pinlerini kullanmak gerekir.

#include <Servo.h> //Servo kütüphanemizi ekliyoruz.

int led = 8; //LED i takacağımız pin

int pirPin = 11; //Sensörü takacağımız pin

int servoPin = 9; //Servoyu takacağımız pin

int hareket; //Sensörden aldığımız veri

Servo motor; //Servo motor değişkeni

void setup() {

motor.attach(servoPin); //Servomuzu 9. pin ile ilişkilendiriyoruz.

pinMode(pirPin, INPUT); //Sensör pinimizi giriş olarak ayarlıyoruz.

pinMode(led, OUTPUT);

}

void loop() {

hareket = digitalRead(pirPin); //Sensörden okuma yapıyoruz.

if (hareket == HIGH) { //Hareketlilik var ise içerideki komutlar uygulanır.

motor.write(150);

delay(250);

motor.write(30);

delay(250);

motor.write(150);

delay(250);

motor.write(30);

delay(250);

motor.write(150);

delay(250);

motor.write(30);

delay(250);

motor.write(90);

digitalWrite(led, 1);

delay(500);

} else { //Hareketlilik yok ise içerideki komutlar uygulanır.

motor.write(90);

digitalWrite(led, 0);

}

}

13 of 16

KOD

Robot 120 cm den daha yakına gelene

bayrak sallayacak.

Turkuaz boyalı satırlar mesafe ölçümü yapmaktadır.

#include <Servo.h> //Servo kütüphanemizi ekliyoruz.

#define echoPin 6

#define trigPin 7

int servoPin = 10; //Servoyu takacağımız pin

Servo motor; //Servo motor değişkeni

void setup() {

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

motor.attach(servoPin); //Servomuzu 9.pin ile ilişkilendiriyoruz.

}

void loop() {

long bekle, sure, mesafe; //değişkenlerin türünü tanımladık

digitalWrite(trigPin, LOW); // Sensör başlatılıyor

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

sure = pulseIn(echoPin, HIGH); //geçen süre okunuyor

mesafe = sure / 58.2; //mesafe hesaplanıyor, cm olarak

Serial.println(mesafe); //mesafe seri ekrana yazdırılıyor.

delay(50);

//Servo çalıştırma komutları

if (mesafe < 120 ) {

for (int i = 0; i < 40; i++) {

motor.write(i);

delay(11);

}

delay(1000);

for (int i = 40; i > 0; i--) {

motor.write(i);

delay(11);

}

delay(1000);

}

}

14 of 16

2 Servo motor ile basit

robotik kol

15 of 16

2 Servo motor ile basit

robotik kol

3 saniye aralıkla

bardağı tutma ve bırakma hareketini yapacak.

#include <Servo.h> //Servo kütüphanesini ekledik

Servo yavuz; //1.servo (sağ) adı yavuz olsun.

Servo kuzey; //2.servo (sol) adı kuzey olsun.

int servopinSag = 3; //sağ servo pini 3

int servopinSol = 5; //sol servo pini 5

void setup() {

yavuz.attach(servopinSag); //Servo ile pini bağladık

kuzey.attach(servopinSol); //Servo ile pini bağladık

yavuz.write(90); // sağ servonun başlangıç açısı belirlendi

kuzey.write(0); // sol servonun başlangıç açısı belirlendi

}

void loop() {

delay(50);

yavuz.write(85);

kuzey.write(5);

delay(50);

yavuz.write(80);

kuzey.write(10);

delay(50);

yavuz.write(75);

kuzey.write(15);

delay(3000); // robot parmak açıldı. Bardağı bıraktı.

yavuz.write(90);

kuzey.write(0);

delay(3000); // robot parmak kapandı. Bardağı tuttu.

}

16 of 16

2 Servo motor ile basit

Silecek

1 saniye aralıkla sağa-sola

araç sileceği

potansiyometre ile çalışan

#include <Servo.h>

Servo motor1;

Servo motor2;

void setup() {

pinMode(A0, INPUT);

pinMode(8, OUTPUT);

pinMode(9, OUTPUT);

pinMode(3, OUTPUT); //servo 1 sol

pinMode(5, OUTPUT); //servo 2 sağ

motor1.attach(3); //sol

motor2.attach(5); //sağ

Serial.begin(9600);

}

void loop() {

Serial.println(analogRead(A0));

if (analogRead(A0) < 500) {

digitalWrite(8, HIGH);

digitalWrite(9, LOW);

motor1.write(0);

motor2.write(0);

delay(1000);

motor1.write(30);

motor2.write(35);

delay(1000);

}

if (analogRead(A0) > 500) {

digitalWrite(8, LOW);

digitalWrite(9, HIGH);

}

//delay(1000);

}