Search Code

Ders 89: Sürekli veya 360 Servo Motor Kullanımı| Arduino Adım Adım Kurs

Ders 89: Sürekli veya 360 Servo Motor Kullanımı| Arduino Adım Adım Kurs

Hiç standart bir servo gibi sadece ileri geri süpürme yapmak yerine, bir motoru istediğiniz kadar her iki yönde de döndürmek istediniz mi? Sürekli veya 360 derecelik bir servo motorun sunduğu şey tam olarak budur. Belirli bir açıya hareket eden (genellikle 0 ila 180 derece) standart bir servonun aksine, sürekli bir servo saat yönünde veya saat yönünün tersine sonsuz bir şekilde döner. Bu, onu küçük robotlar, kamera platformları veya sürekli dönüş kontrolü gerektiren herhangi bir proje için mükemmel kılar.

Bu projede, yalnızca üç buton kullanarak 360 derecelik bir servo için bir kontrol sistemi kuracağız. Servoya saat yönünde, saat yönünün tersine dönmesini veya istediğiniz anda durmasını komut edebileceksiniz. Bu kılavuz, kablolamada size yol gösterecek, kodun kullanıcı tarafından yapılandırılabilir bölümlerini açıklayacak ve sistemin çalışırken canlı bir gösterimini gösterecektir.

Kendi projelerinizde sürekli bir servo kullanmak için birkaç pratik fikir:

  • Küçük iki tekerlekli bir robot yapın: Tekerlekleri sürmek için iki sürekli servo kullanarak ileri, geri ve dönüş hareketlerine izin verin.
  • Pan-tilt kamera montajı oluşturun: Güvenlik veya yaban hayatı kamerasının yavaş, sonsuz bir şekilde dönmesi için bir sürekli servo kullanın.
  • Bir konveyör bandı otomatikleştirin: Öğeleri ayıklamak veya dağıtmak için küçük bir konveyör sistemini kontrol edin.
  • Dönen bir sergi standı tasarlayın: Sürekli dönen bir platformda 3D model veya ürün sergileyin.

Gerekli Donanım

  • Arduino kartı (Uno, Nano vb.)
  • Sürekli (360 derece) servo motor (örn. FS90R, DS04-NFC)
  • 3x Buton
  • Jumper kablolar
  • Breadboard

Kablolama Kılavuzu

Bu projenin kablolaması basittir. Servo motorun üç kablosu vardır: genellikle toprak (GND) için koyu renkli bir kablo, güç (5V) için orta kablo (genellikle kırmızı) ve sinyal için daha açık renkli bir kablo (turuncu, sarı veya beyaz). Videoda gösterildiği gibi, servo Arduino'ya şu şekilde bağlanır:

  • Servo Toprak (koyu kablo): Arduino GND'ye bağlayın.
  • Servo Güç (orta/kırmızı kablo): Arduino 5V'a bağlayın.
  • Servo Sinyal (açık kablo): Arduino pin 9'a bağlayın.

Üç buton için, her butonun iki tarafı vardır. Tüm butonların bir tarafı birbirine bağlanır ve ardından Arduino GND'ye bağlanır. Her butonun diğer tarafı, aşağıda açıklandığı gibi ayrı bir dijital pine bağlanır (videoda 03:40'ta):

  • Saat yönünde (CW) butonu: Arduino pin 2'ye bağlayın.
  • Durdur butonu: Arduino pin 3'e bağlayın.
  • Saat yönünün tersine (CCW) butonu: Arduino pin 4'e bağlayın.
360_Serrvo_3_push_button_wiring

Kod Açıklaması

