فهرست مطالب:

بازوی رباتیک ساده و هوشمند با استفاده از آردوینو !!!: 5 مرحله (همراه با تصاویر)
بازوی رباتیک ساده و هوشمند با استفاده از آردوینو !!!: 5 مرحله (همراه با تصاویر)

تصویری: بازوی رباتیک ساده و هوشمند با استفاده از آردوینو !!!: 5 مرحله (همراه با تصاویر)

تصویری: بازوی رباتیک ساده و هوشمند با استفاده از آردوینو !!!: 5 مرحله (همراه با تصاویر)
تصویری: ترکید😱😭 2024, ژوئن
Anonim
Image
Image
چیزهایی که شما نیاز دارید
چیزهایی که شما نیاز دارید

در این آموزش من یک بازوی ساده روباتیک خواهم ساخت. که با استفاده از بازوی اصلی کنترل می شود. بازو حرکتها را به خاطر می آورد و به ترتیب بازی می کند. این ایده جدید نیست. من این ایده را از "بازوی رباتیک کوچک -توسط Stoerpeak" گرفتم. مدتها بود می خواستم این کار را انجام دهم ، اما در آن زمان من کاملاً ناهنجار بودم و از برنامه نویسی هیچ اطلاعی نداشتم. در نهایت من در حال ساختن یکی هستم ، آن را ساده ، ارزان نگه می دارم و با همه شما به اشتراک می گذارم.

پس بیایید شروع کنیم….

مرحله 1: موارد مورد نیاز:-

چیزهایی که شما نیاز دارید
چیزهایی که شما نیاز دارید
چیزهایی که شما نیاز دارید
چیزهایی که شما نیاز دارید

در اینجا لیستی از چیزهایی است که شما نیاز دارید:-

1. موتورهای سروو x 5 پیوند برای ایالات متحده:- https://amzn.to/2OxbSH7 پیوند برای اروپا:-

2. پتانسیومتر x 5 (من از 100k استفاده کرده ام.) پیوند برای ایالات متحده:- https://amzn.to/2ROjhDMLink for Europe:-

3. آردوینو UNO. (می توانید از آردوینو نانو نیز استفاده کنید) پیوند برای ایالات متحده:- https://amzn.to/2DBbENW پیوند برای اروپا:-

4. تخته نان. (من این کیت را پیشنهاد می کنم) پیوند برای ایالات متحده:- https://amzn.to/2Dy86w4 پیوند برای اروپا:-

5. باتری. (اختیاری ، از آداپتور 5 ولت استفاده می کنم)

6. مقوا/چوب/تخته آفتاب/اکریلیک آنچه در دسترس است یا به راحتی پیدا می شود.

و همچنین باید Arduino IDE را نصب کنید.

مرحله 2: ساخت بازو:-

ساخت بازو
ساخت بازو
ساخت بازو
ساخت بازو

در اینجا من از چوب Popsicle برای ساختن بازو استفاده کرده ام. می توانید از هر ماده ای که در دسترس شماست استفاده کنید. و می توانید طرح های مکانیکی متفاوتی را امتحان کنید تا بازوی بهتری داشته باشید. طراحی من خیلی پایدار نیست

من فقط از نوار دو طرفه استفاده کردم تا سروها را به چوب Popsicle بچسبانم و آنها را با پیچ محکم کنم.

برای بازوی اصلی ، پتانسیومترها را به چوب بستنی چسباندم و بازو ساختم.

مراجعه به تصاویر ایده بهتری به شما می دهد.

من همه چیز را روی تخته بوم اندازه A4 نصب کرده ام که به عنوان پایه استفاده می شود.

مرحله 3: ایجاد ارتباطات:-

ایجاد ارتباطات
ایجاد ارتباطات
ایجاد ارتباطات
ایجاد ارتباطات
ایجاد ارتباطات
ایجاد ارتباطات

در این مرحله ما تمام اتصالات لازم را ایجاد می کنیم ، به تصاویر بالا مراجعه کنید.

  • ابتدا همه سروها را به موازات منبع تغذیه وصل کنید (سیم قرمز به +ve و سیم سیاه یا قهوه ای به Gnd)
  • سپس سیمهای سیگنال یعنی سیم زرد یا نارنجی را به پین PWM آردوینو وصل کنید.
  • حالا پتانسیومترها را به +5v و Gnd آردوینو به صورت موازی متصل کنید.
  • ترمینال میانی را به پین آنالوگ ardunio وصل کنید.

در اینجا پین های دیجیتال 3 ، 5 ، 6 ، 9 و 10 برای کنترل سرویس ها استفاده می شود

پین های آنالوگ A0 تا A4 برای ورودی از پتانسیومترها استفاده می شود.

سروو متصل به پین 3 توسط پتانسیومتر متصل به A0 کنترل می شود

سروو متصل به پین 5 توسط گلدان A1 و غیره کنترل می شود …

توجه:- حتی اگر Servos از آردوینو استفاده نمی کند ، مطمئن شوید که Gnd سرویس ها را به آردوینو وصل کنید وگرنه بازو کار نمی کند.

مرحله 4: کدگذاری:-

کد نویسی
کد نویسی

منطق این کد نسبتاً ساده است ، مقادیر پتانسیومترها در یک آرایه ذخیره می شوند ، سپس سوابق با استفاده از حلقه for پیمایش می شوند و سرویس ها مراحل را طبق مقادیر انجام می دهند. می توانید این آموزش را که برای مرجع "Arduino Potentiometer Servo Control & Memory" استفاده کردم ، مشاهده کنید.

کد:- (فایل قابل بارگیری در زیر ضمیمه شده است.)

ابتدا همه متغیرهای لازم را به صورت جهانی اعلام می کنیم تا بتوانیم در طول برنامه از آنها استفاده کنیم. توضیح خاصی برای این مورد لازم نیست

#عبارتند از

// Servo Objects Servo Servo_0؛ Servo Servo_1؛ سرو سرو 2؛ سرو سرو_3؛ Servo Servo_4؛ // Potentiometer Objects int Pot_0؛ int Pot_1؛ int Pot_2؛ int Pot_3؛ int Pot_4؛ // متغیر برای ذخیره Servo Position int Servo_0_Pos؛ int Servo_1_Pos؛ int Servo_2_Pos ؛ int Servo_3_Pos؛ int Servo_4_Pos؛ // متغیر برای ذخیره مقادیر موقعیت قبلی int Prev_0_Pos؛ int Prev_1_Pos ؛ int Prev_2_Pos ؛ int Prev_3_Pos؛ int Prev_4_Pos ؛ // متغیر برای ذخیره مقادیر موقعیت فعلی int Current_0_Pos؛ int Current_1_Pos ؛ int Current_2_Pos ؛ int Current_3_Pos ؛ int Current_4_Pos ؛ int Servo_Position؛ // زاویه int را در Servo_Number ذخیره می کند. // تعداد سروو int Storage [600] را ذخیره نمی کند؛ // آرایه برای ذخیره داده ها (افزایش اندازه آرایه حافظه بیشتری را مصرف می کند) int Index = 0؛ // نمای آرایه از 0 موقعیت موقعیت داده شروع می شود = 0؛ // متغیر برای ذخیره داده ها از ورودی سریال.

اکنون ما یک تابع راه اندازی می نویسیم ، جایی که پین ها و توابع آنها را تنظیم می کنیم. این اصلی ترین عملکردی است که ابتدا اجرا می شود

void setup ()

