در مقاله امروز به شما خواهم گفت که چگونه با دستان خود رباتی بسازید که موانع را دور می زند بر اساس میکروکنترلر آردوینو.
برای ساخت ربات در خانه، به خود برد میکروکنترلر و یک سنسور اولتراسونیک نیاز دارید. اگر سنسور مانعی را تشخیص دهد، سروو به آن اجازه می دهد تا مانع را دور بزند. با اسکن فضای سمت راست و چپ، ربات ترجیح داده ترین مسیر را برای دور زدن مانع انتخاب می کند.
Codebender یک IDE مبتنی بر مرورگر است، این ساده ترین راه برای برنامه نویسی ربات شما از طریق مرورگر است. شما باید روی دکمه "Run on Arduino" کلیک کنید و تمام است، هیچ جا راحت تر نیست.
باتری را داخل محفظه قرار دهید و یک بار دکمه عملکرد را فشار دهید تا ربات به جلو حرکت کند. برای توقف حرکت، دکمه را دوباره فشار دهید.
/* ربات جلوگیری از موانع آردوینو با موتور سروو و حسگر اولتراسونیک HC-SR04 LED و buzzer */ //Libraries #include #include "Ultrasonic.h" //Constants const int button = 2; // پین دکمه به پین 2 const int led = 3; // پین LED (از طریق مقاومت) به پین 3 const int buzzer = 4; //پین زنگ به پین 4 const int motorA1= 6; //موتور مثبت (+) پین به پین 6 (PWM) (از ماژول L298!) const int motorA2= 9; //پایه منفی (-) موتور A به پایه 9 (PWM) const int motorB1=10; // مثبت (+) موتور B پین به پایه 10 (PWM) const int motorB2=11; // پایه منفی (-) موتور B به پایه 11 (PWM) اولتراسونیک اولتراسونیک (A4 ,A5); //ایجاد یک شی اولتراسونیک (پین trig، echo pin) Servo myservo; //یک شی Servo برای کنترل سرووها ایجاد کنید //Variables int distance; //متغیر برای ذخیره فاصله تا شی int checkRight; int checkLeft; تابع int=0; //متغیر برای ذخیره تابع ربات: "1" - حرکت یا "0" - متوقف شد. متوقف شده توسط پیش فرض int buttonState=0; //متغیر برای ذخیره وضعیت دکمه. به طور پیش فرض "0" int pos=90; //متغیر برای ذخیره موقعیت سروو. به طور پیش فرض 90 درجه - حسگر به جلو نگاه خواهد کرد int flag=0; //پرچم مفید برای ذخیره وضعیت دکمه هنگام آزاد شدن دکمه void setup() ( myservo.attach(5)؛ //پین سروو متصل به پین 5 myservo.write(pos)؛ // به سروو می گوید که برود برای قرار دادن در متغیر "pos" pinMode (دکمه، INPUT_PULLUP)؛ pinMode (led، OUTPUT)؛ pinMode (buzzer, OUTPUT)؛ pinMode (motorA1, OUTPUT)؛ pinMode (motorA2, OUTPUT)؛ pinMode (motorB1, OUTPUT)؛ pinMode (motorB2,OUTPUT)؛ ) void loop() ( //بررسی وضعیت دکمه دکمهState = digitalRead(button)؛ جریان طولانی بدون علامتMillis = millis(); //محاسبه... //عملکرد اصلی را تغییر می دهد (توقف شد/ در حال حرکت) هنگامی که دکمه فشار داده می شود اگر (buttonState = = LOW) (//اگر دکمه یک بار فشار داده شود... تاخیر (500)؛ اگر (پرچم == 0) (تابع = 1؛ پرچم = 1؛ //تغییر متغیر پرچم ) else if (پرچم == 1)( / /اگر دکمه دو بار فشار داده شود تابع = 0؛ flag=0؛ //تغییر مجدد متغیر پرچم) ) if (تابع == 0)( //اگر دکمه رها یا دو بار فشار داده می شود، سپس: myservo.write(90)؛ //تنظیم برای سروو 90 درجه - حسگر به نظر می رسد b forward stop(); //ربات ثابت می ماند noTone(buzzer); // buzzer خاموش است DigitalWrite(led, HIGH);// و دیود روشن است ) وگرنه اگر (عملکرد == 1)(//اگر دکمه فشار داده شود، پس: //خواندن فاصله... فاصله = اولتراسونیک .Ranging(CM)؛ //نکته: از "CM" برای سانتی متر و "INC" برای اینچ استفاده کنید //بررسی اشیا. .. if (فاصله > 10) (به جلو (); //همه چیز واضح است، به جلو حرکت می کنیم!<=10){ stop(); //Обнаружен объект! Останавливаемся и проверяем слева и справа лучший способ обхода! tone(buzzer,500); // издаём звук digitalWrite(led,HIGH); // включаем светодиод //Начинаем сканировать... for(pos = 0; pos =0; pos-=1){ //идём от 180 градусов к 0 myservo.write(pos); // говорим серво пройти на позицию в переменной "pos" delay(10); // ждём 10 мс, пока сервопривод достигнет нужной позиции } checkRight= ultrasonic.Ranging(CM); myservo.write(90); // Датчик снова смотрит вперёд //Принимаем решение – двигаться влево или вправо? if (checkLeft checkRight){ right(); delay(400); // задержка, меняем значение при необходимости, чтобы заставить робота повернуться. } else if (checkLeft <=10 && checkRight <=10){ backward(); //Дорога перекрыта... возвращаемся и идём налево;) left(); } } } } void forward(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void backward(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void left(){ digitalWrite(motorA1, HIGH); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, HIGH); } void right(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, HIGH); digitalWrite(motorB1, HIGH); digitalWrite(motorB2, LOW); } void stop(){ digitalWrite(motorA1, LOW); digitalWrite(motorA2, LOW); digitalWrite(motorB1, LOW); digitalWrite(motorB2, LOW); }
با کلیک بر روی دکمه "ویرایش" می توانید طرح را مطابق با نیاز خود ویرایش کنید.
به عنوان مثال، با تغییر مقدار "10" فاصله اندازه گیری شده به یک مانع بر حسب سانتی متر، فاصله ای را که ربات آردوینو در جستجوی مانع اسکن می کند، کاهش یا افزایش می دهید.
اگر ربات حرکت نمی کند، می تواند کنتاکت موتورهای الکتریکی (motorA1 و motorA2 یا motorB1 و motorB2) را تغییر دهد.
ربات خانگی شما که بر اساس میکروکنترلر آردوینو از موانع جلوگیری می کند آماده است.
بیایید در مورد چگونگی استفاده از آردوینو برای ایجاد رباتی که مانند سگوی تعادل ایجاد می کند صحبت کنیم.
سگوی از انگلیسی. Segway یک وسیله نقلیه ایستاده دو چرخ است که مجهز به محرک الکتریکی است. به آنها ژیروسکوتر یا اسکوتر برقی نیز می گویند.
آیا تا به حال به این فکر کرده اید که سگوی چگونه کار می کند؟ در این آموزش سعی می کنیم به شما نشان دهیم که چگونه یک ربات آردوینو بسازید که درست مانند سگوی تعادل خود را حفظ کند.
برای حفظ تعادل ربات، موتورها باید با سقوط ربات مقابله کنند. این اقدام مستلزم بازخورد و عناصر اصلاحی است. عنصر بازخورد - که هم شتاب و هم چرخش را در هر سه محور (). آردوینو از این برای شناخت جهت گیری فعلی ربات استفاده می کند. عنصر اصلاحی ترکیب موتور و چرخ است.
نتیجه نهایی باید چیزی شبیه این باشد:
ماژول درایور موتور L298N:
موتور دنده DC با چرخ:
یک ربات خود متعادل کننده اساسا یک آونگ معکوس است. اگر مرکز جرم نسبت به محور چرخ ها بیشتر باشد، می توان آن را متعادل تر کرد. مرکز جرم بالاتر به معنای گشتاور اینرسی جرمی بالاتر است که مربوط به شتاب زاویه ای کمتر (سقوط آهسته تر) است. به همین دلیل بسته باتری را در بالا قرار دادیم. با این حال، ارتفاع ربات بر اساس در دسترس بودن مواد انتخاب شد 🙂
نسخه تکمیل شده ربات خود متعادل کننده در شکل بالا قابل مشاهده است. در بالا شش باتری Ni-Cd برای تغذیه PCB وجود دارد. بین موتورها از باتری 9 ولتی برای درایور موتور استفاده می شود.
در تئوری کنترل، نگه داشتن مقداری متغیر (در این مورد موقعیت ربات) نیاز به یک کنترل کننده خاص به نام PID (مشتق انتگرال متناسب) دارد. هر یک از این پارامترها دارای یک "بهره" هستند که معمولاً Kp، Ki و Kd نامیده می شود. PID یک تصحیح بین مقدار (یا ورودی) مورد نظر و مقدار (یا خروجی) واقعی را فراهم می کند. به تفاوت ورودی و خروجی «خطا» می گویند.
کنترلر PID با تنظیم مداوم خروجی خطا را به کمترین مقدار ممکن کاهش می دهد. در ربات آردوینو خود متعادل کننده ما، ورودی (که شیب مورد نظر بر حسب درجه است) توسط نرم افزار تنظیم می شود. MPU6050 شیب فعلی ربات را می خواند و آن را به یک الگوریتم PID تغذیه می کند که محاسباتی را برای کنترل موتور و ایستادن ربات انجام می دهد.
PID مستلزم آن است که مقادیر Kp، Ki و Kd روی مقادیر بهینه تنظیم شوند. مهندسان از نرم افزارهایی مانند MATLAB برای محاسبه خودکار این مقادیر استفاده می کنند. متأسفانه ما نمی توانیم از MATLAB در مورد خود استفاده کنیم زیرا پروژه را بیش از پیش پیچیده می کند. در عوض، مقادیر PID را تنظیم می کنیم. در اینجا نحوه انجام آن آمده است:
رفتار این ربات را می توانید در ویدیو زیر مشاهده کنید:
برای ایجاد ربات خود به چهار کتابخانه خارجی نیاز داشتیم. کتابخانه PID محاسبه مقادیر P، I و D را آسان می کند. کتابخانه LMotorController برای کنترل دو موتور با ماژول L298N استفاده می شود. کتابخانه I2Cdev و کتابخانه MPU6050_6_Axis_MotionApps20 برای خواندن داده ها از MPU6050 طراحی شده اند. می توانید کد شامل کتابخانه ها را در این مخزن دانلود کنید.
#عبارتند از
مقادیر Kp، Ki، Kd ممکن است کار کنند یا نباشند. اگر این کار را نکردند، مراحل بالا را دنبال کنید. توجه داشته باشید که شیب در کد روی 173 درجه تنظیم شده است. در صورت تمایل می توانید این مقدار را تغییر دهید، اما توجه داشته باشید که این زاویه ای است که ربات باید از آن پشتیبانی کند. همچنین، اگر موتورهای شما خیلی سریع هستند، می توانید مقادیر motorSpeedFactorLeft و motorSpeedFactorRight را تنظیم کنید.
فعلاً همین است. به امید دیدار.
روز خوب! پیش روی شما عزیزان یک ربات هنری است که می تواند اجسام کروی یا تخم مرغی شکل مختلف را در اندازه های ۴ تا ۹ سانتی متر نقاشی کند.
برای ساخت آن به یک چاپگر سه بعدی، مجموعه ای از ابزارهای استاندارد + آردوینو نیاز دارید.
توجه: از پروژه هایی که از چاپگر سه بعدی استفاده می کنند دست نکشید. در صورت تمایل، همیشه می توانید مکان یا روشی را پیدا کنید که در آن می توانید چاپ جزئیات لازم برای پروژه را سفارش دهید.
ربات هنری - دو محوره خانگی، که می تواند روی اکثر سطوح کروی چاپ شود. ربات برای نوع خاصی از شی (توپ های پینگ پنگ، تزئینات کریسمس، لامپ ها و تخم مرغ ها (اردک، غاز، مرغ ...) پیکربندی شده است.
موتورهای پله ای با دقت بالا با گشتاور بالا برای چرخاندن جسم کروی و حرکت مانیپولاتور استفاده می شود و از سروو درایو SG90 بی صدا و قابل اعتماد برای بلند کردن مکانیزم دسته استفاده می شود.
ساختن کاردستی خودت انجام بدهما نیاز خواهیم داشت:
به عنوان یک "برگ تقلب" می توانید از این طرح استفاده کنید.
این ربات یک مانیپولاتور را با یک نشانگر متصل به آن حرکت می دهد که توسط یک موتور پله ای به حرکت در می آید. یک موتور پله ای دیگر وظیفه چرخاندن جسمی را که نقشه روی آن اعمال می شود (تخم مرغ، توپ ...) است. از دو مکنده برای ثابت نگه داشتن اقلام استفاده می شود که یکی به استپر موتور و دیگری در طرف مقابل وسیله متصل است. یک فنر کوچک روی ساکشن کاپ فشار میآورد تا به نگه داشتن آن کمک کند. سروو SG90 برای بالا و پایین بردن نشانگر استفاده می شود.
مهره را در سوراخ آماده شده برای آن نصب کنید و پیچ 16 میلی متری را محکم کنید. بیایید همین کار را برای نگهدارنده آیتم (در سمت راست در تصویر بالا) انجام دهیم. هنگام ایجاد لولا برای دستکاری، از 2 پیچ 16 میلی متری استفاده شد. این لولا باید پس از سفت کردن پیچ ها آزادانه بچرخد.
یکی از ساکشن کاپ ها را داخل سوراخ نگهدارنده اقلام نصب کنید.
هر دو استپر موتور را با 8 پیچ به قاب اصلی ثابت کنید.
بیایید تمام عناصر را همانطور که در تصویر بالا نشان داده شده است قرار دهیم.
دستکاری مونتاژ شده را روی محور استپر موتور قرار دهید.
تکیه گاه سمت چپ را روی محور استپر موتور نصب کنید.
نشانگر و تخم مرغ به عنوان نمونه تنظیم شده اند (الزامی نیست اکنون آنها را قرار دهید).
توجه: سروو نیاز به تنظیمات دارد. در طول فرآیند کالیبراسیون باید زاویه آن را دوباره تنظیم کنید.
قطعات الکترونیکی پشت قاب اصلی را با پیچ ثابت کنید (2 کافی است).
بیایید کابل ها را وصل کنیم.
اگر هنگام اتصال استپر موتورها قطبیت را معکوس کنید، آنها به سادگی در جهت مخالف می چرخند، اما با یک سروو وضعیت چندان بی ضرر نیست! بنابراین قبل از اتصال، قطبیت را دوبار بررسی کنید!
بیایید Arduino Leonardo را با استفاده از محیط نرم افزار Arduino IDE (نسخه 1.8.1) برنامه ریزی کنیم.
نرم افزار inkscape.نرم افزار Inkscape را دانلود و نصب کنید (من نسخه پایدار 0.91 را توصیه می کنم).
پسوند EggBot Control را دانلود و نصب کنید (نسخه 2.4.0 به طور کامل تست شده است).
برنامه افزودنی کنترل EggBot برای Inkscape ابزاری است که هنگام آزمایش و کالیبره کردن EggBot و انتقال نقشه ها به تخم مرغ استفاده می شود. ابتدا باید Inkscape را راه اندازی کنید. پس از راهاندازی Inkscape، منوی «Extensions» ظاهر میشود و در آن باید زیر منوی «Eggbot» را انتخاب کنید. اگر زیر منوی Eggbot را نمی بینید، پس افزونه ها را به درستی نصب نکرده اید. بک آپ بگیرید و دستورالعمل های نصب افزونه ها را به دقت دنبال کنید.
این همه، از توجه شما متشکرم!)
آنها با ایجاد ربات های ساده شروع به یادگیری آردوینو می کنند. امروز در مورد ساده ترین ربات در arduino uno صحبت خواهم کرد که مانند یک سگ دست شما یا هر جسم دیگری را که نور مادون قرمز را منعکس می کند دنبال می کند. همچنین این ربات بچه ها را سرگرم می کند. برادرزاده 3 ساله من با کمال میل با ربات بازی کرد :)
من با فهرست کردن قطعاتی که در هنگام ساخت مورد نیاز خواهند بود شروع می کنم - Arduino UNO.
فاصله یاب مادون قرمز؛
- موتورهای 3 ولتی با گیربکس و چرخ؛
- اتصالات برای باتری های 3A؛
- باتری (اگر باتری کافی وجود نداشته باشد)؛
- رله برای کنترل موتورها.
خوب، و مواد دیگری که در فرآیند ایجاد مورد نیاز خواهند بود.
ابتدا پایه را درست می کنیم. تصمیم گرفتم آن را از چوب بسازم. من یک تخته چوبی را طوری اره کردم که موتورها کاملاً در شیارها بنشینند
سپس موتورها را با یک تخته چوب محکم می کنم و این میله را پیچ می کنم
در ادامه روی کیس، یک آردوینو، یک رله، یک برد مغز، فاصله یاب و زیر پایه شاسی یک چرخان قرار دادم.
اکنون همه چیز را طبق طرح وصل می کنیم
در پایان، طرح زیر را در آردوینو بارگذاری می کنیم:
Const int R = 13; // پین هایی که فاصله یاب های IR به آنها متصل هستند، بین L = 12; موتور داخلی L = 9; //پین هایی که رله به آنها متصل است int motorR = 11; int buttonState = 0; void setup() (pinMode(R,INPUT); pinMode(L,INPUT); pinMode(motorR,OUTPUT)؛ pinMode(motorL,OUTPUT)؛ ) void loop() ( ( buttonState = digitalRead(L)؛ if (buttonState == HIGH)( digitalWrite(motorR,HIGH)؛ ) other ( digitalWrite(motorR, Low); ) ) (( buttonState = digitalRead(R)؛ if (buttonState == HIGH)( digitalWrite(motorL,HIGH)؛ ) دیگری ( digitalWrite (motorL, Low); ) ) )
اصل کار بسیار ساده است. مسافت یاب چپ مسئول چرخ راست و سمت راست برای سمت چپ است
برای واضح تر شدن موضوع، می توانید ویدیویی را تماشا کنید که روند ایجاد و عملکرد ربات را نشان می دهد
این ربات بسیار ساده است و هر کسی می تواند آن را بسازد. این به شما کمک می کند تا درک کنید که ماژول هایی مانند رله ها و فاصله یاب های IR چگونه کار می کنند و بهترین استفاده از آنها چگونه است.
امیدوارم از این کاردستی لذت برده باشید، یادتان باشد کاردستی ها باحال هستند!
خوانندگان عزیز ما در حال باز کردن یک سری مقاله در مورد ایجاد ربات بر اساس آردوینو هستیم. فرض بر این است که خواننده مبتدی است و فقط دانش اولیه از موضوع دارد. ما سعی خواهیم کرد همه چیز را تا حد امکان دقیق و قابل درک بیان کنیم.
بنابراین، مقدمه ای برای مشکل:
بیایید با مفهوم شروع کنیم: ما رباتی می خواهیم که بتواند به تنهایی در اتاق حرکت کند و در عین حال از تمام موانعی که با آن روبرو می شود اجتناب کند. تکلیف تعیین شد.
حالا بیایید بفهمیم که به چه چیزی نیاز داریم:
این کیت معمولاً دارای یک پلت فرم و یک موتور برای دو چرخ محرک (کاترپیلار) و یک محفظه باتری است. گزینه هایی برای تمام چرخ محرک وجود دارد - در موتور 4 چرخ. برای مبتدیان، استفاده از سکوهای تانک را توصیه می کنیم
دو چرخ محرک و یک تکیه گاه سوم.
چگونه بودن؟ اولین چیزی که به ذهن می رسد این است که یک ترانزیستور را روی خروجی میکروکنترلر قرار دهید و موتورها را از آن تغذیه کنید. این مطمئناً خوب است، اما اگر بخواهیم موتور را در جهت دیگری راه اندازی کنیم، کار نمی کند ... اما H کار را به خوبی انجام می دهد - یک پل، که مدار کمی پیچیده تر از یک جفت ترانزیستور است. اما در این مورد، تعداد زیادی از آنها به شکل مدارهای مجتمع آماده وجود دارد، بنابراین فکر می کنم نیازی به اختراع مجدد چرخ نیست - ما یک چرخ آماده می خریم. علاوه بر این، قیمت مطلوب است - 2-3 دلار ... بیایید حرکت کنیم. برای این منظور، ما یک تراشه L293D یا حتی بهتر از آن، یک موتور شیلد مبتنی بر آن خواهیم خرید.
محافظ موتور روی تراشه L298N
ساده ترین گزینه برای تولید صدا استفاده از امیتر پیزو است.
امیترهای پیزوسرامیک (پرتاب کننده های پیزوالکتریک) دستگاه های بازتولید صدای الکتروآکوستیک هستند که از اثر پیزوالکتریک استفاده می کنند. (اثر وقوع قطبش دی الکتریک تحت تأثیر تنش های مکانیکی (اثر پیزوالکتریک مستقیم) اثر پیزوالکتریک معکوس نیز وجود دارد - وقوع تغییر شکل های مکانیکی تحت تأثیر میدان الکتریکی.
اثر پیزو مستقیم: در فندک های پیزو، برای به دست آوردن ولتاژ بالا در شکاف جرقه.
اثر پیزوالکتریک معکوس: در ساطع کننده های پیزوالکتریک (موثر در فرکانس های بالا و دارای ابعاد کوچک)؛
قطره چکان های پیزو به طور گسترده در دستگاه های الکترونیکی مختلف - ساعت زنگ دار، تلفن، اسباب بازی های الکترونیکی، لوازم خانگی استفاده می شود. قطره چکان پیزوسرامیک از یک صفحه فلزی تشکیل شده است که روی آن لایه ای از سرامیک پیزوالکتریک قرار گرفته و دارای یک پوشش رسانا در سمت بیرونی است. صفحه و پوشش دو تماس هستند. زنگ پیزو همچنین می تواند به عنوان یک میکروفون پیزوالکتریک یا سنسور استفاده شود.
این تمام چیزی است که برای اولین بار نیاز داریم. برای شروع، در قالب درس های جداگانه، نحوه مونتاژ و کارکرد جداگانه این قطعات را در نظر خواهیم گرفت.
درس 2
درس 3. آردوینو و موتور شیلد بر اساس L298N
درس 4
درس 5