![Pan-Tilt Multi Servo Control: 11 krokov (s obrázkami) Pan-Tilt Multi Servo Control: 11 krokov (s obrázkami)](https://i.howwhatproduce.com/images/003/image-6088-54-j.webp)
Obsah:
- Krok 1: BoM - kusovník
- Krok 2: Ako funguje PWM
- Krok 3: Inštalácia Hw
- Krok 4: Kalibrácia serva
- Krok 5: Vytvorenie skriptu Python
- Krok 6: Mechanizmus naklápania
- Krok 7: Mechanizmus naklápania - mechanická konštrukcia
- Krok 8: Elektrická zostava otáčania/nakláňania
- Krok 9: Skript Python
- Krok 10: Smyčkový test serverov
- Krok 11: Záver
2025 Autor: John Day | [email protected]. Naposledy zmenené: 2025-01-23 15:06
![Pan-Tilt Multi Servo Control Pan-Tilt Multi Servo Control](https://i.howwhatproduce.com/images/003/image-6088-55-j.webp)
V tomto návode sa pozrieme na to, ako ovládať viac serv pomocou Pythonu na Raspberry Pi. Našim cieľom bude mechanizmus PAN/TILT na umiestnenie kamery (PiCam).
Tu môžete vidieť, ako bude náš konečný projekt fungovať:
Skúška riadiacej slučky Control Servo:
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-56-j.webp)
Krok 1: BoM - kusovník
Hlavné časti:
- Raspberry Pi V3 - 32,00 USD
- 5 -megapixelový snímač 1080p video modul mini kamery OV5647 - 13,00 USD
- Micro Servo TowerPro SG90 9G 180 stupňov (2 X)- 4,00 USD
- Mini otočná/ naklápacia platforma kamery, antivibračný držiak kamery s 2 servami (*) - 8,00 USD
- Rezistor 1K ohm (2X) - voliteľný
- Rôzne: kovové časti, pásy atď. (V prípade, že zostrojíte mechanizmus otáčania/nakláňania)
(*) môžete si kúpiť kompletnú platformu Pan/Tilt so servom alebo si postaviť vlastnú.
Krok 2: Ako funguje PWM
Raspberry Pi nemá analógový výstup, ale môžeme to simulovať pomocou prístupu PWM (Pulse Width Modulation). Čo budeme robiť, je generovať digitálny signál s pevnou frekvenciou, kde zmeníme šírku sledu impulzov, čo bude „preložené“ako „priemernú“úroveň výstupného napätia, ako je uvedené nižšie:
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-57-j.webp)
Túto „priemernú“úroveň napätia môžeme použiť na ovládanie jasu LED napríklad:
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-58-j.webp)
Všimnite si toho, že tu nie je dôležitá frekvencia, ale „pracovný cyklus“, to je vzťah medzi časom, kedy sú impulzy „vysoké“, vydelený vlnovou periódou. Predpokladajme napríklad, že na jednom z našich Raspberry Pi GPIO budeme generovať pulzovú frekvenciu 50 Hz. Perióda (p) bude inverznou frekvenciou alebo 20 ms (1/f). Ak chceme, aby naše LED diódy s „polovičným“svetlom svietili, musíme mať pracovný cyklus 50%, to znamená „pulz“, ktorý bude „vysoký“po dobu 10 ms.
Tento princíp bude pre nás veľmi dôležitý pre ovládanie polohy serva, keď „pracovný cyklus“definuje polohu serva, ako je uvedené nižšie:
Servo
Krok 3: Inštalácia Hw
![Inštalácia Hw Inštalácia Hw](https://i.howwhatproduce.com/images/003/image-6088-59-j.webp)
![Inštalácia Hw Inštalácia Hw](https://i.howwhatproduce.com/images/003/image-6088-60-j.webp)
Serva budú pripojené k externému zdroju 5 V, pričom ich dátový kolík (v mojom prípade ich žlté vedenie) sa pripojí k Raspberry Pi GPIO nasledovne:
- GPIO 17 ==> Naklápacie servo
- GPIO 27 ==> Pan Servo
Nezabudnite spojiť GND dohromady ==> Raspberry Pi - serva - externý napájací zdroj)
Medzi vstupným pinom Raspberry Pi GPIO a Server môžete mať voliteľne odpor 1 K ohm. To by chránilo vaše RPi v prípade problému so servom.
Krok 4: Kalibrácia serva
![Kalibrácia serva Kalibrácia serva](https://i.howwhatproduce.com/images/003/image-6088-61-j.webp)
![Kalibrácia serva Kalibrácia serva](https://i.howwhatproduce.com/images/003/image-6088-62-j.webp)
![Kalibrácia serva Kalibrácia serva](https://i.howwhatproduce.com/images/003/image-6088-63-j.webp)
Prvá vec, ktorú musíte urobiť, je potvrdiť hlavné charakteristiky vašich serv. V mojom prípade používam Power Pro SG90.
Z jeho technického listu môžeme zvážiť:
- Rozsah: 180o
- Napájanie: 4,8 V (externý 5 V DC ako USB zdroj funguje dobre)
- Pracovná frekvencia: 50 Hz (Obdobie: 20 ms)
- Šírka impulzu: od 1 ms do 2 ms
Servo bude teoreticky zapnuté
- Počiatočná poloha (0 stupňov), keď je na jeho dátový terminál aplikovaný impulz 1 ms
- Neutrálna poloha (90 stupňov), keď je na jeho dátový terminál aplikovaný impulz 1,5 ms
- Konečná poloha (180 stupňov), keď je na jeho dátový terminál aplikovaný impulz 2 ms
Na programovanie polohy serva pomocou Pythonu bude veľmi dôležité poznať zodpovedajúci „pracovný cyklus“pre vyššie uvedené polohy, urobme malý výpočet:
- Počiatočná poloha ==> (0 stupňov) Šírka impulzu ==> 1ms ==> Pracovný cyklus = 1ms/20ms ==> 2,0%
- Neutrálna poloha (90 stupňov) Šírka impulzu 1,5 ms ==> Pracovný cyklus = 1,5 ms/20 ms ==> 7,5%
- Konečná poloha (180 stupňov) Šírka impulzu 2 ms ==> Pracovný cyklus = 2ms/20ms ==> 10%
Pracovný cyklus by sa teda mal pohybovať v rozmedzí 2 až 10 %.
Poďme otestovať servá jednotlivo. Za týmto účelom otvorte svoj terminál Raspberry a spustite editor shellu Python 3 ako „sudo“(pretože by ste mali byť „super používateľom“, s ktorým sa dá pracovať s GPIO):
sudo python3
Na Python Shell
>>
Importujte modul RPI. GPIO a nazvite ho GPIO:
importujte RPi. GPIO ako GPIO
Definujte, ktoré schémy číslovania pinov chcete používať (BCM alebo BOARD). Tento test som urobil s BOARD, takže piny, ktoré som použil, boli fyzické piny (GPIO 17 = Pin 11 a GPIO 27 Pin 13). Bolo pre mňa ľahké ich identifikovať a nerobiť chyby počas testu (V záverečnom programe použijem BCM). Vyberte si podľa svojich preferencií:
GPIO.setmode (GPIO. BOARD)
Definujte kolík serva, ktorý používate:
tiltPin = 11
Ak ste namiesto toho použili schému BCM, posledné 2 príkazy by mali byť nahradené týmto:
GPIO.setmode (GPIO. BCM)
tiltPin = 17
Teraz musíme špecifikovať, že tento pin bude „výstupom“
GPIO.setup (tiltPin, GPIO. OUT)
A aká bude frekvencia generovaná na tomto pine, že pre naše servo bude 50 Hz:
tilt = GPIO. PWM (tiltPin, 50)
Teraz začneme generovať signál PWM na pine s počiatočným pracovným cyklom (ponecháme ho „0“):
náklon = začiatok (0)
Teraz môžete zadávať rôzne hodnoty pracovného cyklu a sledovať pohyb svojho serva. Začnime s 2% a uvidíme, čo sa stane (vidíme, že servo prejde do „nulovej polohy“):
tilt. ChangeDutyCycle (2)
V mojom prípade sa servo dostalo do nulovej polohy, ale keď som zmenil pracovný cyklus na 3%, zistil som, že servo zostalo v rovnakej polohe a začalo sa pohybovať s pracovnými cyklami väčšími ako 3%. 3% je teda moja počiatočná poloha (o stupne). To isté sa stalo s 10%, moje servo prekročilo túto hodnotu a skončilo na 13%. Takže pre toto konkrétne servo bol výsledok:
- 0 stupeň ==> pracovný cyklus 3%
- 90 stupňov ==> pracovný cyklus 8%
- 180 stupňov ==> pracovný cyklus 13%
Po dokončení testov musíte zastaviť PWM a vyčistiť GPIO:
nakloniť = zastaviť ()
GPIO.cleanup ()
Vyššie uvedená obrazovka Terminálu zobrazuje výsledok pre obe moje servá (ktoré majú podobné výsledky). Váš dosah môže byť odlišný.
Krok 5: Vytvorenie skriptu Python
![Vytvorenie skriptu Python Vytvorenie skriptu Python](https://i.howwhatproduce.com/images/003/image-6088-64-j.webp)
Príkazy PWM, ktoré sa majú odoslať na naše servo, sú v „pracovných cykloch“, ako sme videli na poslednom kroku. Obvykle však musíme ako parameter na ovládanie serva použiť „uhol“v stupňoch. Musíme teda previesť „uhol“, ktorý je pre nás v pracovnom cykle prirodzenejším meraním, ako ho chápe náš Pi.
Ako to spraviť? Veľmi jednoduché! Vieme, že rozsah pracovného cyklu sa pohybuje od 3% do 13% a že je to ekvivalentné uhlom, ktoré sa budú pohybovať od 0 do 180 stupňov. Tiež vieme, že tieto variácie sú lineárne, takže môžeme vytvoriť proporcionálnu schému, ako je uvedené vyššie. vzhľadom na uhol teda môžeme mať zodpovedajúci pracovný cyklus:
pracovný cyklus = uhol/18 + 3
Dodržujte tento vzorec. Použijeme to v nasledujúcom kóde.
Vytvorme skript Pythonu na vykonanie testov. V zásade zopakujeme to, čo sme urobili predtým v Python Shell:
z času importu spánku
importujte RPi. GPIO ako GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) def setServoAngle (servo, uhol): pwm = GPIO. PWM (servo, 50) pwm.start (8) dutyCycle = uhol / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) spánok (0,3) pwm.stop () if _name_ == '_main_': import sys servo = int (sys.argv [1]) GPIO.setup (servo, GPIO. OUT) setServoAngle (servo, int (sys.argv [2])) GPIO.cleanup ()
Jadrom vyššie uvedeného kódu je funkcia setServoAngle (servo, uhol). Táto funkcia prijíma ako argumenty, číslo GPIO serva a hodnotu uhla, na ktoré musí byť servo umiestnené. Akonáhle je zadaním tejto funkcie „uhol“, musíme ju previesť na pracovný cyklus v percentách podľa vzorca vyvinutého predtým.
Po spustení skriptu musíte zadať parametre, servo GPIO a uhol.
Napríklad:
sudo python3 angleServoCtrl.py 17 45
Vyššie uvedený príkaz umiestni servo pripojené k GPIO 17 o 45 stupňov v „nadmorskej výške“. Podobný príkaz by bolo možné použiť aj na ovládanie Pan Servo (poloha do 45 stupňov v „azimute“):
sudo python uholServoCtrl.py 27 45
Súbor AngleServoCtrl.py je možné stiahnuť z môjho GitHubu
Krok 6: Mechanizmus naklápania
![Mechanizmus naklápania Mechanizmus naklápania](https://i.howwhatproduce.com/images/003/image-6088-65-j.webp)
Servo „Pan“sa bude „horizontálne“pohybovať s našou kamerou („azimutový uhol“) a naše „Tilt“servo s ním bude „vertikálne“(výškový uhol).
Nasledujúci obrázok ukazuje, ako funguje mechanizmus Pan/Tilt:
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-66-j.webp)
Počas nášho vývoja nepôjdeme do „extrémov“a budeme používať náš mechanizmus Pan/Tilt iba od 30 do 150 stupňov. Tento rozsah bude stačiť na použitie s fotoaparátom.
Krok 7: Mechanizmus naklápania - mechanická konštrukcia
![Mechanizmus naklápania - mechanická konštrukcia Mechanizmus naklápania - mechanická konštrukcia](https://i.howwhatproduce.com/images/003/image-6088-67-j.webp)
![Mechanizmus naklápania - mechanická konštrukcia Mechanizmus naklápania - mechanická konštrukcia](https://i.howwhatproduce.com/images/003/image-6088-68-j.webp)
![Mechanizmus naklápania - mechanická konštrukcia Mechanizmus naklápania - mechanická konštrukcia](https://i.howwhatproduce.com/images/003/image-6088-69-j.webp)
Poďme teraz zostaviť naše 2 servá ako mechanizmus Pan/Tilt. Môžete tu robiť 2 veci. Kúpte si platformový mechanizmus Pan-Tilt ako na poslednom kroku alebo si vytvorte vlastný podľa svojich potrieb.
Jedným z príkladov môže byť ten, ktorý som postavil, pričom som navzájom spájal iba servá a používal malé kovové kúsky zo starých hračiek, ako je to znázornené na fotografiách vyššie.
Krok 8: Elektrická zostava otáčania/nakláňania
![Elektrická zostava otáčania/nakláňania Elektrická zostava otáčania/nakláňania](https://i.howwhatproduce.com/images/003/image-6088-70-j.webp)
![Elektrická zostava otáčania/nakláňania Elektrická zostava otáčania/nakláňania](https://i.howwhatproduce.com/images/003/image-6088-71-j.webp)
![Elektrická zostava otáčania/nakláňania Elektrická zostava otáčania/nakláňania](https://i.howwhatproduce.com/images/003/image-6088-72-j.webp)
![Elektrická zostava otáčania/nakláňania Elektrická zostava otáčania/nakláňania](https://i.howwhatproduce.com/images/003/image-6088-73-j.webp)
Akonáhle budete mať svoj mechanizmus otáčania/naklápania zostavený, postupujte podľa fotografií a získajte úplné elektrické pripojenie.
- Vypnite Pi.
- Vykonajte všetky elektrické pripojenia.
- Dvakrát skontrolujte.
- Najprv zapnite Pi.
- Ak je všetko v poriadku, napájajte serva.
V tomto návode nebudeme skúmať, ako nastaviť fotoaparát, to bude vysvetlené v nasledujúcom návode.
Krok 9: Skript Python
Vytvorme skript Python na ovládanie oboch serv súčasne:
z času importu spánku
import RPi. GPIO ako GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) pan = 27 tilt = 17 GPIO.setup (tilt, GPIO. OUT) # white => TILT GPIO.setup (pan, GPIO. OUT) # grey ==> PAN def setServoAngle (servo, angle): assert angle> = 30 and angle 90 (middle point) ==> 150 setServoAngle (tilt, int (sys.argv [2])) # 30 ==> 90 (stredný bod) ==> 150 GPIO.cleanup ()
Keď je skript spustený, musíte zadať ako parametre uhol posuvu a uhol náklonu. Napríklad:
sudo python3 servoCtrl.py 45 120
Vyššie uvedený príkaz umiestni mechanizmus otáčania/nakláňania o 45 stupňov v „azimute“(uhol posúvania) a 120 stupňoch „nadmorskej výšky“(uhol náklonu). Upozorňujeme, že ak nie sú zadané žiadne parametre, predvolené hodnoty budú uhly posuvu a náklonu nastavené na 90 stupňov.
Nasleduje niekoľko testov:
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-74-j.webp)
Súbor servoCtrl.py je možné stiahnuť z môjho GitHubu.
Krok 10: Smyčkový test serverov
Teraz vytvoríme skript Python na automatické testovanie celého radu serv:
z času importu spánku
import RPi. GPIO ako GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) pan = 27 tilt = 17 GPIO.setup (tilt, GPIO. OUT) # white => TILT GPIO.setup (pan, GPIO. OUT) # grey ==> PAN def setServoAngle (servo, angle): assert angle> = 30 and angle <= 150 pwm = GPIO. PWM (servo, 50) pwm.start (8) dutyCycle = angle / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) spánok (0,3) pwm.stop () ak _name_ == '_main_': pre i v rozsahu (30, 160, 15): setServoAngle (pan, i) setServoAngle (tilt, i) for i in rozsah (150, 30, -15): setServoAngle (pan, i) setServoAngle (tilt, i) setServoAngle (pan, 100) setServoAngle (tilt, 90) GPIO.cleanup ()
Program automaticky vykoná slučku od 30 do 150 stupňov v oboch uhloch.
Pod výsledkom:
Pripojil som osciloskop iba na ilustráciu teórie PWM, ako bolo vysvetlené vyššie.
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-75-j.webp)
Vyššie uvedený kód, servoTest.py, je možné stiahnuť z môjho GitHubu.
Krok 11: Záver
![Záver Záver](https://i.howwhatproduce.com/images/003/image-6088-76-j.webp)
Ako vždy, dúfam, že tento projekt pomôže iným nájsť si cestu do vzrušujúceho sveta elektroniky!
Podrobnosti a konečný kód nájdete v mojom depozitári GitHub: RPi-Pan-Tilt-Servo-Control
Viac projektov nájdete na mojom blogu: MJRoBot.org
Krátky pohľad na môj ďalší tutoriál:
![Obrázok Obrázok](https://i.howwhatproduce.com/images/003/image-6088-77-j.webp)
Saludos z juhu sveta!
Uvidíme sa pri mojom ďalšom pokyne!
Ďakujem, Marcelo
Odporúča:
Pán reproduktor - prenosný reproduktor DSP s 3D tlačou: 9 krokov (s obrázkami)
![Pán reproduktor - prenosný reproduktor DSP s 3D tlačou: 9 krokov (s obrázkami) Pán reproduktor - prenosný reproduktor DSP s 3D tlačou: 9 krokov (s obrázkami)](https://i.howwhatproduce.com/images/002/image-5513-13-j.webp)
Pán reproduktor - prenosný reproduktor DSP s 3D tlačou: Volám sa Simon Ashton a za tie roky som postavil veľa reproduktorov, zvyčajne z dreva. Minulý rok som dostal 3D tlačiareň, a tak som chcel vytvoriť niečo, čo je príkladom jedinečnej slobody dizajnu, ktorú 3D tlač umožňuje. Začal som hrať s
Pán Wiggly, myšiak Jiggler: 4 kroky (s obrázkami)
![Pán Wiggly, myšiak Jiggler: 4 kroky (s obrázkami) Pán Wiggly, myšiak Jiggler: 4 kroky (s obrázkami)](https://i.howwhatproduce.com/images/002/image-4775-34-j.webp)
Pán Wiggly, myšiak - myš: To vám ukáže, ako sa dá vyrobiť pán Wiggly myš. V predvolenom nastavení je väčšina inštalácií systému Windows nastavená tak, aby počítač prepol do režimu spánku po 10 alebo 15 minútach nečinnosti. Toto je zvyčajne možné ľahko deaktivovať na ovládacom paneli, ale existuje niekoľko
IOT123 - SOLÁRNY SLEDOVAČ - SKLON/PAN, RÁM PANELU, RIG MOUNTS RIG: 9 krokov (s obrázkami)
![IOT123 - SOLÁRNY SLEDOVAČ - SKLON/PAN, RÁM PANELU, RIG MOUNTS RIG: 9 krokov (s obrázkami) IOT123 - SOLÁRNY SLEDOVAČ - SKLON/PAN, RÁM PANELU, RIG MOUNTS RIG: 9 krokov (s obrázkami)](https://i.howwhatproduce.com/images/002/image-4714-73-j.webp)
IOT123 - SOLÁRNY SLEDOVAČ - SKLON/PAN, RÁM PANELU, RIG MOUNTS RIG: Väčšina návrhov pre domácich majstrov pre dvojosové solárne sledovače „tam vonku“; sú založené na mikro servo 9G, ktoré sú skutočne podhodnotené, aby mohli tlačiť okolo niekoľkých solárnych článkov, mikroovládača, batérie a krytu. Môžete navrhnúť okolo
Pán E.Z. Vývojová doska tuby: 4 kroky (s obrázkami)
![Pán E.Z. Vývojová doska tuby: 4 kroky (s obrázkami) Pán E.Z. Vývojová doska tuby: 4 kroky (s obrázkami)](https://i.howwhatproduce.com/images/001/image-2472-104-j.webp)
Pán E.Z. Rada pre rozvoj tuby: Cieľ/účel: pán E.Z. Tube je lacná zvuková platforma typu elektronka bez „železa“: žiadny výkonový transformátor, žiadne výstupné transformátory. Rúrkový zosilňovač bude mať spravidla niekoľko ťažkých, drahých transformátorov: výstupné transformátory, ktoré chránia reč
Pan Instructables Head (R): 4 kroky (s obrázkami)
![Pan Instructables Head (R): 4 kroky (s obrázkami) Pan Instructables Head (R): 4 kroky (s obrázkami)](https://i.howwhatproduce.com/images/003/image-8350-7-j.webp)
Pán Instructables Head (R): OK, tak Santa vám zabudol dať všetko toto klasické retro plnenie pančúch, takže vám ukážem, ako si ho vyrobiť … Inšpiroval ma robotický koláč Instructables (prepáčte, tretí deň práca, neprišiel na to, ako prepojiť - nefunguje pre mňa)