- المواد المطلوبة لبناء روبوت تنظيف الأرضيات القائم على الأردوينو
- مكنسة كهربائية محمولة
- وحدة استشعار الموجات فوق الصوتية HC-SR04
- مستشعر الأرضية (مستشعر الأشعة تحت الحمراء) لكشف السلالم
- مخطط الدائرة لروبوت منظف الأرضيات القائم على اردوينو
- بناء الدائرة لروبوت تنظيف الأرضيات القائم على الأردوينو
- اردوينو
في السيناريو الحالي ، نحن جميعًا مشغولون جدًا بعملنا لدرجة أننا لا نملك الوقت لتنظيف منزلنا بشكل صحيح. حل المشكلة بسيط للغاية ، ما عليك سوى شراء روبوت مكنسة كهربائية منزلية مثل irobot roomba الذي سينظف منزلك بضغطة زر. لكن مثل هذه المنتجات التجارية قضية شائعة ، وهي التكلفة. لذلك قررنا اليوم صنع روبوت بسيط لتنظيف الأرضيات ، وهو ليس سهل الصنع فحسب ، بل يكلف أقل بكثير مقارنة بالمنتجات التجارية المتوفرة في السوق. قد يتذكر القراء المتكررون روبوت Arduino Vacuum Cleaning Robot ، الذي أنشأناه منذ وقت طويل ، ولكنه كان ضخمًا للغاية ويحتاج إلى بطارية كبيرة من حمض الرصاص للتنقل. مكنسة اردوينو الكهربائية الجديدة سوف نبني هنا سيكون مضغوطًا وأكثر عملية. علاوة على ذلك ، سيحتوي هذا الروبوت على مستشعرات فوق صوتية ومستشعر تقارب IR. سيسمح المستشعر بالموجات فوق الصوتية للإنسان الآلي بتجنب العوائق حتى يتمكن من التحرك بحرية حتى يتم تنظيف الغرفة بشكل صحيح ، وسيساعده مستشعر القرب على تجنب السقوط من السلالم. كل هذه الميزات تبدو مثيرة للاهتمام ، أليس كذلك؟ اذا هيا بنا نبدأ.
في إحدى مقالاتنا السابقة ، صنعنا العديد من الروبوتات مثل روبوت الموازنة الذاتية وروبوت التعقيم الآلي للأسطح وروبوت تجنب العقبات. تحقق من هؤلاء إذا كان هذا يبدو مثيرا للاهتمام بالنسبة لك.
المواد المطلوبة لبناء روبوت تنظيف الأرضيات القائم على الأردوينو
نظرًا لأننا استخدمنا مكونات عامة جدًا لبناء قسم الأجهزة في روبوت المكنسة الكهربائية ، يجب أن تكون قادرًا على العثور على كل تلك الموجودة في متجر الهوايات المحلي. فيما يلي القائمة الكاملة للمواد المطلوبة إلى جانب صورة جميع المكونات.
- اردوينو برو ميني - 1
- وحدة الموجات فوق الصوتية HC-SR04 - 3
- سائق محرك L293D - 1
- محركات 5Volt N20 وأقواس التثبيت - 2
- عجلات محرك N20 - 2
- التبديل - 1
- منظم الجهد LM7805 - 1
- بطارية ليثيوم أيون 7.4 فولت - 1
- وحدة IR - 1
- بيرفبورد - 1
- عجلة الخروع - 1
- MDF
- Generic مكنسة كهربائية محمولة
مكنسة كهربائية محمولة
في قسم متطلبات المكون ، تحدثنا عن مكنسة كهربائية محمولة ، الصور أدناه توضح ذلك بالضبط. إنها مكنسة كهربائية محمولة من أمازون. يأتي هذا بآلية بسيطة للغاية. يحتوي على ثلاثة أجزاء في الأسفل (حجرة صغيرة لتخزين الغبار ، الجزء الأوسط يشمل المحرك ، المروحة ، ومقبس البطارية في الأعلى (يوجد غطاء أو غطاء للبطارية). تحتوي على محرك DC و مروحة. هذا المحرك متصل مباشرة ب 3 فولت (2 * 1.5 فولت بطاريات AA) عن طريق مفتاح بسيط. نظرًا لأننا نقوم بتشغيل الروبوت لدينا ببطارية 7.4 فولت ، فإننا سنقطع الاتصال من البطارية الداخلية ونشغلها من 5 فولت مزود الطاقة ، لذا قمنا بإزالة جميع الأجزاء غير الضرورية ولم يتبق سوى المحرك ذو السلكين ، ويمكنك أن ترى ذلك في الصورة أدناه.
وحدة استشعار الموجات فوق الصوتية HC-SR04
لاكتشاف العوائق ، نستخدم مستشعر المسافة فوق الصوتية HC-SR04 الشهير أو يمكننا تسميته مستشعرات تجنب العوائق. العمل بسيط للغاية ، أولاً ، ترسل وحدة الإرسال موجة فوق صوتية تنتقل عبر الهواء ، وتضرب عقبة ، وترتد إلى الخلف ويستقبل المستقبل تلك الموجة. من خلال حساب الوقت باستخدام Arduino ، يمكننا تحديد المسافة. في مقال سابق حول مشروع Arduino Based Ultrasonic Distance Sensor ، ناقشنا مبدأ عمل هذا المستشعر بدقة شديدة. يمكنك التحقق من ذلك إذا كنت تريد معرفة المزيد عن وحدة استشعار المسافة بالموجات فوق الصوتية HC-SR04.
مستشعر الأرضية (مستشعر الأشعة تحت الحمراء) لكشف السلالم
في قسم الميزات ، تحدثنا عن ميزة حيث يمكن للروبوت اكتشاف السلالم ويمكنه منع نفسه من السقوط. للقيام بذلك ، نحن نستخدم مستشعر الأشعة تحت الحمراء. سنقوم بعمل واجهة بين مستشعر IR و Arduino. إن عمل مستشعر القرب من الأشعة تحت الحمراء بسيط للغاية ، فهو يحتوي على IR LED والصمام الثنائي الضوئي ، ويصدر IR LED ضوء الأشعة تحت الحمراء ، وإذا ظهر أي عائق أمام هذا الضوء المنبعث ، فسوف ينعكس ، وسيتم الكشف عن الضوء المنعكس بواسطة الثنائي الضوئي. لكن الجهد المتولد من الانعكاس سيكون منخفضًا جدًا. لزيادة ذلك ، يمكننا استخدام مقارن op-amp ، يمكننا تضخيم والحصول على الإخراج. و حدة IRيحتوي على ثلاثة دبابيس - Vcc ، والأرضي ، والإخراج. عادة ، ينخفض الناتج عندما يأتي عائق أمام المستشعر. لذلك ، يمكننا استخدام هذا لاكتشاف الأرضية. إذا اكتشفنا لجزء من الثانية ارتفاعًا من المستشعر ، يمكننا إيقاف الروبوت أو إعادته إلى الوراء أو القيام بأي شيء نريده لمنعه من السقوط من السلم. في مقال سابق ، قمنا بعمل نسخة Breadboard من IR Proximity Sensor Module وشرحنا مبدأ العمل بالتفصيل ، يمكنك التحقق من ذلك إذا كنت تريد معرفة المزيد عن هذا المستشعر.
مخطط الدائرة لروبوت منظف الأرضيات القائم على اردوينو
لدينا ثلاثة مستشعرات فوق صوتية تكتشف العوائق. لذلك ، نحن بحاجة إلى ربط جميع أسس أجهزة الاستشعار بالموجات فوق الصوتية وربطها بأرضية مشتركة. أيضًا ، نقوم بتوصيل جميع Vcc الثلاثة للمستشعر وربط ذلك بدبوس VCC المشترك. بعد ذلك ، نقوم بتوصيل دبابيس المشغل والصدى بدبابيس PWM في Arduino. نقوم أيضًا بتوصيل VCC لوحدة IR بـ 5 فولت والأرضي بالدبوس الأرضي في Arduino ، ينتقل دبوس الإخراج لوحدة مستشعر IR إلى الدبوس الرقمي D2 في Arduino. بالنسبة لسائق المحرك ، نقوم بتوصيل دبابيس التمكين بـ 5 فولت وأيضًا دبوس جهد المحرك بـ 5 فولت لأننا نستخدم محركات 5 فولت. في مقال سابق ، قمنا بتصميم Arduino Motor Driver Shield ، يمكنك التحقق من ذلك لمعرفة المزيد حول L293D Motor Driver ICوعملياتها. تعمل وحدات Arduino و Ultrasonic ومحرك المحرك والمحركات على 5 Volt ، والجهد العالي سيقتلها ونحن نستخدم بطارية 7.4 فولت ، لتحويل ذلك إلى 5 فولت ، يتم استخدام منظم الجهد LM7805. قم بتوصيل المكنسة الكهربائية مباشرة بالدائرة الرئيسية.
بناء الدائرة لروبوت تنظيف الأرضيات القائم على الأردوينو
من أجل الحصول على بعض الأفكار حول الروبوت الخاص بي ، بحثت عن روبوتات مكنسة كهربائية عبر الإنترنت وحصلت على بعض الصور لروبوتات مستديرة الشكل. لذلك ، قررت بناء روبوت على شكل دائري. لبناء مطاردة وجسم الروبوت ، لدي الكثير من الخيارات مثل لوح الرغوة ، MDF ، الورق المقوى ، إلخ. لكنني اخترت MDF لأنه صلب وله بعض خصائص مقاومة الماء. إذا كنت تفعل ذلك ، يمكنك تحديد المواد التي ستختارها لروبوتك.
لبناء الروبوت ، أخذت ورقة MDF ، ثم رسمت دائرتين بنصف قطر 8 سم ، وداخل تلك الدائرة ، قمت أيضًا برسم دائرة أخرى نصف قطرها 4 سملتركيب المكنسة الكهربائية. ثم قطعت الدوائر. أيضًا ، قمت بقص وإزالة القطع المناسبة لمسار العجلة (راجع الصور لفهم أفضل). أخيرًا ، قمت بعمل ثلاثة ثقوب صغيرة لعجلة العجلة. الخطوة التالية هي تركيب المحركات على القاعدة باستخدام حواملها ، وكذلك وضع عجلة العجلة وتثبيتها في موضعها. بعد ذلك ، ضع المستشعرات فوق الصوتية على يسار ويمين ووسط الروبوت. أيضًا ، قم بتوصيل وحدة IR بالجانب السلبي للروبوت. لا تنس إضافة المفتاح إلى الخارج. هذا كل شيء عن بناء الروبوت ، إذا كنت تشعر بالارتباك في هذه المرحلة ، يمكنك الرجوع إلى الصور التالية.
بالنسبة للجزء العلوي ، قمت أيضًا برسم دائرة نصف قطرها 11 سم على لوح الرغوة وقم بقصها. بالنسبة للتباعد بين الجزء العلوي والجزء السفلي ، قمت بقطع ثلاث قطع بطول 4 سم من أنبوب بلاستيكي. بعد ذلك ، قمت بلصق الفواصل البلاستيكية في الجزء السفلي ثم قمت بلصق الجزء العلوي. يمكنك تغطية الأجزاء الجانبية من الروبوت بالبلاستيك أو مواد مماثلة إذا أردت.
اردوينو
يتم تقديم الكود الكامل لهذا المشروع في نهاية المستند. يشبه كود Arduino كود Arduino Based Ultrasonic Distance Sensor ، التغيير الوحيد هو في الكشف عن الأرض. في الأسطر التالية ، أشرح كيفية عمل الكود. في هذه الحالة ، لا نستخدم أية مكتبات إضافية. فيما يلي وصفنا الشفرة بطريقة خطوة بخطوة. نحن لا نستخدم أي مكتبات إضافية لفك تشفير بيانات المسافة من مستشعر HC-SR04 ، لأنه بسيط للغاية. في السطور التالية ، وصفنا كيف. أولاً ، نحتاج إلى تحديد Trigger Pin و Echo Pin لجميع مستشعرات المسافة بالموجات فوق الصوتية الثلاثة المتصلة بلوحة Arduino. في هذا المشروع ، لدينا ثلاثة دبابيس Echo وثلاثة دبابيس Trigger. لاحظ أن 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) وللمدة ، اخترنا استخدام (طويل). مرة أخرى ، لدينا ثلاثة من كل منها. كما قمت بتحديد عدد صحيح لتخزين حالة الحركة وسنتحدث عنه لاحقًا في هذا القسم.
مدة طويلة 1 ؛ مدة طويلة 2 ؛ مدة طويلة 3 ؛ مسافة اليسار المسافة الأمامية int مسافة قصيرة كثافة العمليات أ = 0 ؛
بعد ذلك ، في قسم الإعداد ، نحتاج إلى جعل جميع دبابيس المنظور كإدخال أو إخراج باستخدام وظيفة pinModes () . لإرسال موجات فوق صوتية من الوحدة ، نحتاج إلى تمكين دبوس المشغل إلى مستوى عالٍ ، أي يجب تعريف جميع دبابيس الزناد على أنها إخراج. ولتلقي صدى الصوت ، نحتاج إلى قراءة حالة دبابيس echo لذا يجب تعريف جميع دبابيس echo على أنها INPUT. أيضًا ، نقوم بتمكين الشاشة التسلسلية لاستكشاف الأخطاء وإصلاحها. لقراءة حالة وحدات IR ، قمت بتعريف irpin كمدخل.
pinMode (trigPin1 ، الإخراج) ؛ pinMode (trigPin2 ، الإخراج) ؛ pinMode (trigPin3 ، الإخراج) ؛ pinMode (echoPin1 ، INPUT) ؛ pinMode (echoPin2 ، INPUT) ؛ pinMode (echoPin3 ، INPUT) ؛ pinMode (irpin ، الإدخال) ؛
ويتم تعريف هذه المسامير الرقمية على أنها OUTPUT لإدخال محرك المحرك.
pinMode (4 ، الإخراج) ؛ pinMode (7 ، الإخراج) ؛ pinMode (8 ، الإخراج) ؛ pinMode (12 ، الإخراج) ؛
في الحلقة الرئيسية ، لدينا ثلاثة أقسام لثلاثة أجهزة استشعار. تعمل جميع الأقسام بالطريقة نفسها ولكن لكل منها أجهزة استشعار مختلفة. في هذا القسم ، نقرأ مسافة العائق من كل مستشعر ونخزنها في كل عدد صحيح محدد. لقراءة المسافة ، أولاً ، علينا التأكد من أن دبابيس الزناد واضحة ، لذلك ، نحتاج إلى ضبط دبوس المشغل على LOW لمدة 2 s. الآن ، لتوليد الموجة فوق الصوتية ، نحتاج إلى تحويل دبوس المشغل HIGH لمدة 10 s. سيؤدي هذا إلى إرسال الصوت فوق الصوتي وبمساعدة وظيفة pulseIn () ، يمكننا قراءة وقت السفر وتخزين هذه القيمة في " المدة " المتغيرة. تحتوي هذه الوظيفة على معلمتين ، الأولى هي اسم دبوس echo أما الثانية ، فيمكنك كتابة أي منهمامرتفع أو منخفض. HIGH تعني أن وظيفة pulseIn () ستنتظر وصول الدبوس إلى HIGH بسبب الموجة الصوتية المرتدة وسيبدأ العد ، ثم سينتظر الدبوس ليذهب إلى LOW عندما تنتهي الموجة الصوتية مما سيوقف العد. تعطي هذه الوظيفة طول النبضة بالميكروثانية. لحساب المسافة ، سنضرب المدة في 0.034 (سرعة الصوت في الهواء 340 م / ث) ونقسمها على 2 (هذا بسبب انتقال الموجة الصوتية ذهابًا وإيابًا). أخيرًا ، نقوم بتخزين مسافة كل مستشعر في الأعداد الصحيحة المقابلة.
digitalWrite (trigPin1 ، LOW) ؛ تأخير ميكروثانية (2) ؛ digitalWrite (trigPin1 ، HIGH) ؛ تأخير ميكروثانية (10) ؛ digitalWrite (trigPin1 ، LOW) ؛ المدة 1 = pulseIn (echoPin1 ، HIGH) ؛ مسافة اليسار = المدة 1 * 0.034 / 2 ؛
بعد الحصول على المسافة من كل مستشعر ، يمكننا التحكم في المحركات بمساعدة عبارة if وبالتالي نتحكم في حركة الروبوت. هذا بسيط للغاية ، أولاً ، قدمنا قيمة مسافة العائق ، في هذه الحالة ، تبلغ 15 سم (قم بتغيير هذه القيمة حسب رغبتك). ثم أعطينا شروطًا وفقًا لتلك القيمة. على سبيل المثال ، عندما يأتي عائق أمام المستشعر الأيسر (هذا يعني أن مسافة المستشعر الأيسر يجب أن تكون أقل من أو تساوي 15 سم) والمسافتان الأخريان مرتفعة (وهذا يعني عدم وجود عائق أمام المستشعرات) ، ثم بمساعدة وظيفة الكتابة الرقمية ، يمكننا قيادة المحركات إلى اليمين. لاحقًا ، راجعت حالة مستشعر الأشعة تحت الحمراء. إذا كان الروبوت على الأرض ، فستكون قيمة دبوس الأشعة تحت الحمراء منخفضة ، وإذا لم يكن كذلك ، فستكون القيمةعالية. ثم قمت بتخزين هذه القيمة في متغير int s . سوف نتحكم في الروبوت وفقًا لهذه الحالة.
يُستخدم هذا القسم من الكود لتحريك الروبوت للأمام وللخلف :
إذا (s == HIGH) { digitalWrite (4، LOW) ؛ digitalWrite (7 ، عالية) ؛ digitalWrite (8 ، منخفض) ؛ digitalWrite (12 ، عالية) ؛ تأخير (1000) ؛ أ = 1 ؛ }
ولكن هناك مشكلة في هذه الطريقة عندما يتحرك المحرك للخلف ، وتعود الأرضية ويتحرك الروبوت للأمام ، وسيكرر الأمر مما يجعل الروبوت عالقًا. للتغلب على ذلك ، نقوم بتخزين القيمة (1) في int بعد فهم الكلمة غير موجودة. نتحقق أيضًا من هذه الحالة للحركات الأخرى.
بعد اكتشاف عدم وجود الأرضية ، لن يتحرك الروبوت للأمام. بدلا من ذلك ، سوف يتحرك إلى اليسار ، وبهذه الطريقة يمكننا تجنب المشكلة.
إذا ((a == 0) && (s == LOW) && (distanceleft <= 15 && Distancefront> 15 && distanceright <= 15) - (a == 0) && (s == LOW) && (distanceleft> 15 && Distancefront> 15 && distanceright> 15))
في الحالة أعلاه. أولاً ، سيتحقق الروبوت من حالة الأرضية وقيمة العدد الصحيح. لن يتحرك الروبوت إلى الأمام إلا إذا تم استيفاء جميع الشروط.
الآن ، يمكننا كتابة الأوامر لسائق المحرك. سيؤدي ذلك إلى دفع المحرك الأيمن للخلف والمحرك الأيسر للأمام ، وبالتالي تحويل الروبوت إلى اليمين.
يُستخدم هذا القسم من الكود لتحريك الروبوت لليمين:
digitalWrite (4 ، عالية) ؛ digitalWrite (7 ، منخفض) ؛ digitalWrite (8 ، عالية) ؛ digitalWrite (12 ، منخفض) ؛
إذا اكتشف الروبوت أن الأرضية غير موجودة ، فستتغير القيمة إلى 1 ، وسينتقل الروبوت إلى اليسار. بعد الانعطاف إلى اليسار ، تتغير قيمة "a" إلى 0 من 1.
إذا ((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 ، عالية) ؛ digitalWrite (7 ، منخفض) ؛ digitalWrite (8 ، منخفض) ؛ digitalWrite (12 ، عالية) ؛ تأخير (100) ؛ أ = 0 ؛ }
يُستخدم هذا القسم من الكود لتحريك الروبوت إلى اليسار:
إذا ((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 ، عالية) ؛ digitalWrite (8 ، عالية) ؛ digitalWrite (12 ، منخفض) ؛ }
هذا كل شيء لبناء روبوت المكنسة الكهربائية الذكي القائم على Arduino. يمكن العثور على العمل الكامل للمشروع في الفيديو المرتبط أسفل هذه الصفحة. إذا كان لديك أي أسئلة ، قم بالتعليق أدناه.