Kod, kolayca yapılandırılabilir olacak şekilde tasarlanmıştır. Ayarlamanız gereken en önemli kısım, servoya eylemlerini kontrol etmek için gönderilen belirli PWM değerlerini tutan sc[] dizisidir. Bu değerler evrensel değildir ve belirli servo motorunuz için kalibre edilmelidir (videoda 12:23'te).

int sc[]={106, 58, 0};// servo komutları sırayla
        //CCW, STOP,CW

Bu dizi, kalibrasyonun kalbidir. Değerler şu sırayla kullanılır:

  • sc[0] = 106: Bu değer, servonun saat yönünün tersine dönmesini sağlamak için gönderilir.
  • sc[1] = 58: Bu "dur" değeridir. Dahili devre nedeniyle, motoru durduran tam değer değişir. Servonuzun bu komut gönderildiğinde bile yavaşça döndüğünü görebilirsiniz ve motorunuz için gerçek "tam durma" değerini bulmak için bu sayıyı hafifçe ayarlamanız gerekecektir.
  • sc[2] = 0: Bu değer, servonun maksimum hızda saat yönünde dönmesini sağlar.

Dönüş hızını değiştirmek için sc[] dizisindeki değerleri ayarlayabilirsiniz. Örneğin, sc[0] değerini 70'e ayarlamak saat yönünün tersine dönüşü yavaşlatacaktır. Bir değer "dur" değerine (58) ne kadar yakınsa, motor o yönde o kadar yavaş döner. 58'den uzak değerler, hızı maksimum sınıra kadar artıracaktır.

Ayrıca değiştirmeniz gerekebilecek birkaç önemli değişken daha vardır. servoPin 9 olarak ayarlanmıştır ve Arduino'nuzda PWM destekli bir pin olmalıdır. Buton pinleri kodun başında tanımlanmıştır ve gerekirse değiştirilebilir.

int servoPin = 9;// bu pin PWM ~ olanlardan biri olmalıdır

#define STOPpin 3 // DUR buton pini
#define CWpin 2 //  CW buton pini
#define CCWpin 4 // CCW buton pini

Son olarak, scText[] dizisi, hata ayıklama için Seri Monitöre yazdırılan dizeleri tutar. Farklı mesajlar görüntülemek isterseniz bunları değiştirebilirsiniz.

Kod Nasıl Kullanılır

Sağlanan kodu Arduino kartınıza yükleyin. Durum mesajlarını görmek için Seri Monitörü açın (9600 baud'a ayarlı). Artık servoyu üç buton kullanarak kontrol edebilirsiniz:

  • CW butonuna basılı tutun: Servo saat yönünde dönmeye başlayacaktır. Seri Monitör "CW" ve gönderilen değeri görüntüleyecektir.
  • CCW butonuna basılı tutun: Servo saat yönünün tersine dönmeye başlayacaktır. Seri Monitör "CCW" ve gönderilen değeri görüntüleyecektir.
  • Durdur butonuna basın: Servo durmaya çalışacaktır. Seri Monitör "Stop" görüntüleyecektir.

Servonuz, Durdur düğmesine basıldığında tamamen durmuyorsa, sc[] dizisindeki sc[1] değerini kalibre etmeniz gerekecektir. Motor tamamen hareketsiz kalana kadar değeri hafifçe değiştirmeyi (örneğin, 58'den 54 veya 52'ye) ve kodu yeniden yüklemeyi deneyin.

Canlı Gösterim

Videoda sunucu, komple sistemi gösteriyor. Düğme basımlarına bağlı olarak servonun her iki yönde döndüğünü görebilirsiniz. Seri Monitör çıktısı da gösterilir; mevcut durumu ("CW", "Stop" veya "CCW") ve servoya gönderilen belirli değeri görüntüler. Bu, hata ayıklama ve kendi motorunuz için mükemmel kalibrasyon değerlerini bulmak adına harika bir araçtır. Gösterim ayrıca sc[] dizisindeki değerleri ayarlamanın motorun hızını, yavaş bir sürünmeden maksimum dönüş hızına kadar doğrudan nasıl etkilediğini gösterir.

Sonuç

Bu proje, sürekli dönen bir servo motoru kontrol etmek için basit ve etkili bir yol sağlar. "Durdurma" değeri için kalibrasyon sürecini anlayarak, kendi robotik ve otomasyon projelerinizde hassas kontrol sağlayabilirsiniz.

Video Bölümleri

  • [00:05] Sürekli Servo Motora Giriş
  • [02:02] Servonun Donanım Genel Bakışı
  • [02:40] Bağlantı Şeması ve Bağlantılar
  • [05:07] Kod Açıklaması: Değişkenler ve Kurulum
  • [08:03] Kod Açıklaması: Ana Döngü Mantığı
  • [09:56] servoCommand() Fonksiyonu
  • [10:54] Canlı Gösterim ve Seri Monitör Çıktısı
  • [12:23] Servo Hızını ve Durdurma Değerlerini Kalibre Etme

Görseller

360_Serrvo_3_push_button_wiring
360_Serrvo_3_push_button_wiring
209-How to control a 360 servo with push buttons
Dil: C++
++
/*
 *  S05-13 Servo with 3 push buttons
 *  Demonstration of Controlling a Continuous Servo (360 servo)
 *  This code allows you to control a 360-degree servo using push buttons
 *
 * Modified by Ahmad Shamshiri for Robojax Robojax.com
 * on Jan 17, 2019 at 22:42 in Ajax, Ontario, Canada
 Watch the video instruction for this sketch: https://youtu.be/hVe4TSRV4ww

 Watch Introduction to  360 Servo video with code: https://youtu.be/b_xvu6wWafA
 You can get the wiring diagram from my Arduino Course at Udemy.com
 Learn Arduino step by step with all libraries, codes, and wiring diagrams all in one place
 visit my course now http://robojax.com/L/?id=62

 If you found this tutorial helpful, please support me so I can continue creating
 content like this. 
 or make a donation using PayPal http://robojax.com/L/?id=64

 Original code by BARRAGAN <http://barraganstudio.com>
 *
 * Code is available at http://robojax.com/learn/arduino

 * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
 * This code has been downloaded from Robojax.com
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

*/

#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 one of those with PWM ~


#define STOPpin 3 // push button pin  for STOP
#define CWpin 2 //  push button for CW
#define CCWpin 4 // push button for CCW

int sc[]={106, 58, 0};// servo commands are in order
        //CCW, STOP,CW

String scText[]={"CCW","Stop","CW"};// define texts for 3 actions
int statusText;
int CWBS, CCWBS, SBS;
      //CW button status (CWBS)
      //CCW button status (CCWBS)
      //stop button status (SBS)

void setup() {
  Serial.begin(9600);
  pinMode(STOPpin,INPUT_PULLUP);// set pin for push button STOP
  pinMode(CCWpin,INPUT_PULLUP);// set pin for push button CCW
  pinMode(CWpin,INPUT_PULLUP);// set pin for push button CW

  myservo.attach(servoPin);  // attaches the servo on pin 9 to the servo object
  myservo.write(sc[1]);// send STOP command
  statusText=1;// initial value is STOP
}



void loop() {

    CCWBS = digitalRead(CCWpin);// read status of button CCW
    SBS = digitalRead(STOPpin);// read status of button STOP
    CWBS = digitalRead(CWpin);// read status of button CW

    if(CCWBS ==LOW)
    {
      servoCommand(0);
    }else if(SBS ==LOW)
    {
      servoCommand(1);
    }else if(CWBS ==LOW)
    {
      servoCommand(2);
    }

  Serial.println(scText[statusText]);
  delay(50);
}// loop



void servoCommand(int n)
{
   statusText = n;
   myservo.write(sc[n]);
   Serial.print("Going to  ");
   Serial.print(scText[n]);
   Serial.print( "(");
   Serial.print(sc[n]);
   Serial.println(")");
}

İhtiyacın olabileceğini düşünüyor

Kaynaklar ve referanslar

Dosyalar📁

Diğer dosyalar