Lekcija 88: Upravljanje servo motorom pomoću dva push button prekidača
Ovaj projekat demonstrira kako upravljati servo motorom koristeći dva tastera sa Arduino pločom. Umjesto oslanjanja na potenciometar ili serijsku komandu, možete koristiti jednostavne taktilne prekidače za ručno pomicanje serva lijevo ili desno. Ovo je izuzetno korisno za aplikacije gdje vam je potrebna direktna, fizička kontrola nad mehanizmom, kao što je izgradnja robotske ruke, podešavanje kamera gimbala ili kreiranje sistema za daljinsko upravljanje nagibom i okretanjem. Tasteri vam omogućavaju postepeno podešavanje ugla serva, s mogućnošću držanja tastera za pomicanje kroz cijeli raspon kretanja.
Evo nekoliko praktičnih projekata koje možete izgraditi s ovim postavljanjem:
- Izgradnja ručne upravljačke ploče za robotsku ruku ili hvataljku.
- Kreiranje daljinski upravljanog klizača za kameru ili glave za nagib i okretanje.
- Razvoj fizičkog upravljačkog interfejsa za kormilo modela aviona ili broda.
- Pravljenje jednostavnog "teach pendanta" za snimanje pozicija za CNC mašinu ili 3D štampač.

Hardver i komponente
Ovaj projekat zahtijeva samo nekoliko osnovnih komponenti, što ga čini odličnom polaznom tačkom za učenje o ulaznim i izlaznim uređajima s Arduinom.
- Arduino ploča (Uno, Nano, Mega, itd.)
- Servo motor (npr. SG90 ili MG995)
- Dva trenutna tastera
- Spajanje žica
- Breadboard (opciono, ali preporučljivo)
Vodič za povezivanje
U videu, povezivanje je jednostavno. Signalni pin servo motora spojen je na pin s PWM podrškom na Arduinu, što je pin 9 u ovom primjeru. Napajanje i uzemljenje za servo spojeni su na 5V i GND pinove Arduina. Dva tastera su povezana na sličan način jedan s drugim. Jedna noga svakog tastera spojena je na uzemljenje, a druga noga spojena je na digitalni ulazni pin na Arduinu (pin 2 za "lijevi" taster i pin 3 za "desni" taster). Kod koristi interne pull-up otpornike, tako da nisu potrebni vanjski otpornici za tastere. (u videu na 00:57)

Objašnjenje koda
Kod je dizajniran da bude lako konfigurabilan. Ključni dijelovi koje korisnik može podesiti nalaze se na vrhu skice. Evo pregleda važnih varijabli i definicija koje biste mogli željeti prilagoditi za vlastiti projekat.
#include <Servo.h>
Servo myservo; // kreiraj servo objekat za upravljanje servom
int servoPin = 9;// ovaj pin mora biti jedan od onih s PWM ~
int angle =90; // početni ugao za servo
int angleStep =5;
#define LEFT 2 // pin 2 je spojen na lijevi taster
#define RIGHT 3 // pin 3 je spojen na desni taster
servoPin: Ova varijabla definira Arduino pin na koji je spojena signalna žica serva. Ključno je koristiti pin koji podržava Pulse Width Modulation (PWM), obično označen simbolom~na ploči.angle: Ovo postavlja početni ugao serva kada se Arduino pokrene. Zadana vrijednost je 90 stepeni, što obično centrira servo.angleStep: Ovo je korak za koji se ugao serva mijenja svaki put kada se pritisne taster. Vrijednost od 5 znači da će se svaki pritisak pomaknuti za 5 stepeni. Možete povećati ovo za brže kretanje ili smanjiti za finiju kontrolu.LEFTiRIGHT: Ove#definedirektive dodjeljuju digitalne pinove na koje su spojeni tasteri. Ako spojite tastere na druge pinove, morate promijeniti ove vrijednosti kako bi odgovarale vašem postavljanju.
Osnovna logika u loop() funkciji provjerava da li je taster pritisnut (čitanjem LOW signala zbog pull-up konfiguracije). Ako je "desni" taster pritisnut, smanjuje angle varijablu za angleStep. Ako je "lijevi" taster pritisnut, povećava angle. Kod uključuje provjere granica kako bi osigurao da ugao ostane unutar raspona od 0 do 180 stepeni. Funkcija myservo.write(angle) se zatim koristi za komandovanje servu da se pomakne na novu poziciju.
Demonstracija projekta uživo
U video demonstraciji, funkcionalnost je jasno prikazana. Pritiskanje i držanje "lijevog" tastera uzrokuje da servo glatko klizi lijevo, s uglom koji se povećava za 5 stepeni odjednom, sve dok ne dostigne 180 stepeni i stane. Slično tome, pritiskanje i držanje "desnog" tastera čini da servo klizi nazad desno, smanjujući ugao sve dok ne dostigne 0 stepeni. Trenutni ugao se ispisuje na Serial Monitor, omogućavajući vam da vidite tačnu poziciju serva u realnom vremenu. (u videu na 05:20)
Video poglavlja
- [00:00] Uvod u upravljanje servom s tasterima
- [00:57] Vodič za povezivanje serva i tastera
- [02:12] Objašnjenje koda, dio 1: Postavljanje i konfiguracija
- [03:25] Objašnjenje koda, dio 2: Glavna logika petlje
- [05:20] Demonstracija projekta uživo
- [06:23] Zaključak i potencijalne aplikacije
/*
* 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
}//
}
Things you might need
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBay
Resources & references
Files📁
Other files
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB