Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

servo motor etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
servo motor etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

4 Mayıs 2021 Salı

Servo Motor Nasıl Çalışır ve Arduino

 Servo Motor Nasıl Çalışır ve Arduino

Arduino projenize hareket eklemek ister misiniz? O zaman servo motorlar sizin için sağlam bir başlangıç ​​noktası olabilir.DC motorların aksine, bu motorların konumunu hassas bir şekilde kontrol edebilirsiniz. Onlara hangi yöne ne kadar hareket edeceklerini söyleyin, onlar sizin için yapacaklar.Bir RC modelinde ön tekerlekleri döndürmek veya robotik bir araca bakmak için bir sensörü döndürmek gibi birçok robotik projede kullanışlıdırlar.


Servo nedir?
Servo, kapalı döngü kontrol sistemi için genel bir terimdir .Kapalı döngü sistemi, istenen sonucu elde etmek için motorun hızını ve yönünü ayarlamak için geri bildirim sinyalini kullanır.
servo motor kapalı çevrim sistem blok şeması

RC servo motor aynı prensipte çalışır. Çıkış miline dişliler aracılığıyla bağlanan küçük bir DC motor içerir.

Çıkış mili bir servo kolu tahrik eder ve ayrıca bir potansiyometreye (pota) bağlıdır.

servo motor iç yapısı çizimi

Potansiyometre, motorun mevcut konumunun hedef konumla karşılaştırıldığı yerde servo kontrol ünitesine konum geri bildirimi sağlar.

Hataya göre, kontrol ünitesi, motorun gerçek konumunu, hedef konumla eşleşecek şekilde düzeltir.



Servo Motorlar Nasıl Çalışır?

Sinyal hattına bir dizi darbe göndererek servo motoru kontrol edebilirsiniz Geleneksel bir analog servo motor, kabaca her 20 milisaniyede bir darbe almayı bekler (yani sinyal 50Hz olmalıdır).

Darbenin uzunluğu servo motorun konumunu belirler.

servo motor çalışma zamanlama diyagramı
  • Darbe 1 ms için yüksekse, servo açısı sıfır olacaktır.
  • Darbe 1.5 ms için yüksekse, servo merkez konumunda olacaktır.
  • Darbe 2 ms için yüksekse, servo 180 derecede olacaktır.
  • 1 ms ile 2 ms arasında değişen darbeler, servo milini hareketinin 180 derecesinin tamamı boyunca hareket ettirecektir.

Darbelerin süresi bazen farklı markalara göre değişebilir ve 0 derece için 0,5 ms, 180 derece için 2,5 ms olabilir.

Servo Motor Pin Çıkışı

Servo motorlar tipik olarak üç bağlantıya sahiptir ve aşağıdaki gibidir:



GND hem motor hem de mantık için ortak bir zemindir.

5V Power servoya güç veren pozitif bir voltajdır.

Signal Kontrol kontrol sistemi için giriştir.

Tellerin rengi servo motorlara göre değişir, ancak kırmızı kablo her zaman 5V'dur ve GND siyah veya kahverengi olacaktır. Kontrol teli genellikle turuncu veya sarıdır.

Servo Motorun Arduino UNO'ya Kablolanması

Servo motoru Arduino ya bağlayalım.

Örneğin SG90 Micro Servo Motor kullanalım. 4.8-6VDC (5V Tipik) ile çalışır ve yaklaşık 180 derece (her yönde 90) dönebilir.

Boşta yaklaşık 10mA ve hareket halindeyken 100mA ila 250mA tüketir, böylece Arduino'daki 5 voltluk çıkışla onu çalıştırabiliriz.

250mA'dan fazla tüketen bir servonuz varsa, servonuz için ayrı bir güç kaynağı kullanmayı düşünün.

Kırmızı kabloyu Arduino'daki (veya DC jakındaki) 5V'ye ve Siyah / Kahverengi kabloyu toprağa bağlayın. Son olarak Turuncu / Sarı kabloyu PWM etkin pim 9'a bağlayın.

servo motorun arduino uno süpürme koduna bağlanması

Arduino Kodu - Tarama

İlk Arduino taslağımız için, Arduino IDE ile birlikte gelen yerleşik örneklerden birini kullanacağız.

Örnekler alt menüsüne gidin. Servo'yu seçin ve Süpürme çizimini yükleyin.

servo süpürme örneği

Devam edin ve çizimi yükleyin. Motorun bir yönde hareket ettiğini ve sonra başka bir yönde geri döndüğünü hemen göreceksiniz.

#include <Servo.h>

int servoPin = 9;
Servo servo;
int angle = 0; // servo position in degrees

void setup() {
servo.attach(servoPin);
}

void loop() {

// scan from 0 to 180 degrees
for(angle = 0; angle < 180; angle++) {
servo.write(angle);
delay(15);
}
// now scan back from 180 to 0 degrees
for(angle = 180; angle > 0; angle--) {
servo.write(angle);
delay(15);
}
}

Açıklama:

Servoları kontrol etmek kolay bir iş değil, ama neyse ki bizim için Arduino IDE zaten Servo adında çok güzel bir kitaplık içeriyor Servoya belirli bir açıya dönmesi için hızlı bir şekilde talimat verebilmeniz için basit komutlar içerir.

Bu komutları kullanacaksanız, Arduino IDE'ye bu komutla kütüphaneyi kullandığınızı söylemeniz gerekir:

#include <Servo.h>

Bundan sonra yapacağımız şey, servo motorun kontrol piminin bağlı olduğu Arduino pinini ilan etmektir.

int servoPin = 9;

Aşağıdaki çizgi bir servo nesnesi oluşturur.

Servo servo;

Aslında bu şekilde sekize kadar servo tanımlayabilirsiniz, örneğin iki servomuz olsaydı, o zaman şöyle bir şey yazabilirdik:

Servo servo1;
Servo servo2;

Değişken angle, servonun mevcut açısını derece cinsinden saklamak için kullanılır.

int angle = 0;

Kurulum işlevinde, servobu komutu kullanarak nesneyi servoyu kontrol edecek pime bağlarız:

servo.attach(servoPin);

Döngü işlevi aslında iki for döngüsü içerir. İlk döngü, açıyı bir yönde ve ikincisi ters yönde artırır.

Aşağıdaki komut, servoya konumunu belirtilen açıya göre güncellemesini söyler.

servo.write(angle);

Sorun giderme

Doğrudan Arduino'dan çalıştırmaya karar verirseniz bazen servonuz hatalı davranabilir. Bunun nedeni servonun özellikle başlatma sırasında hatırı sayılır bir güç çekmesidir ve bu Arduino kartının sıfırlanmasına neden olabilir.

Bu olursa, genellikle bunu GND ve 5V arasına oldukça büyük bir elektrolitik kapasitör (470uF - 1000uF) yerleştirerek düzeltebilirsiniz.

Kondansatör, bir elektrik deposu görevi görür, böylece motor başladığında, kondansatörün yanı sıra Arduino beslemesinden de şarj alır.

Kapasitörün daha uzun ucu 5V'a ve negatif ucu GND'ye bağlanmalıdır.

servo motorun kondansatör ile arduino uno'ya bağlanması

Servo'nun Potansiyometre ile Kontrol Edilmesi

Bir sonraki adımımız, topuzu çevirerek servonun konumunu kontrol edebilmemiz için bir potansiyometre eklemektir.

Servoya bağlı bir sensörün pan ve eğimini kontrol etmek istediğinizde bu proje çok faydalı olabilir.

Kablolama

Bağlantı şemasının gösterdiği gibi bir potansiyometreye ihtiyacınız olacak, 10k'dan itibaren herhangi bir değer uygun olacaktır. Potun bir ucunu toprağa, diğer ucunu Arduino 5V'ye ve sileceği A0 analog girişine bağlayın.

potansiyometre kontrolü için servo motorun arduino uno'ya bağlanması

Arduino Kodu

Servoyu, topuzun konumunu takip ettirecek kod, onu süpürmekten daha basittir.

#include <Servo.h>

int potPin = 0;
int servoPin = 9;
Servo servo;

void setup() {
servo.attach(servoPin);
}

void loop() {
int reading = analogRead(potPin);
int angle = map(reading, 0, 1023, 0, 180);
servo.write(angle);
}

Şimdi adında yeni bir değişken olduğuna dikkat edin potPin.

Döngü fonksiyonunda, A0 analog pininden değeri okuyarak başlarız.

int reading = analogRead(potPin);

Bu bize 0 ile 1023 arasında bir değer verir. Fakat onu küçültmemiz gerekir çünkü servo yalnızca 180 derece dönebilir.

Bunu yapmanın bir yolu, bir sayıyı bir aralıktan diğerine yeniden eşleyen Arduino map () İşlevini kullanmaktır Bu nedenle, alt çizgi, 0 ile 180 derece arasındaki açıyı temsil edecek şekilde okumayı değiştirir.

int angle = map(reading, 0, 1023, 0, 180);

Son olarak, write()servoya pozisyonunu potansiyometre tarafından seçilen açıya göre güncellemesini söyleyen komutu kullanıyoruz .

servo.write(angle);

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

2 Mayıs 2021 Pazar

Joystick Modülü kullanarak Servo Motor Kontrolü

Joystick Modülü kullanarak Servo Motor Kontrolü


Joystick modülü, kullanımı en kolay modüldür ve projelerinize daha fazla esneklik katar. Bir çok mikrodenetleyici ile kullanılabilir ama biz Arduino kullanıyoruzAnalog Joystickler analog değerleri döndürür. Bunlar temelde potansiyometrelerdir. Bu değerler 0 ile 1023 arasında değişmektedir. Joystick dinlenme konumunda olduğunda analog değer 512 olacaktır. Arduino analog pinleri verileri yatay ve dikey pinlerden okuyacak ve butonu okumak için dijital pin kullanılacaktır. . Joystick modülünün 5 pimi vardır ve bunlar
  • Besleme gerilimi (VCC)
  • Zemin
  • X tuşu (Yatay tuş).
  • Y tuşu (Dikey Tuş)

Joystick aşağıya basılarak etkinleştirilebilen bir "seçmek için basın" basma düğmesi de vardır. Bunlar, modülünüzü nereden satın aldığınıza bağlı olarak farklı olabilir. Kullandığımız joystick analogdur ve basit yönlü joysticklerden daha doğru okumalar sağlar. 





















Joystick modülünün arduino ile bağlantısı

Bağlantı şeması çok kolaydır. Arduino 5 v'yi joystick'in VCC'sine bağlayın. Sonra A0 ve A1'i joystick'in VER ve HOR'una bağlayın. Son olarak, Arduino'nun 2. pinini joystick'in SEL'e ve Arduino'nun GND'sini joystick'in GND'sine bağlayın.joystick modülü arduino ile arayüz oluşturuyor

Arduino Joystick

A0  -------VER

A1 ------- KOR

Pin2 ------- SEL

GND ------- GND

Arduino ile joystick arayüzünün kodu

// Oyun çubuğu modülü kodu

int x_key = A1 ;                                                 // initializing A1 for storing the joystick’s x key value

int y_key = A0 ;                                                 // initializing A0 for storing the joystick’s y key value

int Push_Button= 2 ;                                       // initializing digital pin 2 for joystick’s press to select button

int Horizontal_Position = 0 ;                         // Declaring a variable for storing the value

int y_Position = 0 ;                                           // Declaring a variable for storing the value

int button_State = 0 ;                                     // Declaring a variable for storing the value

void setup ( ) {

  Serial.begin ( 9600 ) ;                                    // initializing serial communications at 9600 bps:

  pinMode ( x_key, INPUT ) ;                       // Selecting Arduino analog A1 pin as input

  pinMode ( y_key, INPUT ) ;                       // Selecting Arduino analog A0 pin as input

  pinMode (Push_Button, INPUT_PULLUP ) ;     // This will activate pull-up resistor on the push-button pin

  // If you have Arduino version previous to Arduino 1.0.1, then use these commands for activating pull-up resistor.

  // pinMode ( button_Pin , INPUT ) ;

  // digitalWrite ( button_Pin , HIGH ) ;

}

void loop ( ) {

Horizontal_Position = analogRead ( x_key ) ;  // Reading the value from A1 and storing in Horizontal_Position

  y_Position = analogRead ( y_key ) ;                       // Reading the value from A0 and storing in y_Position

  button_State = digitalRead ( Push_Button) ;     // Reading the digital pin 2 is high or low

  Serial.print ( " Value of X key is " ) ;                        // Printing “ Value of X key is ” on the disply

  Serial.print ( Horizontal_Position ) ;                        // Printing value of x key on the display

  Serial.print ( " | Value of Y key is " ) ;                     // Printing “ Value of Y key is ” on the screen

  Serial.print ( y_Position ) ;                                   // Printing value of y key on the display

  Serial.print ( " | Button State is " ) ;                        // Printing “ Button state ” on the display

  Serial.println ( button_State ) ;                               // Printing the button is high or low on the display

  delay ( 1000 ) ;                                                 // This will add delay between readings

}

İki servo motorlu Arduino kullanarak joystick tabanlı servo motor kontrolü

















joystick tabanlı servo motor kontrol devre şeması ve gerçek uygulama yukarıda ve aşağıda gösterilmiştir.Şimdi joystick modülü yardımıyla iki servo motoru nasıl kontrol edebileceğimizi göreceğiz. İki adet servo motor kullanıyoruz. Joystick modülünün x ekseni ile bir servo motor kontrol edilebilmekte, diğer servo motor ise joystick modülünün y ekseni ile kontrol edilmektedir. Bu örnekte, bir joystick kullanarak 2 servo motoru kontrol edeceğiz. Bu örnek, oyun denetleyicileri ve elektronik oyuncak arabalar gibi birçok projede kullanılmaktadır.














Joystick ile servo motor kontrolü için gerekli bileşenler

Gerekli bileşenler aşağıdaki gibidir

  • 2 servo
  • Oyun kolu
  • Arduino uno (herhangi birini kullanabilirsiniz)
  • Breadboard

Servo motorun üç bağlantısı vardır.

  • Pozitif
  • Olumsuz
  • Sinyal

Bağlantılar çok daha kolay. Servoları ve kumanda çubuğunu şekilde gösterildiği gibi bağlayın.

Joystick tabanlı servo motor kontrol kodu

Bu kod için önce servo kütüphanesini indirmeniz gerekecek.

// Controlling 2 Servos Using a Joystick.

#include < Servo.h >                       // including the library of servo motor

int First_Signal_Pin = 6 ;                // initializing pin 6 for first servo

int Second_Signal_Pin =  7 ;         // initializing pin 7 for first servo

int Horizontal_Joystick_Pin = A0 ;  // initializing A0 for horizontal movement

int Vertical_Joystick_Pin = A1 ;  // initializing A1 for vertical movement

// initializing the min and max values for horizontal and vertical movement

int Horizontal_Min = 0 ;

int Horizontal_Max = 180 ;

int Vertical_Min = 0 ;

int Vertical_Max = 180 ;

Servo First_Servo ;

Servo Second_Servo ;

// Declaring variables for storing values

int Horizontal_Value ;

int Horizontal_Servo_Value ;

int Vertical_Value ;

int Vertical_Servo_Value ;

void setup ( )

{

  First_Servo.attach ( First_Signal_Pin ) ;                                // Enabling pin 6 for first servo

  Second_Servo.attach ( Second_Signal_Pin ) ;                    // Enabling pin 7 for first servo

}

void loop ( )

{

  Horizontal_Value  = analogRead ( Horizonta_Joystick_Pin ) ;  // Reading the value from A0

  Vertical_Value  = analogRead ( Vertical_Joystick_Pin ) ;    // Reading the value from A1

// Mapping the values for horizontal and vertical movement of joystick.

 Horizontal_Servo_Value  = map ( Horizontal_Value, 0 , 1023, ServoH_Min , ServoH_Max ) ;

  Vertical_Servo_Value  = map ( Vertical_Value, 0, 1023, ServoH_Min , ServoH_Max ) ;

// Moving the servos

  First_Servo.write ( Horizontal_Servo_Value ) ;

  Second_Servo.write ( Vertical_Servo_Value ) ;

  delay ( 2000 ) ;    // Delay of 2 seconds

}

Gördüğünüz gibi arduino ve servo motor kontrol kodu ve devre şeması ile joystick'i Arduino uno R3 kullanarak kullanmak çok kolaydır.


ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Sayfalarımı ziyaret ettiğiniz için teşekkür ederim.Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır.İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir.Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz. Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.