{Serial.begin (9600) ؛ // برای ارتباط سریال بین arduino و IDE. // اجسام سرو به پین های PWM متصل می شوند. Servo_0.attach (3) ؛ Servo_1.attach (5) ؛ Servo_2.attach (6) ؛ Servo_3.atach (9) ؛ Servo_4.atach (10) ؛ // Servos هنگام راه اندازی روی 100 موقعیت تنظیم می شود. Servo_0.write (100) ؛ Servo_1.write (100) ؛ Servo_2.write (100) ؛ Servo_3.write (100) ؛ Servo_4.write (100) ؛ Serial.println ("R" را برای ضبط و "P" را برای پخش فشار دهید ") ؛ }

حال ما باید مقادیر پتانسیومترها را با استفاده از پین های Analog Input بخوانیم و آنها را برای کنترل سرویس ها ترسیم کنیم. برای این منظور ، یک تابع را تعریف کرده و نام آن را Map_Pot () می گذاریم. ، می توانید هر چیزی را که می خواهید نامگذاری کنید ، یک تابع تعریف شده توسط کاربر است

void Map_Pot ()

{ / * سروها در 180 درجه می چرخند اما استفاده از آن برای محدود کردن ایده خوبی نیست زیرا باعث می شود سروها بطور مداوم وزوز کنند که آزاردهنده است بنابراین ما سروو را برای حرکت بین: 1-179 * / Pot_0 = analogRead (A0) محدود می کنیم. ؛ // ورودی از pot را بخوانید و در Variable Pot_0 ذخیره کنید. Servo_0_Pos = نقشه (گلدان_0 ، 0 ، 1023 ، 1 ، 179) ؛ // نقشه servos به ازای مقدار بین 0 تا 1023 Servo_0.write (Servo_0_Pos) ؛ // سروو را به آن موقعیت منتقل کنید. Pot_1 = analogRead (A1) ؛ Servo_1_Pos = نقشه (Pot_1 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_1.write (Servo_1_Pos) ؛ Pot_2 = analogRead (A2) ؛ Servo_2_Pos = نقشه (Pot_2 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_2.write (Servo_2_Pos) ؛ Pot_3 = analogRead (A3) ؛ Servo_3_Pos = نقشه (گلدان_3 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_3.write (Servo_3_Pos) ؛ Pot_4 = analogRead (A4) ؛ Servo_4_Pos = نقشه (گلدان_4 ، 0 ، 1023 ، 1 ، 179) ؛ Servo_4.write (Servo_4_Pos) ؛ }

اکنون تابع حلقه را می نویسیم:

حلقه خالی ()

{Map_Pot ()؛ // تابع برای خواندن مقادیر pot در حالی که (Serial.available ()> 0) {data = Serial.read ()؛ if (data == 'R') Serial.println ("ضبط حرکات …") ؛ if (data == 'P') Serial.println ("پخش حرکات ضبط شده …") ؛ } if (data == 'R') // اگر 'R' وارد شده است ، ضبط را شروع کنید. {// ذخیره مقادیر در متغیر Prev_0_Pos = Servo_0_Pos؛ Prev_1_Pos = Servo_1_Pos؛ Prev_2_Pos = Servo_2_Pos ؛ Prev_3_Pos = Servo_3_Pos ؛ Prev_4_Pos = Servo_4_Pos ؛ Map_Pot ()؛ // عملکرد نقشه برای مقایسه فراخوانی می شود (abs (Prev_0_Pos == Servo_0_Pos)) // مقدار مطلق با مقایسه {Servo_0.write (Servo_0_Pos) بدست می آید. // اگر مقادیر سروو مطابقت داشته باشند ، تغییر مکان می دهد اگر (Current_0_Pos! = Servo_0_Pos) // اگر مقادیر با {Storage [Index] = Servo_0_Pos + 0 مطابقت ندارند ؛ // مقدار به آرایه Index ++ اضافه می شود؛ // مقدار شاخص افزایش 1} Current_0_Pos = Servo_0_Pos؛ } /* به طور مشابه ، مقایسه ارزش برای همه سرویس ها انجام می شود ، +100 برای ورودی به عنوان مقدار افتراقی اضافه می شود. */ if (abs (Prev_1_Pos == Servo_1_Pos)) {Servo_1.write (Servo_1_Pos) ؛ if (Current_1_Pos! = Servo_1_Pos) {Storage [Index] = Servo_1_Pos + 100؛ فهرست ++ ؛ } Current_1_Pos = Servo_1_Pos؛ } if (abs (Prev_2_Pos == Servo_2_Pos)) {Servo_2.write (Servo_2_Pos) ؛ if (Current_2_Pos! = Servo_2_Pos) {Storage [Index] = Servo_2_Pos + 200؛ فهرست ++ ؛ } Current_2_Pos = Servo_2_Pos؛ } if (abs (Prev_3_Pos == Servo_3_Pos)) {Servo_3.write (Servo_3_Pos) ؛ if (Current_3_Pos! = Servo_3_Pos) {Storage [Index] = Servo_3_Pos + 300 ؛ فهرست ++ ؛ } Current_3_Pos = Servo_3_Pos؛ } if (abs (Prev_4_Pos == Servo_4_Pos)) {Servo_4.write (Servo_4_Pos) ؛ if (Current_4_Pos! = Servo_4_Pos) {Storage [Index] = Servo_4_Pos + 400 ؛ فهرست ++ ؛ } Current_4_Pos = Servo_4_Pos؛ } / * مقادیر بر روی مانیتور سریال چاپ می شوند ، '\ t' برای نمایش مقادیر در قالب جداول است * / Serial.print (Servo_0_Pos) ؛ Serial.print ("\ t")؛ Serial.print (Servo_1_Pos) ؛ Serial.print ("\ t")؛ Serial.print (Servo_2_Pos) ؛ Serial.print ("\ t")؛ Serial.print (Servo_3_Pos) ؛ Serial.print ("\ t")؛ Serial.println (Servo_4_Pos) ؛ Serial.print ("فهرست =")؛ Serial.println (فهرست) ؛ تأخیر (50) ؛ } if (data == 'P') // IF 'P' وارد شده است ، پخش حرکتهای ضبط شده را شروع کنید. {for (int i = 0؛ i <Index؛ i ++) // آرایه را با استفاده از حلقه {Servo_Number = Storage /100؛ // تعداد سروو را می بیند Servo_Position = Storage ٪ 100؛ // موقعیت سوئیچ سروو (Servo_Number) را پیدا می کند {مورد 0: Servo_0.write (Servo_Position) ؛ زنگ تفريح؛ مورد 1: Servo_1.write (Servo_Position) ؛ زنگ تفريح؛ مورد 2: Servo_2.write (Servo_Position) ؛ زنگ تفريح؛ مورد 3: Servo_3.write (Servo_Position) ؛ زنگ تفريح؛ مورد 4: Servo_4.write (Servo_Position) ؛ زنگ تفريح؛ } تأخیر (50) ؛ }}}

پس از آماده شدن کد ، اکنون آن را در برد arduino بارگذاری کنید

بازوی هوشمند آماده کار است. عملکرد هنوز به همان اندازه نرمال ساخته شده توسط Stoerpeak نیست.

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

با توجه به آنچه گفته شد ، بیایید به سراغ آزمایش برویم….

مرحله 5: آزمایش:-

پس از بارگذاری موفقیت آمیز کد روی برد ، "Serial Monitor" را باز کنید ، می توانید آن را در گزینه Tools پیدا کنید. با شروع مانیتور سریال ، آردوینو ریست می شود. اکنون می توانید بازوی رباتیک را با استفاده از بازوی اصلی کنترل کنید. اما چیزی ثبت نمی شود.

برای شروع ضبط ، "R" را در مانیتور وارد کنید ، می توانید حرکاتی را که می خواهید ضبط کنید انجام دهید.

پس از انجام حرکات ، باید "P" را وارد کنید تا بتوانید حرکات ضبط شده را پخش کنید. سرووها تا زمانی که صفحه بازنشانی نشود ، به انجام حرکات خود ادامه می دهند.

توصیه شده: