آموزش آردوینوپروژه های آردوینو

ربات تمیز کننده کف با آردوینو (جاروبرقی هوشمند)

در دنیای امروز همه ما مشغول کار هستیم و وقت کافی برای نظافت صحیح منزل نداریم. راه حل بسیار ساده است، فقط باید یک ربات جاروبرقی خانگی بخرید که خود به خود خانه شما را تمیز میکند. اما این ربات ها هزینه بالایی دارند و این میتواند یک نکته منفی باشد. ما امروز یک ربات جاروبرقی هوشمند مبتنی بر آردوینو طراحی میکنیم که به راحتی کف منزل شما را تمیز میکند و هزینه بسیار کمی دارند. ما قبلا یک ربات جاروبرقی آردوینو ساخته بودیم، اما آن ربات حجم و وزن بالایی داشت و زیاد مناسب نبود. رباتی که در این آموزش طراحی میکنیم دارای سنسور های التراسونیک و سنسور مجاورت مادون قرمز است. سنسور التراسونیک به ربات این ویژگی را میدهد که به مانع ها برخورد نکند و سنسور مجاورت به ربات کمک میکند پله ها را تشخیص دهد و سقوط نکند.

شماتیک مدار ربات تمیز کننده کف با آردوینو

ما سه سنسور اولتراسونیک داریم که موانع را تشخیص می دهند. این سه سنسور قسمت مهم پروژه ما هستند و ما آن ها را به آردوینو متصل میکنیم. ما همچنین VCC ماژول IR را به 5 ولت وصل می کنیم.  ما از باتری 7.4 ولت استفاده می کنیم ، برای تبدیل آن به 5 ولت ، از تنظیم کننده ولتاژ LM7805 استفاده می شود.

شماتیک مدار ربات تمیز کننده کف با آردوینو

قطعات مورد نیاز

  • آردوینو پرو مینی
  • 3 * ماژول اولتراسونیک HC-SR04
  • درایور موتور L293D
  • 2 * موتور 5 ولت
  • سوئیچ
  • تنظیم کننده ولتاژ LM7805
  • باتری لیتیوم یون 7.4 ولت
  • ماژول مادون قرمز
  • جارو برقی قابل حمل معمولی
قطعات مورد نیاز را از فروشگاه قطعات آیرنکس تهیه کنید.

جاروبرقی قابل حمل معمولی!

در قسمت مورد نیاز قطعات ، ما در مورد جاروبرقی قابل حمل صحبت کردیم. جاروبرقی قابل هم که تصویر آن را در زیر مشاهده میکنید یک جاروبرقی کوچک و کم مصرف هست که ما در ربات جاسازی میکنیم. این نوع جاروبرقی ها امکانات مناسبی دارند و به دلیل ارزان بودن میتوانند به راحتی کار ما را راه بیاندازند.

جاروبرقی قابل حمل معمولی!

ماژول سنسور اولتراسونیک HC-SR04

برای تشخیص موانع ، ما از سنسور فاصله صنج اولتراسونیک HC-SR04 استفاده می کنیم. کار بسیار ساده است ، اول ، ماژول فرستنده یک موج اولتراسونیک ارسال می کند که از طریق هوا حرکت می کند ، به یک مانع برخورد می کند و به عقب برمی گردد و گیرنده آن موج را دریافت می کند. با محاسبه زمان با آردوینو ، می توانیم فاصله را تعیین کنیم. برای کسب اطلاعات بیشتر مقاله فاصله سنج آردوینو را بخوانید.

نحوه کار سنسور التراسونیک
نحوه کار سنسور التراسونیک

سنسور مجاورت مادون قرمز برای تشخیص پله

از سنسور مادون قرمز برای تشخیص وجود کف استفاده میشود. اگر ربات از پله ها بیافتد امکان خراب شدن آن وجود دارد. برای تشخیص پله ها ما از سنسور مجاورت مادون قرمز استفاده میکنیم.

مطلب پیشنهادی:  پروژه ربات انسان نما با آردوینو (ساخت ربات دو پا)

سنسور مجاورت مادون قرمز برای تشخیص پله

ساخت مدار برای ربات تمیز کننده کف آردوینو

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

ساخت مدار برای ربات تمیز کننده کف آردوینو

ساخت محفظه برای ربات جاروبرقی هوشمند

ساخت محفظه کاملا سلیقه ای است و شما میتوانید برای ربات خود به هر شکل که میخواهید یک محفظه یا جعبه طراحی کنید. در محفظه خود باید جایی را برای سنسور التراسونیک و مجاورت در نظر بگیرید. تصاویر زیر به شما در ساخت این محفظه کمک میکند.

ساخت محفظه برای ربات جاروبرقی هوشمند

کد ربات تمیز کننده کف بر پایه آردوینو

کد کامل پروژه در انتهای صفحه در فایل دانلودی قرار داده شده است. در این کد ما از هیچ کتابخانه اضافه ای استفاده نمیکنیم. در اینجا قسمت های مهم کد را توضیح میدهیم.

در ابتدای کد متغیر هایی را برای پین های مورد نیاز مثل پین های Echo و Trig سنسور های التراسونیک تعریف میکنیم. توجه داشته باشید که 1 سنسور سمت چپ ، 2 سنسور جلو و 3 سنسور سمت راست است.

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید
const int trigPin1 = 3;
const int echoPin1 = 5; 
const int trigPin2 = 6;
const int echoPin2 =9; 
const int trigPin3 = 10;
const int echoPin3 = 11;
int irpin =2;

سپس متغیرهایی را برای فاصله تعریف میکنیم که همه آنها متغیرهای نوع (int) هستند و برای مدت زمان از (long) استفاده کردیم. باز هم ، ما از هر کدام سه مورد داریم.

 long duration1;
 long duration2;
 long duration3;
int distanceleft;
int distancefront;
int distanceright;
int a=0;

در Setup باید همه پین ​​های ها را به عنوان ورودی یا خروجی با استفاده از تابع pinModes () تعریف کنیم. برای ارسال امواج مافوق صوت از ماژول ، ما باید پین Trig را فعال کنیم ، یعنی همه پین ​​های Trig باید به عنوان OUTPUT تعریف شوند. و برای دریافت Echo، باید وضعیت پین های Echo را بخوانیم بنابراین همه پین ​​های Echo باید به عنوان INPUT تعریف شوند. همچنین سریال مانیتور را برای عیب یابی فعال می کنیم. برای خواندن وضعیت ماژول مادون قرمز پین irpin را به عنوان ورودی تعریف کرده ایم.

pinMode(trigPin1, OUTPUT);
pinMode(trigPin2, OUTPUT);
pinMode(trigPin3, OUTPUT);
pinMode(echoPin1, INPUT); 
pinMode(echoPin2, INPUT);
pinMode(echoPin3, INPUT);
 pinMode(irpin, INPUT);

و این پین های دیجیتالی به عنوان OUTPUT برای ورودی درایور موتور تعریف شده اند.

pinMode(4, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(12, OUTPUT);

در void loop ما سه بخش برای سه سنسور داریم. همه بخشها یکسان عمل می کنند اما هر کدام برای سنسورهای مختلف هستند. در این بخش ، فاصله مانع از هر سنسور را می خوانیم و آن را در متغیر int تعریف شده ذخیره می کنیم. برای خواندن فاصله ، ابتدا باید مطمئن شویم که پایه های Trig روشن هستند ، برای این کار ما باید پین Trig را به مدت 2 میکرو ثانیه روی LOW تنظیم کنیم. اکنون ، برای ایجاد موج اولتراسونیک ، ما باید پین Trig را به مدت 10 میکرو ثانیه به HIGH تبدیل کنیم. با این کار موج اولتراسونیک ارسال می شود و با استفاده از تابع ()pulseIn ، می توانیم زمان ارسال و دریافت را بخوانیم و این مقدار را در متغیر “duration” ذخیره کنیم. این تابع دارای 2 پارامتر است ، اولین مورد نام پین Echo است و برای پارامتر می توانید HIGH یا LOW بنویسید. HIGH به این معنی است که تابع pulseIn () شمارش را آغاز میکند و زمانی که پین HIGH شود شمارش را متوقف میکند و LOW یعنی تابع شمارش را آغاز میکند و زمانی که پین LOW شود شمارش را متوقف میکند. این تابع طول پالس التراسونیک را بر حسب میکروثانیه نشان میدهد. برای محاسبه فاصله مدت زمان را در 0.034 ضرب میکنیم. (سرعت صدا در هوا 340 متر بر ثانیه است) و آن را بر 2 تقسیم می کنیم زیرا فاصله بدست آمده، فاصله رفت و برگشت موج است.

digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distanceleft = duration1 * 0.034 / 2;

پس از محاسبه فاصله سنسور ها با موانع، می توانیم موتورها را با استفاده از دستور if کنترل کنیم ، بنابراین حرکت ربات را کنترل می کنیم. این کار بسیار ساده است. م فاصله نزدیک شدن به مانع و تغییر مسیر را 15 در نظر میگیریم با شرط ها مسیر ربات را تغییر میدهیم.. به عنوان مثال ، وقتی مانعی جلوی سنسور چپ می آید (یعنی فاصله سنسور سمت چپ باید کمتر یا معادل 15 سانتی متر باشد) و دو فاصله دیگر زیاد است (این بدان معناست که هیچ مانعی در مقابل سنسورهای آن قرار ندارد) با استفاده از تابع digitalWrite ، می توانیم موتورها را به سمت راست هدایت کنیم. سپس وضعیت سنسور IR را بررسی میکنیم. اگر ربات روی زمین باشد ، مقدار پین IR LOW خواهد بود و اگر نه ، مقدار HIGH خواهد بود. سپس آن مقدار را در متغیر int s ذخیره مینکیم. ما قصد داریم روبات را با توجه به این وضعیت کنترل کنیم.

مطلب پیشنهادی:  متغیر scope در پروژه های آردوینو (داده محلی)

این بخش از کد برای حرکت روبات به جلو و عقب استفاده می شود:

if(s==HIGH)
  { 
    digitalWrite(4, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(8, LOW);
    digitalWrite(12, HIGH);
      delay(1000);
    a=1;
        }

پس از تشخیص عدم وجود کف ، روبات به جلو حرکت نمی کند. در عوض ، به چپ حرکت می کند ، به این ترتیب ، می توانیم از مشکل جلوگیری کنیم.

if ((a==0)&&(s==LOW)&&(distanceleft <= 15 && distancefront > 15 && distanceright <= 15) || (a==0)&&(s==LOW)&&(distanceleft > 15 && distancefront > 15 && distanceright > 15))

این بخش از کد برای حرکت روبات به راست استفاده می شود:

 digitalWrite(4, HIGH);
 digitalWrite(7, LOW);
 digitalWrite(8, HIGH);
 digitalWrite(12, LOW);

اگر ربات تشخیص دهد که کف وجود ندارد ، مقدار به 1 تغییر می کند و ربات به سمت چپ حرکت می کند. پس از گردش به چپ ، مقدار ‘a’ از 1 به 0 تغییر می کند.

 if ((a==1) &&(s==LOW) ||(s==LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright > 15) || (s== LOW) && (distanceleft <= 15 && distancefront <= 15 && distanceright > 15) || (s==LOW) && (distanceleft <= 15 && distancefront > 15 && distanceright > 15) || (distanceleft <= 15 && distancefront > 15 && distanceright > 15))
  {
    digitalWrite(4, HIGH);
    digitalWrite(7, LOW);
    digitalWrite(8, LOW);
    digitalWrite(12, HIGH);
    delay(100);
    a=0;
  }

این بخش از کد برای حرکت روبات به چپ استفاده می شود:

if ((s==LOW)&&(distanceleft > 15 && distancefront <= 15 && distanceright <= 15) ||(s==LOW)&& (distanceleft > 15 && distancefront > 15 && distanceright <= 15) ||(s==LOW)&& (distanceleft > 15 && distancefront <= 15 && distanceright > 15) )
    {
    digitalWrite(4, LOW);
    digitalWrite(7, HIGH);
    digitalWrite(8, HIGH);
    digitalWrite(12, LOW);
  }

موارد موجود در فایل : سورس کامل

4.5 (8 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

برای ارسال تصاویر از انجمن سایت استفاده کنید.

سوالات فنی را در انجمن سایت مطرح کنید تا در مسابقه شرکت کنید. ورود به انجمن

29 نظر

  1. سلام آقای رحیمی من می‌خواستم این پروژه رو برام بسازید و ارسال کنید امکانش هست؟ اگر هست یک راه ارتباطی بهم بدید تا صحبت کنیم ممنون میشم زودتر جواب بدید. ❤️

    1. سلام عزیز
      ما پروژه کامل ارسال نمیکنیم برای یادگیری برنامه نویسی میتوانید دوره آموزش آردوینو را مشاهده کنید و برای قطعات هم میتوانید از فروشگاه قطعات ما استفاده کنید.

  2. سلام مجدد ببخشید من این رباتو ساختم ولی مداوم ای سی درایورم میسوزه دلیلش چی میتونه باشه؟

    1. سلام عزیز
      جریان و ولتاژ بالایی میکشید؟

  3. سلام ببخشید ماژول شتاب سنج به چه پایه هایی وصل میشه؟

    1. سلام عزیز
      ماژول شتاب سنج در این پروژه استفاده نشده است

  4. سلام ببخشید کدهایی که شما دادید را با تبلت میشه وارد آردینو کرد ؟؟؟
    یک سوال دیگه هم دارشتم،کدهایی که شما دادید رویه صفحه همون هارابایدوارد کنینم؟؟؟. لطفاً جواب من را زودتر بدهید باتشکر

    1. سلام عزیز
      بله از طریق اندروید و اتصال کابل میتونید برنامه نویسی انجام بدید برای آردوینو
      کد های قرار داده شده در فایل دانلودی را باید وارد برد کنید.
      اگر با آردوینو آشنایی ندارید جهت یادگیری برنامه نویسی و ارتباط اندروید با آردوینو دوره آموزش آردوینو را مشاهده کنید.

  5. چرا سنسور های التراسونیک کار نمی کنند؟ یعنی باتری کامل شارژ نشده؟ چون مادون قرمز کار می کنه و از جایی نمی افته.
    راستی شما چطور با دو چرخ رباتتون تعادل داره اما مال من همش می افته؟ مگه شما چطور ربات رو درست کردید.

    1. سلام عزیز
      اتصالات رو بررسی کنید از باتری قوی تر استفاده کنید تعادل ربات به سازه اون بستگی داره وقت بیشتری برای سازه و جرخ ها بذارید

    1. کد جدید میتونید روی برد آپلود کنید؟

  6. سلام، خسته نباشید.
    شما راست می گفتید از باتری بود.
    ولی حالا به یک مشکل دیگه برخوردم. هر چی دکمه ی ریست اردوینو رو می زنم اردوینو ریست نمی شه و چراغ همچنان چشمک می زنه.

    1. کدام چراغ آردوینو چشمک میزنه؟

  7. با بلینک چشمک زن رو درست کردم.
    تازمانی که به لپ تاپ وصل بود و با لپ تاپ کار می کرد لامپ چشمک می زد تازه در سریال مانیتور کلی نوسانات دیدم.
    فکر کردم داره از پردازنده لپ تاپ استفاده می کنه ولی وقتی از منوی تولز پورت رو قطع کردم باز هم لامپ چشمک می زد ولی وقتی از لپ تاپ جراش می کنم و به باتری وصل می کنم اردوینو فقط چراغ پاورش روشن می شه و لامپ چشمک نمی زنه.
    چکار کنم، راه حلی داره؟

    1. سلام عزیز
      احتمالا باتری هاتون ضعیف هست

  8. من تازه این اردوینو رو خریدم. برای تست اینکه سالمه یا نه کد چراغ چشمک زن رو با یک ال ای دی روی اردوینو ریختم اما در سریال مانیتور فقط عدد صفر رو نشان می داد.
    چکار کنم، یعنی این اردوینو خرابه؟من مدار رو درست بستم.

    1. سلام عزیز
      کد Blink رو از قسمت Examples نرم افزار آردوینو آپلود کنید و ببینید چراغ روی برد چشمک میزنه یا خیر

  9. سلام ببخشید میشود از سه سنسور آلتراسونیک و از سه سنسور مادون قرمز در شش طرف استفاده شود و یک مخزن بزرگتر تا جاروبرقی کاربردی تر بشود ممنون میشوم این ایده را هم اجرا کنید

    1. سلام عزیز
      بله میشه اینکار رو انجام داد
      اگر برنامه نویسی آردوینو بلد نیستید دوره آموزش آردوینو رو مشاهده کنید

  10. سایتتون عالیه!ممنون از اموزشاتون.
    می شه از اردوینو نانو برای این پروژه استفاده کرد؟

    1. سلام عزیز
      بله میتونید از آردوینو نانو استفاده کنید

  11. سلام میخواستم بدونم چجوری کد رو به برد ارداینو پرو مینی باید وارد کنم با چه سکوتی یا درگاهی؟

    1. سلام عزیز
      از ماژول FTDI استفاده کنید
      ارتباط سریال برقرار میکنه بین کامپیوتر و پایه های آردوینو پرو مینی

  12. سلام ببخشید میش بگین اون محفظه برای آشغال ها رو از کجا تهیه کنیم خواهش میکنم بگید من تموم قطعات پیدا کردم فقط همین محفظه نگرفتم؟🙏🙏

    1. سلام عزیز، هم میتونید با مواد پلاستیکی بسازید و هم میتونید با چاپ سه بعدی طراحی کنید

  13. سلام توضیحات بیشتر درمودرد این جارو برقی بدین
    جاروبرقی از چه نوعی می باشد
    راه برقراری با سازنده این ربات معرفی کنید ممنون میشم

    1. سلام اقا، سازنده همین ادمین سایته.
      اگر سایت رو دیده باشید کاملا واضح است که این ربات، ربات جاروبرقیه.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *