في هذا الوقت من جائحة كورونا ، أصبحت المصاعد مكانًا شديد الخطورة حيث يلمس الجميع نفس الأزرار. في العديد من الأماكن ، اكتشف الناس حيلًا لمنع الاتصال بأزرار المصعد مثل استخدام ورق ضخ أو عود أسنان أو مناديل صحية للضغط على أزرار المصعد.
لذلك ، استمرارًا لمشاريعنا السابقة المتعلقة بسلامة كورونا مثل آلة التعقيم الأوتوماتيكية ، ومراقبة درجة الحرارة بدون تلامس ، وكاشف المسافة الاجتماعية ، سنقوم هنا ببناء نموذج أولي للمصعد يتم التحكم فيه بالإيماءات باستخدام Arduino Nano
يستخدم هذا المصعد بدون تلامس Arduino Nano ومستشعر إيماءات APDS9960 ووحدة عرض OLED. باستخدام لوحة التحكم القائمة على الإيماءات ، يمكنك التحكم بسهولة في الرفع عن طريق عمل إيماءة يد. يستخدم مستشعر APDS9960 لقراءة الإيماءات. تُستخدم الإيماءات لأعلى ولأسفل لتعيين رقم الأرضية ، والإيماءة اليسرى هي إغلاق باب المصعد وتحريك المصعد وفقًا لرقم الطابق ويتم استخدام الإيماءة اليمنى لفتح الباب.
المكونات مطلوبة
- اردوينو نانو
- وحدة عرض OLED
- APDS9960 RGB & Gesture Sensor
- اللوح
- أسلاك توصيل
APDS9960 RGB & Gesture Sensor
APDS9960 RGB & Gesture Detection Module عبارة عن لوحة اختراق صغيرة تأتي مع مستشعر APDS-9960 مدمج ومرشحات حجب الأشعة فوق البنفسجية والأشعة تحت الحمراء وأربعة صمامات ثنائية منفصلة حساسة لاتجاهات مختلفة وواجهة متوافقة مع I2C. يمكن استخدام هذا المستشعر للضوء المحيط وقياس الألوان ، واكتشاف القرب ، والاستشعار عن طريق اللمس. يبلغ مدى اكتشاف الإيماءات من 10 إلى 20 سم ويمكن استخدامه للتحكم في متحكم وروبوت وفي العديد من المشاريع الأخرى.
ميزات:
- الجهد التشغيلي: 2.4 فولت إلى 3.6 فولت
- نطاق التشغيل: 4-8 بوصة (10-20 سم).
- واجهة I2C (عنوان I2C: 0x39).
- الضوء المحيط واستشعار لون RGB ، القرب
- الاستشعار وكشف الإيماءات في وحدة بصرية
- واجهة متوافقة مع الوضع السريع I2C-bus بمعدلات بيانات تصل إلى 400 كيلو هرتز.
مخطط الرسم البياني
يوجد أدناه مخطط الدائرة للمصعد اللاتلامسي باستخدام APDS9960.
نحن نقوم بتوصيل Arduino Nano بمستشعر APDS9960 وشاشة OLED. تتصل دبابيس VCC و GND لكل من مستشعر APDS9960 وشاشة OLED بـ 3.3 فولت و GND من Arduino. بينما يتم توصيل دبابيس SCL و SDA لمستشعر APDS9960 وشاشة OLED بدبابيس A5 و A4 من Arduino على التوالي.
OLED & APDS9960 دبوس |
اردوينو نانو دبوس |
VCC |
3.3 فولت |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
هكذا سيبدو الإعداد الكامل للمصعد الذي يتم التحكم فيه بواسطة الإيماءات باستخدام Arduino:
لمعرفة المزيد حول شاشة OLED وتفاعلها مع وحدات التحكم الدقيقة الأخرى ، اتبع الرابط.
شرح الكود
يتم تقديم الكود الكامل لـ Contactless Elevator باستخدام APDS9960 في نهاية الصفحة. نحن هنا نوضح بعض الأجزاء المهمة من الكود. في هذا البرنامج ، سنستخدم مكتبات APDS9960 و Adafruit_SH1106 . يمكن تنزيل مكتبة APDS9960 من Arduino IDE. لتنزيل المكتبة ، انتقل إلى Sketch> Library Manager> Search ثم أدخل Arduino APDS9960. بينما يمكن تنزيل مكتبة Adafruit_SH1106 من هنا.
لذا كالمعتاد ابدأ الكود بتضمين جميع المكتبات المطلوبة. Adafruit_SH1106.h هي النسخة المعدلة من مكتبة Adafruit الأصلية.
#تضمن
في الأسطر التالية ، حدد المتغيرات لتخزين رقم الطابق والطابق الحالي حيث يريد المستخدم الذهاب.
int floornum = 0 ؛ int currentfloor = 0 ؛
بعد ذلك ، أدخل الصور النقطية لـ UP Arrow و Down Arrow و Open Door و Close Door. يمكن إنشاء رمز HEX للصورة باستخدام محول مثل Image2cpp. لمعرفة المزيد حول كيفية استخدام Image2cpp ، اتبع هذا البرنامج التعليمي لمولد كود QR من Arduino.
حرف ثابت بدون إشارة PROGMEM = {0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، ……………………………………… ……………………………………………………………..} ؛ حرف ثابت بدون إشارة PROGMEM = {0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ،……………………………………. ……………………………………………………………..} ؛ const غير موقعة char dooropen PROGMEM = {0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x00 ، 0x0f ، 0xff ، 0xff ، 0xc0 ، 0x1f ، 0xff ، 0xff ، 0xe0 ، ،… …………………………………………………………………..} ؛
في دالة setup () ، قم بتهيئة Serial Monitor بمعدل باود 9600 لأغراض التصحيح. ثم في الأسطر التالية ، قم بتهيئة شاشة OLED ومستشعر APDS9960 باستخدام طريقة البدء () على النحو التالي:
Serial.begin (9600) ؛ if (! APDS.begin ()) {Serial.println ("خطأ في تهيئة مستشعر APDS9960!")؛ } Serial.println ("اكتشاف الإيماءات…")؛ display.begin (SH1106_SWITCHCAPVCC، 0x3C) ؛
بعد تهيئة العرض والمستشعر ، امسح المخزن المؤقت للعرض باستخدام طريقة clearDisplay () واضبط حجم الخط ولونه باستخدام أساليب display.setTextSize () و display.setTextColor () .
display.setTextSize (2) ، display.setTextColor (WHITE) ، display.clearDisplay () ، display.display () ،
داخل الحلقة الفارغة () ، تحقق باستمرار من إجراء أي إيماءة. إذا كانت الإجابة بنعم ، فاقرأ قيم الإيماءات وتحقق من الإيماءة (أعلى ، أسفل ، يمين ، يسار) وقم بطباعة القراءة المقابلة على الشاشة التسلسلية. تُستخدم الإيماءات لأعلى ولأسفل لتعيين رقم الطابق الذي يريد المستخدم الانتقال إليه. الإيماءة اليسرى هي إغلاق باب الرفع وتحريك المصعد وفقًا لرقم الطابق بينما يتم استخدام الإيماءة اليمنى لفتح الباب.
if (APDS.gestureAvailable ()) {int Gesture = APDS.readGesture () ؛ التبديل (إيماءة) {حالة GESTURE_UP: Serial.println ("لفتة اكتشاف UP") ؛ display.clearDisplay () ، فلورنوم ++ ؛ home1 () ؛ استراحة؛ حالة GESTURE_DOWN: Serial.println ("لفتة DOWN التي تم اكتشافها") ؛ display.clearDisplay () ، فلورنوم - ؛ home1 () ؛ استراحة؛ الحالة GESTURE_LEFT: Serial.println ("لفتة LEFT المكتشفة") ؛ display.clearDisplay () ، بداية()؛ استراحة؛ الحالة GESTURE_RIGHT: Serial.println ("الكشف عن إيماءة الحق") ؛ display.clearDisplay () ، home1 () ؛ استراحة؛ الافتراضي: كسر ؛ }
و home1 () يتم استخدام الدالة لرسم المنزل العرض للمصعد. يتكون هذا من سهم لأعلى ، وسهم لأسفل ، وفتح الباب ، وإشارات إغلاق الباب ، ورقم الطابق الحالي. تُستخدم وظيفة drawBitmap () لرسم الصور على شاشة OLED. فيما يلي بناء جملة الدالة drawBitmap () :
drawBitmap (int16_t x، int16_t y، bitmap، int16_t w، int16_t h، color) ؛
أين:
int16_t x، int16_t y هما إحداثيات X و Y لشاشة OLED
الصورة النقطية هي اسم الصورة النقطية
int16_t w، int16_t h هي ارتفاع ووزن الصورة.
void home1 () {display.setCursor (101،23) ، display.println (فلورنوم) ؛ display.drawBitmap (23 ، 0 ، uparrow ، 40 ، 18 ، WHITE) ؛ display.drawBitmap (26 ، 46 ، downarrow ، 40 ، 18 ، WHITE) ؛ display.drawBitmap (0، 15، dooropen، 29، 30، WHITE) ؛ display.drawBitmap (60 ، 15 ، مغلق ، 29 ، 30 ، أبيض) ؛ display.display () ، }
في البداية () يستخدم وظيفة للتحرك المصعد صعودا أو هبوطا. لذلك ، تتم مقارنة الطابق الحالي برقم الطابق الذي يريد المستخدم الذهاب إليه. إذا كان رقم الطابق أكبر من رقم الطابق الحالي. ثم يتحرك المصعد لأعلى وإذا كان رقم الطابق أقل من الطابق الحالي لا. ثم سينتقل المصعد إلى أسفل. سيتوقف المصعد عند عدم وجود الطابق الحالي. والكلمة لا. هي نفسها.
بداية فارغة () {while (floornum> currentfloor) {Serial.println ("going UP") ؛ Currentfloor ++ ؛ display.drawBitmap (0، 0، up، 100، 64، WHITE) ؛ display.setCursor (101،23) ؛ display.println (currentfloor) ؛ display.display () ، display.clearDisplay () ، تأخير (2000) ؛ } while (floornum <currentfloor) {Serial.println ("going Down")؛ Currentfloor-- ؛ display.drawBitmap (0، 0، down، 100، 64، WHITE) ؛ display.setCursor (101،23) ؛ display.println (currentfloor) ؛ display.display () ، display.clearDisplay () ، تأخير (2000) ؛ } if (floornum == currentfloor) {Serial.println ("Reached") ؛ display.clearDisplay () ، home1 () ؛ Serial.print (currentfloor) ؛ }}
اختبار الرفع بدون لمس
بمجرد أن يصبح الجهاز والكود جاهزًا ، قم بتوصيل Arduino Nano بالكمبيوتر المحمول وتحميل الكود الكامل الوارد أدناه. كما ترى بشكل افتراضي ، سيعرض OLED واجهة مستخدم Elevator.
الآن حرك يدك لأعلى أو لأسفل ، كما هو موضح في الفيديو أدناه ، لتعيين الأرضية حيث تريد أن تذهب. ثم قم بالإيماءة اليسرى للاعتراف بالمصعد للذهاب إلى هذا الطابق. إذا كنت تريد إيقاف المصعد ، فقم بالإشارة الصحيحة بيدك.
فيما يلي فيديو العمل الكامل والكود الخاص بهذا المشروع. أتمنى أن تكون قد استمتعت ببناء هذا المشروع. إذا كان لديك أي أسئلة بخصوص هذا المشروع ، فيرجى تركها في قسم التعليقات.