نحن نعمل مع Lego Mindstorms EV3 من .NET. توصيل اثنتين أو أكثر من وحدات البناء EV3 الاتصال عبر Wi-Fi

اتصال USB

يمكن لـ LEGO Mindstorms EV3 الاتصال بجهاز كمبيوتر أو جهاز EV3 آخر عبر اتصال USB. تعد سرعة الاتصال واستقراره في هذه الحالة أفضل من أي طريقة أخرى، بما في ذلك تقنية Bluetooth.

يحتوي LEGO Mindstorms EV3 على منفذي USB.

الاتصال بين LEGO EV3 وكتل LEGO EV3 الأخرى في وضع السلسلة التعاقبية.

يتم استخدام وضع السلسلة التعاقبية لتوصيل كتلتين أو أكثر من كتل LEGO EV3.

هذا الوضع:

  • مصممة لتوصيل أكثر من LEGO Mindstorms EV3؛
  • يعمل على توصيل المزيد من أجهزة الاستشعار والمحركات والأجهزة الأخرى؛
  • يسمح بالاتصال بين عدة LEGO Mindstorms EV3 (حتى 4)، مما يمنحنا ما يصل إلى 16 منفذًا خارجيًا ونفس عدد المنافذ الداخلية؛
  • يجعل من الممكن التحكم في السلسلة بأكملها من LEGO Mindstorms EV3 الرئيسية؛
  • لا يمكن أن يعمل عندما تكون شبكة Wi-Fi أو Bluetooth نشطة.

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

عند تحديد هذا الوضع، يمكننا تحديد كتلة EV3 لأي محرك والتي سيتم استخدامها وأجهزة الاستشعار اللازمة.

يوضح الجدول خيارات استخدام كتل EV3:

فعل

محرك متوسط

محرك كبير

توجيه

إدارة مستقلة

الجيروسكوب

الأشعة تحت الحمراء

بالموجات فوق الصوتية

دوران المحرك

درجات الحرارة

الطاقة متر

صوت

الاتصال عبر البلوتوث

تتيح تقنية Bluetooth لـ LEGO Mindstorms EV3 الاتصال بجهاز كمبيوتر وأجهزة LEGO Mindstorms EV3 الأخرى والهواتف الذكية وأجهزة Bluetooth الأخرى. نطاق الاتصال عبر البلوتوث يصل إلى 25 مترًا.

يمكنك توصيل ما يصل إلى 7 كتل بجهاز LEGO Mindstorms EV3 واحد. تسمح لك وحدة البناء الرئيسية EV3 بإرسال واستقبال الرسائل إلى كل تابع لـ EV3. يمكن لعبيد EV3 فقط إرسال الرسائل إلى وحدة البناء الرئيسية EV3، وليس لبعضهم البعض.

تسلسل اتصال EV3 عبر البلوتوث

لتوصيل مجموعتين أو أكثر من كتل EV3 ببعضها البعض عبر البلوتوث، يتعين عليك تنفيذ الخطوات التالية:

1. افتح علامة تبويب إعدادات.

2. اختر بلوتوثواضغط على الزر الأوسط.

3. نضع خانة الاختيار الرؤيةبلوتوث.

4. تأكد من أن علامة البلوتوث ("<") виден на верхней левой стороне.

5. قم بتنفيذ الإجراء المذكور أعلاه مع العدد المطلوب من وحدات الطوب EV3.

6. انتقل إلى علامة التبويب الاتصال:

7. اضغط على زر البحث:

8. حدد EV3 الذي تريد الاتصال به (أو الذي تريد الاتصال به) واضغط على الزر الأوسط.

9. نقوم بتوصيل الكتلتين الأولى والثانية بمفتاح الوصول.

إذا قمت بكل شيء بشكل صحيح، فستظهر الأيقونة " في الزاوية اليسرى العليا<>"، قم بتوصيل كتل EV3 الأخرى بنفس الطريقة إذا كان هناك أكثر من اثنين منها.

إذا قمت بإيقاف تشغيل LEGO EV3، فسيتم فقدان الاتصال وستحتاج إلى تكرار جميع الخطوات.

هام: يجب أن يكون لكل كتلة برنامجها الخاص المكتوب.

برنامج المثال:

الكتلة الأولى: عند الضغط على مستشعر اللمس، تقوم كتلة EV3 الأولى بإرسال النص إلى الكتلة الثانية مع تأخير قدره 3 ثوانٍ (الكتلة الرئيسية).

برنامج مثال للكتلة 2:

تنتظر الكتلة الثانية استلام النص من الكتلة الأولى، وبمجرد استلامها، ستعرض كلمة (في مثالنا، كلمة "Hello") لمدة 10 ثوانٍ (الكتلة التابعة).

الاتصال عبر شبكة Wi-Fi

يمكن الاتصال على نطاق أطول من خلال توصيل Wi-Fi Dongle بمنفذ USB الموجود على EV3.

لاستخدام Wi-Fi، تحتاج إلى تثبيت وحدة نمطية خاصة على كتلة EV3 باستخدام موصل USB (محول Wi-Fi (محول Netgear N150 اللاسلكي (WNA1100)، أو يمكنك توصيل Wi-Fi Dongle.

حدد وضع الشاشة

طريقة الاختيار
حظر حقل النص
المدخلات
زر المعاينة

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

يمكنك النقر فوق الزر Preview (معاينة) لمعاينة ما سيعرضه قالب العرض على شاشة EV3. يمكنك ترك العرض مفتوحًا أثناء تحديد قيم الإدخال للكتلة.

إحداثيات الشاشة

تستخدم العديد من أوضاع كتلة الشاشة إحداثيات X وY لتحديد موقع العنصر. تحدد الإحداثيات موضع وحدات البكسل على شاشة وحدة البناء EV3. الموضع (0، 0) موجود في الزاوية اليسرى العليا من الشاشة كما هو موضح في الصورة أدناه.

أبعاد الشاشة: عرض 178 بكسل وارتفاع 128 بكسل. يتراوح نطاق قيم إحداثيات X من 0 على الشاشة على اليسار إلى 177 على اليمين. يتراوح نطاق قيم الإحداثيات Y من 0 في الأعلى إلى 127 في الأسفل.

النصائح والحيل

يمكنك استخدام زر المعاينة الموجود في الزاوية العلوية اليسرى من قالب الشاشة لمساعدتك في العثور على إحداثيات الشاشة الصحيحة.

النص - بكسل

النص - يتيح لك وضع البكسل عرض النص في أي مكان على شاشة وحدة البناء EV3.

إعادة تعيين النافذة

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

ضمان رؤية العناصر المعروضة

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

إذا كنت تريد أن تظل الشاشة مرئية بعد انتهاء البرنامج، فيجب عليك إضافة كتلة إلى نهاية البرنامج لمنع انتهاء البرنامج فورًا، كما هو موضح في الأمثلة التالية.

عرض عناصر متعددة

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

عرض الأرقام

لعرض قيمة رقمية في برنامجك، قم بتوصيل ناقل البيانات بإدخال النص الخاص بكتلة عرض النص. سيتم تحويل ناقل البيانات الرقمي تلقائيًا إلى نص باستخدام تحويل نوع ناقل البيانات (انظر القسم

إن فكرة استبدال الحاسوب الصغير في المصمم بـ Beaglebone أو بآخر ليست جديدة. ولكن مع إصدار EV3، أصبح من الممكن ليس فقط الحصول على نظير 100%، ولكن أيضًا زيادة أداء Legorobot الخاص بك.

فيديو تقديمي للمشروع:

يدعم E VB نظام Lego Mindstorms Ev3 بشكل كامل على مستوى الأجهزة والبرامج، وهو متوافق بنسبة 100% مع جميع مستشعرات ومحركات Lego. تعمل الكتلة بنفس طريقة كتلة Lego Mindstorms EV3:

بيجلبون بلاك- كمبيوتر Linux أحادي اللوحة.إنه منافس لـ Raspberry Pi. يحتوي على معالج قوي AM335x 720MHz ARM® معالج كبير عدد المدخلات/المخرجات، ويمكن توسيع القدرات مع لوحات إضافية.

يحتوي Lego Mindstorms EV3 على معالج ARM9 (TI Sitara AM180x) بسرعة 300 ميجاهرتز، لذا انتقل إلى معالج BeagleBone Black ARM Cortex-A8 (TI Sitara AM335x) بسرعة 1 جيجاهرتز يزيد الإنتاجيةبالإضافة إلى أنه أصبح من الممكن توصيل بطاقات توسعة إضافية!

الشيء الأكثر أهمية هو أن Lego Mindstorms EV3 يحتوي على وصف مفتوح لجميع البرامج والأجهزة!

على سبيل المثال، تم تجميع وعرض روبوت حل مكعب روبيك الشهير. فقط بدلاً من EV3 قاموا بتثبيت EVB المطور. ندعوكم لمشاهدة الفيديو:

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

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

ولكن قبل أن ندخل في البرمجة، دعونا نلقي نظرة على بعض الحالات التي قد يكون فيها ذلك مفيدًا:

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

واجهة برمجة تطبيقات LEGO MINDSTORMS EV3 لـ .NET

يتم التحكم في وحدة التحكم EV3 من نظام خارجي عن طريق إرسال الأوامر إلى المنفذ التسلسلي. تم توضيح تنسيق الأمر نفسه في مجموعة أدوات تطوير الاتصالات.

لكن تنفيذ هذا البروتوكول يدويًا أمر ممل. لذلك، يمكنك استخدام غلاف .NET الجاهز، الذي كتبه براين بيك بعناية. الكود المصدري لهذه المكتبة مستضاف على Github، ويمكن العثور على الحزمة الجاهزة للاستخدام على Nuget.

التوصيل بوحدة تحكم EV3

يتم استخدام فئة Brick للتواصل مع وحدة التحكم EV3. عند إنشاء هذا الكائن، تحتاج إلى تمرير تطبيق واجهة ICommunication إلى المنشئ - وهو كائن يصف كيفية الاتصال بوحدة التحكم EV3. تتوفر تطبيقات UsbCommunication وBluetoothCommunication وNetworkCommunication (اتصال WiFi).

طريقة الاتصال الأكثر شيوعًا هي عبر البلوتوث. دعونا نلقي نظرة فاحصة على طريقة الاتصال هذه.

قبل أن نتمكن من الاتصال بوحدة التحكم برمجيًا عبر البلوتوث، يجب أن تكون وحدة التحكم متصلة بالكمبيوتر باستخدام إعدادات نظام التشغيل.

بعد توصيل وحدة التحكم، انتقل إلى إعدادات Bluetooth وحدد علامة التبويب منافذ COM. نجد وحدة التحكم لدينا، ونحن بحاجة منفتحميناء. سوف نقوم بتحديده عند إنشاء كائن BluetoothCommunication.

سيبدو رمز الاتصال بوحدة التحكم كما يلي:

اتصال المهام العام غير المتزامن (ICommunication communication) ( var communication = new BluetoothCommunication("COM9"); var brick = _brick = new Brick(communication); انتظار _brick.ConnectAsync(); )

اختياريًا، يمكنك تحديد مهلة الاتصال بوحدة التحكم:

في انتظار _brick.ConnectAsync(TimeSpan.FromSeconds(5));

يتم الاتصال بالوحدة عبر USB أو WiFi بنفس الطريقة، باستثناء استخدام كائنات UsbCommunication وNetworkCommunication.

تتم جميع الإجراءات الإضافية التي يتم تنفيذها على وحدة التحكم من خلال كائن Brick.

دعونا ندور المحركات

لتنفيذ الأوامر على وحدة التحكم EV3، نصل إلى خاصية DirectCommand الخاصة بكائن Brick. أولا، دعونا نحاول تشغيل المحركات.

لنفترض أن المحرك الخاص بنا متصل بالمنفذ A لوحدة التحكم، فإن تشغيل هذا المحرك بقدرة 50% سيبدو كما يلي:

في انتظار _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50);

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

يتم تنفيذ التوقف القسري باستخدام طريقة StopMotorAsync ():

في انتظار _brick.DirectCommand.StopMotorAsync(OutputPort.A, true);

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

قراءة القيم من أجهزة الاستشعار

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

يمكن الوصول إلى منافذ قراءة القيم من خلال خاصية المنافذ الخاصة بكائن Brick. المنافذ عبارة عن مجموعة من المنافذ المتوفرة على وحدة التحكم. لذلك، للعمل مع منفذ معين، تحتاج إلى تحديده. InputPort.One... InputPort.Four هي منافذ الاستشعار، وInputPort.A... InputPort.D هي أجهزة تشفير المحرك.

var port1 = _brick.Ports;

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

Brick.Ports.SetMode(ColorMode.Reflective);

الآن بعد أن تم توصيل المستشعر وضبط وضع التشغيل الخاص به، يمكنك قراءة البيانات منه. يمكنك الحصول على البيانات "الخامة" والقيمة المعالجة وقيمة النسبة المئوية.

Float si = _brick.Ports.SIValue; int Raw = _brick.Ports.RawValue; بايت بالمائة = _brick.Ports.PercentValue؛

تقوم الخاصية SIValue بإرجاع البيانات التي تمت معالجتها. كل هذا يتوقف على المستشعر المستخدم وفي أي وضع. على سبيل المثال، عند قياس الضوء المنعكس سنحصل على قيم من 0 إلى 100 حسب شدة الضوء المنعكس (أسود/أبيض).

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

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

تنفيذ الأوامر على دفعات

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

في انتظار _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.A, 50); انتظر _brick.DirectCommand.TurnMotorAtPowerAsync(OutputPort.B, -50);

في هذا المثال نرسل أمر لتدوير المحرك A بسرعة 50، بعد إرسال هذا الأمر بنجاح نكرر نفس الأمر مع المحرك المتصل بالمنفذ B. المشكلة هي أن إرسال الأوامر لا يحدث بشكل فوري، لذلك المحركات قد يبدأ في الدوران في أوقات مختلفة - أثناء إرسال الأمر للمنفذ B، المحرك A بالفعلسيبدأ الغزل.

إذا كان من المهم بالنسبة لنا أن نجعل المحركات تدور في نفس الوقت، فيمكننا إرسال الأوامر إلى وحدة التحكم في "حزمة". في هذه الحالة، يجب عليك استخدام الخاصية BatchCommand بدلاً من DirectCommand:

Brick.BatchCommand.TurnMotorAtPower(OutputPort.A, 50); _brick.BatchCommand.TurnMotorAtPower(OutputPort.B, -50); انتظر _brick.BatchCommand.SendCommandAsync();

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

ماذا يمكنك أن تفعل أيضا

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

  • CleanUIAsync() وDrawTextAsync() وDrawLineAsync() وما إلى ذلك - معالجة الشاشة المدمجة لوحدة التحكم EV3
  • PlayToneAsync() وPlaySoundAsync() - استخدم مكبر الصوت المدمج لتشغيل الأصوات
  • WriteFileAsync() وCopyFileAsync() وDeleteFileAsync() (من SystemCommand) - العمل مع الملفات

خاتمة

إن استخدام .NET للتحكم في روبوتات Mindstorms EV3 يوضح جيدًا كيف يمكن للتقنيات من "عوالم مختلفة" أن تعمل معًا. نتيجة للبحث في واجهة برمجة تطبيقات EV3 لـ .NET، تم إنشاء تطبيق صغير يسمح لك بالتحكم في روبوت EV3 من جهاز كمبيوتر. لسوء الحظ، توجد تطبيقات مماثلة لـ NXT، لكن EV3 تجاوزتها. وفي الوقت نفسه، فهي مفيدة في مسابقات الروبوتات التي يتم التحكم فيها، مثل كرة القدم الروبوتية.

يمكن تحميل التطبيق وتثبيته من هذا الرابط: