Lecția 88: Controlul unui servomotor folosind două butoane de tip push-button
Acest proiect demonstrează cum să controlezi un motor servo folosind două butoane apăsătoare cu un Arduino. În loc să te bazezi pe un potențiometru sau pe o comandă serială, poți folosi comutatoare tactile simple pentru a muta manual un servo spre stânga sau dreapta. Acest lucru este incredibil de util pentru aplicații în care ai nevoie de control fizic direct asupra unui mecanism, cum ar fi construirea unui braț robotic, reglarea unui gimbal pentru cameră sau crearea unui sistem de panoramare și înclinare controlat de la distanță. Butoanele îți permit să ajustezi incremental unghiul servoului, cu posibilitatea de a ține apăsat butonul pentru a-l deplasa pe întreaga sa gamă de mișcare.
Iată câteva proiecte practice pe care le poți construi cu această configurație:
- Construirea unui panou de control manual pentru un braț robotic sau o cleștă.
- Crearea unui glisor pentru cameră sau a unui cap de panoramare-înclinare controlat de la distanță.
- Dezvoltarea unei interfețe de control fizic pentru cârma unui avion model sau a unei bărci.
- Realizarea unui simplu „pendant de învățare” pentru a înregistra poziții pentru o mașină CNC sau o imprimantă 3D.

Hardware și componente
Acest proiect necesită doar câteva componente de bază, fiind un punct de plecare excelent pentru a învăța despre dispozitivele de intrare și ieșire cu Arduino.
- Placă Arduino (Uno, Nano, Mega etc.)
- Motor servo (de exemplu, SG90 sau MG995)
- Două butoane apăsătoare momentane
- Fire de legătură
- Breadboard (opțional, dar recomandat)
Ghid de cablare
În videoclip, cablarea este simplă. Pinul de semnal al motorului servo este conectat la un pin cu capacitate PWM de pe Arduino, care este pinul 9 în acest exemplu. Alimentarea și masa pentru servo sunt conectate la pinii 5V și GND ai Arduino. Cele două butoane apăsătoare sunt cablate într-un mod similar unul cu celălalt. Un picior al fiecărui buton este conectat la masă, iar celălalt picior este conectat la un pin de intrare digitală de pe Arduino (pinul 2 pentru butonul „stânga” și pinul 3 pentru butonul „dreapta”). Codul folosește rezistențele interne de pull-up, deci nu sunt necesare rezistențe externe pentru butoane. (în videoclip la 00:57)

Explicația codului
Codul este conceput pentru a fi ușor configurabil. Părțile cheie configurabile de utilizator sunt în partea de sus a schiței. Iată o defalcare a variabilelor și definițiilor importante pe care ai putea dori să le ajustezi pentru propriul proiect.
#include <Servo.h>
Servo myservo; // creează obiectul servo pentru a controla un servo
int servoPin = 9;// acest pin trebuie să fie dintre cei cu PWM ~
int angle =90; // unghiul inițial pentru servo
int angleStep =5;
#define LEFT 2 // pinul 2 este conectat la butonul stânga
#define RIGHT 3 // pinul 3 este conectat la butonul dreapta
servoPin: Această variabilă definește pinul Arduino la care este conectat firul de semnal al servoului. Este crucial să folosești un pin care suportă Modulația în Lățime a Impulsurilor (PWM), de obicei marcat cu simbolul~pe placă.angle: Aceasta setează unghiul inițial al servoului când pornește Arduino. Valoarea implicită este 90 de grade, care de obicei centrează servoul.angleStep: Acesta este incrementul cu care se schimbă unghiul servoului de fiecare dată când este apăsat un buton. O valoare de 5 înseamnă că fiecare apăsare va muta servoul cu 5 grade. Poți crește această valoare pentru o mișcare mai rapidă sau o poți scădea pentru un control mai fin.LEFTșiRIGHT: Aceste directive#defineatribuie pinii digitali la care sunt conectate butoanele apăsătoare. Dacă cablați butoanele la alți pini, trebuie să schimbați aceste valori pentru a se potrivi cu configurația voastră.
Logica de bază din funcția loop() verifică dacă un buton este apăsat (citind un semnal LOW datorită configurației de pull-up). Dacă butonul „dreapta” este apăsat, scade variabila angle cu angleStep. Dacă butonul „stânga” este apăsat, crește angle. Codul include verificări ale limitelor pentru a se asigura că unghiul rămâne în intervalul de la 0 la 180 de grade. Funcția myservo.write(angle) este apoi folosită pentru a comanda servoului să se miște la noua poziție.
Demonstrație live a proiectului
În demonstrația video, funcționalitatea este clar arătată. Apăsarea și menținerea butonului „stânga” face ca servoul să se deplaseze lin spre stânga, cu unghiul incrementându-se cu 5 grade la fiecare pas, până când ajunge la 180 de grade și se oprește. În mod similar, apăsarea și menținerea butonului „dreapta” face ca servoul să se deplaseze înapoi spre dreapta, scăzând unghiul până când ajunge la 0 grade. Unghiul curent este afișat pe Monitorul Serial, permițându-ți să vezi poziția exactă a servoului în timp real. (în videoclip la 05:20)
Capitolele videoclipului
- [00:00] Introducere în controlul unui servo cu butoane
- [00:57] Ghid de cablare pentru servo și butoanele apăsătoare
- [02:12] Explicația codului, partea 1: Configurare și setări
- [03:25] Explicația codului, partea 2: Logica buclei principale
- [05:20] Demonstrație live a proiectului
- [06:23] Concluzie și aplicații potențiale
/*
* 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
}//
}
Lucruri de care ai putea avea nevoie
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBay
Resurse și referințe
Fișiere📁
Alte fișiere
-
Fișa tehnică a motorului SG90 Seroo
robojax-servo-SG90_datasheet.pdf0.12 MB