תוכן עניינים:

מגירת מלאי "ערים חכמות האקתון קוואלקום 17": 13 שלבים
מגירת מלאי "ערים חכמות האקתון קוואלקום 17": 13 שלבים

וִידֵאוֹ: מגירת מלאי "ערים חכמות האקתון קוואלקום 17": 13 שלבים

וִידֵאוֹ: מגירת מלאי
וִידֵאוֹ: Paradise or Oblivion 2024, יולי
Anonim
מגירת מלאי
מגירת מלאי

במסמך הבא תוכלו לראות את תהליך הבנייה והתכנות של מגירה חכמה. מגירה זו תוכנתה ב- Dragon Board 410c, במטרה לשפר את איכות הערים. הפרויקט הוא חלק מהתחרות "ערים חכמות האקתון קוואלקום 17".

הרעיון של הפרויקט הזה התחיל בבעיה שמעט מאוד אנשים רואים, שהיא הניהול האבוד והרע של כלים וחומרים שמסופקים על ידי חברות כמו מפעלים ואפילו בתי חולים. במקומות אלה, חומרים וכלי עבודה מסופקים לעובדים לביצוע פעילויות, יש להשתמש בחומר וכלי זה לשימוש חוזר מכיוון שהם יקרים או היעדר משאבים כלכליים להחלפתם.

בבתי חולים יש אנשים שמשתלטים על החומרים שמסירים, אך כשיש התערבות אנושית ישנה הטעות, שעלולה להוביל להוצאות מיותרות. הפתרון הטוב ביותר לבעיה זו הוא מגירה אינטליגנטית המסוגלת לנהל מלאי של חפצים שאולים ומוחזרים ובמקביל יודעים מי האחראי.

שלב 1: חומרים

החומר הדרוש לפרויקט הוא הבא: 1 x Dragon Board 410c

1 x חיישן ביניים 96 לוחות ללוח הדרקון 410c

1 x לוח לחם

1 x גיליון סיבי MDF (צפיפות בינונית) 61 x 122 ס מ

חיישן 5 x CNY 70

1 X טיפ 31B

1 x אלקטרומגנט

1 x 7408

1 x מקלדת

מסך 1 x

3 x ברגים

התנגדות (מגוון)

חוטי נחושת

דֶבֶק

תרגיל

שלב 2: חותכים את החלקים למגירה ב- MDF. (לקבלת תוצאות טובות יותר השתמש בחותך לייזר)

חותכים את החלקים למגירה ב- MDF. (לקבלת תוצאות טובות יותר השתמש בחותך לייזר)
חותכים את החלקים למגירה ב- MDF. (לקבלת תוצאות טובות יותר השתמש בחותך לייזר)

שלב 3: הדבק את כל החלקים יחד ליצירת מגירה עם שתי מגירות קטנות ואחת גדולה

שלב 4: הברג את הברגים באמצע כל מגירה

הברג את הברגים באמצע כל מגירה
הברג את הברגים באמצע כל מגירה

שלב 5: בעזרת המקדחה יוצרים חורים דרך המגירה בצד האחורי, החור חייב להיות בגודל החיישן

בעזרת המקדחה בצע חורים דרך המגירה בצד האחורי, החור חייב להיות בגודל החיישן
בעזרת המקדחה בצע חורים דרך המגירה בצד האחורי, החור חייב להיות בגודל החיישן

שלב 6: לרתך כל חיישן CNY 70 עם חוטי הנחושת. (חזור על 4 פעמים נוספות)

לרתך כל חיישן CNY 70 עם חוטי הנחושת. (חזור על 4 פעמים נוספות)
לרתך כל חיישן CNY 70 עם חוטי הנחושת. (חזור על 4 פעמים נוספות)

שלב 7: מעגל מיוחד משמש לחיישן

מעגל מיוחד משמש לחיישן
מעגל מיוחד משמש לחיישן

שלב 8: חבר את הביניים של חיישן ללוח הדרקון 410c. (משמש לגישה ל- GPIO)

חבר את הביניים של החיישן ללוח הדרקון 410c. (משמש לגישה ל- GPIO)
חבר את הביניים של החיישן ללוח הדרקון 410c. (משמש לגישה ל- GPIO)

חשוב מאוד כי שלב זה יבוצע כאשר לוח הדרקון כבוי, אם לא הוא יכול להישרף, מלבד כל PIN צריך להיות ממוקם נכון.

שלב 9: חבר את המעגל מלוח הלחם לקומת הביניים

חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים
חבר את המעגל מלוח הלחם לקומת הביניים

שלב 10: כתוב או העתק את הקוד

#include #include #include // #include

#כלול "libsoc_gpio.h"

#include "libsoc_debug.h" #include "libsoc_board.h"

/ * פיסת הקוד למטה גורמת לכך שהדוגמה הזו תעבוד על כל 96 הלוחות */

int LED ללא חתימה; // אלקטרו אימאן

int BUTTON_1 ללא חתימה; // חיישן ראשון

int BUTTON_2 ללא חתימה; // חיישן שני ללא חתימה int BUTTON_3; // סגור int BUTTON_4 ללא חתימה // // חיישן שלישי

מבנה משתמש {

שם משתמש char [20]; סיסמת צ'אר [20]; }מִשׁתַמֵשׁ;

struct מסד נתונים {

char Article_Name [20]; char Location [20]; }מאגר מידע;

חיישן int1;

חיישן int2; חיישן int3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

שם משתמש char [50];

סיסמת צ'אר [50];

char YesNo [40];

קובץ *pFILE;

char Yes [20] = {"Yes"};

ריצה int = 1;

_attribute _ ((קונסטרוקטור)) חלל סטטי _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 (config, "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 (config, "GPIO-E"); // אלקטרו אימאן

libsoc_board_free (config); } / * סוף קוד 96Boards מיוחד / /

int main ()

{gpio *led_1, *button_1, *button_2, *button_3, *button_4; // int touch; מבנה משתמש קרינה; struct User Manager; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina.password, "גבוה יותר אנכי"); strcpy (שם משתמש מנהל, "הבוס"); strcpy (Manager.password, "ITESM"); כלי מסד הנתונים struct; struct Database עט; struct Database Case; strcpy (Tool. Article_Name, "כלי"); כלי מסד הנתונים struct; struct Database עט; struct Database Case; strcpy (Tool. Article_Name, "כלי"); strcpy (Pen. Article_Name, "עט"); strcpy (Case. Article_Name, "מקרה"); 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, OUTPUT); libsoc_gpio_set_direction (button_1, INPUT); libsoc_gpio_set_direction (כפתור_2, INPUT); libsoc_gpio_set_direction (button_3, INPUT); libsoc_gpio_set_direction (כפתור_4, INPUT); // libsoc_gpio_set_direction (כפתור_5, INPUT);

אם ((libsoc_gpio_get_direction (led_1)! = OUTPUT)

|| (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 (כפתור_1); sensor2 = libsoc_gpio_get_level (כפתור_2); sensor3 = libsoc_gpio_get_level (כפתור_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "ממוקם על המדף"); } else if (sensor1 == 0) {strcpy (Tool. Location, "מעולם לא הוצב במעמד זה"); } if (sensor2 == 1) {strcpy (Pen. Location, "ממוקם על המדף"); } else if (sensor2 == 0) {strcpy (Pen. Location, "מעולם לא הוצב במעמד זה"); } if (sensor3 == 1) {strcpy (Case. Location, "ממוקם על המדף"); } else if (sensor3 == 0) {strcpy (Case. Location, "מעולם לא הוצב במעמד זה"); } תוך כדי (ריצה) {libsoc_gpio_set_level (led_1, HIGH); printf ("אנא שם משתמש:"); scanf ("%s", שם משתמש); printf ("אנא הזן סיסמה:"); scanf ("%s", סיסמא); if (strcmp (שם משתמש, "Karina") == 0 && strcmp (סיסמה, "גבוה יותר") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, LOW); בעוד (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1); sensor2 = libsoc_gpio_get_level (כפתור_2); sensor3 = libsoc_gpio_get_level (כפתור_4); } libsoc_gpio_set_level (led_1, HIGH); if (sensor1 == 1 && sensor1! = sensor1_last_state) {strcpy (Tool. Location, Karina.username); } אחרת אם (sensor1 == 0 && sensor1! = sensor1_last_state) {strcpy (Tool. Location, "ממוקם על המדף"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } אחרת אם (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "ממוקם על המדף"); }

if (sensor3 == 1 && sensor3! = sensor3_last_state) {

strcpy (Case. Location, שם משתמש קרינה); } אחרת אם (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "ממוקם על המדף"); }} else if (strcmp (שם משתמש, "בוס") == 0 && strcmp (סיסמה, "ITESM") == 0) {printf ("האם ברצונך ליצור קובץ טקסט עם מסד הנתונים? [כן/לא] "); scanf ("%s", YesNo); 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 (כפתור_1); libsoc_gpio_free (כפתור_2); libsoc_gpio_free (כפתור_3); }

שלב 11: הפעל את התוכנית

שלב 12: מסקנות

לפרויקט יש עתיד מבטיח, מכיוון שהוא יכול להשתפר בצורה יעילה מאוד, ניתן לשנות את החיישנים עבור תגי RFID ובמקביל עם ה- RFID אפשר להשתמש בתעודות זהות כדי לפקח מי אחראי לחומר.

מוּמלָץ: