فهرست مطالب:
- مرحله 1: BoM - Bill of Material
- مرحله 2: نحوه کار PWM
- مرحله 3: نصب Hw
- مرحله 4: کالیبراسیون Servos
- مرحله 5: ایجاد یک اسکریپت پایتون
- گام ششم: مکانیسم پان-شیب
- مرحله 7: مکانیسم پان -شیب - ساخت مکانیکی
- مرحله 8: مونتاژ برق پان/شیب
- مرحله 9: اسکریپت پایتون
- مرحله 10: تست حلقه سرورها
- مرحله 11: نتیجه گیری
تصویری: Pan-Tilt Multi Servo Control: 11 مرحله (همراه با تصاویر)
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:57
در این آموزش ، نحوه کنترل چندین سرویس با استفاده از پایتون در رزبری پای را بررسی می کنیم. هدف ما مکانیسم PAN/TILT برای قرار دادن دوربین (PiCam) خواهد بود.
در اینجا می توانید نحوه کار پروژه نهایی ما را مشاهده کنید:
تست حلقه کنترل سروو کنترل:
مرحله 1: BoM - Bill of Material
قسمت های اصلی:
- رزبری پای V3 - 32 دلار آمریکا
- سنسور 5 مگاپیکسلی سنسور 1080p OV5647 مینی دوربین فیلمبرداری - 13.00 دلار آمریکا
- TowerPro SG90 9G 180 درجه میکرو سرویس (2 X)- 4.00 دلار آمریکا
- Mini Pan/ Tilt Camera Platform Anti -Vibration Camera Mount w/ 2 Servos (*) - 8.00 دلار آمریکا
- مقاومت 1K اهم (2X) - اختیاری
- متفرقه: قطعات فلزی ، نوارها و غیره (در صورت ایجاد مکانیسم Pan/Tilt)
(*) می توانید یک پلت فرم کامل Pan/Tilt را با سرویس ها خریداری کرده یا خود را بسازید.
مرحله 2: نحوه کار PWM
رزبری پای خروجی آنالوگ ندارد ، اما ما می توانیم این را با استفاده از روش PWM (مدولاسیون عرض پالس) شبیه سازی کنیم. آنچه ما انجام خواهیم داد این است که یک سیگنال دیجیتالی با فرکانس ثابت تولید کنیم ، جایی که عرض قطار پالس را تغییر می دهیم ، همانطور که در زیر نشان داده می شود "ولتاژ خروجی" متوسط ".
ما می توانیم از این سطح ولتاژ "متوسط" برای کنترل روشنایی LED استفاده کنیم:
توجه کنید که آنچه در اینجا اهمیت دارد خود فرکانس نیست ، بلکه "چرخه وظیفه" است ، یعنی رابطه بین زمان "زیاد" بودن ضربان بر دوره موج تقسیم می شود. به عنوان مثال ، فرض کنید ما فرکانس پالس 50 هرتز را در یکی از Raspberry Pi GPIO خود تولید می کنیم. دوره (p) معکوس فرکانس یا 20ms (1/f) خواهد بود. اگر می خواهیم LED ما با "نیمه" روشن باشد ، باید یک چرخه وظیفه 50٪ داشته باشیم ، این بدان معناست که "نبض" برای 10 میلی ثانیه "زیاد" خواهد بود.
این اصل برای ما بسیار مهم است ، برای کنترل موقعیت سروو ، هنگامی که "چرخه وظیفه" موقعیت سرو را مطابق شکل زیر مشخص می کند:
سروو
مرحله 3: نصب Hw
سرووها به منبع تغذیه 5 ولت خارجی متصل می شوند و پین داده آنها (در مورد من سیم کشی زرد آنها) به Raspberry Pi GPIO متصل می شود:
- GPIO 17 ==> Tilt Servo
- GPIO 27 ==> Pan Servo
فراموش نکنید که GND ها را به هم وصل کنید ==> Raspberry Pi - Servos - منبع تغذیه خارجی)
می توانید به عنوان یک گزینه ، مقاومت 1K اهم بین Raspberry Pi GPIO و پین ورودی داده سرور داشته باشید. این امر در صورت بروز مشکل سروو از RPi شما محافظت می کند.
مرحله 4: کالیبراسیون Servos
اولین کاری که باید انجام دهید این است که ویژگی های اصلی سروهای خود را تأیید کنید. در مورد من ، من از Power Pro SG90 استفاده می کنم.
از برگه داده آن می توان موارد زیر را در نظر گرفت:
- محدوده: 180 درجه
- منبع تغذیه: 4.8V (5VDC خارجی به عنوان منبع تغذیه USB خوب کار می کند)
- فرکانس کار: 50 هرتز (مدت زمان: 20 میلی ثانیه)
- عرض نبض: از 1ms تا 2ms
از لحاظ تئوری ، سروو روی آن کار می کند
- موقعیت اولیه (0 درجه) هنگامی که یک پالس 1 میلی ثانیه به پایانه داده آن اعمال می شود
- موقعیت خنثی (90 درجه) هنگامی که یک پالس 1.5 میلی ثانیه به پایانه داده آن اعمال می شود
- موقعیت نهایی (180 درجه) هنگامی که یک پالس 2 میلی ثانیه به پایانه داده آن اعمال می شود
برای برنامه ریزی موقعیت سرو با استفاده از پایتون ، دانستن خبرنگار "چرخه وظیفه" برای موقعیت های فوق بسیار مهم است ، بیایید محاسبه ای انجام دهیم:
- موقعیت اولیه ==> ((0 درجه) عرض پالس ==> 1ms ==> چرخه وظیفه = 1ms/20ms ==> 2.0٪
- موقعیت خنثی (90 درجه) عرض نبض 1.5 میلی ثانیه ==> چرخه کار = 1.5 میلی ثانیه/20 میلی متر ==> 7.5
- موقعیت نهایی (180 درجه) عرض پالس 2 ms ==> چرخه کار = 2ms/20ms ==> 10٪
بنابراین چرخه وظیفه باید در محدوده 2 تا 10 درصد متفاوت باشد.
بیایید سروها را به صورت جداگانه آزمایش کنیم. برای انجام این کار ، ترمینال رزبری خود را باز کنید و ویرایشگر پوسته Python 3 خود را به عنوان "sudo" راه اندازی کنید (زیرا شما باید با GPIO ها "فوق کاربر" باشید):
sudo python3
در پایتون شل
>>
ماژول RPI. GPIO را وارد کرده و آن را GPIO بنامید:
RPi. GPIO را به عنوان GPIO وارد کنید
تعیین کنید که از کدام طرح شماره گذاری پین می خواهید استفاده کنید (BCM یا BOARD). من این آزمایش را با BOARD انجام دادم ، بنابراین پین هایی که استفاده کردم پین های فیزیکی بودند (GPIO 17 = پین 11 و GPIO 27 پین 13). برای من آسان بود که آنها را شناسایی کنم و در حین آزمایش اشتباه نکنم (در برنامه نهایی از BCM استفاده خواهم کرد). یکی از موارد دلخواه خود را انتخاب کنید:
GPIO.setmode (GPIO. BOARD)
سروو پینی را که استفاده می کنید تعریف کنید:
tiltPin = 11
اگر در عوض ، از طرح BCM استفاده کرده اید ، 2 دستور آخر باید با موارد زیر جایگزین شود:
GPIO.setmode (GPIO. BCM)
tiltPin = 17
اکنون ، باید مشخص کنیم که این پین یک "خروجی" خواهد بود
GPIO.setup (tiltPin ، GPIO. OUT)
و فرکانس تولید شده در این پین چقدر خواهد بود ، که برای سرووی ما 50 هرتز خواهد بود:
شیب = GPIO. PWM (tiltPin ، 50)
اکنون ، بیایید شروع به تولید یک سیگنال PWM در پین با یک چرخه وظیفه اولیه کنیم (ما آن را "0" نگه می داریم):
شیب = شروع (0)
اکنون ، می توانید مقادیر مختلف چرخه وظیفه را با مشاهده حرکت سروو وارد کنید. بیایید با 2 start شروع کنیم و ببینیم چه اتفاقی می افتد (ما مشاهده می کنیم که سروو به "موقعیت صفر" می رود):
tilt. ChangeDutyCycle (2)
در مورد من ، سروو به موقعیت صفر رسید اما وقتی چرخه کار را به 3 changed تغییر دادم ، مشاهده کردم که سرو در همان وضعیت باقی می ماند و با چرخه های کاری بیشتر از 3 starting شروع به حرکت می کند. بنابراین ، 3 position موقعیت اولیه من (درجه) است. همین امر با 10 happened اتفاق افتاد ، سروو من از این مقدار بالاتر رفت و پایان آن 13 بود. بنابراین برای این سرووی خاص ، نتیجه این بود:
- 0 درجه ==> چرخه وظیفه 3
- 90 درجه ==> چرخه کار 8
- 180 درجه ==> چرخه کار 13
پس از اتمام آزمایشات ، باید PWM را متوقف کرده و GPIO ها را تمیز کنید:
شیب = توقف ()
GPIO.cleanup ()
صفحه چاپ ترمینال بالا نتیجه را برای هر دو سرویس من نشان می دهد (که نتایج مشابهی دارد). محدوده شما می تواند متفاوت باشد.
مرحله 5: ایجاد یک اسکریپت پایتون
دستورات PWM برای ارسال به سروو ما در "چرخه وظیفه" هستند ، همانطور که در آخرین مرحله دیدیم. اما معمولاً باید از "angle" در درجه به عنوان پارامتر برای کنترل سروو استفاده کنیم. بنابراین ، ما باید "زاویه" را که یک اندازه گیری طبیعی تر است در چرخه وظیفه به Pi تبدیل کنیم.
چگونه انجامش بدهیم؟ بسیار ساده! ما می دانیم که محدوده چرخه وظیفه از 3 to تا 13 goes است و این معادل زاویه هایی است که از 0 تا 180 درجه متغیر است. همچنین ، ما می دانیم که این تغییرات خطی هستند ، بنابراین می توانیم یک طرح متناسب همانطور که در بالا نشان داده شده است بسازیم. بنابراین ، با توجه به زاویه ، می توانیم یک چرخه وظیفه مربوطه داشته باشیم:
dutycycle = angle/18 + 3
این فرمول را حفظ کنید. در کد بعدی از آن استفاده خواهیم کرد.
بیایید یک اسکریپت پایتون برای اجرای آزمایشات ایجاد کنیم. اساساً ما آنچه را که قبلاً در Python Shell انجام دادیم تکرار می کنیم:
از زمان وارد کردن خواب
وارد کردن RPi. GPIO به عنوان GPIO GPIO.setmode (GPIO. BCM) GPIO.setwarnings (False) def setServoAngle (سروو ، زاویه): pwm = GPIO. PWM (سروو ، 50) pwm.start (8) وظیفه چرخه = زاویه / 18 + 3. pwm. ChangeDutyCycle (dutyCycle) sleep (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 ()
هسته اصلی کد بالا تابع setServoAngle (سروو ، زاویه) است. این تابع به عنوان آرگومان ، یک شماره GPIO سروو و مقدار زاویه ای که سروو باید در آن قرار گیرد دریافت می کند. هنگامی که ورودی این تابع "زاویه" است ، باید آن را با درصد به چرخه وظیفه تبدیل کنیم ، با استفاده از فرمول قبلاً ایجاد شده.
هنگامی که اسکریپت اجرا می شود ، باید به عنوان پارامترها ، سروو GPIO و زاویه وارد کنید.
مثلا:
sudo python3 angleServoCtrl.py 17 45
دستور بالا سروو متصل به GPIO 17 را با 45 درجه در "ارتفاع" قرار می دهد. یک فرمان مشابه می تواند برای کنترل Pan Servo (موقعیت تا 45 درجه در "آزیموت") استفاده شود:
sudo python angleServoCtrl.py 27 45
فایل angleServoCtrl.py را می توان از GitHub من بارگیری کرد
گام ششم: مکانیسم پان-شیب
سروو "Pan" دوربین ما را "افقی" ("زاویه آزیموت") و سروو "Tilt" ما آن را "عمودی" (زاویه ارتفاع) حرکت می دهد.
تصویر زیر نحوه عملکرد مکانیسم Pan/Tilt را نشان می دهد:
در طول توسعه ما "افراط" نخواهیم کرد و از مکانیسم Pan/Tilt خود فقط از 30 تا 150 درجه استفاده خواهیم کرد. این محدوده برای استفاده با دوربین کافی خواهد بود.
مرحله 7: مکانیسم پان -شیب - ساخت مکانیکی
حالا بیایید 2 سروو را به عنوان مکانیزم Pan/Tilt مونتاژ کنیم. در اینجا می توانید 2 کار انجام دهید. مکانیزم پلت فرم Pan-Tilt را همانطور که در آخرین مرحله نشان داده شده بخرید یا با توجه به نیاز خود ، مکانیزم خود را بسازید.
یک مثال می تواند نمونه ای باشد که من ساخته ام ، فقط سروها را به یکدیگر ببندم و از قطعات کوچک فلزی اسباب بازی های قدیمی استفاده کنم ، همانطور که در عکسهای بالا نشان داده شده است.
مرحله 8: مونتاژ برق پان/شیب
وقتی مکانیسم Pan/Tilt خود را مونتاژ کردید ، برای اتصال کامل برق ، عکسها را دنبال کنید.
- Pi خود را خاموش کنید.
- تمام اتصالات برقی را انجام دهید.
- دوبار بررسیش کنید
- ابتدا Pi خود را فعال کنید.
- اگر همه چیز خوب است ، سرویس های خود را تغذیه کنید.
ما در این آموزش نحوه تنظیم دوربین را بررسی نمی کنیم ، این در آموزش بعدی توضیح داده می شود.
مرحله 9: اسکریپت پایتون
بیایید یک اسکریپت پایتون ایجاد کنیم تا هر دو سرویس را به طور همزمان کنترل کنیم:
از زمان وارد کردن خواب
وارد کردن 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) # خاکستری ==> PAN def setServoAngle (سروو ، زاویه): زاویه تأیید> = 30 و زاویه 90 (نقطه وسط) ==> 150 مجموعهServoAngle (شیب ، int (sys.argv [2])) # 30 ==> 90 (نقطه میانی) ==> 150 GPIO.cleanup ()
هنگامی که اسکریپت اجرا می شود ، باید به عنوان پارامترها ، Pan angle و Tilt angle وارد کنید. مثلا:
sudo python3 servoCtrl.py 45 120
دستور بالا مکانیسم Pan/Tilt را با 45 درجه در "آزیموت" (زاویه پان) و 120 درجه "ارتفاع" (زاویه شیب) قرار می دهد. توجه داشته باشید که اگر هیچ پارامتری وارد نشود ، پیش فرض هر دو ، زاویه چرخش و شیب تا 90 درجه تنظیم می شود.
در زیر می توانید چند آزمایش را مشاهده کنید:
فایل servoCtrl.py را می توان از GitHub من بارگیری کرد.
مرحله 10: تست حلقه سرورها
بیایید یک اسکریپت پایتون ایجاد کنیم تا به طور خودکار طیف وسیعی از سرویس ها را آزمایش کند:
از زمان وارد کردن خواب
وارد کردن 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) # gray ==> PAN def setServoAngle (سروو ، زاویه): زاویه را تأیید کنید> = 30 و زاویه <= 150 pwm = GPIO. PWM (سروو ، 50) pwm.start (8) dutyCycle = angle / 18. + 3. pwm. ChangeDutyCycle (dutyCycle) خواب (0.3) pwm.stop () اگر _name_ == '_main_': برای i در محدوده (30 ، 160 ، 15): setServoAngle (تابه ، i) setServoAngle (کج ، i) برای i در محدوده (150 ، 30 ، -15): setServoAngle (تابه ، i) مجموعهServoAngle (شیب ، i) مجموعهServoAngle (تابه ، 100) مجموعهServoAngle (شیب ، 90) GPIO.cleanup ()
این برنامه به صورت خودکار یک حلقه را از 30 تا 150 درجه در هر دو زاویه اجرا می کند.
زیر نتیجه:
من فقط یک اسیلوسکوپ را متصل کردم تا نظریه PWM را همانطور که قبلاً توضیح داده شد نشان دهم.
کد بالا ، servoTest.py را می توانید از GitHub من بارگیری کنید.
مرحله 11: نتیجه گیری
مثل همیشه ، امیدوارم این پروژه بتواند به دیگران کمک کند تا به دنیای هیجان انگیز الکترونیک راه پیدا کنند!
برای اطلاعات بیشتر و کد نهایی ، لطفاً از مخزن GitHub من دیدن کنید: RPi-Pan-Tilt-Servo-Control
برای پروژه های بیشتر ، لطفاً از وبلاگ من دیدن کنید: MJRoBot.org
در زیر نگاهی اجمالی به آموزش بعدی من:
سلودوس از جنوب جهان!
شما را در دستورالعمل بعدی من می بینم!
متشکرم،
مارسلو
توصیه شده:
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robot Seguidor De Luz: 26 مرحله (همراه با تصاویر)
Romeo: Una Placa De Control Arduino Para Robótica Con Driver Incluidos - Robot 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 ایده آل برای desarrollo de prototipos robóticos و el control de motores y servos، d
DIY Remote Control Switch Kit by 2262/2272 M4 Bread Board & Relay for Maker: 4 مرحله (همراه با تصاویر)
DIY Remote Control Switch Kit by 2262/2272 M4 Bread Board & Relay for Maker: خانه هوشمند به زندگی ما می آید. اگر می خواهیم خانه هوشمند محقق شود ، به تعدادی سوئیچ کنترل از راه دور نیاز داریم. امروز ما قصد داریم یک آزمایش انجام دهیم ، یک مدار آسان برای یادگیری نظریه سوئیچ کنترل از راه دور انجام دهیم. این طراحی کیت توسط SINONING ROBOT
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: 6 مرحله (همراه با تصاویر)
RGB Led Strip Bluetooth Controller V3 + Music Sync + Ambient Light Control: این پروژه از آردوینو برای کنترل نوار LED RGB با تلفن شما از طریق بلوتوث استفاده می کند. می توانید رنگ را تغییر دهید ، چراغ ها را با موسیقی همگام سازی کنید یا آنها را به طور خودکار برای روشنایی محیط تنظیم کنید
LightMeUp! a Realtime Cross-platformed LED Strip Control: 5 مرحله (همراه با تصاویر)
LightMeUp! a Realtime Cross-platformed LED Strip Control: LightMeUp! سیستمی است که من برای کنترل RGB LED-Strip در زمان واقعی اختراع کردم ، در حالی که هزینه را پایین و عملکرد را بالا نگه می داشت. سرور در Node.js نوشته شده است و بنابراین قابل اجرا است. در مثال من ، من از Raspberry Pi 3B برای استفاده طولانی مدت استفاده می کنم
تطبیق یک گوشی تلفن همراه با تلفن همراه: 7 مرحله (همراه با تصاویر)
انطباق یک گوشی تلفن همراه با یک تلفن همراه: توسط بیل ریو ([email protected]) اقتباس شده برای دستورالعمل ها توسط موس ([email protected]) سلب مسئولیت: روش شرح داده شده در اینجا ممکن است برای شما کارساز نباشد گرفتن. اگر کار نمی کند ، یا اگر چیزی را خراب می کنید ، m نیست