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)

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.LEFTveRIGHT: Bu#defineyö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
/*
* 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
}//
}
İhtiyacın olabileceğini düşünüyor
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBay
Kaynaklar ve referanslar
Dosyalar📁
Diğer dosyalar
-
SG90 Seroo motor veri sayfası
robojax-servo-SG90_datasheet.pdf0.12 MB