مراجعة الدورة التدريبية على الإنترنت حول arduino / robotics من MIPT (الأسبوع الثالث)

نواصل مراجعة الدورة التدريبية المجانية عبر الإنترنت بناء الروبوتات والأجهزة الأخرى على Arduino. من إشارات المرور إلى الطابعات ثلاثية الأبعاد (المراجعات السابقة: الأسبوع 1 ، الأسبوع 2 )


الأسبوع الثالث


مرحبا بالجميع! هل تساءلت يومًا عما يمكن أن يكون مشتركًا بين الوادي والجدار؟



على الأقل ، كلاهما روبوت .


قبل التسجيل في دورة الروبوتات من MIPT ، تخيلت الروبوتات بشكل شبه حصري


آلات البشر

ولكن اتضح أن تعريف الروبوتات أوسع بكثير:


الروبوت هو جهاز أوتوماتيكي تم إنشاؤه على أساس كائن حي ، مصمم لتنفيذ الإنتاج والعمليات الأخرى ، والذي يعمل وفقًا لبرنامج محدد مسبقًا ويتلقى معلومات حول العالم الخارجي من أجهزة الاستشعار ، ويقوم الروبوت بشكل مستقل بالإنتاج والعمليات الأخرى التي يتم إجراؤها عادةً من قبل البشر. في الوقت نفسه ، يمكن للروبوت التواصل مع المشغل (تلقي الأوامر منه) والتصرف بشكل مستقل.

كما ترون ، التعريف أوسع بكثير من فكرتي النمطية عن الروبوت.


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


ماذا حصل نتيجة الأسبوع الثالث

دعني أذكرك أننا في الأسبوع الثاني من الدورة درسنا اتصال أبسط المستشعرات - مقاوم ضوئي ومقاوم حراري. تم ترتيبها بأبسط طريقة - عندما تغيرت البيئة ، غيروا مقاومتهم ، ونتيجة لذلك ، يمكننا قياس انخفاض الجهد عليهم باستخدام Arduino وفهم أن الظروف الخارجية تغيرت. تعلمنا أيضًا كيفية عرض المعلومات باستخدام مؤشرات LED وديناميكيات الضغط.


ندرس هذا الأسبوع محددات المدى - جهاز يسمح لك بتحديد المسافة إلى شيء أو عقبة.



يعمل مكتشف المدى بالموجات فوق الصوتية على مبدأ قياس الوقت بين إرسال إشارة (نبض صوتي بتردد 40 كيلو هرتز) واستلام نسخته المنعكسة.



في مستشعر الأشعة تحت الحمراء ، تمر الإشارة المنعكسة (شعاع في طيف الأشعة تحت الحمراء) عبر العدسة إلى خلية ضوئية حساسة للموضع ، مما يغير موصليةها اعتمادًا على المكان الذي يتم فيه استقبال الحزمة.


ربما يكون القارئ مهتمًا بضرورة استخدام مستشعرين للقيام بنفس الشيء؟ كل هذا يتوقف على نطاق المستشعر ، لذا فإن مستشعر الأشعة تحت الحمراء غير مناسب لقياس المسافة إلى الأسطح الشفافة التي تمتص الضوء ، لأنه يعتمد على الضوء. من ناحية أخرى ، جهاز تحديد المدى بالموجات فوق الصوتية غير مناسب لتحديد المسافة إلى الأسطح الممتصة للصوت ، على وجه الخصوص رقيق :) أيضًا ، تحتوي مستشعرات الأشعة تحت الحمراء على نطاق أصغر من المسافات المقاسة (على سبيل المثال ، 4-30 أو 10-80 أو 80-150 سم) ، في حين أنها رخيصة يحدد مكتشف المدى المسافات من 2 إلى 400 سم ، وقد تبين أن جهاز تحديد المدى بالموجات فوق الصوتية فقط في مجموعتي ، لذلك استخدمته فقط للتجارب.



ما هو محرك سيرفو ؟ هذا هو محرك كهربائي صغير يتم دمجه مع مقياس جهد ودائرة تحكم. من خلال تطبيق إشارة PWM على دخل المحرك المؤازر ، يمكننا ضبط الزاوية التي يجب أن تدور بها هذه الوظيفة وتحتفظ بها. عادةً ، تكون زاوية الدوران القصوى 180 درجة ، ولكن هناك محركات مؤازرة بزاوية من 120 إلى 270 درجة.


بعد أن لعبت بما فيه الكفاية مع المحرك المؤازر وجهاز تحديد المدى بالموجات فوق الصوتية بشكل منفصل ، بدأت أفكر في الجهاز الذي يجب تجميعه هذا الأسبوع. جاء القرار فجأة عندما خرجت من موقف السيارات تحت الأرض لمركز التسوق. تم تنظيم نظام خروج مع حاجز وإشارة مرور عند المخرج ، وقررت محاكاة ذلك.


لبناء هذا الجهاز ، استخدمت عناصر المصمم ، المحفوظة من أوقات المدرسة.




نظرًا لأن الطاقة من الكمبيوتر لم تكن كافية بشكل واضح ، فقد تم إعادة تشغيل اللوحة بشكل دوري ، وبالتالي ، في النسخة النهائية ، تم استخدام powerbank للطاقة.



في الواقع ، كيف يعمل نموذجنا المبسط لنظام الإنتاجية:


  1. بعد التشغيل ، يضيء ضوء المرور الأحمر ، ويتم ضبط الحاجز على الوضع المغلق. ينتظر النظام الضغط على زر (محاكاة قراءة تصريح).
  2. بعد الضغط على الزر ، تضيء إشارة المرور الخضراء ويفتح الحاجز. ينتظر النظام أن يكون معين المدى أقل من قيمة معينة (سفر السيارة).
  3. بعد أن تعبر السيارة إشارة مكتشف المدى ، تضيء إشارة المرور الحمراء مرة أخرى ويغلق الحاجز. يدخل النظام في وضع الاستعداد مرة أخرى.

في بيئة Fritzing ، يكون المخطط كما يلي:



كود المصدر
#include <Servo.h> //     #define GATE_PIN 3 #define RED_PIN 4 #define GREEN_PIN 5 #define BUTTON_PIN 6 #define SENSOR_TRIG 11 #define SENSOR_ECHO 12 //     #define GREEN 1 #define RED 0 #define CLOSE 1 #define OPEN 0 //   ,      #define GATE_OPEN 180 #define GATE_CLOSE 90 // ,     #define SENSOR_THR 15 Servo gate; void setup() { Serial.begin(9600); //      Serial.println("Initialize gate"); gate.attach(GATE_PIN); gate.write(CLOSE); //     Serial.println("Setup pins"); pinMode(GREEN_PIN, OUTPUT); pinMode(RED_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(SENSOR_TRIG, OUTPUT); pinMode(SENSOR_ECHO, INPUT); Serial.println("Light red"); light(RED); } //   -  void gateSet(int state) { if (state == CLOSE) { for (int i = GATE_OPEN; i >= GATE_CLOSE; i--) { gate.write(i); delay(15); } } else { for (int i = GATE_CLOSE; i <= GATE_OPEN; i++) { gate.write(i); delay(15); } } } //   void light(int col) { if (col == RED) { digitalWrite(GREEN_PIN, LOW); digitalWrite(RED_PIN, HIGH); } else { digitalWrite(GREEN_PIN, HIGH); digitalWrite(RED_PIN, LOW); } } //     / int getDistance() { digitalWrite(SENSOR_TRIG, HIGH); digitalWrite(SENSOR_TRIG, LOW); int distance = pulseIn(SENSOR_ECHO, HIGH) / 54; Serial.println("Distance is :" + String(distance)); return distance; } // ,    bool waitCar() { while (getDistance() > SENSOR_THR) { delay(10); } while (getDistance() <= SENSOR_THR) { delay(10); } } void loop() { Serial.println("Wait button"); while (digitalRead(BUTTON_PIN)) { delay(10); } Serial.println("Light green"); light(GREEN); Serial.println("Open gate"); gateSet(OPEN); Serial.println("Wait for car"); waitCar(); Serial.println("Light red"); light(RED); Serial.println("Close gate"); gateSet(CLOSE); Serial.println("End loop"); } 

شرح تشغيل الجهاز المجمع



لتلخيص. تعلمنا هذا الأسبوع كيفية العمل مع محددات المدى ، وكذلك التحكم في محرك سيرفو. هذه العناصر هي الأساس للعديد من الروبوتات ذات العجلات أو المشي ، بالإضافة إلى العديد من المتلاعبين ، لذلك ، توفر مساحة كبيرة للإبداع.


الاستعراضات السابقة :



ورابط للدورة: بناء الروبوتات والأجهزة الأخرى على Arduino. من إشارة المرور إلى الطابعة ثلاثية الأبعاد

Source: https://habr.com/ru/post/ar403841/


All Articles