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

درج الجرد "Smart Cities Hackathon Qualcomm17": 13 خطوة
درج الجرد "Smart Cities Hackathon Qualcomm17": 13 خطوة

فيديو: درج الجرد "Smart Cities Hackathon Qualcomm17": 13 خطوة

فيديو: درج الجرد
فيديو: Reevo - stairs attack! 2024, يوليو
Anonim
درج الجرد
درج الجرد

في المستند التالي ، يمكنك أن ترى عملية إنشاء وبرمجة درج ذكي. تمت برمجة هذا الدرج في Dragon Board 410c ، بهدف تحسين جودة المدن. المشروع جزء من مسابقة "هاكاثون المدن الذكية كوالكوم 17".

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

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

الخطوة 1: المواد

المواد اللازمة للمشروع هي التالية: 1 x Dragon Board 410c

1 × مستشعر الميزانين 96 لوحًا للوحة التنين 410c

1 × اللوح

1 × لوح MDF (لوح ألياف متوسط الكثافة) 61 × 122 سم

5 × مستشعر 70 يوان صيني

1 X TIP31B

1 × مغناطيس كهربائي

1 × 7408

1 × لوحة مفاتيح

1 × شاشة

3 × مسامير

مقاومات (متنوعة)

سلك نحاس

صمغ

تدريبات

الخطوة 2: قص القطع للدرج في MDF. (للحصول على نتائج أفضل استخدم قاطع الليزر)

قطع القطع للدرج في MDF. (للحصول على نتائج أفضل استخدم قاطع الليزر)
قطع القطع للدرج في MDF. (للحصول على نتائج أفضل استخدم قاطع الليزر)

الخطوة 3: الصق كل القطع معًا لتشكيل درج به درجين صغيرين ودرج كبير

الخطوة 4: برغي المسامير في منتصف كل درج

برغي المسامير في منتصف كل درج
برغي المسامير في منتصف كل درج

الخطوة 5: باستخدام المثقاب ، قم بعمل ثقوب من خلال الدرج الموجود في الجانب الخلفي ، يجب أن يكون الثقب بحجم المستشعر

مع عمل الثقوب من خلال الدرج الموجود في الجانب الخلفي ، يجب أن يكون الثقب بحجم المستشعر
مع عمل الثقوب من خلال الدرج الموجود في الجانب الخلفي ، يجب أن يكون الثقب بحجم المستشعر

الخطوة 6: قم بلحام كل مستشعر 70 CNY بالأسلاك النحاسية. (كرر 4 مرات أكثر)

قم بلحام كل مستشعر 70 CNY بالأسلاك النحاسية. (كرر 4 مرات أكثر)
قم بلحام كل مستشعر 70 CNY بالأسلاك النحاسية. (كرر 4 مرات أكثر)

الخطوة 7: يتم استخدام دائرة خاصة لجهاز الاستشعار

يتم استخدام دائرة خاصة لجهاز الاستشعار
يتم استخدام دائرة خاصة لجهاز الاستشعار

الخطوة 8: قم بتوصيل جهاز الاستشعار الميزانين بلوحة التنين 410 ج. (تستخدم للوصول إلى GPIO)

قم بتوصيل مستشعر الميزانين بلوحة التنين 410 ج. (تستخدم للوصول إلى GPIO)
قم بتوصيل مستشعر الميزانين بلوحة التنين 410 ج. (تستخدم للوصول إلى GPIO)

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

الخطوة 9: قم بتوصيل الدائرة من اللوح إلى الميزانين

قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين
قم بتوصيل الدائرة من اللوح إلى الميزانين

الخطوة 10: اكتب أو انسخ الكود

# تضمين # تضمين # تضمين // # تضمين

# تضمين "libsoc_gpio.h"

# تضمين "libsoc_debug.h" #include "libsoc_board.h"

/ * هذا الجزء من الشفرة أدناه يجعل هذا المثال يعمل على جميع الألواح الـ 96 * /

غير موقعة int LED_1 ؛ // اليكترو إيمان

int غير موقعة BUTTON_1 ؛ // أول جهاز استشعار

int غير موقعة BUTTON_2 ؛ // المستشعر الثاني بدون إشارة إلى BUTTON_3 ؛ // أغلق int غير موقعة BUTTON_4 ؛ // المستشعر الثالث

مستخدم منظم {

اسم مستخدم char [20] ؛ كلمة مرور char [20] ؛ }مستخدم؛

قاعدة بيانات هيكلية {

char Article_Name [20] ؛ موقع char [20] ؛ }قاعدة البيانات؛

