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

وحدات تحكم اردوينو: 10 خطوات (بالصور)
وحدات تحكم اردوينو: 10 خطوات (بالصور)

فيديو: وحدات تحكم اردوينو: 10 خطوات (بالصور)

فيديو: وحدات تحكم اردوينو: 10 خطوات (بالصور)
فيديو: ☑️ LED Matrix أردوينو للمبتدئين - التحكم في 2024, يوليو
Anonim
تحكم اردوينو
تحكم اردوينو
تحكم اردوينو
تحكم اردوينو

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

تم تصميم هذا المشروع أيضًا للاستفادة من مكتبة جافا سكريبت p5.js جنبًا إلى جنب مع مكتبة p5.play المصممة لـ p5.js. تسمح لنا هذه المكتبات ببرمجة ألعابنا بسهولة. يحتوي موقع الويب p5.play على مجموعة من البرامج التعليمية والأمثلة للمستخدمين لإنشاء ألعاب لها. يتيح هذا المشروع للمستخدمين ممارسة مهارات تطوير الأجهزة والبرامج الخاصة بهم.

الخطوة 1: ما سوف تحتاجه

ما سوف تحتاجه
ما سوف تحتاجه

أدوات:

  • لحام حديد
  • جندى
  • أدوات تقشير الأسلاك
  • القواطع الجانبية
  • كماشة

المعدات:

  • لوحة متوافقة مع Arduino (لقد استخدمت Sparkfun Redboard بالإضافة إلى Arduino Uno و Leonardo)
  • مجلس الأداء:

    • ألواح عطاء خضراء مقاس 8 سم × 6 سم
    • لوحة أداء Aduino Uno shield
  • مجسات مختلفة

    • المقود
    • الأزرار (بمقاومات ، 10 كيلو أوم ، لتلائمهم)
    • مقاييس الجهد
    • فليكس سينسورز
    • أجهزة استشعار الضغط
    • إلخ…
  • الأسلاك:

    • سلك واحد (استخدمت 26 AWG Solid)
    • سلك الشريط ويجعد
  • كسر الرؤوس بعيدًا (20 منها على الأقل)
  • أجهزة اختيارية (يمكنك استخدام روابط الورق المقوى و hotglue / zip بدلاً من ذلك):

    • كابلات اللوح والطائر للنماذج الأولية
    • حاويات مطبوعة ثلاثية الأبعاد
    • مثبتات الأجهزة (استخدمت مسامير M2.5)

برمجة:

  • اردوينو IDE
  • مكتبة p5.js

    مكتبة P5.play كذلك

  • p5.serialcontrol
  • Node.js

الخطوة 2: البناء: لوحة التحكم ، إعداد الدرع

المبنى: مركز وحدة التحكم ، إعداد الدرع
المبنى: مركز وحدة التحكم ، إعداد الدرع

قم بتلحيم الرؤوس في لوحة أداء Arduino Uno shield.

  • لقد بدأت برؤوس الدرع (الطاقة والتناظرية والرقمية)
  • فيما يلي دبابيس الرأس 2 × 5. يمكنك استخدام رؤوس 2 × 5 ، أو صفين فقط من 5 رؤوس منفصلة. لقد اصطفت مع A3 و A4 عموديًا ، وتركت مسافتين بينهما.

الخطوة 3: البناء: لوحة التحكم ، توصيل الدرع

المبنى: محور وحدة التحكم ، توصيل الأسلاك الدرع
المبنى: محور وحدة التحكم ، توصيل الأسلاك الدرع
المبنى: محور وحدة التحكم ، توصيل الأسلاك الدرع
المبنى: محور وحدة التحكم ، توصيل الأسلاك الدرع
المبنى: محور وحدة التحكم ، توصيل الأسلاك الدرع
المبنى: محور وحدة التحكم ، توصيل الأسلاك الدرع

بعد ذلك ، نريد توجيه أسلاكنا على الدرع. من الأسهل تشغيل الأسلاك من الأعلى ، ولكن إذا كنت تريد مظهرًا أنظف يمكنك تشغيلها في الأسفل.

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

تتمثل فكرة تصميم الدرع هذا في السماح بـ 3 مدخلات تناظرية و 5 مدخلات رقمية من كل وحدة تحكم. يستفيد هذا بشكل كامل من جميع المدخلات التناظرية على Arduino Uno بالإضافة إلى الأسلاك المتبقية على كابل الشريط الخاص بنا.

الخطوة 4: البناء: وحدات التحكم ، إعداد أجزائك

المبنى: وحدات التحكم ، إعداد أجزائك
المبنى: وحدات التحكم ، إعداد أجزائك
المبنى: وحدات التحكم ، إعداد أجزائك
المبنى: وحدات التحكم ، إعداد أجزائك
المبنى: وحدات التحكم ، إعداد أجزائك
المبنى: وحدات التحكم ، إعداد أجزائك

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

إذا كنت ترغب في تكرار هذا ، يمكنك عرض صوري من أجل التنسيب.

الخطوة التالية هي لحام كابل الشريط بلوحة الأداء.

  1. قم بفصل وقصدير كابل الشريط
  2. قم بتوصيل كابل الشريط بأعلى منتصف لوحة الأداء.

الخطوة التالية هي تحديد مسار الأسلاك الخاصة بك. لقد بدأت بتوصيل الطاقة (5 فولت / السلك الأحمر) والأرض (السلك البني) إلى المستشعرات أولاً. ثم قمت بتوصيل المدخلات التناظرية. لقد وجدت أنه من السهل استخدام الكبل البرتقالي (تناظري A0 أو A3) للحركة الأفقية والكابل الأصفر (تناظري A1 أو A4) للحركة الرأسية.

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

لقد قمت بتحميل مخطط سريع لوحدة التحكم في ذراع التحكم إذا كنت ترغب في إلقاء نظرة على هذا. من الرسم التخطيطي الخاص بنا ، يمكنك رؤية إمكانية اتصال كل وحدة تحكم (3 مداخل تناظرية ، و 5 رقمية).

الخطوة 5: اختياري: المرفقات

اختياري: المرفقات
اختياري: المرفقات
اختياري: المرفقات
اختياري: المرفقات
اختياري: المرفقات
اختياري: المرفقات

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

يمكنك العثور على النماذج ثلاثية الأبعاد الخاصة بي مرفقة بهذه الخطوة. لقد قمت بإنشاء حاويات للمحور لكل من Arduino Uno / Leonardo و Sparkfun RedBoard (هذه اللوحة أوسع قليلاً وتستخدم USB صغيرًا).

بالنسبة لوحدات التحكم ، يمكنك إرفاقها بمسامير M2.5. احتفظت بالجوز على جانب ثنائي الفينيل متعدد الكلور واستخدم غسالة ومسمارًا في الأسفل.

لقد قمت أيضًا بتضمين نموذج ثلاثي الأبعاد لمنزلق المقبض لمقاييس الجهد التي استخدمتها.

يمكنك العثور على جميع الملفات ثلاثية الأبعاد على GitHub.

الخطوة السادسة: البرمجة: Arduino

البرمجة: اردوينو
البرمجة: اردوينو

لنبدأ بإعداد رسم بسيط للاختبار. أقترح استخدام البرنامج التعليمي الذي أنشأته ITP في جامعة نيويورك الموجود هنا. للقيام بهذا البرنامج التعليمي ، سوف تحتاج إلى تثبيت p5.serialcontroll و node.js. في هذا البرنامج التعليمي ، سيتم تقديمك لإعداد Arduino لإرسال البيانات التسلسلية التي يمكن استخدامها بواسطة مكتبة جافا سكريبت لدينا ، p5.js. يمكنك استخدام المحور ووحدة التحكم التي أنشأناها في الخطوات السابقة للقيام بذلك ، أو يمكنك نسخ الدوائر الموضحة في البرنامج التعليمي. يستخدم هذا البرنامج التعليمي دبوس الإدخال التمثيلي A0 الموجود على Arduino Uno والذي تم تعيينه على السلك البرتقالي لوحدة التحكم الأولى.

يمكن العثور على البرنامج التعليمي التالي الذي تريد متابعته هنا. سيرشدك هذا البرنامج التعليمي خلال إعداد مدخلات متعددة واستخدامها في p5.js. في البرنامج التعليمي ، يتم استخدام المدخلات التناظرية A0 و A1. سوف تتوافق هذه مع الأسلاك البرتقالية والصفراء على وحدة التحكم 1 في نظامنا.

بمجرد الانتهاء من الدروس المذكورة أعلاه ، يمكننا برمجة Arduino. الكود الذي نريد استخدامه أدناه:

// تحكم 1const int dig2 = 2 ؛ // blue const int dig3 = 3 ؛ // الأرجواني const int dig4 = 4 ؛ // grey const int dig5 = 5 ؛ // الأبيض const int dig6 = 6 ؛ // أسود // تحكم 2 const int dig7 = 7 ؛ // blue const int dig8 = 8 ؛ // الأرجواني const int dig9 = 9 ؛ // grey const int dig10 = 10 ؛ // الأبيض const int dig11 = 11 ؛ //أسود

الإعداد باطل() {

Serial.begin (9600) ؛ while (Serial.available () <= 0) {Serial.println ("hello") ؛ // إرسال تأخير رسالة البداية (300) ؛ // انتظر 1/3 ثانية} pinMode (dig2 ، INPUT) ؛ pinMode (dig3 ، الإدخال) ؛ pinMode (dig4 ، الإدخال) ؛ pinMode (dig5 ، الإدخال) ؛ pinMode (dig6 ، الإدخال) ؛ pinMode (dig7 ، الإدخال) ؛ pinMode (dig8 ، الإدخال) ؛ pinMode (dig9 ، الإدخال) ؛ pinMode (dig10 ، الإدخال) ؛ pinMode (dig11 ، INPUT) ؛ }

حلقة فارغة() {

إذا (Serial.available ()> 0) {// اقرأ البايت الوارد: int inByte = Serial.read () ؛ // اقرأ المستشعر:

// وحدة تحكم ANALOG 1

int analog0 = analogRead (A0) ؛ int analog1 = analogRead (A1) ؛ int analog2 = analogRead (A2) ؛ // ANALOG Controller 2 int analog3 = analogRead (A3) ؛ int analog4 = analogRead (A4) ؛ int analog5 = analogRead (A5) ؛ // DIGITAL Controller 1 int digital2 = digitalRead (dig2) ؛ int digital3 = digitalRead (dig3) ؛ int digital4 = digitalRead (dig4) ؛

int digital5 = digitalRead (dig5) ؛

int digital6 = digitalRead (dig6) ؛ // DIGITAL Controller 2 int digital7 = digitalRead (dig7) ؛ int digital8 = digitalRead (dig8) ؛ int digital9 = digitalRead (dig9) ؛ int digital10 = digitalRead (dig10) ؛ int digital11 = digitalRead (dig11) ؛ // طباعة النتائج: Serial.print (analog0) ؛ // [0] Serial.print ("،") ؛ Serial.print (analog1) ؛ // [1] Serial.print ("،") ؛ Serial.print (analog2) ؛ // [2] Serial.print ("،") ؛ // بدء تشغيل بيانات وحدة التحكم 2 Serial.print (analog3) ؛ // [3] Serial.print ("،") ؛ Serial.print (analog4) ؛ // [4] Serial.print ("،") ؛ Serial.print (analog5) ؛ // [5] Serial.print ("،") ؛ Serial.print (رقمي 2) ؛ // [6] Serial.print ("،") ؛ Serial.print (digital3) ؛ // [7] Serial.print ("،") ؛ Serial.print (digital4) ؛ // [8] Serial.print ("،") ؛ Serial.print (digital5) ؛ // [9] Serial.print ("،") ؛ Serial.print (digital6) ؛ // [10] Serial.print ("،") ؛ // بدء تشغيل وحدة التحكم 2 بيانات Serial.print (digital7) ؛ // [11] Serial.print ("،") ؛ Serial.print (digital8) ؛ // [12] Serial.print ("،") ؛ Serial.print (digital9) ؛ // [13] Serial.print ("،") ؛ Serial.println (digital10) ؛ // [14] Serial.print ("،") ؛ Serial.println (رقمي 11) ؛ //[15] } }

يرسل هذا الرمز البيانات التسلسلية من كل من وحدات التحكم لدينا كمصفوفة من 16 رقمًا. أول 6 من هذه الأرقام هي مدخلاتنا التناظرية (تتراوح من 0-1023) والقيم العشر المتبقية هي قيمنا الرقمية (0 أو 1).

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

الخطوة السابعة: البرمجة: HTML

بمجرد إعداد Arduino وتشغيله ، يمكننا البدء في برمجة مواد الويب الخاصة بنا. كود HTML بسيط للغاية.

الجسم {المساحة المتروكة: 0 ؛ الهامش: 0؛}

يربط كود html ملفات جافا سكريبت ببعضها البعض. سيحدث معظم الكود لدينا في ملف.js التخطيطي.

الخطوة الثامنة: البرمجة: P5.js و Javascript

بمجرد الانتهاء من إعداد HTML الخاص بنا ، يمكننا العمل على JavaScript الخاص بنا. إذا لم تكن قد قمت بذلك بالفعل ، فيجب عليك الآن تنزيل p5.js وكذلك p5.play وإضافتها إلى مجلد المكتبات في دليل موقع الويب الخاص بك.

  • p5.js
  • p5.play

في خطوتنا السابقة ، قمنا بإعداد ملف HTML الخاص بنا لاستدعاء مكتبات p5.js و p5.play. قمنا أيضًا بإعداده لاستخدام ملف sketch.js حيث سنقوم بمعظم برامجنا. يوجد أدناه رمز هيكلنا العظمي. يمكنك أيضا أن تجدها هنا.

// المسلسل متغيرات المتغيرات المتسلسلة ؛ // متغير للاحتفاظ بمثيل من مكتبة المنفذ التسلسلي var portName = 'COM4' ؛ // أدخل اسم المنفذ التسلسلي الخاص بك هنا // Global Game Variables ---------------

// وظيفة الإعداد ----------------------

إعداد الوظيفة () {createCanvas (640، 480) ؛ المسلسل = p5. SerialPort () جديد ؛ // إنشاء مثيل جديد لمكتبة المنفذ التسلسلي serial.on ('list'، printList)؛ // تعيين وظيفة رد لحدث serial.port قائمة المنفذ التسلسلي ('متصل' ، serverConnected) ؛ // رد الاتصال للاتصال بالخادم serial.on ('open'، portOpen)؛ // رد الاتصال للمنفذ المفتوح serial.on ('data'، serialEvent)؛ // رد الاتصال عندما تصل البيانات الجديدة إلى serial.on ('error'، serialError)؛ // رد الاتصال للأخطاء serial.on ('close'، portClose)؛ // رد الاتصال لإغلاق المنفذ serial.list () ؛ // قائمة المنافذ التسلسلية serial.open (portName) ؛ // open a serial port} // Draw Function ----------------------- function draw () {background (0)؛ // black background} // تفسير البيانات التسلسلية هنا ---------- function serialEvent () {// قراءة سلسلة من المنفذ التسلسلي // حتى تحصل على حرف إرجاع و newline: var inString = serial. readStringUntil ('\ r / n') ؛ // تحقق لترى أن هناك بالفعل ssetring هناك: if (inString.length> 0) {if (inString! == 'hello') {// إذا تلقيت ترحيبًا ، فتجاهلها var sensors = split (inString، '، ') ؛ // قسّم السلسلة على الفواصل إذا (sensors.length> 16) {// إذا كان هناك ستة عشر عنصرًا (6 تناظرية ، 10 رقمية) // استخدم بيانات المستشعر هنا:

}

} serial.write ('x')؛ // أرسل بايت يطلب المزيد من البيانات التسلسلية}} // احصل على قائمة المنافذ: function printList (portList) {// portList عبارة عن مصفوفة من أسماء المنافذ التسلسلية لـ (var i = 0؛ i <portList.length؛ i ++) {// اعرض قائمة وحدة التحكم: print (i + "" + portList )؛ }} function serverConnected () {print ('متصل بالخادم.')؛ } function portOpen () {print ('the serial port open.')} function serialError (err) {print ('حدث خطأ ما في المنفذ التسلسلي.' + err)؛ } function portClose () {print ('The serial port closed.')؛ } function closCode () {serial.close (portName)؛ عودة فارغة ؛ } window.onbeforeunload = closCode ؛

بمجرد حفظ الهيكل العظمي. يمكنك استخدام هذه القيم بشكل مشابه لكيفية إجرائها في برنامج ITP التعليمي. يتم إرسال سلسلة القيم التي أرسلناها من Arduino في الخطوة 6 كمصفوفة من 16 رقمًا. أدناه حيث نقوم بتحليل هذه المجموعة.

// تفسير البيانات التسلسلية هنا ----------

function serialEvent () {// قراءة سلسلة من المنفذ التسلسلي // حتى تحصل على إرجاع السطر والسطر الجديد: var inString = serial.readStringUntil ('\ r / n')؛ // تحقق لترى أن هناك بالفعل ssetring هناك: if (inString.length> 0) {if (inString! == 'hello') {// إذا تلقيت ترحيبًا ، فتجاهلها var sensors = split (inString، '، ') ؛ // قسّم السلسلة على الفواصل إذا (sensors.length> 16) {// إذا كان هناك ستة عشر عنصرًا (6 تناظري ، 10 رقمي) // استخدم بيانات المستشعر هنا:}} serial.write ('x')؛ // إرسال بايت لطلب المزيد من البيانات التسلسلية}}

يمكننا الآن تشغيل برنامجنا لمعرفة ما إذا كان يعمل!

الخطوة 9: تشغيل البرنامج الخاص بك

تشغيل برنامجك
تشغيل برنامجك

يمكننا الآن تشغيل برنامجنا لمعرفة ما إذا كان يعمل أم لا. يمكنك إما إنشاء لعبتك الخاصة باستخدام ملف skeleton.js في ملفنا السابق أو يمكنك استخدام لعبة الأنابيب البسيطة الموجودة هنا.

على غرار مختبر ITP ، لتشغيل برنامجنا ، سوف نتبع الخطوات أدناه.

  • قم بتوصيل Arduino بوحدة التحكم (وحدات التحكم) التي تخطط لاستخدامها.
  • افتح p5.serialcontrol
  • قم بتغيير منفذ رسم p5 الخاص بك إلى المنفذ الذي تستخدمه (إذا كنت تستخدم الهيكل العظمي ، فهذا موجود في السطر 3)
  • افتح ملف HTML الذي يرتبط برسم p5 الخاص بك

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

الخطوة 10: المضي قدمًا

للمضي قدمًا وتطوير المزيد من الألعاب لهذا الغرض ، يمكنك اتباع أمثلة مختلفة من p5.play الموجود هنا. يوجد أدناه مثال على لعبة أكثر تعقيدًا قمت بإنشائها. إنها لعبة تصويب دبابات 1 مقابل 1. يمكنك العثور على جميع الموارد الخاصة به على GitHub.

موصى به: