فهرست مطالب:

کاشی های پیانو پخش بازوی ربات: 5 مرحله
کاشی های پیانو پخش بازوی ربات: 5 مرحله

تصویری: کاشی های پیانو پخش بازوی ربات: 5 مرحله

تصویری: کاشی های پیانو پخش بازوی ربات: 5 مرحله
تصویری: پسر باید...🗿😐 2024, جولای
Anonim
کاشی های پیانو در حال بازی بازوی ربات
کاشی های پیانو در حال بازی بازوی ربات

این گروه متشکل از 2 مهندس اتوماسیون از UCN است که ایده درخشانی را به وجود آوردند که ما برای انجام و توسعه آن انگیزه داریم. این ایده مبتنی بر یک برد آردوینو است که یک بازوی روباتیک را کنترل می کند. برد آردوینو مغز عملیات است و سپس محرک عملیات ، بازوی Robotic ، آنچه را که لازم است انجام می دهد. توضیحات دقیق تر بعداً بیان می شود.

مرحله 1: تجهیزات

تجهیزات
تجهیزات

بازوی ربات:

Phantomx Pincher Robot Arm Kit Maek II (https://learn.trossenrobotics.com/38-interbotix-ro…)

نرم افزار روبات- https://www.arduino.cc/fa/Main/OldSoftwareRelease… دوربین تشخیص رنگ:

دوربین CMUcam5 Pixy - (https://charmedlabs.com/default/pixy-cmucam5/)

نرم افزار - PixyMon (https://cmucam.org/projects/cmucam5/wiki/Install_PixyMon_on_Windows_Vista_7_8)

مرحله 2: راه اندازی Arduino

راه اندازی آردوینو
راه اندازی آردوینو

در اینجا می توانید تنظیمات روی برد را مشاهده کنید ، که بسیار آسان است.

در سمت چپ منبع تغذیه قرار دارد.

وسط برای اولین سروو است ، که بعداً به سروهای دیگر متصل می شود ، سروو توسط سروو.

قسمت پایینی جایی است که ما برد را از طریق رایانه یا لپ تاپ کنترل می کنیم ، که در انتهای دیگر ورودی USB دارد.

مرحله 3: برنامه نهایی

||| برنامه |||

#عبارتند از

#شامل #شامل "poses.h" #include // Pixy Library #include

#تعریف POSECOUNT 5

BioloidController bioloid = BioloidController (1000000)؛

const int SERVOCOUNT = 5؛ شناسه int ؛ int pos؛ بولی IDCheck؛ بولی RunCheck؛

void setup () {pinMode (0، OUTPUT)؛ ax12SetRegister2 (1 ، 32 ، 50) ؛ // شماره مشترک 1 ثبت 32 را روی سرعت 50 تنظیم کنید. ax12SetRegister2 (2 ، 32 ، 50) ؛ // شماره مشترک 2 را ثبت کنید 32 را روی سرعت 50. ax12SetRegister2 (3 ، 32 ، 50) ؛ // تنظیم شماره مشترک 3 ثبت 32 در سرعت 50. ax12SetRegister2 (4، 32، 50)؛ // شماره مشترک 4 ثبت 32 در سرعت 50. ax12SetRegister2 (5، 32، 100)؛ // تنظیم شماره مشترک 5 ثبت 32 تا سرعت 100. // مقداردهی اولیه id = 1؛ pos = 0؛ IDCheck = 1 ؛ RunCheck = 0 ؛ // بازکردن پورت سریال Serial.begin (9600) ؛ تأخیر (500) ؛ Serial.println ("###########################") ؛ Serial.println ("ارتباط سریال برقرار شد.") ؛

// Check Lipo Battery Voltage CheckVoltage ()؛

// اسکن Servos ، موقعیت بازگشت MoveTest ()؛ MoveHome ()؛ MenuOptions ()؛ RunCheck = 1 ؛ }

void loop () {// سنسور را بخوانید: int inByte = Serial.read ()؛

سوئیچ (inByte) {

مورد '1': MovePose1 ()؛ زنگ تفريح؛

مورد '2': MovePose2 ()؛ زنگ تفريح؛ مورد '3': MovePose3 ()؛ زنگ تفريح؛

مورد '4': MovePose4 ()؛ زنگ تفريح؛

مورد '5': MoveHome ()؛ زنگ تفريح؛ مورد '6': گرفتن ()؛ زنگ تفريح؛

مورد '7': LEDTest ()؛ زنگ تفريح؛

مورد '8': RelaxServos ()؛ زنگ تفريح؛ }}

void CheckVoltage () {// منتظر بمانید ، سپس ولتاژ (ایمنی LiPO) ولتاژ شناور = (ax12GetRegister (1 ، AX_PRESENT_VOLTAGE ، 1)) / 10.0 را بررسی کنید ؛ Serial.println ("###########################") ؛ Serial.print ("ولتاژ سیستم:") ؛ Serial.print (ولتاژ) ؛ Serial.println ("ولت.") ؛ if (ولتاژ 10.0) {Serial.println ("سطح ولتاژ اسمی.") ؛ } if (RunCheck == 1) {MenuOptions ()؛ } Serial.println ("###########################") ؛ }

void MoveHome () {تاخیر (100)؛ // توصیه می شود مکث bioloid.loadPose (صفحه اصلی) ؛ // بارگذاری ژست از FLASH ، در بافر nextPose bioloid.readPose ()؛ // خواندن در موقعیتهای فعلی سروو در بافر curPose Serial.println ("###########################") ؛ Serial.println ("انتقال سرویس ها به موقعیت اصلی") ؛ Serial.println ("###########################") ؛ تاخیر (1000) ؛ bioloid.interpolateSetup (1000)؛ // setup for interpolation from current-> next over 1/2 a second while (bioloid.interpolating> 0) {// این کار را انجام دهید در حالی که هنوز به ژست جدید خود نرسیده ایم bioloid.interpolateStep ()؛ // در صورت لزوم سرویس ها را جابجا کنید. تاخیر (3) ؛ } if (RunCheck == 1) {MenuOptions ()؛ }}

void MovePose1 () {تاخیر (100)؛ // توصیه می شود مکث bioloid.loadPose (Pose1) ؛ // بارگذاری ژست از FLASH ، در بافر nextPose bioloid.readPose ()؛ // خواندن در موقعیتهای فعلی سروو در بافر curPose Serial.println ("###########################") ؛ Serial.println ("انتقال سرویس ها به موقعیت اول") ؛ Serial.println ("###########################") ؛ تاخیر (1000) ؛ bioloid.interpolateSetup (1000)؛ // setup for interpolation from current-> next over 1/2 a second while (bioloid.interpolating> 0) {// این کار را انجام دهید در حالی که هنوز به ژست جدید خود نرسیده ایم bioloid.interpolateStep ()؛ // در صورت لزوم سرویس ها را جابجا کنید. تاخیر (3) ؛ } SetPosition (3 ، 291) ؛ // موقعیت مفصل 3 را روی "0" تاخیر (100) تنظیم کنید ؛ // منتظر حرکت مفصل در صورت (RunCheck == 1) {MenuOptions ()؛ }}

void MovePose2 () {تاخیر (100)؛ // توصیه می شود مکث bioloid.loadPose (Pose2)؛ // بارگذاری ژست از FLASH ، در بافر nextPose bioloid.readPose ()؛ // خواندن در موقعیتهای فعلی سروو در بافر curPose Serial.println ("###########################") ؛ Serial.println ("انتقال سرویس ها به موقعیت دوم") ؛ Serial.println ("###########################") ؛ تاخیر (1000) ؛ bioloid.interpolateSetup (1000)؛ // setup for interpolation from current-> next over 1/2 a second while (bioloid.interpolating> 0) {// این کار را انجام دهید در حالی که هنوز به ژست جدید خود نرسیده ایم bioloid.interpolateStep ()؛ // در صورت لزوم سرویس ها را جابجا کنید. تاخیر (3) ؛ } SetPosition (3 ، 291) ؛ // موقعیت مفصل 3 را روی "0" تاخیر (100) تنظیم کنید ؛ // منتظر حرکت مفصل در صورت (RunCheck == 1) {MenuOptions ()؛ }} void MovePose3 () {تاخیر (100)؛ // توصیه می شود مکث bioloid.loadPose (Pose3)؛ // بارگذاری ژست از FLASH ، در بافر nextPose bioloid.readPose ()؛ // خواندن در موقعیتهای فعلی سروو در بافر curPose Serial.println ("###########################") ؛ Serial.println ("انتقال سرویس ها به موقعیت سوم") ؛ Serial.println ("###########################") ؛ تاخیر (1000) ؛ bioloid.interpolateSetup (1000)؛ // setup for interpolation from current-> next over 1/2 a second while (bioloid.interpolating> 0) {// این کار را انجام دهید در حالی که هنوز به ژست جدید خود نرسیده ایم bioloid.interpolateStep ()؛ // در صورت لزوم سرویس ها را جابجا کنید. تاخیر (3) ؛ } SetPosition (3 ، 291) ؛ // موقعیت مفصل 3 را روی "0" تاخیر (100) تنظیم کنید ؛ // منتظر حرکت مفصل در صورت (RunCheck == 1) {MenuOptions ()؛ }}

void MovePose4 () {تاخیر (100)؛ // توصیه می شود مکث bioloid.loadPose (Pose4)؛ // بارگذاری ژست از FLASH ، در بافر nextPose bioloid.readPose ()؛ // خواندن در موقعیتهای فعلی سروو در بافر curPose Serial.println ("###########################") ؛ Serial.println ("انتقال سرویس ها به موقعیت 4") ؛ Serial.println ("###########################") ؛ تاخیر (1000) ؛ bioloid.interpolateSetup (1000)؛ // setup for interpolation from current-> next over 1/2 a second while (bioloid.interpolating> 0) {// این کار را انجام دهید در حالی که هنوز به ژست جدید خود نرسیده ایم bioloid.interpolateStep ()؛ // در صورت لزوم سرویس ها را جابجا کنید. تاخیر (3) ؛ } SetPosition (3 ، 291) ؛ // موقعیت مفصل 3 را روی "0" تاخیر (100) تنظیم کنید ؛ // منتظر حرکت مفصل در صورت (RunCheck == 1) {MenuOptions ()؛ }}

void MoveTest () {Serial.println ("############################") ؛ Serial.println ("شروع تست حرکت نشانه") ؛ Serial.println ("###########################") ؛ تأخیر (500) ؛ id = 1؛ pos = 512؛ while (id <= SERVOCOUNT) {Serial.print ("انتقال سروو شناسه:")؛ Serial.println (id)؛

while (pos> = 312) {SetPosition (id، pos)؛ pos = pos-- ؛ تأخیر (10) ؛ }

while (pos <= 512) {SetPosition (id، pos)؛ pos = pos ++؛ تأخیر (10) ؛ }

// به سروو ID بعدی = id ++ تکرار کنید ؛

} if (RunCheck == 1) {MenuOptions ()؛ }}

void MenuOptions () {Serial.println ("############################") ؛ Serial.println ("لطفاً گزینه 1-5 را وارد کنید تا دوباره تستهای فردی را اجرا کنید.")؛ Serial.println ("1) موقعیت اول")؛ Serial.println ("2) موقعیت دوم")؛ Serial.println ("3) موقعیت سوم")؛ Serial.println ("4" موقعیت چهارم ")؛ Serial.println ("5) موقعیت خانه")؛ Serial.println ("6) بررسی ولتاژ سیستم")؛ Serial.println ("7) انجام تست LED")؛ Serial.println ("8) Relax Servos")؛ Serial.println ("###########################") ؛ }

void RelaxServos () {id = 1؛ Serial.println ("###########################") ؛ Serial.println ("سروهای آرامش بخش") ؛ Serial.println ("###########################") ؛ while (id <= SERVOCOUNT) {آرامش (id) ؛ id = (id ++)٪ SERVOCOUNT؛ تأخیر (50) ؛ } if (RunCheck == 1) {MenuOptions ()؛ }}

void LEDTest () {id = 1؛ Serial.println ("###########################") ؛ Serial.println ("تست LED در حال اجرا") ؛ Serial.println ("###########################") ؛ while (id <= SERVOCOUNT) {ax12SetRegister (شناسه ، 25 ، 1) ؛ Serial.print ("LED روشن - Servo ID:") ؛ Serial.println (id)؛ تاخیر (3000) ؛ ax12SetRegister (شناسه ، 25 ، 0) ؛ Serial.print ("LED OFF - Servo ID:") ؛ Serial.println (id)؛ تاخیر (3000) ؛ id = id ++؛ } if (RunCheck == 1) {MenuOptions ()؛ }}

void Grab () {SetPosition (5 ، 800) ؛ // موقعیت مفصل 1 را روی تاخیر '0' (100) تنظیم کنید ؛ // منتظر حرکت مفصل باشید

}

ما برنامه خود را بر اساس برنامه سازندگان PincherTest با برخی تغییرات اساسی در موقعیت یابی قرار داده ایم. ما از poses.h برای ربات استفاده کردیم تا موقعیت ها را در حافظه داشته باشد. ابتدا سعی کردیم بازوی خود را با Pixycam به صورت خودکار ایجاد کنیم ، اما به دلیل مشکلات نور و صفحه نمایش کوچک ، این امر امکان پذیر نیست. این ربات دارای موقعیت اصلی خانگی است ، پس از بارگذاری برنامه ، تمام سرویس های موجود در ربات را آزمایش می کند. ما حالت های دکمه های 1-4 را تنظیم کرده ایم ، بنابراین به خاطر سپردن آن آسان خواهد بود. با خیال راحت از برنامه استفاده کنید.

مرحله 4: راهنمای ویدئو

مرحله 5: نتیجه گیری

در پایان ، این ربات یک پروژه کوچک سرگرم کننده برای ما و یک بازی سرگرم کننده برای بازی و آزمایش است. به شما توصیه می کنم آن را امتحان کنید و آن را نیز سفارشی کنید.

توصیه شده: