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


نواصل نشر نظرة عامة على الدورة التدريبية عبر الإنترنت "بناء الروبوتات وأجهزة Arduino الأخرى" ، بدءًا من هنا .


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


فيما يلي عينة قائمة قمت بتخصيصها لنفسي:


  • مقسم الجهد. باستخدام مقاوم ضوئي ومقاوم حراري
  • إشارة تناظرية. عرض الإشارة
  • التواصل عبر المنفذ التسلسلي. بيئة المعالجة
  • إشارة رقمية. الأزرار وخيارات الاتصال. المقاوم للسحب
  • التعبيرات المنطقية ، عبارات if and else
  • الجرس ، شريط LED ، مؤشر من سبعة أجزاء
  • الدوائر المصغرة. العاكس المنطقي 74HC04 ، سجل التحول 74HC595
  • برامج التصحيح
  • الوحدات الخارجية
  • متغير لنظام مراقبة جاهز يعرض درجة الحرارة ومستوى الضوء على مقياس LED ، بالإضافة إلى مكبر صوت يعمل عند تجاوز درجة حرارة معينة

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



أول ما يخطر على البال هو تحديث مستشعر الضوء. أخذ التنفيذ المقترح في الدرس ببساطة القيمة من المقاوم الضوئي وأرسلها إلى المنفذ التسلسلي.


يجب أن تستخدم النسخة التي تمت ترقيتها مؤشرًا من سبعة أجزاء لعرض الأرقام من 0 (الحد الأدنى من الإضاءة) إلى 9 (الحد الأقصى من الإضاءة). يجب توصيل المؤشر عبر سجل التحول. يجب استخدام زرين لتعيين الحد الأدنى والأقصى من مستويات الإضاءة. سجل النقل مطلوب من أجل عدم استخدام دبوس Arduino في كل جزء ، ولكن بدلاً من ذلك استخدم عددًا أقل من الدبابيس. في الواقع ، يحول سجل النوبات إخراج البيانات التسلسلية (بتة واحدة لكل وحدة زمنية) إلى موازٍ (عدة بتات لكل وحدة زمنية). في حالتنا ، بدلاً من سبعة دبابيس Arduino ، نحتاج إلى ثلاثة فقط.


في محرر Fritzing ، حصلت على مثل هذا الجهاز.



بهذه الطريقة تبدو حية.




وقد اتخذ الأساس مخططات للعمل مع سجل التحول ومقاوم ضوئي.


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


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


كود البرنامج
// ,      #define DATA_PIN 13 #define LATCH_PIN 12 #define CLOCK_PIN 11 //  ,        #define BTN_MIN 3 #define BTN_MAX 2 // ,       #define SENS_PIN A5 //     ,   byte d0 = 0b01111101; byte d1 = 0b00100100; byte d2 = 0b01111010; byte d3 = 0b01110110; byte d4 = 0b00100111; byte d5 = 0b01010111; byte d6 = 0b01011111; byte d7 = 0b01100100; byte d8 = 0b01111111; byte d9 = 0b01110111; //        int min_light = 0; int max_light = 1023; //    int value; // ,  .  .  int output; //   int digit; void setup() { //     pinMode(DATA_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(LATCH_PIN, OUTPUT); //       Serial.begin(9600); //     pinMode(BTN_MIN, INPUT_PULLUP); pinMode(BTN_MAX, INPUT_PULLUP); } void loop() { //     value = analogRead(SENS_PIN); output = value; //    -    if (!digitalRead(BTN_MIN)) min_light = value; if (!digitalRead(BTN_MAX)) max_light = value - 10; //      if (value < min_light) output = min_light; if (value > max_light) output = max_light; //  ,      digit = map(value, min_light, max_light, 0, 9); //   Serial.println("Value: " + String(value) + " Output: " + String(output) + " Min: " + String(min_light) + " Max: " + String(max_light) + " Current : " + String(value) + " Digit: " + String(digit)); //      if (digit == 0) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d0); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 1) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d1); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 2) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d2); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 3) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d3); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 4) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d4); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 5) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d5); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 6) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d6); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 7) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d7); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 8) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d8); digitalWrite(LATCH_PIN, HIGH); } else if (digit == 9) { digitalWrite(LATCH_PIN, LOW); shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, d9); digitalWrite(LATCH_PIN, HIGH); } //       delay(10); } 

من الميزات - عند تعيين الحد الأقصى لمستوى الإضاءة ، كان علينا طرح بعض الثابت (max_light = value - 10) ، المحدد تجريبيًا. هذا ضروري لتجنب "قعقعة" عند الحد الأقصى من الإضاءة ، حيث أن قيمة الجهد المأخوذة من المقاوم الضوئي غير مستقرة.


نقوم بتجميع الرسم وتحميله في Arduino والتحقق منه.


أولا في مراقبة المنفذ ...




ومن ثم العيش



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


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

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


All Articles