Kod Ara

Ders 88: İki buton anahtarı kullanarak bir servo motorun kontrol edilmesi

Ders 88: İki buton anahtarı kullanarak bir servo motorun kontrol edilmesi

Bu proje, Arduino ile iki buton kullanarak bir servo motorun nasıl kontrol edileceğini gösterir. Bir potansiyometre veya seri komut yerine, bir servoyu sola veya sağa manuel olarak hareket ettirmek için basit dokunmatik anahtarlar kullanabilirsiniz. Bu, robotik bir kol inşa etmek, bir kamera gimbalini ayarlamak veya uzaktan kumandalı bir yatay-dikey döndürme sistemi oluşturmak gibi bir mekanizma üzerinde doğrudan, fiziksel kontrole ihtiyaç duyduğunuz uygulamalar için inanılmaz derecede kullanışlıdır. Butonlar, servo açısını kademeli olarak ayarlamanıza olanak tanır ve butonu basılı tutarak servoyu tüm hareket aralığı boyunca tarayabilirsiniz.

Bu kurulumla oluşturabileceğiniz birkaç pratik proje:

  • Robotik bir kol veya tutucu için manuel kontrol paneli oluşturma.
  • Uzaktan kumandalı bir kamera kaydırıcısı veya yatay-dikey döndürme kafası oluşturma.
  • Model uçak veya tekne dümeni için fiziksel bir kontrol arayüzü geliştirme.
  • Bir CNC makinesi veya 3D yazıcı için konumları kaydetmek üzere basit bir "öğretme askısı" yapma.

Donanım ve Bileşenler

Bu proje yalnızca birkaç temel bileşen gerektirir ve Arduino ile hem giriş hem de çıkış cihazlarını öğrenmek için mükemmel bir başlangıç noktasıdır.

  • Arduino kartı (Uno, Nano, Mega vb.)
  • Servo motor (örn. SG90 veya MG995)
  • İki anlık basmalı buton
  • Jumper kablolar
  • Breadboard (isteğe bağlı ancak önerilir)

Bağlantı Kılavuzu

Videoda bağlantılar basittir. Servo motorun sinyal pini, Arduino'daki PWM destekli bir pine bağlanır; bu örnekte pin 9'dur. Servonun güç ve toprak bağlantıları Arduino'nun 5V ve GND pinlerine bağlanır. İki buton birbirine benzer şekilde bağlanır. Her butonun bir ayağı toprağa, diğer ayağı Arduino'daki bir dijital giriş pinine (sol buton için pin 2 ve sağ buton için pin 3) bağlanır. Kod, dahili çekme dirençlerini kullanır, bu nedenle butonlar için harici direnç gerekmez. (videoda 00:57'de)

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

Kod Açıklaması

Kod, kolayca yapılandırılabilir olacak şekilde tasarlanmıştır. Anahtar kullanıcı tarafından yapılandırılabilir bölümler taslağın en üstündedir. Kendi projeniz için ayarlamak isteyebileceğiniz önemli değişkenlerin ve tanımların bir dökümü aşağıda verilmiştir.

#include <Servo.h>

Servo myservo;  // bir servoyu kontrol etmek için servo nesnesi oluştur
int servoPin = 9;// bu pin PWM ~ olanlardan olmalıdır
int angle =90;    // servo için başlangıç açısı
int angleStep =5;

#define LEFT 2   // pin 2 sol butona bağlı
#define RIGHT  3  // pin 3 sağ butona bağlı
  • servoPin: Bu değişken, servonun sinyal kablosunun bağlı olduğu Arduino pinini tanımlar. Genellikle kart üzerinde ~ sembolüyle gösterilen Darbe Genişliği Modülasyonunu (PWM) destekleyen bir pin kullanmak çok önemlidir.
  • angle: Bu, Arduino başladığında servonun başlangıç açısını ayarlar. Varsayılan değer 90 derecedir ve bu genellikle servoyu ortalar.
  • angleStep: Bu, her buton basıldığında servo açısının değiştiği artış miktarıdır. 5 değeri, her basışın servoyu 5 derece hareket ettireceği anlamına gelir. Daha hızlı hareket için bunu artırabilir veya daha ince kontrol için azaltabilirsiniz.
  • LEFT ve RIGHT: Bu #define yönergeleri, butonların bağlı olduğu dijital pinleri atar. Butonlarınızı farklı pinlere bağlarsanız, kurulumunuza uyacak şekilde bu değerleri değiştirmelisiniz.

loop() fonksiyonundaki temel mantık, bir butona basılıp basılmadığını kontrol eder (çekme yapılandırması nedeniyle DÜŞÜK bir sinyal okuyarak). "Sağ" butona basılırsa, angle değişkenini angleStep kadar azaltır. "Sol" butona basılırsa, angle değerini artırır. Kod, açının 0 ila 180 derece aralığında kalmasını sağlamak için sınır kontrolleri içerir. Ardından myservo.write(angle) fonksiyonu, servoya yeni konuma hareket etmesini komut etmek için kullanılır.

Canlı Proje Gösterimi

Video gösteriminde işlevsellik açıkça görülmektedir. "Sol" butona basılı tutmak, açı 180 dereceye ulaşıp durana kadar her seferinde 5 derece artarak servonun sola doğru düzgün bir şekilde süpürmesini sağlar. Benzer şekilde, "sağ" butona basılı tutmak, açı 0 dereceye ulaşana kadar açıyı azaltarak servonun sağa doğru süpürmesini sağlar. Geçerli açı, Seri Monitöre yazdırılır ve servonun tam konumunu gerçek zamanlı olarak görmenizi sağlar. (videoda 05:20'de)

Video Bölümleri

  • [00:00] Butonlarla servo kontrolüne giriş
  • [00:57] Servo ve butonlar için bağlantı kılavuzu
  • [02:12] Kod açıklaması, bölüm 1: Kurulum ve yapılandırma
  • [03:25] Kod açıklaması, bölüm 2: Ana döngü mantığı
  • [05:20] Projenin canlı gösterimi
  • [06:23] Sonuç ve potansiyel uygulamalar

Görseller

2 pin tactile push button switch
2 pin tactile push button switch
SG90 Mini Servo Motor
SG90 Mini Servo Motor
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
891-Lesson 88: Servo control with 2 push buttons
Dil: C++
/*
 * S05-05 Servo control with 2 push buttons
 * Download and resource page https://robojax.com/RJT764
 Watch video on YouTube https://www.youtube.com/watch?v=J_kbyAY1rLM
 * 
 * Written by Ahmad Shamshiri for Robojax.com 
 * on Jan 15, 2019 at 19:15 in Ajax, Ontario, Canada

  
 * 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 download 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/>.
 */
/*
 Controlling a servo with two Push buttons with Arduino
 when Left  push button is pressed, the servo start moving to the left until it reaches 180( or zero) degrees
 when Right  push button is pressed, the servo start moving to the right until it reaches 180( or zero) degrees
At any instance if the button is released, servo stops

*/

#include <Servo.h>

Servo myservo;  // create servo object to control a servo
int servoPin = 9;// this pin must be of those with PWM ~
int angle =90;    // initial angle  for servo
int angleStep =5;

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

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

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
  }// 

  
}

Dosyalar📁

Diğer dosyalar