جدول المحتويات:

Garden Helper Roomba Bot: 8 خطوات
Garden Helper Roomba Bot: 8 خطوات

فيديو: Garden Helper Roomba Bot: 8 خطوات

فيديو: Garden Helper Roomba Bot: 8 خطوات
فيديو: You’re welcome 😚 #Roomba #maintenance 2024, يوليو
Anonim
مساعد الحديقة Roomba Bot
مساعد الحديقة Roomba Bot

كيارا مايرز وأحمد الغدير وماديسون تيبت

غرض:

ستعلمك هذه التعليمات كيفية برمجة Roomba Bot ، باستخدام MATLAB ، للتنقل عبر حديقة ، واكتشاف الفواكه / الخضروات ذات الشكل الدائري التي تنضج بدرجة كافية ليتم قطفها بناءً على حجمها. يرسل لك هذا الروبوت أيضًا بريدًا إلكترونيًا ، ينبهك إلى عدد الفاكهة الجاهزة للقطف والمسار الذي سارت فيه.

سمات:

  • يستخدم مستشعرات الضوء لاكتشاف الجدران والانعطاف قليلاً لتجنب الاصطدام بها
  • يستخدم مستشعرات الاهتزازات لكسر البرنامج عندما يضرب الصخرة في نهاية الحديقة
  • يستخدم معالجة الصور لاكتشاف دائرة في الحديقة ثم تحديد نصف قطرها
  • يستخدم مستشعرات الجرف لاكتشاف الشريط الملون الذي يشير إلى وجود الفاكهة

الخطوة الأولى: المواد والمستلزمات:

  • كمبيوتر محمول واحد
  • ماتلاب 2017
  • مكنسة رومبا الكهربائية
  • فطيرة التوت
  • كتل خشبية
  • ورق ابيض
  • ورقة سوداء
  • شريط ملون / شريط رفيع من الورق الملون
  • صخرة كبيرة

الخطوة 2:

الخطوة 3: تجميع "حديقتك"

تجميع الخاص بك
تجميع الخاص بك
  1. خذ ورقتك السوداء واقطع دوائر بأحجام مختلفة
  2. ألصق هذه الدوائر السوداء على ورق أبيض كبير

    سيكون هذا التباين ضروريًا عند اكتشاف الفاكهة

  3. استخدم الكتل الخشبية الخاصة بك لإنشاء مسار حديقة يشبه المتاهة حتى يتنقل الروبوت الخاص بك

    اخترنا مسارًا على شكل حرف U كما هو موضح أعلاه

  4. في نهاية حديقتك ، أضف صخرة أو بابًا أو أي شيء آخر حتى يعرف الروبوت الخاص بك أنه قد انتهى
  5. ألصق ورقتك البيضاء بالدائرة على جدران الحديقة

    استخدمنا الدلاء لتثبيتها لأن جدراننا كانت قصيرة جدًا للكاميرا

  6. ضع شريطًا ملونًا / شريطًا رفيعًا من الورق الملون على الأرض أمام الثمرة

الخطوة 4: كتابة الكود

الإبحار في الحديقة

باستخدام Bump Sensors: لتشغيل البرنامج ، نضع الترميز في عبارة while التي تتكرر عبر عبارات if المختلفة حتى يتم كسر الكود. إذا تم الوصول إلى أي من الملصقات الصغيرة ، فسيؤدي ذلك إلى تساوي قيمتها الحقيقية (وهي قيمة 1 في Boolean). يتم استخدام عبارة if لكسر الكود عندما تساوي إحدى قيمها 1.

