Satura rādītājs:
- 1. solis: BoM - materiālu saraksts
- 2. darbība. Kā darbojas PWM
- 3. darbība: Hw instalēšana
- 4. solis: Servo kalibrēšana
- 5. darbība: Python skripta izveide
- 6. solis: Pan-Tilt mehānisms
- 7. solis: Pan -Tilt mehānisms - mehāniskā konstrukcija
- 8. solis: Elektriskās pannas/noliekšanas montāža
- 9. darbība: Python skripts
- 10. solis: serveru cilpas pārbaude
- 11. solis. Secinājums
Video: Pan-Tilt Multi Servo Control: 11 soļi (ar attēliem)
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:57
Šajā apmācībā mēs izpētīsim, kā kontrolēt vairākus servos, izmantojot Python Raspberry Pi. Mūsu mērķis būs PAN/TILT mehānisms kameras (PiCam) novietošanai.
Šeit jūs varat redzēt, kā darbosies mūsu galīgais projekts:
Vadības servo vadības cilpas tests:
1. solis: BoM - materiālu saraksts
Galvenās daļas:
- Raspberry Pi V3 - 32,00 ASV dolāri
- 5 megapikseļu 1080p sensors OV5647 mini kameras video modulis - 13,00 ASV dolāri
- TowerPro SG90 9G 180 grādu mikro servo (2 X)- 4,00 ASV dolāri
- Mini panoramēšanas/ noliekšanas kameras platformas pretvibrācijas kameras stiprinājums ar 2 servos (*) - 8,00 ASV dolāri
- Rezistors 1K omi (2X) - pēc izvēles
- Dažādi: metāla detaļas, lentes utt. (Gadījumā, ja veidosit Pan/Tilt mehānismu)
(*) jūs varat iegādāties pilnu Pan/Tilt platformu ar servos vai izveidot savu.
2. darbība. Kā darbojas PWM
Raspberry Pi nav analogās izejas, taču mēs to varam simulēt, izmantojot PWM (impulsa platuma modulācijas) pieeju. Tas, ko mēs darīsim, ir ģenerēt digitālu signālu ar fiksētu frekvenci, kur mēs mainīsim impulsa vilciena platumu, kas tiks "tulkots" kā "vidējais" izejas sprieguma līmenis, kā parādīts zemāk:
Mēs varam izmantot šo "vidējo" sprieguma līmeni, lai kontrolētu LED spilgtumu, piemēram:
Ņemiet vērā, ka šeit ir svarīga nevis pati frekvence, bet "darba cikls", tas ir, attiecība starp laiku, kad impulss ir "augsts", dalīts ar viļņu periodu. Piemēram, pieņemsim, ka vienā no mūsu Raspberry Pi GPIO ģenerēsim 50 Hz impulsa frekvenci. Periods (p) apgriezīs frekvenci vai 20 ms (1/f). Ja mēs vēlamies, lai mūsu gaismas diode ar “pusi” spilgtumu, mums ir jābūt 50%darba ciklam, tas nozīmē “impulsu”, kas būs “augsts” 10 ms.
Šis princips mums būs ļoti svarīgs, lai kontrolētu mūsu servo stāvokli, kad "darba cikls" noteiks servo stāvokli, kā parādīts zemāk:
Servo
3. darbība: Hw instalēšana
Servos tiks pievienots ārējs 5V barošanas avots, un to datu tapa (manā gadījumā - dzeltenā elektroinstalācija) ir savienota ar Raspberry Pi GPIO, kā norādīts zemāk:
- GPIO 17 ==> Tilt Servo
- GPIO 27 ==> Pano servo
Neaizmirstiet savienot GND kopā ==> Raspberry Pi - Servos - ārējais barošanas avots)
Kā opcija var būt 1K omu rezistors starp Raspberry Pi GPIO un servera datu ievades tapu. Tas aizsargātu jūsu RPi servo problēmas gadījumā.
4. solis: Servo kalibrēšana
Pirmā lieta, kas jādara, ir apstiprināt jūsu servo galvenās īpašības. Manā gadījumā es izmantoju Power Pro SG90.
No tās datu lapas mēs varam apsvērt:
- Diapazons: 180o
- Barošanas avots: 4.8V (ārējais 5VDC kā USB barošanas avots darbojas labi)
- Darba frekvence: 50Hz (periods: 20 ms)
- Pulsa platums: no 1 ms līdz 2 ms
Teorētiski servo būs ieslēgts
- Sākotnējā pozīcija (0 grādi), kad tās datu terminālim tiek piemērots 1 ms impulss
- Neitrālā pozīcija (90 grādi), kad tās datu terminālim tiek pielikts 1,5 ms impulss
- Galīgā pozīcija (180 grādi), ja tās datu terminālim tiek piemērots 2 ms impulss
Lai ieprogrammētu servo pozīciju, izmantojot Python, būs ļoti svarīgi zināt korespondentu "Darba cikls" iepriekšminētajām pozīcijām, veiksim dažus aprēķinus:
- Sākotnējā pozīcija ==> (0 grādi) Pulsa platums ==> 1ms ==> Darba cikls = 1ms/20ms ==> 2,0%
- Neitrālā pozīcija (90 grādi) Pulsa platums 1,5 ms ==> Darba cikls = 1,5 ms/20 ms ==> 7,5%
- Galīgā pozīcija (180 grādi) Impulsa platums 2 ms ==> Darba cikls = 2ms/20ms ==> 10%
Tātad darba ciklam vajadzētu mainīties no 2 līdz 10 %.
Pārbaudīsim servos individuāli. Lai to izdarītu, atveriet savu Raspberry termināli un palaidiet savu Python 3 apvalka redaktoru kā "sudo" (tāpēc jums vajadzētu būt "superlietotājam", kas jārīkojas ar GPIO):
sudo python3
Vietnē Python Shell
>>
Importējiet RPI. GPIO moduli un nosauciet to par GPIO:
importēt RPi. GPIO kā GPIO
Definējiet, kuras pin numerācijas shēmas vēlaties izmantot (BCM vai BOARD). Es veicu šo pārbaudi ar BOARD, tāpēc manas tapas bija fiziskās tapas (GPIO 17 = Pin 11 un GPIO 27 Pin 13). Man bija viegli tos identificēt un testa laikā nepieļaut kļūdas (beigu programmā es izmantošu BCM). Izvēlieties vienu no savām vēlmēm:
GPIO.setmode (GPIO. BOARD)
Definējiet izmantojamo servo tapu:
tiltPin = 11
Ja tā vietā esat izmantojis BCM shēmu, pēdējās 2 komandas jāaizstāj ar:
GPIO.setmode (GPIO. BCM)
tiltPin = 17
Tagad mums jānorāda, ka šī tapa būs "izvade"
GPIO iestatīšana (tiltPin, GPIO. OUT)
Un kāda būs šajā tapā ģenerētā frekvence, ka mūsu servo būs 50Hz:
slīpums = GPIO. PWM (tiltPin, 50)
Tagad sāksim ģenerēt PWM signālu uz tapas ar sākotnējo darba ciklu (mēs to saglabāsim "0"):
slīpums = sākums (0)
Tagad jūs varat ievadīt dažādas darba cikla vērtības, novērojot servo kustību. Sāksim ar 2% un redzēsim, kas notiek (mēs redzam, ka servo iet uz "nulles pozīciju"):
tilt. ChangeDutyCycle (2)
Manā gadījumā servo pārgāja uz nulles pozīciju, bet, kad es mainīju darba ciklu uz 3%, es pamanīju, ka servo palika tajā pašā stāvoklī, sākot kustēties, ja darba cikli bija lielāki par 3%. Tātad 3% ir mana sākotnējā pozīcija (o grādi). Tas pats notika ar 10%, mans servo pārsniedza šo vērtību, papildinot savu galu par 13%. Tātad attiecībā uz šo konkrēto servo rezultāts bija šāds:
- 0 grāds ==> darba cikls 3%
- 90 grādi ==> darba cikls 8%
- 180 grādi ==> darba cikls 13%
Pēc testu pabeigšanas jums jāpārtrauc PWM un jāiztīra GPIO:
noliekt = apstāties ()
GPIO.cleanup ()
Iepriekš redzamais termināļa drukas ekrāns parāda abu manu servo (ar līdzīgiem rezultātiem) rezultātu. Jūsu diapazons var būt atšķirīgs.
5. darbība: Python skripta izveide
PWM komandas, kas jānosūta mūsu servo, ir "darba ciklos", kā mēs redzējām pēdējā posmā. Bet parasti, lai kontrolētu servo, mums jāizmanto "leņķis" grādos. Tātad, mums ir jāpārvērš "leņķis", kas ir dabiskāks mērījums mums darba ciklā, kā to saprot mūsu Pi.
Kā to izdarīt? Ļoti vienkārši! Mēs zinām, ka darba cikla diapazons svārstās no 3% līdz 13% un ka tas ir līdzvērtīgs leņķiem no 0 līdz 180 grādiem. Mēs arī zinām, ka šīs variācijas ir lineāras, tāpēc mēs varam izveidot proporcionālu shēmu, kā parādīts iepriekš. tāpēc, ņemot vērā leņķi, mums var būt atbilstošs darba cikls:
darba cikls = leņķis/18 + 3
Saglabājiet šo formulu. Mēs to izmantosim nākamajā kodā.
Izveidosim Python skriptu testu izpildei. Būtībā mēs atkārtosim to, ko mēs darījām iepriekš Python Shell:
no laika importēt miegu
importēt RPi. GPIO kā GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) def setServoAngle (servo, leņķis): pwm = GPIO. PWM (servo, 50) pwm.start (8) dutyCycle = leņķis / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) miega režīms (0.3) pwm.stop (), ja _name_ == '_main_': import sys servo = int (sys.argv [1]) GPIO.setup (servo, GPIO. OUT) setServoAngle (servo, int (sys.argv [2]))) GPIO.cleanup ()
Iepriekš minētā koda kodols ir funkcija setServoAngle (servo, leņķis). Šī funkcija saņem argumentus, servo GPIO numuru un leņķa vērtību, kur servo jānovieto. Kad šīs funkcijas ievade ir "leņķis", mums tā jāpārvērš darba ciklā procentos, izmantojot iepriekš izstrādāto formulu.
Kad skripts tiek izpildīts, jums jāievada kā parametri, servo GPIO un leņķis.
Piemēram:
sudo python3 leņķisServoCtrl.py 17 45
Iepriekš minētā komanda pozicionēs GPIO 17 pievienoto servo ar 45 grādu "pacēlumu". Līdzīgu komandu varētu izmantot Pan Servo vadībai (pozīcija līdz 45 grādiem "azimutā"):
sudo python leņķisServoCtrl.py 27 45
Failu angleServoCtrl.py var lejupielādēt no mana GitHub
6. solis: Pan-Tilt mehānisms
Servo "Pan" pārvietos "horizontāli" mūsu kameru ("azimuta leņķis") un mūsu "Tilt" servo pārvietos to "vertikāli" (pacēluma leņķis).
Zemāk redzamajā attēlā parādīts, kā darbojas Pan/Tilt mehānisms:
Attīstības laikā mēs nenonāksim "galējībās" un izmantosim savu Pan/Tilt mehānismu tikai no 30 līdz 150 grādiem. Šis diapazons būs pietiekams, lai to varētu izmantot kopā ar kameru.
7. solis: Pan -Tilt mehānisms - mehāniskā konstrukcija
Tagad salieciet mūsu 2 servos kā Pan/Tilt mehānismu. Šeit jūs varat darīt 2 lietas. Iegādājieties Pan-Tilt platformas mehānismu, kā parādīts pēdējā solī, vai izveidojiet savu atbilstoši savām vajadzībām.
Viens piemērs var būt tas, ko es uzbūvēju, tikai piestiprinot servos vienu pie otra un izmantojot mazus metāla gabalus no vecām rotaļlietām, kā parādīts iepriekš redzamajos fotoattēlos.
8. solis: Elektriskās pannas/noliekšanas montāža
Kad esat savācis Pan/Tilt mehānismu, sekojiet fotoattēliem, lai iegūtu pilnu elektrisko savienojumu.
- Izslēdziet savu Pi.
- Veiciet visus elektriskos savienojumus.
- Pārbaudiet to vēlreiz.
- Vispirms ieslēdziet savu Pi.
- Ja viss ir kārtībā, ieslēdziet savus servos.
Šajā apmācībā mēs neizpētīsim, kā iestatīt kameru, tas tiks izskaidrots nākamajā apmācībā.
9. darbība: Python skripts
Izveidosim Python skriptu, lai vienlaikus vadītu abus servos:
no laika importēt miegu
importēt RPi. GPIO kā GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) pan = 27 slīpums = 17 GPIO.setup (noliekt, GPIO. OUT) # balts => TILT GPIO.setup (pan, GPIO. OUT) # pelēks ==> PAN def setServoAngle (servo, leņķis): apgalvot leņķi> = 30 un leņķi 90 (viduspunkts) ==> 150 setServoAngle (slīpums, int (sys.argv [2])) # 30 ==> 90 (viduspunkts) ==> 150 GPIO. Tīrīšana ()
Kad skripts tiek izpildīts, kā parametri jāievada panoramēšanas leņķis un slīpuma leņķis. Piemēram:
sudo python3 servoCtrl.py 45120
Iepriekš minētā komanda novieto Pan/Tilt mehānismu ar 45 grādiem "azimutā" (panoramēšanas leņķis) un 120 "pacēluma grādos" (slīpuma leņķis). Ņemiet vērā, ka, ja netiek ievadīti parametri, noklusējuma iestatījumi būs gan panoramēšanas, gan slīpuma leņķi līdz 90 grādiem.
Zemāk varat redzēt dažus testus:
ServoCtrl.py failu var lejupielādēt no mana GitHub.
10. solis: serveru cilpas pārbaude
Tagad izveidosim Python skriptu, lai automātiski pārbaudītu visu servo klāstu:
no laika importēt miegu
importēt RPi. GPIO kā GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) pan = 27 slīpums = 17 GPIO.setup (noliekt, GPIO. OUT) # balts => TILT GPIO.setup (pan, GPIO. OUT) # pelēks ==> PAN def setServoAngle (servo, leņķis): apgalvot leņķi> = 30 un leņķi <= 150 pwm = GPIO. PWM (servo, 50) pwm.start (8) dutyCycle = leņķis / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) miega režīms (0,3) pwm.stop (), ja _name_ == '_main_': i diapazonā (30, 160, 15): setServoAngle (pan, i) setServoAngle (noliekt, i) priekš i diapazons (150, 30, -15): setServoAngle (pan, i) setServoAngle (noliekt, i) setServoAngle (pan, 100) setServoAngle (noliekt, 90) GPIO.cleanup ()
Programma automātiski izpildīs cilpu no 30 līdz 150 grādiem abos leņķos.
Zem rezultāta:
Es pievienoju osciloskopu tikai, lai ilustrētu PWM teoriju, kā paskaidrots iepriekš.
Iepriekš minēto kodu servoTest.py var lejupielādēt no mana GitHub.
11. solis. Secinājums
Kā vienmēr, es ceru, ka šis projekts var palīdzēt citiem atrast ceļu aizraujošajā elektronikas pasaulē!
Lai iegūtu sīkāku informāciju un galīgo kodu, lūdzu, apmeklējiet manu GitHub depozitāriju: RPi-Pan-Tilt-Servo-Control
Lai iegūtu vairāk projektu, lūdzu, apmeklējiet manu emuāru: MJRoBot.org
Zemāk ieskats manā nākamajā apmācībā:
Sveicieni no pasaules dienvidiem!
Uz tikšanos manā nākamajā pamācībā!
Paldies, Marselo
Ieteicams:
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robots Seguidor De Luz: 26 soļi (ar attēliem)
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robots Seguidor De Luz: Que tal amigos, siguiendo con la revisiones de placas y sensores, con el aporte de la empresa DFRobot, hoy veremos una placa con prestaciones muy interesante, y es ideāls para el desarrollo de prototipos robóticos y el control de motores y servos, d
SERVO MOTOR CONTROL, izmantojot WIFI un BLYNK: 5 soļi
SERVO MOTOR CONTROL, izmantojot WIFI un BLYNK: Sveiki, puiši, šajā pamācībā iemācīsimies kontrolēt servomotora kustību, izmantojot WiFi, izmantojot Node MCU un Blynk App
One Control Multi LED sloksnes: 3 soļi
One Control Multi LED sloksnes: Man ir 5 mēbeles, kurās es gribēju uzstādīt LED sloksnes gaismas diodes. Gaismas diodes bija jāpārvalda ar tālvadības pulti ar iespēju Alexa ON/OFF. Visām gaismas diodēm bija jāieslēdzas & mainiet krāsu sinhronizācijā, tikai vienu reizi nospiežot romote vadību. Viņi arī
Uzziniet SERVO Control (īsumā): 6 soļi
Uzziniet SERVO vadību (īsumā): Šajā modulī jūs uzzināsit par mikro vai mini servo vadību, kas ir saderīga ar arduino. Servo motoru parasti izmanto visos automatizācijas projektos, kuros ir kustīgas daļas. Tas ir ļoti svarīgi loma robotikā, precīza kustība
Hack Your Servo V1.00 - Pārvērtiet savu servo par jaudīgu lineāru izpildmehānismu: 7 soļi
Uzlauziet savu servo V1.00 - pārvērtiet savu servo par jaudīgu lineāru izpildmehānismu: ar nosacījumu, ka jums ir instrumenti un servo, kuru varat izveidot par pāris dolāriem. Izpildmehānisms stiepjas ar ātrumu aptuveni 50 mm/min. Tas ir diezgan lēns, bet ļoti spēcīgs. Noskatieties manu video ieraksta beigās, kur mazais izpildmehānisms