Search Code

Arduino ile Push Butonlar Kullanarak Servo Kontrolü

Arduino ile Push Butonlar Kullanarak Servo Kontrolü

Bu eğitimde, biri servoyu sola, diğeri sağa hareket ettirmek için kullanılan iki buton kullanarak bir servo motoru nasıl kontrol edeceğimizi öğreneceğiz. Sağ butona bastığınızda, servo 10 derece sağa hareket edecek ve sol butona bastığınızda aynı miktarda sola hareket edecektir. Bir butonu basılı tutarsanız, servo bırakana kadar o yönde hareket etmeye devam edecektir.

Bu proje, Arduino kullanarak butonları bir servo motorla nasıl arayüzleyeceğinizi anlamak için harika bir yoldur. Gerekli donanım bileşenlerini, bağlantı talimatlarını ve her şeyin çalışmasını sağlamak için gereken kodu ele alacağız. Daha net bir anlayış için, bu eğitime eşlik eden videoya başvurabilirsiniz (videoda 01:00'da).

Donanım Açıklaması

Bu proje için bir Arduino kartı, bir servo motor ve iki buton gerekir. Servo motor hareketten sorumludur, butonlar ise bu hareketin yönünü kontrol etmek için giriş görevi görür. Arduino bu girişleri işler ve servoya uygun sinyalleri gönderir.

Servo motor, darbe genişliği modülasyonu (PWM) sinyallerine dayalı olarak çalışır. Farklı darbe genişlikleri göndererek servo açısını kontrol edebilirsiniz. Butonlar Arduino'daki dijital giriş pinlerine bağlanacak ve kablolamayı basitleştirmek için dahili çekme dirençleri kullanacağız.

Veri Sayfası Detayları

ÜreticiÇeşitli
Parça numarasıSG90
Mantık/IO voltajı5 V
Besleme voltajı4.8–6 V
Çıkış akımı (kanal başına)1.5 A maks.
Tepe akımı (kanal başına)2.5 A maks.
PWM frekansı önerisi50 Hz
Giriş mantık eşikleri0.3VCC ila 0.7VCC
Gerilim düşümü / RDS(on) / doyum0.4 V
Termal sınırlar85 °C
PaketPlastik
Notlar / varyantlarStandart 180° dönüş

  • Servonun besleme voltajınız için derecelendirildiğinden emin olun.
  • Yüksek akımlarda çalışıyorsanız uygun ısı emici kullanın.
  • Butonları çekme direnci yapılandırmasıyla toprağa bağlayın.
  • Düzensiz davranış yaşarsanız butonlarınızı debounce edin.
  • Hata ayıklama için seri çıkışı izleyin.

Bağlantı Talimatları

Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons

Bileşenleri bağlamak için servo motoru bağlayarak başlayın. Servonun kırmızı telini Arduino'daki 5V pinine, siyah telini GND pinine ve sarı veya beyaz sinyal telini Arduino'daki 9 numaralı pine bağlayın. Bu pin servonun konumunu kontrol edecektir.

Ardından butonları bağlayın. Sağ butonun bir terminalini 2 numaralı pine ve diğer terminalini toprağa bağlayın. Sol buton için bir terminali 12 numaralı pine ve diğer terminalini de toprağa bağlayın. Bu kurulum, dahili çekme dirençlerinin butonlara basılmadığında pinleri yüksek tutmasını sağlar.

Kod Örnekleri ve Açıklama

Tek bir butonla servoyu kontrol etmek için kodla başlayalım. Kod, servo nesnesini başlatır ve bir başlangıç açısı ayarlar. İşte kısa bir alıntı:

int angle = 90;    // servo için başlangıç açısı
int angleStep = 10; // hareket için adım boyutu

Bu parçacıkta, angle servonun mevcut konumunu temsil ederken, angleStep her buton basışında servonun ne kadar hareket edeceğini tanımlar. Bu kod, servonun konumunu takip etmek için gereklidir.

Ardından, servoyu bağladığımız ve giriş pinlerini yapılandırdığımız kurulum fonksiyonumuz var:

void setup() {
  Serial.begin(9600);          // seri kurulum
  myservo.attach(9);  // servoyu 9 numaralı pine bağlar
  pinMode(2, INPUT_PULLUP); // buton pinini yapılandır
}

Kurulumda, seri monitörü başlatıyoruz ve servoyu 9 numaralı pine bağlıyoruz. 2 numaralı pindeki buton, çekme dirençli bir giriş olarak ayarlanır, bu da kablolamayı basitleştirir ve harici direnç ihtiyacını ortadan kaldırır.

Son olarak, buton basışını işleyen döngü fonksiyonuna bakıyoruz:

while(digitalRead(2) == LOW) {
  angle = angle + angleStep; // açıyı artır
  myservo.write(angle); // servoyu hareket ettir
}

Bu döngü, butonun basılı olup olmadığını sürekli kontrol eder. Basıldığında, açı tanımlanan adım kadar artar ve servo buna göre hareket eder. Servoya zarar vermemek için açının sınırlar içinde (0 ila 180 derece) kalmasını sağlamak çok önemlidir.

Gösterim / Beklentiler

Sağ butona bastığınızda, servo maksimum 180 dereceye ulaşana kadar 10 derecelik artışlarla sağa hareket etmelidir. Benzer şekilde, sol butona basmak onu sola hareket ettirecektir. Bir butonu basılı tutarsanız, servo bırakana kadar o yönde hareket etmeye devam edecektir (videoda 01:00'da).

Yaygın tuzaklar arasında yanlış bağlantılar veya yüzen girişler gibi kablolama sorunları bulunur. Bağlantılarınızın güvenli olduğundan ve kodda belirtilen doğru pinleri kullandığınızdan her zaman emin olun.

Görseller

Control a servo with a single push button using Arduino
Control Servo with single push button with Arduino
SG90_servo_motor-1
SG90_servo_motor-1
SG90_servo_motor-0
SG90_servo_motor-0
Arduino wriing for Sevo motor with 2 push buttons
Arduino wriing for Sevo motor with 2 push buttons
98-Control a servo with a single push button using Arduino
Dil: C++
/*
 Controlling a servo with a push button with Arduino
 When a push button is pressed, the servo starts moving to the right or left until
 it reaches 180 and then returns to 0 degrees.

 May 22, 2018 at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle for servo
int angleStep =10;

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(2,INPUT_PULLUP);
   Serial.println("Robojax Servo Button ");
}

void loop() {
  while(digitalRead(2) == LOW){
  // change the angle for the next time through the loop:
  angle = angle + angleStep;

    // reverse the direction of the movement at the ends of the angle:
    if (angle <= 0 || angle >= 180) {
      angleStep = -angleStep;
    }
    myservo.write(angle); // move the servo to the desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degrees");    
  delay(100); // waits for the servo to get there
  }// while

  
}
99-Control a servo with two push buttons using Arduino
Dil: C++
/*
 Controlling a servo with two push buttons with Arduino
 When the left push button is pressed, the servo starts moving to the left until it reaches 180 (or zero) degrees.
 When the right push button is pressed, the servo starts moving to the right until it reaches 180 (or zero) degrees.
 At any instance, if the button is released, the servo stops.

 May 22, 2018, at 01:00 
 Written by Ahmad S. for Robojax.com in Ajax, Ontario, Canada
 Watch a video for this code at https://youtu.be/7woqNH_qby4
 This code is taken from http://robojax.com/learn/arduino
*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo

int angle =90;    // initial angle  for servo
int angleStep =5;

#define LEFT 12   // pin 12 is connected to left button
#define RIGHT  2  // pin 2 is connected to right button

void setup() {
  // Servo button demo by Robojax.com
  Serial.begin(9600);          //  setup serial
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
  pinMode(LEFT,INPUT_PULLUP); // assign pin 12 as input for Left button
  pinMode(RIGHT,INPUT_PULLUP);// assign pin 2 as input for right button
  myservo.write(angle);// send servo to the middle at 90 degrees
 Serial.println("Robojax Servo Button ");
}

void loop() {
  // Servo button demo by Robojax.com
  while(digitalRead(RIGHT) == LOW){

    if (angle > 0 && angle <= 180) {
      angle = angle - angleStep;
       if(angle < 0){
        angle = 0;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// while
 // Servo button demo by Robojax.com

  while(digitalRead(LEFT) == LOW){

    // Servo button demo by Robojax.com
    if (angle >= 0 && angle <= 180) {
      angle = angle + angleStep;
      if(angle >180){
        angle =180;
       }else{
      myservo.write(angle); // move the servo to desired angle
      Serial.print("Moved to: ");
      Serial.print(angle);   // print the angle
      Serial.println(" degree");
       }
    }
    
  delay(100); // waits for the servo to get there
  }// 

  
}

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

Kaynaklar ve referanslar

Henüz kaynak yok.

Dosyalar📁

Dosya mevcut değil.