สารบัญ:

ลิ้นชักเก็บของ "Smart Cities Hackathon Qualcomm17": 13 ขั้นตอน
ลิ้นชักเก็บของ "Smart Cities Hackathon Qualcomm17": 13 ขั้นตอน

วีดีโอ: ลิ้นชักเก็บของ "Smart Cities Hackathon Qualcomm17": 13 ขั้นตอน

วีดีโอ: ลิ้นชักเก็บของ
วีดีโอ: ขอนแก่น KhonKaen Smart City เมืองฉลาดชาติเจริญ | Shaking Structure ปัญหาเชิงโครงสร้าง 2024, กรกฎาคม
Anonim
ลิ้นชักเก็บของ
ลิ้นชักเก็บของ

ในเอกสารถัดไป คุณสามารถดูกระบวนการสร้างและตั้งโปรแกรมลิ้นชักอัจฉริยะได้ ลิ้นชักนี้ถูกตั้งโปรแกรมไว้ใน Dragon Board 410c โดยมีวัตถุประสงค์เพื่อปรับปรุงคุณภาพของเมือง โครงการนี้เป็นส่วนหนึ่งของการประกวด "เมืองอัจฉริยะ Hackathon Qualcomm 17"

แนวคิดของโครงการนี้เริ่มต้นจากปัญหาที่น้อยคนนักจะมองเห็น นั่นคือ การจัดการเครื่องมือและวัสดุที่สูญหายและไม่ดีที่บริษัทจัดหาให้ เช่น โรงงาน หรือแม้แต่โรงพยาบาล ในสถานที่เหล่านี้ มีการจัดหาวัสดุและเครื่องมือบางอย่างให้กับคนงานเพื่อทำกิจกรรม วัสดุและเครื่องมือนี้จะต้องนำกลับมาใช้ใหม่ เนื่องจากมีราคาแพงหรือขาดทรัพยากรทางเศรษฐกิจเพื่อทดแทน

ในโรงพยาบาล มีคนควบคุมวัสดุที่ถูกกำจัดออกไป แต่เมื่อมีคนเข้ามาแทรกแซง ก็เกิดข้อผิดพลาด ซึ่งอาจนำไปสู่ค่าใช้จ่ายที่ไม่จำเป็น ทางออกที่ดีที่สุดสำหรับปัญหานี้คือลิ้นชักอัจฉริยะที่สามารถรักษาสินค้าคงคลังของวัตถุที่ยืมและส่งคืน และในขณะเดียวกันก็รู้ว่าใครเป็นผู้รับผิดชอบ

ขั้นตอนที่ 1: วัสดุ

วัสดุที่จำเป็นสำหรับโครงการคือ 1 x Dragon Board 410c

1 x เซนเซอร์ Mezzanine 96 บอร์ดสำหรับ Dragon Board 410c

1 x เขียงหั่นขนม

1 x MDF (ไฟเบอร์บอร์ดความหนาแน่นปานกลาง) แผ่น 61 x 122 cms

5 x เซ็นเซอร์ CNY 70

1 X TIP31B

1 x แม่เหล็กไฟฟ้า

1 x 7408

1 x คีย์บอร์ด

1 x หน้าจอ

สกรู 3 ตัว

แนวต้าน (วาไรตี้)

สายทองแดง

กาว

เจาะ

ขั้นตอนที่ 2: ตัดชิ้นส่วนสำหรับลิ้นชักใน MDF (เพื่อผลลัพธ์ที่ดีกว่า ให้ใช้เครื่องตัดเลเซอร์)

ตัดชิ้นส่วนสำหรับลิ้นชักใน MDF (เพื่อผลลัพธ์ที่ดีกว่า ให้ใช้เครื่องตัดเลเซอร์)
ตัดชิ้นส่วนสำหรับลิ้นชักใน MDF (เพื่อผลลัพธ์ที่ดีกว่า ให้ใช้เครื่องตัดเลเซอร์)

ขั้นตอนที่ 3: วางชิ้นส่วนทั้งหมดเข้าด้วยกันเพื่อสร้างลิ้นชักที่มีลิ้นชักเล็ก ๆ สองลิ้นชักและลิ้นชักใหญ่

ขั้นตอนที่ 4: ขันสกรูตรงกลางลิ้นชักแต่ละอัน

ขันสกรูตรงกลางลิ้นชักแต่ละอัน
ขันสกรูตรงกลางลิ้นชักแต่ละอัน

ขั้นตอนที่ 5: ด้วยการเจาะรูผ่านลิ้นชักด้านหลัง รูจะต้องเท่ากับขนาดของเซนเซอร์

เมื่อใช้ดอกสว่านเจาะรูผ่านลิ้นชักด้านหลัง รูจะต้องเท่ากับขนาดของเซนเซอร์
เมื่อใช้ดอกสว่านเจาะรูผ่านลิ้นชักด้านหลัง รูจะต้องเท่ากับขนาดของเซนเซอร์

ขั้นตอนที่ 6: เชื่อมเซ็นเซอร์แต่ละตัว CNY 70 ด้วยสายทองแดง (ซ้ำอีก 4 ครั้ง)

เชื่อมเซ็นเซอร์แต่ละตัว CNY 70 ด้วยสายทองแดง (ซ้ำอีก 4 ครั้ง)
เชื่อมเซ็นเซอร์แต่ละตัว CNY 70 ด้วยสายทองแดง (ซ้ำอีก 4 ครั้ง)

ขั้นตอนที่ 7: ใช้วงจรพิเศษสำหรับเซ็นเซอร์

วงจรพิเศษใช้สำหรับเซ็นเซอร์
วงจรพิเศษใช้สำหรับเซ็นเซอร์

ขั้นตอนที่ 8: เชื่อมต่อ Sensor Mezzanine กับ Dragon Board 410c (ใช้เพื่อเข้าถึง GPIO)

เชื่อมต่อ Sensor Mezzanine กับ Dragon Board 410c (ใช้เพื่อเข้าถึง GPIO)
เชื่อมต่อ Sensor Mezzanine กับ Dragon Board 410c (ใช้เพื่อเข้าถึง GPIO)

มันสำคัญมากที่ขั้นตอนนี้จะต้องทำโดยปิดกระดานมังกร ถ้าไม่สามารถเผาไหม้ได้ นอกจากจะต้องวาง PIN ทั้งหมดให้ถูกต้อง

ขั้นตอนที่ 9: เชื่อมต่อวงจรจาก Breadboard กับ Mezzanine

เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine
เชื่อมต่อวงจรจากเขียงหั่นขนมกับ Mezzanine

ขั้นตอนที่ 10: เขียนหรือคัดลอกรหัส

#รวม #รวม #รวม //#รวม

#รวม "libsoc_gpio.h"

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

/* โค้ดด้านล่างนี้ทำให้ตัวอย่างนี้ใช้ได้กับ 96Boards ทั้งหมด */

int LED_1 ที่ไม่ได้ลงชื่อ; // อิเล็คโทรอิมาน

ไม่ได้ลงชื่อ BUTTON_1; // เซ็นเซอร์ตัวแรก

ไม่ได้ลงนาม int BUTTON_2; // เซ็นเซอร์ที่สอง ไม่ได้ลงนาม int BUTTON_3; // ปิด int ที่ไม่ได้ลงนาม BUTTON_4; // เซ็นเซอร์ที่สาม

โครงสร้างผู้ใช้{

ชื่อผู้ใช้ถ่าน[20]; รหัสผ่านถ่าน[20]; }ผู้ใช้;

โครงสร้างฐานข้อมูล{

ถ่าน Article_Name[20]; ถ่านที่ตั้ง[20]; }ฐานข้อมูล;

เซ็นเซอร์ int1;

เซ็นเซอร์ int2; เซ็นเซอร์ int3;

int sensor1_last_state;

int sensor2_last_state; เซ็นเซอร์ int3_last_state;

