Kod Ara

Potansiyometre Kullanarak Arduino Servo Motor Kontrolü

Potansiyometre Kullanarak Arduino Servo Motor Kontrolü

Bu eğitimde, bir potansiyometre kullanarak bir servo motoru nasıl kontrol edeceğimizi keşfedeceğiz. Amaç, servo motorun konumunun potansiyometrenin döndürülmesine bağlı olarak ayarlandığı basit bir devre oluşturmaktır. Bu projenin sonunda, potansiyometreyi döndürdüğünüzde servo açısını 0'dan 180 dereceye kadar pürüzsüz bir şekilde değiştiren çalışan bir modeliniz olacak. Bu, Arduino'da analog girdi ve servo kontrolünün temellerini anlamanın harika bir yoludur.

Bunu başarmak için bir Arduino kartı, bir servo motor ve bir potansiyometre kullanacağız. Potansiyometre, Arduino'ya analog bir giriş sağlayarak değişken bir direnç gibi davranır ve bu da servo motorun konumunu belirlemesine yardımcı olur. Bu proje sadece eğlenceli değil, aynı zamanda elektronik ve programlama konularında temel kavramları gösterdiği için eğitici de. Daha derin bir açıklama için videoyu kontrol etmeyi unutmayın (videoda 00:00).

Donanım Açıklandı

Bu projede ana bileşenler Arduino kartı, servo motor ve potansiyometredir. Arduino, işlemin beyni olup, girişleri işleyip çıkışları kontrol eder. Servo motor, Arduino'dan aldığı komutlara göre fiziksel olarak hareket edecek olan bileşendir. Potansiyometre, 1k ohm ile 1M ohm arasında değişen değerlerle kullanıcıların servo hareketine dönüşen değişken bir giriş sağlamasına olanak tanır.

Servo motor, istenen pozisyonu belirten bir PWM (Darbe Genişliği Modülasyonu) sinyali alarak çalışır. Potansiyometre döndürüldüğünde, direncini değiştirir ve bu direnç Arduino tarafından analog bir voltaj olarak okunur. Servo motor 5V ile çalışır. 3.3V ile çalışmaz. Bu voltaj daha sonra servo motorun hareket aralığına haritalanır ve 0 dereceden 180 dereceye kadar pürüzsüz hareket sağlar.

SG90 Servo Motor için Veri Sayfası Detayları

ÜreticiParalaks
Parça numarasıSG90
Mantık/Giriş-Çıkış voltajı5 V
Besleme voltajı4.8-6 V
Çıkış akımı (kanal başına)~500 mA
Zirve akımı (kanal başına)1 A
PWM frekansı rehberi50 Hz
Giriş mantığı eşikleri0.5 V (düşük), 2.5 V (yüksek)
Gerilim düşüşü / RDS(on)saturasyon0.5 V, 500 mA'de
Termal sınırlar0°C ile 60°C
PaketStandart 9g Servo
Notlar / varyantlarRC uygulamalarında yaygın olarak kullanılır.

  • Servo'nun maksimum akım değerini aşmadığından emin olun.
  • Servo yüksek yüklerde sürekli çalışıyorsa bir ısı emici kullanın.
  • Potansiyometreyi doğru okumalar için bir analog pine bağlayın.
  • Servo kontrolü için PWM sinyal zamanlamasına dikkat edin.
  • Servo'nun hareket alanını kontrol edin, fiziksel engellerden kaçınmak için.

Bağlantı Talimatları

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor

Bu kurulum için bileşenleri aşağıdaki gibi bağlamanız gerekecek:

Potansiyometrenin orta pinini (silecek) Arduino'nun analog pinine bağlayın.A0Potansiyometrenin diğer iki pini bağlanmalıdır.5VveGNDArduino'da. Servo motor için, kırmızı kabloyu bağlayın5V, siyah tel ileGNDve sarı veya beyaz tel dijital pine9Arduino'da. Bu düzenleme, potansiyometrenin Arduino'ya analog bir giriş sağlamasına olanak tanır; bu da servo motorun konumunu bu girişe göre kontrol edecektir.

Tüm bağlantıları doğruladığınızdan ve servonun hareket alanında engellenmediğinden emin olun. Farklı bir Arduino modeli kullanıyorsanız, analog giriş ve servo çıkışı için pin atamalarının uyumlu olduğunu doğrulayın.

Kod Örnekleri ve Geçiş Rehberi

Aşağıda servoyu başlatan ve potansiyometre değerini okuyan kodun bir bölümü bulunmaktadır:


#include 

Servo myservo;  // create servo object to control a servo
int pos = 0;    // variable to store the servo position

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

Bu kodda, Servo kütüphanesini dahil ediyoruz ve "servo" adında bir servo nesnesi oluşturuyoruz.myservoServo, pine bağlıdır.9, bu pini kullanarak onu kontrol etmemizi sağlar.


void loop() {
  int sensorValue = analogRead(A0);  // read the potentiometer
  pos = map(sensorValue, 0, 1023, 0, 180);  // map to servo position
  myservo.write(pos);  // move servo to position
  delay(15);  // waits 15ms for the servo to reach the position
}

Döngü fonksiyonunda, potansiyometre değerini pin'den okuyoruz.A0ve aralığını (0-1023) servo aralığına (0-180 derece) eşleştir. Bumyservo.write(pos)komut daha sonra potansiyometrenin döngüsüne dayalı olarak servoyu istenen konuma taşır.

Gösterim / Ne Beklemeli

Bu programı çalıştırdığınızda, potansiyometreyi döndürdükçe servo motorun 0'dan 180 dereceye kadar düzgün bir şekilde hareket ettiğini görmelisiniz. Eğer servo beklenildiği gibi hareket etmiyorsa, kabloları kontrol edin ve potansiyometrenin doğru çalıştığından emin olun. Ayrıca, Arduino'nun düzgün bir şekilde güç aldığından ve kodun hatasız bir şekilde yüklendiğinden emin olun. Servo motorun potansiyometrenin konumunu gerçek zamanlı olarak yansıttığını göreceksiniz (videoda 02:00'de).

Video Zaman Damgaları

  • 00:00- Projeye Giriş
  • 01:30- Donanım kurulumu açıklaması
  • 03:45- Kablolama talimatları
  • 05:00- Kod incelemesi
  • 07:30- Tamamlanmış projenin gösterimi

Görseller

Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for controlling Servo motor with Potentiometer
Arduino wiring for servo motor
Arduino wiring for servo motor
11-Controlling a servo position using a potentiometer using Arduino
Dil: C++
/**
*Original source: Arduino IDE
* Arduino Project: Controlling the servo position
* This code is used with a video tutorial for Robojax.com
* Published on April 24, 2017, from Ajax, ON, Canada.
* Written/Edited by Ahmad Shamshiri
* Watch the video on YouTube: https://youtu.be/kZ9b31gVemc
* View tutorial page for this code https://robojax.com/RJT8
* Controlling a servo position using a potentiometer (variable resistor)
*/



#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

void setup() {
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
    // in steps of 1 degree
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
    delay(15);                       // waits 15ms for the servo to reach the position
  }
}

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Veri Sayfası (pdf)