استخدام مستشعرات Cliff: في بيان while ، نستخدم عبارة if لإخبار Roomba عند وصولها إلى موقع المصنع. يكتشف جهاز Roomba الشريط الملون على الأرض من خلال فحص عتبة اللون الأحمر التي تلتقطها مستشعرات الجرف. إذا اكتشف مستشعر الجرف الأيمن أو الأيسر لونًا ذا عتبة أكبر من تلك الموجودة على الأرض ، فسيقوم بإيقاف الروبوت لمدة ثانيتين (باستخدام أمر الإيقاف المؤقت). خلال هاتين الثوانيتين ، سوف يلتقط جهاز Roomba صورة للفاكهة ويعرضها. باستخدام imfindcircles المضمنة في الأمر ، قم بتعيين نطاق لأنصاف أقطار دوائرك ، وسيقوم جهاز Roomba الخاص بك بالعثور على الفاكهة المزعومة.

باستخدام معالجة الصور: ضمن عبارة if ، نقوم بتضمين عبارة if أخرى تقول: إذا كان نصف القطر المكتشف ، نصف القطر 3 ، أكبر من أو يساوي الحد الأدنى لمتطلباتنا الخاصة بالفاكهة الناضجة ، r1 (تقرر هذا) ، فقم بالعد والعرض على في Roomba ، كم عدد الفاكهة الجاهزة واستدر للمتابعة عبر الحديقة. إذا لم يكن كذلك ، فإن الدور لمواصلة طريق الحديقة. ملاحظة: قد تحتاج إلى ضبط الزاوية التي تدور فيها لأن كل جهاز Roomba مختلف

استخدام مصدات الضوء: في عبارة if أخرى ، يتم تحليل المصدات الضوئية للتأكد من عدم زيادة أي منها عن الحد الذي حددناه. إذا تجاوز مصد الضوء الأمامي الأيسر أو الأيمن أو الأيسر أو الوسط الأيمن أو الأمامي الأيسر أو المصد الأيمن أعلى العتبة ، فسوف يستدير Roomba قليلاً بالزاوية المناسبة لتجنب الاصطدام بالحائط. ومن ثم ، فإن الإبحار في المتاهة.

يتم استخدام باقي الكود لرسم المسار الذي يسلكه جهاز Roomba ثم إرسال النتائج إلى بريدك الإلكتروني

الخطوة 5: انسخ الكود

النسبة المئوية للغرض: بناءً على أحجامهم ، سوف يمر جهاز Roomba بالحديقة ويميز الخضروات / الفواكه الجاهزة للقطف. النسبة المئوية للإدخالات: مستشعرات Lightbump ، مستشعرات Cliff ، مستشعرات الارتطام ، صورة من الكاميرا٪ المخرجات: عندما تكون مستشعرات الضوء أكبر من العتبة ، سوف يستدير roomba ويلتقط صورة ، ويصدر صوتًا إذا كان نصف قطر٪ خضروات / فواكه بين نطاق معين. ينكسر الكود عندما يصطدم جهاز roomba بـ٪ كائن ، ويرسل رائد الفضاء رسالة بريد إلكتروني إلى رائد الفضاء حول عدد الفاكهة الجاهزة لالتقاطها٪ وتخطيط لحركة roomba. النسبة المئوية للاستخدام: عبارات If and while ، أوامر التخطيط ، رمز البريد الإلكتروني من MATLAB

ك = 0

عرة

timerVal = عرة

احيانا صحيح

الخامس =.2 ؛ النسبة المئوية للسرعة r.setDriveVelocity (v ، v) ؛٪ roomba المضي قدمًا L = r.getLightBumpers ؛ LC = مركز اليسار ؛ Rr = L.right ؛ Lf = اليسار ؛ RC = L.rightCenter ؛ LF = L.leftFront ؛ RF = L rightFront ؛ س = 75 ؛ ٪ عتبة. RTH = 30 ؛ ٪ عتبة حمراء عالية RTL = 10 ؛ ٪ عتبة حمراء منخفضة B = r.getBumpers S = r.getCliffSensors ؛ r1 = 24 ؛ r3 = 10 ؛ PL1 = 1800 ؛ إذا كان S.leftFront> PL1 || يكتشف S.rightFront> PL1٪ ما إذا كان اللون على الأرض أعلى من الحد r.stop pause (2) elapsedTime = toc (timerVal-2) tic timerVal = tic٪ pause لمدة ثانيتين img = r.getImage؛ ٪ take image imshow (img)٪ display image [Centers3، radii3] = imfindcircles (img، [30 50]، 'ObjectPolarity'، 'dark'، 'Sensitivity'، 0.9)؛ ح = الأحشاء (المراكز 3 ، نصف قطر 3) ؛ ٪ ابحث عن دوائر نصف قطر w / في النطاق المحدد في الصورة إذا كان نصف القطر 3> = r1 T = 1 k = k + 1 dist1 = 0.2. * الوقت المنقضي٪ إذا كان نصف القطر المكتشف أكبر من أو يساوي الحد الأدنى من متطلبات الفاكهة الناضجة ، ثم يقوم Roomba بحساب هذه الفاكهة الأخرى إذا كان نصف قطرها 3 <= r3 T = 0 وإلا T = 0 dist2 = 0.2. * الوقت المنقضي ٪ إذا لم يكن كذلك ، فلن يتم احتساب نهاية الفاكهة

إذا كانت T == 1 r.setLEDDigits (num2str (k)) r.beep r.beep r. elseif T == 2 r.turnAngle (78)٪ إذا تم اكتشاف ثمرتين ، استدر للمتابعة من خلال٪ garden else r. TurnAngle (78)٪ إذا لم يتم اكتشاف أي ثمار ، استدر للمتابعة عبر٪ نهاية الحديقة if LC> Q r.stop r.turnAngle (-7) elseif RC> Q r.stop r.turnAngle (7) elseif LF> Q r.stop r.turnAngle (-7) elseif RF> Q r.stop r. turnAngle (7) elseif Lf> Q r.stop r. سوف يستدير قليلاً في الاتجاه المناسب لتجنب٪ الاصطدام بالحائط

إذا كان B.right == 1 || ب. اليسار == 1 || ب الجبهة == 1 dist3 = 0.2. * الوقت المنقضي r.stop r.beep ('F # * 2، F # * 2، c، F # * 2، F # * 2') r.turnAngle (360)٪ إذا كان أي من يتم ضرب الأعداد ، ثم يقوم جهاز Roomba بتشغيل الصوت ، ويدور حوله ،٪ ويكسر الشفرة

نهاية الاستراحة

مبعثر النهاية (0.533، 0، '^') امسك التشتت (0.533، dist1، '<') على مبعثر (-dist2، dist1، 'v') استمر في التشتت (-dist2، 0، 'd') حفظ (gcf، "Movement.png")

kmsg = num2str (k) mail = '[email protected]' password = 'Srsora123 #' host = 'smtp.gmail.com' المنفذ = '465'

setpref ("الإنترنت" ، "البريد الإلكتروني" ، البريد) ؛ setpref ("الإنترنت" ، "SMTP_Server" ، المضيف) props = java.lang. System.getProperties ؛ props.setProperty ("mail.smtp.user" ، بريد) ؛ props.setProperty ("mail.smtp.host" ، المضيف) ؛ props.setProperty ("mail.smtp.port" ، منفذ) ؛ props.setProperty ('mail.smtp.starttls.enable'، 'true') ؛ props.setProperty ('mail.smtp.debug'، 'true') ؛ props.setProperty ('mail.smtp.auth'، 'true') ؛ props.setProperty ("mail.smtp.socketFactory.port" ، منفذ) ؛ props.setProperty ('mail.smtp.socketFactory.class'، 'javax.net.ssl. SSLSocketFactory') ؛ props.setProperty ("mail.smtp.socketFactory.fallback"، "false") ؛ sendmail (mail، "مرحبًا رائد فضاء! هناك العديد من الفواكه في الحديقة" ، kmsg ، {'Movement.png'})

موصى به: