Ders 85: Servo Motorlara Giriş | Arduino Adım Adım Kurs
Bu proje rehberi, sürekli dönüşlü servo motorların, diğer adıyla 360 derece servoların dünyasını tanıtır. Belirli bir açıya hareket eden standart servoların aksine (0 ila 180 derece gibi), bu motorlar her iki yönde de sürekli döner. Bu, onları küçük robotlar, tank paletleri veya basit, uygun fiyatlı tahrik motorları gerektiren herhangi bir proje için ideal hale getirir. Bu rehber, bir Arduino ve birkaç buton kullanarak bunlardan birini nasıl kontrol edeceğinizi gösterir ve yönü ile hızı üzerinde uygulamalı kontrol sağlar.
360 derece servo için birkaç pratik uygulama şunlardır:
- Küçük iki tekerlekli bir robot araba yapmak.
- Sonsuz dönen bir pan-tilt kamera montajı oluşturmak.
- Küçük bir konveyör bandı veya vincin sürülmesi.
- Basit bir radar veya sensör tarama platformu yapmak.

Donanım ve Bileşenler
Bu proje için aşağıdaki bileşenlere ihtiyacınız olacak:
- Arduino kartı (örn. Uno)
- Sürekli dönüşlü servo motor (örn. FS90R veya benzeri)
- Üç adet buton
- Jumper kablolar
- Breadboard (isteğe bağlı, daha kolay bağlantı için)
Bağlantı Rehberi
Bu projenin bağlantısı basittir. Servo motorun üç kablosu vardır: genellikle kahverengi (toprak), kırmızı (güç) ve turuncu veya sarı (sinyal). Butonlar basit bir konfigürasyonda bağlanır.
Bağlantıların dökümü aşağıda verilmiştir:
- Servo Motor:
- Kahverengi kablo (Toprak) Arduino'nun GND pinine bağlanır.
- Kırmızı kablo (Güç) Arduino'nun 5V pinine bağlanır.
- Turuncu/Sarı kablo (Sinyal) Arduino pin 9'a bağlanır.
- Butonlar:
- Her butonun bir tarafı Arduino'nun GND pinine bağlanır.
- "Saat Yönünün Tersi" butonunun diğer tarafı pin 2'ye bağlanır.
- "Durdur" butonunun diğer tarafı pin 3'e bağlanır.
- "Saat Yönü" butonunun diğer tarafı pin 4'e bağlanır.
Videoda, yaratıcı, servonun sinyal kablosunun Arduino üzerinde genellikle tilde (~) sembolü ile işaretlenen PWM destekli bir pine bağlanması gerektiğini vurgular. Pin 9 bu pinlerden biridir. Butonlar, harici direnç ihtiyacını ortadan kaldırarak bağlantıyı basitleştiren Arduino'nun dahili pull-up dirençlerini kullanır (videoda 07:02'de).
Kod Açıklaması
Kod, üç butonun durumunu okumak ve servo motora karşılık gelen komutu göndermek için tasarlanmıştır. Kullanıcı tarafından yapılandırılabilir kısımları inceleyelim.
Pinleri ve Komutları Yapılandırma
Kodun başında, pinler ve servo kontrol değerleri için tanımlamaları bulacaksınız. Projenizin davranışını özelleştirebileceğiniz yer burasıdır.
const int servoPin = 9; // Servo sinyali için PWM pini
const int stopPin = 3; // Durdur butonu için pin
const int cwPin = 4; // Saat yönü butonu için pin
const int ccwPin = 2; // Saat yönünün tersi butonu için pin
Bu sabitler, butonlara ve servoya hangi Arduino pinlerinin bağlı olduğunu tanımlar. Butonlarınız için farklı pinler kullanıyorsanız, buradaki sayıları değiştirirsiniz. servoPin PWM destekli bir pin olmalıdır.
const int csServoCommand[3] = {106, 52, 0}; // {CCW, STOP, CW}
const String csServoCommandText[3] = {"Saat Yönünün Tersi", "Durduruldu", "Saat Yönü"};
Bu, anlaşılması ve ayarlanması gereken en önemli kısımdır. csServoCommand dizisi servoya gönderilen değerleri tutar. Sürekli bir servo için bu değerler bir açıyı değil, bir hızı ve yönü temsil eder.
- 106 tam hızda Saat Yönünün Tersi dönüş değeridir.
- 52 tam durma değeridir.
- 0 tam hızda Saat Yönü dönüş değeridir.
Bu değerler evrensel değildir. Üretim farklılıkları nedeniyle, "durma" değeri (52) ayarlanması gerekebilir. Durdur butonuna bastığınızda servonuz yavaşça sürükleniyorsa, bu değeri ince ayar yapmanız gerekecektir. Video bu süreci gösterir ve değeri 54 veya 51 olarak değiştirmenin motor davranışını nasıl etkileyebileceğini açıklar (videoda 13:45'te).
Ayrıca motorun hızını değiştirmek için dönüş değerlerini de ayarlayabilirsiniz. Örneğin, saat yönünün tersi değerini 70 olarak ayarlamak, 106'dan daha yavaş dönmesini sağlar (videoda 12:23'te).
csServoCommandText dizisi, geçerli komut durumunu göstermek için Seri Monitöre yazdırılan metin dizelerini tutar.
Özel Fonksiyon: servoCommand()
Kod, komut mantığını işlemek için özel bir fonksiyon kullanır. Bu fonksiyon bir sayıyı (0, 1 veya 2) argüman olarak alır, durum metnini günceller ve servoya karşılık gelen komutu gönderir.
void servoCommand(int n) {
statusText = csServoCommandText[n];
myservo.write(csServoCommand[n]);
Serial.println(csServoCommandText[n]);
Serial.println(csServoCommand[n]);
}
Bu fonksiyon, bir butona basıldığında ana döngüden çağrılır. Ekranı güncelleme ve servoyu kontrol etme mantığını merkezileştirir, böylece kodu daha temiz ve değiştirilmesi daha kolay hale getirir.
Canlı Proje ve Gösterim
Videoda, yaratıcı projeyi çalışırken gösterir. "Saat Yönü" butonuna basmak servoya 0 değerini gönderir ve bir yönde dönmesine neden olur. "Saat Yönünün Tersi" butonuna basmak 106 değerini gönderir ve diğer yönde dönmesini sağlar. "Durdur" butonu 52 gönderir ve motoru durdurmalıdır.
Seri Monitör, servo motoruna gönderilen mevcut durumu ve tam değeri görüntülemek için kullanılır. Bu, hata ayıklama ve motorunuza özel mükemmel "durma" değerini bulmak için çok değerlidir. Videoda da belirtildiği gibi, servo motorun iç devresi nedeniyle durma komutu tam olarak mükemmel olmayabilir ve yavaş bir kayma veya titreşim görebilirsiniz. Bu, daha ucuz sürekli dönüşlü servo motorların yaygın bir özelliğidir ve kod içindeki durma değeri ayarlanarak en aza indirilebilir (videoda 01:15'te).
Bölümler
- [00:05] 360 derece servo motoruna giriş
- [02:02] Bileşenler ve donanım genel bakışı
- [02:40] Ayrıntılı bağlantı şeması ve bağlantılar
- [05:07] Kod açıklaması: sabitler, diziler ve kurulum
- [09:56] Kod açıklaması: servoCommand fonksiyonu
- [10:54] Canlı gösterim ve Seri Monitör çıktısı
- [12:23] Servo hızı ve durma değerlerinin ayarlanması
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("received: ");
Serial.print (incomingByte);
if(incomingByte == 108){
Serial.println(" sent 0 Rotating CW ");
myservo.write(0);
}else if(incomingByte == 114){
Serial.println(" sent 180 Rotating CCW ");
myservo.write(180);
}else if(incomingByte == 60){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Randomly");
myservo.write(incomingByte);
}
}
}
/*
*
* Demonstration of Controlling Continuous Servo (360 servo)
360 Servo -2
* This code allows you to control a 360-degree servo by a command from the Serial Monitor.
* this 350 servo motor is a just for fun. it can't be used for real application where you need exact positioning. get stepper motor or expensive servo motor.
📚⬇️ Download and resource page https://robojax.com/RJT762
*
* Modified by Ahmad Shamshiri for Robojax.com
* on Sunday, July 1, 2018, at 11:09 AM in Ajax, Ontario, Canada
* Watch a video instruction of this project: https://youtu.be/b_xvu6wWafA
* Get this code from Robojax.com
*
Original code by BARRAGAN <http://barraganstudio.com>
This example code is in the public domain.
Modified 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Sweep
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int servoPin = 9;// this pin must be of those with PWM ~
int pos = 0; // variable to store the servo position
int incomingByte = 0; // for incoming serial data
int CWBS, CCWBS, SBS;
void setup() {
Serial.begin(9600);
pinMode(2,INPUT_PULLUP);// set pin for push button STOP
pinMode(3,INPUT_PULLUP);// set pin for push button CCW
pinMode(4,INPUT_PULLUP);// set pin for push button CW
myservo.attach(servoPin); // attaches the servo on pin 9 to the servo object
}
void loop() {
CCWBS = digitalRead(2);// read status of button CCW
SBS = digitalRead(3);// read status of button STOP
CWBS = digitalRead(4);// read status of button CW
if(CCWBS == LOW){
Serial.println(" sent 0 Rotaing CW ");
myservo.write(0);
}else if(CWBS == LOW){
Serial.println(" sent 180 Rotaing CCW ");
myservo.write(180);
}else if(SBS == LOW){
Serial.println(" sent Stopped ");
myservo.write(60);
}else{
Serial.println(" moving Random");
myservo.write(48);
}
}// loop
İhtiyacın olabileceğini düşünüyor
-
Amazon360 Degree Servo motor on Amazonlink.amazon
-
Amazon
-
eBay360 Degree Servo motor on eBayebay.us
-
AliExpress360 Degree Servo motor on AliExpresss.click.aliexpress.com
-
AliExpress360 Degree Servo motor on AliExpress-2s.click.aliexpress.com
Kaynaklar ve referanslar
Dosyalar📁
Diğer dosyalar
-
SG90 Seroo motor veri sayfası
robojax-servo-SG90_datasheet.pdf0.12 MB