Les 88: Beheer van 'n servomotor deur twee drukknoppieskakelaars te gebruik
Hierdie projek demonstreer hoe om 'n servomotor te beheer deur twee drukknoppies met 'n Arduino te gebruik. In plaas van om op 'n potensiometer of 'n reeksopdrag staat te maak, kan jy eenvoudige tasbare skakelaars gebruik om 'n servo handmatig na links of regs te beweeg. Dit is ongelooflik nuttig vir toepassings waar jy direkte, fisiese beheer oor 'n meganisme nodig het, soos die bou van 'n robotarm, die verstel van 'n kameragimbal, of die skep van 'n afstandbeheerde pan-en-tilt-stelsel. Die knoppies laat jou toe om die servo se hoek inkrementeel aan te pas, met die vermoë om die knoppie in te hou om dit oor sy volle bewegingsreeks te laat swaai.
Hier is 'n paar praktiese projekte wat jy met hierdie opstelling kan bou:
- Die bou van 'n handbeheerpaneel vir 'n robotarm of gryper.
- Die skep van 'n afstandbeheerde kameraskuif of pan-tilt-kop.
- Die ontwikkeling van 'n fisiese beheerkoppelvlak vir 'n modelvliegtuig of bootroer.
- Die maak van 'n eenvoudige "leer-hangstuk" om posisies vir 'n CNC-masjien of 3D-drukker op te neem.

Hardeware en Komponente
Hierdie projek benodig slegs 'n paar basiese komponente, wat dit 'n uitstekende beginpunt maak om oor beide invoer- en uitvoertoestelle met die Arduino te leer.
- Arduino-bord (Uno, Nano, Mega, ens.)
- Servomotor (bv. SG90 of MG995)
- Twee momentele drukknoppies
- Springdrade
- Broodbord (opsioneel maar aanbeveel)
Bedradingsgids
In die video is die bedrading eenvoudig. Die servomotor se seinpen is gekoppel aan 'n PWM-geskikte pen op die Arduino, wat pen 9 in hierdie voorbeeld is. Die krag en grond vir die servo is gekoppel aan die 5V- en GND-penne van die Arduino. Die twee drukknoppies is op 'n soortgelyke manier aan mekaar bedraad. Een been van elke knoppie is aan die grond gekoppel, en die ander been is aan 'n digitale invoerpen op die Arduino gekoppel (pen 2 vir die "links"-knoppie en pen 3 vir die "regs"-knoppie). Die kode gebruik die interne optrekweerstande, dus is geen eksterne weerstande vir die knoppies nodig nie. (in video by 00:57)

Kodeverduideliking
Die kode is ontwerp om maklik konfigureerbaar te wees. Die belangrikste gebruikerskonfigureerbare dele is aan die bokant van die skets. Hier is 'n uiteensetting van die belangrike veranderlikes en definisies wat jy dalk vir jou eie projek wil aanpas.
#include <Servo.h>
Servo myservo; // skep servo-objek om 'n servo te beheer
int servoPin = 9;// hierdie pen moet een van dié met PWM ~ wees
int angle =90; // aanvanklike hoek vir servo
int angleStep =5;
#define LEFT 2 // pen 2 is gekoppel aan links-knoppie
#define RIGHT 3 // pen 3 is gekoppel aan regs-knoppie
servoPin: Hierdie veranderlike definieer die Arduino-pen waaraan die servo se seindraad gekoppel is. Dit is noodsaaklik om 'n pen te gebruik wat Pulse Width Modulation (PWM) ondersteun, gewoonlik aangedui met 'n~-simbool op die bord.angle: Dit stel die aanvanklike hoek van die servo in wanneer die Arduino begin. Die standaardwaarde is 90 grade, wat die servo gewoonlik sentreer.angleStep: Dit is die inkrement waarmee die servo-hoek elke keer verander wanneer 'n knoppie gedruk word. 'n Waarde van 5 beteken elke druk sal die servo met 5 grade beweeg. Jy kan dit verhoog vir vinniger beweging of verlaag vir fyner beheer.LEFTenRIGHT: Hierdie#define-riglyne ken die digitale penne toe waaraan die drukknoppies gekoppel is. As jy jou knoppies aan verskillende penne bedraad, moet jy hierdie waardes verander om by jou opstelling te pas.
Die kernlogika in die loop()-funksie kontroleer of 'n knoppie gedruk is (deur 'n LAE sein te lees as gevolg van die optrekkonfigurasie). As die "regs"-knoppie gedruk word, verminder dit die angle-veranderlike met angleStep. As die "links"-knoppie gedruk word, verhoog dit die angle. Die kode sluit grenskontroles in om te verseker dat die hoek binne die 0 tot 180-grade-reeks bly. Die myservo.write(angle)-funksie word dan gebruik om die servo te beveel om na die nuwe posisie te beweeg.
Lewende Projekdemonstrasie
In die videodemonstrasie word die funksionaliteit duidelik gewys. Deur die "links"-knoppie in te druk en te hou, laat die servo glad na links swaai, met die hoek wat met 5 grade op 'n slag toeneem, totdat dit 180 grade bereik en stop. Net so, deur die "regs"-knoppie in te druk en te hou, laat die servo terug na regs swaai, wat die hoek verminder totdat dit 0 grade bereik. Die huidige hoek word op die Serial Monitor gedruk, wat jou toelaat om die presiese posisie van die servo in reële tyd te sien. (in video by 05:20)
Video-hoofstukke
- [00:00] Inleiding tot die beheer van 'n servo met knoppies
- [00:57] Bedradingsgids vir die servo en drukknoppies
- [02:12] Kodeverduideliking, deel 1: Opstelling en konfigurasie
- [03:25] Kodeverduideliking, deel 2: Die hoof-lus-logika
- [05:20] Lewende demonstrasie van die projek
- [06:23] Gevolgtrekking en potensiële toepassings
/*
* 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
}//
}
Goedere wat jy dalk nodig het
-
Amazon
-
Amazon
-
Amazon
-
AmazonServo motor on Amazonamzn.to
-
eBay
Hulpbronne en verwysings
Lêers📁
Ander lêers
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB