Lekcija 92: Upravljanje više servo motora svakim s potenciometrom | Arduino Kurs Korak po Korak
U ovom projektu naučit ćete kako izgraditi nezavisni, višekanalni servo kontroler koristeći Arduino Uno i dva potenciometra. Umjesto jednog serva koji prati jednu dugmad, ovaj vodič pokazuje kako svakom servu dati vlastiti namjenski analogni ulaz, omogućavajući vam da kontrolišete dva—pa čak i do šest—servo motora nezavisno i istovremeno. Ovo je temeljni gradivni blok za svaki projekat koji zahtijeva preciznu, ručnu kontrolu više pokretnih dijelova.

Ova postavka je nevjerovatno svestrana. Evo nekoliko praktičnih načina na koje je možete koristiti:
- Robotika: Kontrola nagiba i okretanja kamerinog gimbala ili baze i zglobova ruke malog robota.
- Animatronika: Stvaranje životnih pokreta za lutku ili animatronički lik nezavisnom kontrolom glave i očiju.
- Kontrola modela: Izgradnja prilagođenog kontrolera za RC vozila ili modele aviona za precizno podešavanje zakrilaca i krilaca.
- Automatizacija: Stvaranje stanice za ručno upravljanje za solarni tracker ili višeosni pozicionirajući pribor.
Potreban hardver
- Arduino Uno (ili bilo koja kompatibilna ploča)
- 2x servo motora (ovdje se koriste standardni servo motori od 180 stepeni)
- 2x potenciometra (10kΩ je uobičajen izbor)
- Breadboard i žice za spajanje
- Eksterno 5V napajanje (preporučljivo za više serva)
Vodič za povezivanje
Ovaj projekat zahtijeva malo više povezivanja nego postavka s jednim servom, uglavnom zato što trebate distribuirati napajanje i uzemljenje na više komponenti. Ključ je korištenje naponskih šina na breadboardu za stvaranje zajedničke 5V i GND magistrale. Dijagram povezivanja je neophodan za ovu izgradnju.

Razdvojimo veze, kao što je objašnjeno u videu (u videu na 02:23). Prvo, postavite naponske šine: spojite 5V pin Arduina na pozitivnu šinu breadboarda i GND pin na negativnu šinu. Ovo vam daje lak pristup napajanju za sve vaše komponente.
Potenciometri: Svaki potenciometar djeluje kao razdjelnik napona. Spojite desni pin svakog potenciometra na 5V šinu i lijevi pin na GND šinu. Srednji pin je "klizač" i pruža promjenjivi napon. Spojite srednji pin prvog potenciometra na analogni ulaz A0, a srednji pin drugog na A1 (u videu na 03:22).
Servo motori: Svaki servo ima tri žice. Spojite tamnu žicu (obično crnu ili smeđu) na GND šinu. Spojite srednju žicu (obično crvenu) na 5V šinu. Na kraju, spojite signalnu žicu (obično narandžastu ili žutu) na pin s PWM podrškom na Arduinu. Signalna žica prvog serva ide na pin 3, a signalna žica drugog serva ide na pin 5 (u videu na 04:01). Zapamtite, morate koristiti pinove s PWM podrškom (označene tildom "~" na Unu) za kontrolu serva.
Objašnjenje koda
Kod se zasniva na standardnom primjeru "Knob" iz Arduino IDE-a, ali je modificiran za upravljanje s dva serva. Logika je jednostavna: pročitajte analognu vrijednost s potenciometra, mapirajte je u ugao i naredite servu da se pomakne na taj ugao. Konfiguracijski dio na vrhu koda je mjesto gdje ćete izvršiti sva podešavanja.
Ovdje je korisnički konfigurabilni dio koji definira pinove i kreira servo objekte:
#include <Servo.h>
//**** postavke serva 1
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Mora se koristiti pin s PWM podrškom
int servo1Value;
//**** kraj postavki serva 1
//**** postavke serva 2
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Mora se koristiti pin s PWM podrškom
int servo2Value;
//**** kraj postavki serva 2
Ovo je srž konfiguracije. Da biste dodali treći servo, kopirali biste blok "postavke serva 2", promijenili sve "2" u "3", dodijelili novi analogni pin (npr. A2) i novi PWM pin (npr. 9). Klasa Servo je ugrađena u Arduino IDE, tako da nisu potrebne dodatne biblioteke.
U funkciji setup(), naredba servo.attach(pin) govori Arduinu koji je pin spojen na signalnu žicu svakog serva. Morate imati liniju za svaki servo koji koristite.
void setup() {
//Robojax.com višestruki servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
U loop(), kod čita vrijednost potenciometra, mapira je u raspon od 0-180 stepeni i zapisuje taj ugao na servo. delay(5) na kraju je parametar za podešavanje. Kao što je demonstrirano u videu, smanjenje ove vrijednosti s 15 na 5 milisekundi čini pokret serva mnogo glatkijim i eliminira vibracije (u videu na 12:00).
Demonstracija uživo projekta
Jednom kada spojite krug i prenesete kod, demonstracija je trenutna. Kada uključite Arduino, svaki servo će se pomaknuti na poziciju određenu trenutnom postavkom njegovog odgovarajućeg potenciometra. Dok okrećete dugme, njegov servo će glatko pratiti pokret. Video demonstrira da dva serva rade potpuno nezavisno, omogućavajući složene, istovremene pokrete. Ako primijetite bilo kakvo podrhtavanje ili vibracije, podešavanje vrijednosti delay() u petlji je prva stvar koju treba pokušati.
Poglavlja
- [00:00] Uvod i pregled projekta
- [00:56] Razumijevanje servo motora
- [02:23] Šema povezivanja za dva servoa i potenciometra
- [04:15] Detaljno objašnjenje povezivanja
- [06:49] Objašnjenje koda: Konfiguracija i podešavanje
- [09:15] Objašnjenje koda: Logika upravljanja i mapiranje
- [11:15] Živa demonstracija i podešavanje
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * 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/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Things you might need
-
Amazon
-
Amazon
-
eBay
-
AliExpressPurchase SG90 Servo motor 180 or 360 from AliExpresss.click.aliexpress.com
Resources & references
No resources yet.
Files📁
Other files
-
SG90 Servo motor datasheet
robojax-servo-SG90_datasheet.pdf0.12 MB