This tutorial is part of: Servo Motorlar
Servo motorlarla ilgili tüm videolar burada listelenmiştir. Diğer videolara ait bağlantılar bu makalenin altında yer almaktadır.
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ı önerisi | 50 Hz |
| Giriş mantık eşikleri | 0.3VCC ila 0.7VCC |
| Gerilim düşümü / RDS(on) / doyum | 0.4 V |
| Termal sınırlar | 85 °C |
| Paket | Plastik |
| Notlar / varyantlar | Standart 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ı

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.
This tutorial is part of: Servo Motorlar
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Potansiyometre ile Arduino Kullanarak Servo Kontrolü
- Potansiyometre ve LCD1602 ile Arduino Kullanarak Servo Kontrolü
- Controlling Servo Motors Using an Infrared Remote with Arduino
- Potansiyometre Kullanarak Arduino Servo Motor Kontrolü
- Arduino ile El Hareketleriyle Servo Pozisyonunu Kontrol Etme
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- Sürekli 360° Servo Arduino ile Nasıl Kullanılır
- Arduino Code and Video for PCA9685 16-Channel 12-Bit Servo Controller V1
- Bir Arduino Servo Geçiş Anahtarı Bir Buton ile Oluşturun
/*
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
}
/*
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
-
AmazonServo motor on Amazonamzn.to
-
AliExpressPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Kaynaklar ve referanslar
Henüz kaynak yok.
Dosyalar📁
Dosya mevcut değil.