مستشعر كثافة العمليات 1 ؛

مستشعر كثافة العمليات 2 ؛ مستشعر كثافة العمليات 3 ؛

حساس int sensor1_last_state؛

مستشعرات int sensor2_last_state ؛ حساس int sensor3_last_state ؛

اسم المستخدم char [50] ؛

كلمة مرور char [50] ؛

char YesNo [40] ؛

ملف * ملف ؛

char نعم [20] = {"Yes"} ؛

كثافة العمليات = 1 ؛

_attribute _ ((المُنشئ)) static void _init ()

{board_config * config = libsoc_board_init () ، BUTTON_1 = libsoc_board_gpio_id (config، "GPIO-A")؛ // مستشعر القبضات BUTTON_2 = libsoc_board_gpio_id (config، "GPIO-C")؛ // المستشعر الثاني BUTTON_3 = libsoc_board_gpio_id (التكوين ، "GPIO-D") ؛ // إغلاق الحامل BUTTON_4 = libsoc_board_gpio_id (config، "GPIO-B") ؛ // المستشعر الثالث // BUTTON_5 = libsoc_board_gpio_id (config ، "GPIO-E") ؛

LED_1 = libsoc_board_gpio_id (التكوين ، "GPIO-E") ؛ // اليكترو إيمان

libsoc_board_free (التكوين) ، } / * نهاية الرمز الخاص بـ 96Boards * /

انت مين()

{gpio * led_1 ، * button_1 ، * button_2 ، * button_3 ، * button_4 ؛ // int touch ؛ مستخدم الهيكل كارينا ؛ مدير مستخدم هيكلي؛ strcpy (Karina.username، "Karina Valverde") ؛ strcpy (Karina.password، "Taller Vertical") ؛ strcpy (Manager.username، "The Boss") ؛ strcpy (Manager.password، "ITESM") ؛ أداة قاعدة البيانات الهيكلية ؛ قلم قاعدة بيانات هيكلي ؛ هيكل قاعدة البيانات حالة ؛ strcpy (Tool. Article_Name ، "أداة") ؛ أداة قاعدة البيانات الهيكلية ؛ قلم قاعدة بيانات هيكلي ؛ هيكل قاعدة البيانات القضية ؛ strcpy (Tool. Article_Name ، "أداة") ؛ strcpy (Pen. Article_Name، "Pen") ؛ strcpy (Case. Article_Name، "Case") ؛ libsoc_set_debug (0) ، led_1 = libsoc_gpio_request (LED_1 ، LS_SHARED) ؛ button_1 = libsoc_gpio_request (BUTTON_1 ، LS_SHARED) ، button_2 = libsoc_gpio_request (BUTTON_2 ، LS_SHARED) ، button_3 = libsoc_gpio_request (BUTTON_3 ، LS_SHARED) ، button_4 = libsoc_gpio_request (BUTTON_4 ، LS_SHARED) ، // button_5 = libsoc_gpio_request (BUTTON_5، LS_SHARED) ؛

إذا ((led_1 == NULL) || (button_1 == NULL) || (button_2 == NULL) || (button_3 == NULL) || (button_4 == NULL))

{اذهب للفشل ؛ } libsoc_gpio_set_direction (led_1 ، الإخراج) ؛ libsoc_gpio_set_direction (button_1 ، INPUT) ، libsoc_gpio_set_direction (button_2 ، INPUT) ، libsoc_gpio_set_direction (button_3 ، INPUT) ، libsoc_gpio_set_direction (button_4 ، INPUT) ؛ // libsoc_gpio_set_direction (button_5، INPUT) ؛

إذا ((libsoc_gpio_get_direction (led_1)! = الإخراج)

|| (libsoc_gpio_get_direction (button_1)! = INPUT) || (libsoc_gpio_get_direction (button_2)! = INPUT) || (libsoc_gpio_get_direction (button_3)! = INPUT) || (libsoc_gpio_get_direction (button_4)! = INPUT)) {فشل الانتقال ؛ } sensor1 = libsoc_gpio_get_level (button_1) ؛ sensor2 = libsoc_gpio_get_level (button_2) ؛ sensor3 = libsoc_gpio_get_level (button_4) ؛ sensor1_last_state = sensor1 ؛ sensor2_last_state = مستشعر 2 ؛ sensor3_last_state = sensor3 ؛ إذا (sensor1 == 1) {strcpy (Tool. Location، "يقع على الرف") ؛ } else if (sensor1 == 0) {strcpy (Tool. Location، "Never put in this Rack")؛ } إذا (sensor2 == 1) {strcpy (Pen. Location، "يقع على الرف")؛ } else if (sensor2 == 0) {strcpy (Pen. Location، "Never put in this Rack")؛ } إذا (sensor3 == 1) {strcpy (Case. Location، "تقع على الرف") ؛ } else if (sensor3 == 0) {strcpy (Case. Location، "Never put in this Rack")؛ } أثناء (تشغيل) {libsoc_gpio_set_level (led_1، HIGH) ؛ printf ("الرجاء إدخال اسم المستخدم:") ؛ scanf ("٪ s" ، اسم المستخدم) ؛ printf ("الرجاء إدخال كلمة المرور:") ؛ scanf ("٪ s" ، كلمة المرور) ؛ if (strcmp (username، "Karina") == 0 && strcmp (password، "Taller") == 0) {libsoc_gpio_set_level (led_1، LOW)؛ libsoc_gpio_set_level (led_1 ، منخفض) ؛ بينما (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1) ؛ sensor2 = libsoc_gpio_get_level (button_2) ؛ sensor3 = libsoc_gpio_get_level (button_4) ؛ } libsoc_gpio_set_level (led_1، HIGH) ؛ إذا (sensor1 == 1 && sensor1! = sensor1_last_state) {strcpy (Tool. Location، Karina.username) ؛ } else if (sensor1 == 0 && sensor1! = sensor1_last_state) {strcpy (Tool. Location، "واقع على الرف")؛ } إذا (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location، Karina.username)؛ } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location، "واقع على الرف")؛ }

إذا (sensor3 == 1 && sensor3! = sensor3_last_state) {

strcpy (Case. Location، Karina.username) ؛ } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location، "واقع على الرف")؛ }} else if (strcmp (username، "Boss") == 0 && strcmp (password، "ITESM") == 0) {printf ("هل ترغب في إنشاء ملف نصي باستخدام قاعدة البيانات؟ [نعم / لا] ") ؛ scanf ("٪ s" ، نعم لا) ؛ if ((strcmp (YesNo، Yes) == 0)) {// Manager_user (pFILE) ؛ pFILE = fopen ("Database.txt"، "w") ؛ fprintf (pFILE، "٪ s"، "-------- قاعدة بيانات الرف ----- / n") ؛ fprintf (pFILE، "٪ s"، "اسم المقالة:") ؛ fprintf (pFILE، "٪ s"، Tool. Article_Name) ؛ fprintf (pFILE، "٪ s"، "\ t") ؛ fprintf (pFILE، "٪ s"، "موقع المقالة:") ؛ fprintf (pFILE، "٪ s"، Tool. Location) ؛ fprintf (pFILE، "٪ s"، "\ n") ؛ fprintf (pFILE، "٪ s"، "اسم المقالة:") ؛ fprintf (pFILE، "٪ s"، Pen. Article_Name) ؛ fprintf (pFILE، "٪ s"، "\ t") ؛ fprintf (pFILE، "٪ s"، "موقع المقالة:") ؛ fprintf (pFILE، "٪ s"، Pen. Location) ؛ fprintf (pFILE، "٪ s"، "\ n") ؛

fprintf (pFILE، "٪ s"، "اسم المقالة:") ؛

fprintf (pFILE، "٪ s"، Case. Article_Name) ؛ fprintf (pFILE، "٪ s"، "\ t") ؛ fprintf (pFILE، "٪ s"، "موقع المقالة:") ؛ fprintf (pFILE، "٪ s"، Case. Location) ؛ fprintf (pFILE، "٪ s"، "\ n") ؛

fclose (pFILE) ؛

}

printf ("الوصول مرفوض / n") ؛

}} فشل: إذا (led_1 || button_1 || button_2 || button_3) {printf ("تطبيق gpio مورد فشل! / n")؛ libsoc_gpio_free (led_1) ، libsoc_gpio_free (button_1) ، libsoc_gpio_free (button_2) ، libsoc_gpio_free (button_3) ، }

الخطوة 11: قم بتشغيل البرنامج

الخطوة 12: الاستنتاجات

يتمتع المشروع بمستقبل واعد ، نظرًا لأنه يمكن أن يتحسن بطريقة فعالة للغاية ، يمكن تغيير المستشعرات لعلامات RFID´S وفي نفس الوقت باستخدام RFID من الممكن استخدام بطاقات الهوية لمراقبة المسؤول عن المواد.

موصى به: