- المتطلبات المسبقة
- مخطط الرسم البياني
- تدفق العملية لماوس الهواء
- برمجة Arduino لـ Air Mouse
- برنامج بايثون للسائق
- اختبار ماوس Arduino Air
هل تساءلت يومًا كيف يتجه عالمنا نحو الواقع الغامر. نحن نبحث باستمرار عن طرق وأساليب جديدة للتفاعل مع محيطنا باستخدام الواقع الافتراضي والواقع المختلط والواقع المعزز وما إلى ذلك. يتم إصدار أجهزة جديدة كل يوم بهذه التقنيات السريعة لإبهارنا بتقنياتها التفاعلية الجديدة.
تُستخدم هذه التقنيات الغامرة في الألعاب والأنشطة التفاعلية والترفيه والعديد من التطبيقات الأخرى. في هذا البرنامج التعليمي ، سوف نتعرف على هذه الطريقة التفاعلية التي تمنحك طريقة جديدة للتفاعل مع نظامك بدلاً من استخدام الماوس الممل. يجب أن يعرف خبراء الألعاب لدينا أنه قبل بضع سنوات ، قامت شركة ألعاب نينتندو ببيع فكرة عن طريقة تفاعلية ثلاثية الأبعاد للتفاعل مع وحدات التحكم الخاصة بهم بمساعدة وحدة تحكم محمولة تُعرف باسم وحدة تحكم Wii. يستخدم مقياس التسارع لتحديد إيماءاتك للعبة وإرسالها إلى النظام لاسلكيًا. إذا كنت تريد معرفة المزيد عن هذه التقنية ، يمكنك التحقق من براءة اختراع EP1854518B1 ، وهذا سيمنحك فكرة كاملة عن كيفية عمل هذه التقنية.
مستوحاة من هذه الفكرة ، سنقوم بعمل "ماوس هوائي " للتفاعل مع الأنظمة فقط عن طريق تحريك وحدة التحكم في الهواء ، ولكن بدلاً من استخدام مراجع الإحداثيات ثلاثية الأبعاد ، سنستخدم فقط إشارات تنسيق ثنائية الأبعاد لذلك يمكننا تقليد حركات فأرة الكمبيوتر لأن الماوس يعمل في بعدين X و Y.
المفهوم الكامن وراء هذا الماوس اللاسلكي ثلاثي الأبعاد بسيط للغاية ، سنستخدم مقياس تسارع للحصول على قيمة تسارع حركات وحركات "الماوس الهوائي" على طول المحورين x و y ، ثم بناءً على قيم مقياس التسارع سوف نتحكم في مؤشر الماوس وننفذ إجراءات معينة بمساعدة برامج تشغيل برنامج python التي تعمل على الكمبيوتر.
المتطلبات المسبقة
- Arduino Nano (أي طراز)
- وحدة مقياس التسارع ADXL335
- وحدة بلوتوث HC-05
- أزرار الضغط
- كمبيوتر مثبت بيثون
لمعرفة المزيد حول تثبيت python على الكمبيوتر ، اتبع البرنامج التعليمي السابق حول Arduino-Python LED Controlling.
مخطط الرسم البياني
ل سيطرة على جهاز الكمبيوتر الخاص بك مع حركات يدك تحتاج إلى التسارع الذي يعطي من تسارع على طول X و Y المحور وجعل اللاسلكية النظام بأكمله يستخدم وحدة بلوتوث لنقل إشارة لاسلكيا على النظام الخاص بك.
هنا يتم استخدام مقياس التسارع ADXL335 ، وهو عبارة عن وحدة محور ثلاثية تستند إلى MEMS تنتج التسارع على طول المحور X و Y و Z ولكن كما قيل سابقًا للتحكم في الماوس ، سنحتاج فقط إلى التسارع على طول المحور X و Y. تعرف على المزيد حول استخدام مقياس التسارع ADXL335 مع Arduino مع مشاريعنا السابقة:
- نظام الإنذار بحوادث المركبات القائم على Arduino باستخدام GPS و GSM و Accelerometer
- لعبة بينج بونج باستخدام اردوينو ومقياس التسارع
- روبوت يتم التحكم فيه بواسطة جهاز قياس التسارع باستخدام تقنية Arduino
- إنذار للكشف عن الزلازل باستخدام Arduino
هنا يتم توصيل دبوس مقياس التسارع Xout و Yout بالدبابيس التناظرية و A0 و A1 من Arduino ولإرسال الإشارات من Arduino إلى وحدة Bluetooth الخاصة بالنظام HC-05 هنا ، حيث يعمل Bluetooth على Tx و Rx توصيلات الدبوس ، لذلك نستخدم دبابيس البرامج التسلسلية D2 و D3. إنه متصل باستخدام برنامج تسلسلي لأننا إذا قمنا بتوصيل Bluetooth بجهاز تسلسلي وبدأنا في الحصول على القراءات عبر وحدة تحكم Python ، فسوف تظهر أخطاء لمعدل البث بالباود غير المتطابق حيث أن Bluetooth ستتواصل مع python على معدل الباود الخاص بها. تعرف على المزيد حول استخدام وحدة Bluetooth من خلال الاطلاع على العديد من المشاريع القائمة على تقنية Bluetooth باستخدام وحدات تحكم دقيقة مختلفة بما في ذلك Arduino.
استخدمنا هنا ثلاثة أزرار ضغط - أحدها لتشغيل الماوس الهوائي ، واثنين آخرين للنقر الأيسر والأيمن كما هو موضح في الصورة أدناه:
تدفق العملية لماوس الهواء
يوضح مخطط التدفق تدفق العملية لـ Air Mouse القائم على Arduino:
1. يتحقق النظام باستمرار من الضغط على المشغل الميكانيكي حتى لا يتم الضغط عليه ، ويمكننا العمل بشكل طبيعي باستخدام فأرة الكمبيوتر.
2. عندما يكتشف النظام ضغط الزر ، يتم نقل التحكم الخاص بالماوس إلى الماوس الهوائي.
3. عند الضغط على زر التشغيل ، يبدأ النظام في نقل قراءات الماوس إلى الكمبيوتر. تتكون قراءة النظام من قراءات مقياس التسارع ، وقراءات للنقر الأيمن والأيسر.
4. تتكون قراءات النظام من تدفق البيانات من 1 بايت أو 8 بتات ، حيث تتكون البتات الثلاث الأولى من إحداثيات X ، وتتكون البتات الثلاثة الثانية من إحداثيات Y ، أما البتة الثانية الأخيرة فهي بتة الحالة للحصول على حالة النقرة اليسرى للفأرة والبت الأخير هو بت الحالة للحصول على حالة النقرة اليمنى.
5. قيمة أول ثلاث بتات ، أي إحداثي س يمكن أن يتراوح من 100 <= Xcord <= 999 ، في حين أن قيمة الإحداثي Y يمكن أن تتراوح من 100 <= Ycord <= 800. قيم النقر بزر الماوس الأيمن والنقر الأيسر هي القيم الثنائية إما 0 أو 1 حيث يشير 1 إلى أن النقرة تم إجراء 0 ونقرة لا يقوم بها المستخدم.
6. لعدم السماح بارتداد الزر بالتأثير على موضع المؤشر ، يتم الاحتفاظ بتأخير معروف لمدة 4 ثوانٍ بعد كل نقرة على زر الزناد بالماوس.
7. بالنسبة للنقر الأيمن والأيسر في الماوس الهوائي ، يتعين علينا أولاً الضغط على زر الضغط الأيسر أو الأيمن ، وبعد ذلك ، يتعين علينا الضغط على زر الزناد للانتقال إلى موضع الماوس الهوائي حيث نريد.
برمجة Arduino لـ Air Mouse
يجب برمجة Arduino لقراءة قيم التسارع في المحور X و Y. يتم تقديم البرنامج الكامل في النهاية ، وفيما يلي مقتطفات مهمة من التعليمات البرمجية.
إعداد المتغيرات العالمية
كما ذكرنا سابقًا ، سنقوم بتوصيل وحدة Bluetooth مع المسامير التسلسلية للبرنامج. لضبط تسلسل البرنامج ، نحتاج إلى إعلان مكتبة البرامج التسلسلية وإعداد دبابيس Tx و Rx. في Arduino Nano و Uno Pin 2 و 3 يمكن أن تعمل كسلسلة برامج. بعد ذلك ، نعلن عن كائن Bluetooth من مكتبة البرامج التسلسلية لإعداد دبوس Tx و Rx.
#تضمن
الإعداد باطل()
في وظيفة الإعداد ، سنقوم بتعيين المتغيرات لإخبار البرنامج ما إذا كانت ستعمل كمدخلات أو مخرجات. سيتم إعداد زر التشغيل كإدخال سحب ، ويتم الإعلان عن النقرات اليمنى واليسرى كمدخلات وإعدادها على أنها عالية لجعلها بمثابة عمليات سحب إدخال.
قم أيضًا بتعيين معدل البث بالباود للاتصال التسلسلي والبلوتوث على 9600.
إعداد باطل () { pinMode (x، INPUT) ؛ pinMode (y ، INPUT) ؛ pinMode (المشغل ، INPUT_PULLUP) pinMode (lclick ، INPUT) ؛ pinMode (rclick ، INPUT) ؛ pinMode (الصمام ، الإخراج) ؛ digitalWrite (lclick ، عالية) ؛ DigitalWrite (rclick، HIGH) ؛ Serial.begin (9600) ؛ bluetooth.begin (9600) ؛ }
حلقة فارغة()
نظرًا لأننا سنحتاج إلى زر التشغيل لإخبارنا عندما نحتاج إلى إرسال دفق البيانات إلى النظام ، لذلك قمنا بإعداد الكود بالكامل داخل حلقة while التي ستراقب باستمرار الحالة الرقمية لمشغل السحب ، حيث إنها تنخفض. مررها أكثر للمعالجة.
نظرًا لأننا قمنا بإرفاق مؤشر LED لإعلامنا بحالة النظام عند الضغط على زر التشغيل ، فقد قمنا في البداية بضبط المؤشر على مستوى منخفض خارج حلقة while لأنه حالته الافتراضية ومرتفع داخل حلقة while التي ستضيء المصباح كلما تم الضغط على زر الزناد.
ل قراءة حالة من فوق اليسار واليمين زر أعلنا عالميا متغيرين lclick و rclick التي وضعت في البداية يصل إلى 0 القيم.
وفي الحلقة ، قم بتعيين قيمة تلك المتغيرات وفقًا للحالة الرقمية لزر النقر الأيمن والأيسر للتحقق مما إذا كان يتم الضغط على الأزرار أم لا.
سنقرأ قيم دبابيس X و Y لمقياس التسارع باستخدام وظيفة analogRead وسنقوم بتعيين هذه القيم إلى حجم الشاشة لتحريك مؤشر الماوس عبر الشاشة بأكملها. نظرًا لأن حجم الشاشة هو البكسل في الشاشة ، فنحن بحاجة إلى إعداده وفقًا لذلك ، وبما أننا نحتاج إلى أن تكون قيمة الإخراج ثلاثة أرقام ، فقد قمنا بإعداد النطاق لـ X على أنه 100 <= X <= 999 وبالمثل قيمة Y كـ 100 <= Y <= 800. تذكر أنه تتم قراءة وحدات البكسل من الزاوية اليسرى العليا ، أي أن الزاوية اليسرى العلوية لها القيمة (0،0) ، ولكن بما أننا أعلنا عن ثلاثة أرقام لـ x و y ، فسيتم قراءة قيمنا من النقطة (100100).
علاوة على ذلك ، اطبع قيمة الإحداثيات وحالة النقر فوق المسلسل والبلوتوث بمساعدة وظائف Serial.print و bluetooth.print التي تساعد في الحصول على القيم على الشاشة التسلسلية وعلى نظامك عبر Bluetooth.
أخيرًا ، نظرًا لارتداد أحد الأزرار ، قد تتكرر قيمة واحدة مما قد يتسبب في بقاء مؤشر الماوس على موضع واحد ، لذلك للتخلص من هذا ، يتعين علينا إضافة هذا التأخير.
حلقة باطلة () { digitalWrite (led، LOW)؛ while (digitalRead (trigger) == LOW) { digitalWrite (led، HIGH) ؛ lstate = digitalRead (lclick) ؛ rstate = digitalRead (rclick) ؛ xh = analogRead (x) ؛ yh = analogRead (y) ؛ xcord = الخريطة (xh، 286،429،100،999) ؛ ycord = خريطة (yh، 282،427،100،800) ؛ Serial.print (xcord) ؛ Serial.print (ycord) ؛ إذا (lstate == LOW) Serial.print (1) ؛ آخر Serial.print (0) ؛ إذا (rstate == LOW) Serial.print (1) ؛ آخر Serial.print (0) ؛ bluetooth.print (xcord) ؛ bluetooth.print (ycord) ؛ إذا (lstate == منخفض) bluetooth.print (1) ؛ آخر bluetooth.print (0) ؛ إذا (الحالة == منخفضة) bluetooth.print (1) ؛ آخر bluetooth.print (0) ؛ تأخير (4000) ؛ }}
برنامج بايثون للسائق
اعتبارًا من الآن ، أكملنا الجهاز وجزء البرنامج الثابت الخاص به ، والآن لكي يعمل الماوس الهوائي ، نحتاج إلى برنامج نصي يمكنه فك تشفير الإشارات من الماوس الهوائي إلى حركات المؤشر ، لذلك اخترنا لهذا الغرض بايثون. Python هي لغة برمجة نصية ، ونعني هنا بالبرمجة النصية أنها تساعدنا في التحكم في البرنامج الآخر ، لأننا هنا نتحكم في مؤشر الماوس.
لذا افتح غلاف python الخاص بك وقم بتثبيت المكتبات التالية باستخدام الأوامر التالية:
تثبيت النقطة التسلسلية تثبيت pyautogui
و المسلسل عبارة عن مكتبة لالثعبان الذي يساعدنا على الحصول على البيانات من الواجهات التسلسلية مثل منافذ COM وأيضا يتيح لنا التلاعب به في حين pyautogui هو مكتبة الثعبان للحصول على السيطرة على ميزات واجهة المستخدم الرسومية، في هذه الحالة، والماوس.
الآن دعنا نصل إلى الكود الخاص بالسائقين ، أول شيء علينا القيام به هو استيراد المكتبات التسلسلية و pyautogui ، ثم من المكتبة التسلسلية ، علينا ضبط منفذ com للاتصال بمعدل باود 9600 ، نفس تشغيل Bluetooth.serial في. لهذا ، يجب عليك توصيل وحدة Bluetooth بالنظام الخاص بك ثم في إعدادات النظام ، يجب عليك التحقق من منفذ com المتصل به.
الشيء التالي هو قراءة الاتصال التسلسلي من البلوتوث إلى النظام والحفاظ على استمراره ، والحفاظ على بقية الكود في حلقة مستمرة بمساعدة while 1.
كما ذكرنا سابقًا ، فإن Arduino يرسل 8 بتات ، أول 6 للإحداثيات وآخر اثنين لحالة أزرار النقر. لذا اقرأ جميع البتات بمساعدة ser.read وقم بإعداد طولها إلى 8 بتات.
بعد ذلك ، قسّم بتات إحداثيات المؤشر والنقرات عن طريق تقسيمها ، ثم قم بتقسيم بتات المؤشر إلى إحداثيات X و Y بشكل منفصل. الشيء نفسه ينطبق على النقر الأيمن والأيسر.
الآن من الاتصال ، نحصل على سلسلة بايت ونحتاج إلى تحويلها إلى عدد صحيح حتى تتلاءم مع الإحداثيات ، ونفعل ذلك عن طريق فك تشفيرها ثم نسخها إلى أعداد صحيحة.
الآن لتحريك المؤشر نستخدم pyautogui MoveTo ل وظيفة، والتي تأخذ كوسائط تلك الإحداثيات صحيح ويتحرك المؤشر إلى هذا الموقف.
تحقق بعد ذلك من النقرات ، ونقوم بذلك باستخدام آخر بتتين ووظيفة النقر في pyautogui ، ويتم ترك نقرة افتراضية واحدة ، ومع ذلك يمكننا ضبطها على اليمين من خلال إعلان قيمة الزر على اليمين ، ويمكننا أيضًا تحديد عدد النقرات إلى اضبطه على نقرة مزدوجة عن طريق إعداد معلمة النقرات على 2.
يوجد أدناه كود Python الكامل ليتم تشغيله على الكمبيوتر:
استيراد مسلسل استيراد pyautogui ser = serial.Serial ('com3'، 9600) بينما 1: k = ser.read (8) cursor = k click = k x = cursor y = cursor l = click r = click xcor = int (x.decode ('utf-8')) ycor = int (y.decode ('utf-8')) pyautogui.moveTo (xcor، ycor) إذا كان l == 49: pyautogui.click (نقرات = 2) elif r = = 49: pyautogui.click (الزر = "اليمين" ، النقرات = 2)
اختبار ماوس Arduino Air
لذلك لتشغيل Air Mouse ، قم بتوصيل مصدر طاقة به. يمكن أن يكون من فتحة Arduino Nano USB أو من مصدر طاقة منظم 5 فولت باستخدام 7805 IC. ثم قم بتشغيل البرنامج النصي لبرنامج التشغيل Python عن طريق تعيين منفذ com الذي يتصل به البلوتوث. أثناء تشغيل البرنامج النصي ، سترى تأخرًا زمنيًا في وميض البلوتوث ، فهذا يعني أنه متصل بنظامك. ثم لتشغيله ، انقر فوق زر التشغيل وسترى أن موضع الإحداثيات سيتغير وإذا كنت تريد النقر الأيسر أو الأيمن ، ثم اضغط أولاً على زر الضغط الأيسر أو الأيمن وزر التشغيل معًا ، سترى إجراء النقرة عند تم تغيير موقع المؤشر.
تحقق من فيديو العمل التفصيلي أدناه.