Мазмуну:
- 1 -кадам: БМ - Материалдык эсеп
- 2 -кадам: PWM кантип иштейт
- 3 -кадам: Hw орнотуу
- 4 -кадам: Servos калибрлөө
- 5 -кадам: Python скриптин түзүү
- 6-кадам: Pan-Tilt механизми
- 7 -кадам: Pan -Tilt механизми - Механикалык курулуш
- 8 -кадам: Электр Pan/Tilt жамааты
- 9 -кадам: Python Script
- 10 -кадам: Серверлердин Loop Test
- 11 -кадам: Жыйынтык
Video: Pan-Tilt Multi Servo Control: 11 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:42
Бул үйрөткүчтө биз Raspberry Piдеги Python аркылуу бир нече серволорду кантип башкарууну изилдейбиз. Биздин максат камераны (PiCam) жайгаштыруу үчүн PAN/TILT механизми болот.
Бул жерде сиз биздин акыркы долбоорубуз кандай иштээрин көрө аласыз:
Control Servo Control циклинин сыноосу:
1 -кадам: БМ - Материалдык эсеп
Негизги бөлүктөр:
- Raspberry Pi V3 - 32.00 АКШ доллары
- 5 мегапиксел 1080p сенсор OV5647 Mini камера видео модулу - 13.00 АКШ доллары
- TowerPro SG90 9G 180 градус Micro Servo (2 X)- 4.00 АКШ доллары
- Mini Pan/ Tilt Камера Платформасы Вибрацияга каршы Камера Ма/ 2 сервос (*) - US $ 8.00
- Резистор 1K ом (2X) - Милдеттүү эмес
- Ар кандай: металл тетиктер, тилкелер ж. Б.
(*) сиз servo менен толук Pan/Tilt платформасын сатып алсаңыз же өзүңүз курсаңыз болот.
2 -кадам: PWM кантип иштейт
Raspberry Pi аналогдук чыгууга ээ эмес, бирок биз муну PWM (Pulse Width Modulation) ыкмасын колдонуу менен окшоштура алабыз. Биз кыла турган нерсе - белгиленген жыштык менен санариптик сигналды жаратуу, анда биз импульстук поезддин туурасын өзгөртөбүз, ал төмөндө көрсөтүлгөндөй "орточо" чыгуу чыңалуусунун деңгээли катары "которулат":
Биз бул "орточо" чыңалуу деңгээлин LED жарыгын контролдоо үчүн колдонсок болот:
Белгилей кетчү нерсе, бул жерде жыштыктын өзү эмес, "Милдет циклинин" мааниси бар, бул пульстун "бийик" болгон мезгилинин толкун мезгилине бөлүнүшү. Мисалы, биз Raspberry Pi GPIO бирибизде 50 Гц импульс жыштыгын түзөбүз дейли. (P) мезгили жыштыкка же 20msге (1/f) тескери болот. Эгерде биз LEDдин "жарым" жарык болушун кааласак, бизде 50%Милдеттүү цикл болушу керек, бул 10 мс үчүн "Жогорку" боло турган "импульсту" билдирет.
Бул принцип биз үчүн өтө маанилүү болот, биздин "servo" позициябызды көзөмөлдөө үчүн, "Duty Cycle" төмөндө көрсөтүлгөндөй servo позициясын аныктайт:
Servo
3 -кадам: Hw орнотуу
Сервалар 5V тышкы булагына туташат, алардын маалымат пини (менин учурда, алардын сары зымдары) Raspberry Pi GPIO менен төмөндөгүдөй туташат:
- GPIO 17 ==> Tilt Servo
- GPIO 27 ==> Pan Servo
GNDлерди бирге туташтырууну унутпаңыз ==> Raspberry Pi - Servos - Тышкы энергия менен камсыздоо)
Сиз опция катары Raspberry Pi GPIO менен Server маалымат киргизүү пининин ортосунда 1K ом резисторуна ээ боло аласыз. Бул сервопроблемада сиздин RPiңизди коргойт.
4 -кадам: Servos калибрлөө
Эң биринчи нерсе - бул сервоприводдоруңуздун негизги мүнөздөмөсүн ырастоо. Менин учурда, мен Power Pro SG90 колдонуп жатам.
Анын маалымат барагынан биз төмөнкүлөрдү карап чыга алабыз:
- Аралыгы: 180o
- Электр энергиясы менен камсыздоо: 4.8V (тышкы 5VDC USB кубаты менен жакшы иштейт)
- Иштөө жыштыгы: 50 Гц (Мөөнөтү: 20 мс)
- Pulse туурасы: 1ms тартып 2ms
Теориялык жактан алганда, серво өз алдынча болот
- Баштапкы абал (0 градус), анын маалымат терминалына 1 мс импульс колдонулганда
- Нейтралдуу позиция (90 градус), анын маалымат терминалына 1,5 мс импульс колдонулганда
- Акыркы позиция (180 градус), анын маалымат терминалына 2 мс импульс колдонулганда
Python аркылуу серво позициясын программалоо үчүн жогоруда аталган кызматтар үчүн "Duty Cycle" корреспондентин билүү абдан маанилүү болот, келгиле, бир аз эсептеп көрөлү:
- Баштапкы Позициясы ==> (0 градус) Пульс туурасы ==> 1ms ==> Милдет цикл = 1ms/20ms ==>> 2.0%
- Нейтралдуу абал (90 градус) Pulse туурасы 1.5 мс ==> Милдет цикл = 1.5ms/20ms ==> 7.5%
- Акыркы позициясы (180 градус) Pulse туурасы 2 ms ==> Duty Cycle = 2ms/20ms ==> 10%
Ошентип, Duty Cycle 2ден 10 %га чейин өзгөрүшү керек.
Келгиле, серволорду жекече сынап көрөлү. Бул үчүн, Raspberry терминалыңызды ачыңыз жана Python 3 shell редакторуңузду "sudo" катары иштетиңиз (анткени сиз GPIO менен иштөө үчүн "супер колдонуучу" болушуңуз керек):
sudo python3
Python Shell боюнча
>>
RPI. GPIO модулун импорттоп, аны GPIO деп атаңыз:
GPO катары RPi. GPIO импорттоо
Кайсы пин номерлөө схемаларын колдонууну каалаарыңызды аныктаңыз (BCM же BOARD). Мен бул тестти BOARD менен кылдым, ошондуктан мен колдонгон казыктар физикалык казыктар болчу (GPIO 17 = Pin 11 жана GPIO 27 Pin 13). Аларды аныктоо жана тест учурунда ката кетирбөө мага оңой болду (Акыркы программада BCM колдоном). Каалооңуздун бирин тандаңыз:
GPIO.setmode (GPIO. BOARD)
Сиз колдонгон servo пинди аныктаңыз:
tiltPin = 11
Эгерде анын ордуна, сиз BCM схемасын колдонгон болсоңуз, анда акыркы 2 буйрук төмөнкүдөй алмаштырылышы керек:
GPIO.setmode (GPIO. BCM)
tiltPin = 17
Эми, биз бул пин "чыгаруу" болорун такташыбыз керек
GPIO.setup (tiltPin, GPIO. OUT)
Жана бул пинде өндүрүлгөн жыштык кандай болот, биздин серво үчүн 50 Гц болот:
эңкейтүү = GPIO. PWM (tiltPin, 50)
Эми, пин кызматында PWM сигналын генерациялоону баштайлы (биз аны "0" бойдон калтырабыз):
эңкейтүү = баштоо (0)
Эми, сиз сервонун кыймылын байкап, ар кандай милдет циклинин маанилерин киргизе аласыз. Келгиле, 2% менен баштайлы жана эмне болорун көрөлү (сервонун "нөлдүк абалга" баратканын көрөбүз):
жантаюу. ӨзгөртүүDutyCycle (2)
Менин учурда, серво нөлгө чыкты, бирок мен кызмат циклин 3% га өзгөрткөнүмдө, сервонун 3% дан көп кызмат циклдери менен жыла баштаганы, ошол эле абалда калганын байкадым. Ошентип, 3% - бул менин баштапкы позициям (о градус). Ошол эле 10%менен болгон, менин сервом бул мааниден ашып, 13%аяктады. Ошентип, бул өзгөчө серво үчүн натыйжа мындай болду:
- 0 даража ==> милдет цикли 3%
- 90 градус ==> кызмат цикли 8%
- 180 градус ==> кызмат цикли 13%
Тесттериңизди аяктагандан кийин, PWMди токтотуп, GPIOдорду тазалашыңыз керек:
эңкейтүү = токтотуу ()
GPIO.cleanup ()
Жогорудагы Терминалды басып чыгаруу экөө тең менин серволорумдун жыйынтыгын көрсөтөт (бул окшош натыйжаларга ээ). Сиздин диапазонуңуз ар кандай болушу мүмкүн.
5 -кадам: Python скриптин түзүү
Биздин сервого жөнөтүлө турган PWM буйруктары, биз акыркы кадамда көргөндөй "кызмат циклдеринде". Бирок, адатта, биз servo көзөмөлдөө үчүн параметр катары даражада "бурчту" колдонушубуз керек. Ошентип, биз "бурчту" конвертация кылышыбыз керек, бул биздин циклде биз түшүнгөндөй табигый өлчөө.
Муну кандай жасаш керек? Абдан жөнөкөй! Биз билебиз, цикл диапазону 3% дан 13% га чейин барат жана бул 0дөн 180 градуска чейинки бурчтарга барабар. Ошондой эле, биз бул вариациялар сызыктуу экенин билебиз, ошондуктан жогоруда көрсөтүлгөндөй пропорционалдуу схеманы түзө алабыз. Ошентип, бир бурчту эске алып, бизде корреспонденттик кызмат цикли болушу мүмкүн:
dutycycle = бурч/18 + 3
Бул формуланы сактаңыз. Биз аны кийинки коддо колдонобуз.
Тесттерди аткаруу үчүн Python скриптин түзөлү. Негизинен, биз Python Shellде мурун кылганды кайталайбыз:
Убакытты импорттоо
RPi. GPIO импорту GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) def setServoAngle (servo, angle): pwm = GPIO. PWM (servo, 50) pwm.start (8) dutyCycle = бурч / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) уйку (0.3) pwm.stop () if _name_ == '_main_': импорттук sys servo = int (sys.argv [1]) GPIO.setup (servo, GPIO. OUT) setServoAngle (servo, int (sys.argv [2])) GPIO.cleanup ()
Жогорудагы коддун өзөгүн setServoAngle (servo, angle) функциясы түзөт. Бул функция аргумент катары, servo GPIO номерин жана servo жайгаштырылышы керек болгон бурчтун маанисин алат. Бул функциянын кириши "бурч" болгондон кийин, биз аны мурда иштелип чыккан формуланы колдонуу менен пайыздык циклге которушубуз керек.
Скрипт аткарылганда, сиз параметрлер, servo GPIO жана бурч катары киришиңиз керек.
Мисалы:
sudo python3 angleServoCtrl.py 17 45
Жогорудагы буйрук GPIO 17ге туташкан сервону 45 градус менен "бийиктикте" жайгаштырат. Окшош буйрук Pan Servo көзөмөлү үчүн колдонулушу мүмкүн ("азимутта" 45 градуска чейинки абал):
sudo python бурчуServoCtrl.py 27 45
AngleServoCtrl.py файлын менин GitHubдан жүктөп алса болот
6-кадам: Pan-Tilt механизми
"Пан" сервосу камерабызды "горизонталдуу" жылдырат ("азимут бурчу") жана "Tilt" сервосу аны "вертикалдуу" (бийиктик бурчу) жылдырат.
Төмөндөгү сүрөттө Pan/Tilt механизми кандай иштээри көрсөтүлгөн:
Өнүгүү учурунда биз "чектен" чыкпайбыз жана Pan/Tilt механизмибизди 30дан 150 градуска чейин гана колдонобуз. Бул диапазон камера менен колдонуу үчүн жетиштүү болот.
7 -кадам: Pan -Tilt механизми - Механикалык курулуш
Келгиле, Pan/Tilt механизми катары биздин 2 сервону чогулталы. Бул жерде сиз 2 нерсени жасай аласыз. Pan-Tilt платформасынын механизмин акыркы кадамда көрсөтүлгөндөй сатып алыңыз же өзүңүздүн керектөөлөрүңүзгө ылайык куруңуз.
Бир мисал, мен курган мисал боло алат, жөн гана серволорду бири -бирине байлап, жана жогорудагы сүрөттөрдө көрсөтүлгөндөй эски оюнчуктардын кичинекей металл бөлүктөрүн колдонуп.
8 -кадам: Электр Pan/Tilt жамааты
Сиз Pan/Tilt механизмин чогулткандан кийин, толук электрдик туташуу үчүн сүрөттөрдү ээрчиңиз.
- Пиңизди өчүрүңүз.
- Бардык электрдик туташууларды жасаңыз.
- Аны эки жолу текшериңиз.
- Биринчи Pi'ни күйгүзүңүз.
- Эгер баары ойдогудай болсо, серверлериңизди кубаттаңыз.
Биз бул үйрөткүчтө камераны кантип орнотууну изилдебейбиз, бул кийинки үйрөткүчтө түшүндүрүлөт.
9 -кадам: Python Script
Келгиле, эки сервону бир убакта көзөмөлдөө үчүн Python Script түзөлү:
Убакытты импорттоо
RPi. GPIO импорту 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): бурчту ырастоо> = 30 жана бурч 90 (орто чекит) ==> 150 setServoAngle (tilt, int (sys.argv [2])) # 30 ==> 90 (орто чекит) ==> 150 GPIO.cleanup ()
Сценарий аткарылганда, сиз параметрлер, Пан бурчу жана Тил бурчу катары киришиңиз керек. Мисалы:
sudo python3 servoCtrl.py 45 120
Жогорудагы буйрук Pan/Tilt механизмин 45 градус "азимутта" (Пан бурчу) жана 120 градус "бийиктикте" (Tilt Angle) жайгаштырат. Белгилей кетсек, эгер эч кандай параметрлер киргизилбесе, демейки экөө тең болот, пан жана эңкейиш бурчтары 90 градуска чейин.
Төмөндө сиз кээ бир тесттерди көрө аласыз:
ServoCtrl.py файлын менин GitHubдан жүктөп алса болот.
10 -кадам: Серверлердин Loop Test
Келгиле, сервистердин толук спектрин автоматтык түрдө текшерүү үчүн Python Script түзөлү:
Убакытты импорттоо
RPi. GPIO импорту 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): бурчту ырастоо> = 30 жана бурч <= 150 pwm = GPIO. PWM (servo, 50) pwm.start (8) dutyCycle = бурч / 18. + 3. pwm. ChangeDutyCycle (utyCycle) уйку (0.3) диапазон (150, 30, -15): setServoAngle (пан, мен) setServoAngle (эңкейтүү, мен) setServoAngle (көмөч, 100) setServoAngle (эңкейүү, 90) GPIO.cleanup ()
Программа автоматтык түрдө эки бурчта 30дан 150 градуска чейинки циклди аткарат.
Жыйынтыктын астында:
Мен осциллографты PWM теориясын көрсөтүү үчүн гана туташтырдым.
Жогорудагы кодду, servoTest.py менин GitHubдан көчүрүп алса болот.
11 -кадам: Жыйынтык
Дайыма эле, бул долбоор башкаларга электрониканын кызыктуу дүйнөсүнө жол табууга жардам берет деп ишенем!
Чоо-жайын жана акыркы кодду алуу үчүн GitHub депозитарийиме баш багыңыз: RPi-Pan-Tilt-Servo-Control
Башка долбоорлор үчүн, менин блогума баш багыңыз: MJRoBot.org
Төмөндө менин кийинки үйрөткүчүмдүн бир көрүнүшү:
Дүйнөнүн түштүгүнөн салам!
Кийинки көрсөтмөмдө көрүшкөнчө!
Рахмат, Marcelo
Сунушталууда:
Cat Food Access Control (ESP8266 + Servo Motor + 3D Басып чыгаруу): 5 кадам (Сүрөттөр менен)
Мышыктардын азык -түлүккө жетүүсүн көзөмөлдөө (ESP8266 + Servo Motor + 3D басып чыгаруу): Бул долбоор мен карыя диабет мышыгы Чаз үчүн автоматташтырылган мышык тамак табагын жасоо процессин камтыйт. Көргүлө, ал инсулинди ала электе эртең мененки тамакты ичиши керек, бирок мен көбүнчө уктаар алдында анын тамагын алууну унутуп калам
Arduino Control Relay Module менен Smart Home кантип жасалат - Үйдү автоматташтыруу идеялары: 15 кадам (сүрөттөр менен)
Arduino Control Relay Module менен Smart Home кантип жасалат | Үйдү автоматташтыруу идеялары: Бул үйдү автоматташтыруу долбоорунда биз 5 тиричилик техникасын башкара турган акылдуу үй реле модулун иштеп чыгабыз. Бул реле модулу Мобилдик же смартфондон, IR пультунан же телекөрсөтүүдөн, Кол которгучтан башкарылышы мүмкүн. Бул акылдуу эстафета дагы сезе алат
24 Watt LED Gight Light Control менен: 8 кадам (сүрөттөр менен)
Жарыктыкты көзөмөлдөөчү 24 Ватт LED Grow Light: Тамак -аш өстүрүү менин сүйүктүү хоббилеримдин бири, анткени мен органикалык азыктардын жана дени сак тамактануунун чоң күйөрманымын. Бул Instructable сизге өсүп келе жаткан муктаждыктарыңызга ылайык кызыл/көк жарыктыгын көзөмөлдөөчү LED чырагын кантип курууну көрсөтөт жана сизге экспозицияга мүмкүнчүлүк берет
Жарык чыгаруунун Ultra Simple Control менен Джоуль Уурусу: 6 кадам (Сүрөттөр менен)
Жарыктын чыгышын Ultra Жөнөкөй Башкаруу менен Жоуль Ууру: Джоуль Уурунун схемасы - жаңы электрондук экспериментатор үчүн эң сонун интрее жана сансыз жолу кайра чыгарылган, чындыгында Google издөө 245000 хит берет! Эң көп кездешкен схема 1 -кадамда көрсөтүлгөн
DIY Multi Featured Robot Arduino менен: 13 кадам (сүрөттөр менен)
DIY Multi Featured Robot Arduino менен: Бул робот негизинен Arduino түшүнүү жана Arduino ар кандай долбоорлорун бириктирүү үчүн курулган жана көп функциялуу Arduino роботун түзөт. Анан дагы ким үй жаныбарынын роботуна ээ болгусу келбейт? Ошентип, мен аны BLUE ROVIER 316 деп атадым. Мен кооз сатып алмакмын