ชื่อผู้ใช้ถ่าน[50];

รหัสผ่านถ่าน[50];

ถ่าน ใช่ไม่ใช่[40];

ไฟล์ *pFILE;

ถ่านใช่[20] = {"ใช่"};

การวิ่งภายใน = 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 หลัก ()

{ gpio *led_1, *button_1, *button_2, *button_3, *button_4; //ไม่สัมผัส; โครงสร้างผู้ใช้ Karina; โครงสร้างตัวจัดการผู้ใช้; strcpy(Karina.ชื่อผู้ใช้ "Karina Valverde"); strcpy(รหัสผ่าน Karina. "แนวตั้งสูง"); strcpy(Manager.username, "The Boss"); strcpy(Manager.password, "ITESM"); struct เครื่องมือฐานข้อมูล; struct ฐานข้อมูล ปากกา; struct กรณีฐานข้อมูล; strcpy(Tool. Article_Name, "เครื่องมือ"); struct เครื่องมือฐานข้อมูล; struct ฐานข้อมูล ปากกา; struct กรณีฐานข้อมูล; 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);

if((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 (ปุ่ม_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 (ปุ่ม_2); sensor3 = libsoc_gpio_get_level (button_4); sensor1_last_state = เซ็นเซอร์1; sensor2_last_state = เซ็นเซอร์2; sensor3_last_state = เซ็นเซอร์3; ถ้า (sensor1 ==1){ strcpy(Tool. Location, "Located on Rack"); } else if (sensor1 == 0){ strcpy(Tool. Location, "ไม่เคยอยู่ในแร็คนี้"); } if (sensor2 ==1){ strcpy(Pen. Location, "Located on Rack"); } else if (sensor2 == 0){ strcpy(Pen. Location, "ไม่เคยอยู่ในแร็คนี้"); } if (sensor3 ==1){ strcpy(Case. Location, "Located on Rack"); } else if (sensor3 == 0){ strcpy(Case. Location, "ไม่เคยอยู่ในแร็คนี้"); } ในขณะที่ (ทำงาน) { libsoc_gpio_set_level (led_1, สูง); 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, ต่ำ); ในขณะที่ (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 (button_4); } libsoc_gpio_set_level(led_1, สูง); if (sensor1 == 1 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, Karina.username); }อื่น if (sensor1 == 0 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, "Located on Rack"); } if (sensor2 == 1 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, Karina.username); }อื่น if (sensor2 == 0 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, "Located on Rack"); }

ถ้า (sensor3 == 1 && sensor3 != sensor3_last_state){

strcpy(Case. Location, Karina.username); }อื่น if (sensor3 == 0 && sensor3 != sensor3_last_state){ strcpy(Case. Location, "Located on Rack"); } }else if (strcmp(username, "Boss") == 0 && strcmp(password, "ITESM") == 0){ printf(" คุณต้องการสร้างไฟล์ข้อความด้วยฐานข้อมูลหรือไม่ [ใช่/ไม่ใช่] "); scanf("%s", ใช่ไม่ใช่); ถ้า ((strcmp (ใช่ไม่ใช่ ใช่) == 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");

} } ล้มเหลว: if(led_1 || button_1|| button_2|| button_3) { printf("ใช้ทรัพยากร gpio ล้มเหลว!\n"); libsoc_gpio_free(led_1); libsoc_gpio_free(ปุ่ม_1); libsoc_gpio_free(button_2); libsoc_gpio_free(button_3); }

ขั้นตอนที่ 11: เรียกใช้โปรแกรม

ขั้นตอนที่ 12: บทสรุป

โครงการนี้มีอนาคตที่สดใส เนื่องจากสามารถปรับปรุงได้อย่างมีประสิทธิภาพ เซ็นเซอร์สามารถเปลี่ยนแปลงได้สำหรับแท็ก RFID และในขณะเดียวกัน RFID ก็สามารถใช้บัตรประจำตัวเพื่อตรวจสอบว่าใครเป็นผู้รับผิดชอบวัสดุ

แนะนำ: