สารบัญ:
- ขั้นตอนที่ 1: วัสดุ
- ขั้นตอนที่ 2: ตัดชิ้นส่วนสำหรับลิ้นชักใน MDF (เพื่อผลลัพธ์ที่ดีกว่า ให้ใช้เครื่องตัดเลเซอร์)
- ขั้นตอนที่ 3: วางชิ้นส่วนทั้งหมดเข้าด้วยกันเพื่อสร้างลิ้นชักที่มีลิ้นชักเล็ก ๆ สองลิ้นชักและลิ้นชักใหญ่
- ขั้นตอนที่ 4: ขันสกรูตรงกลางลิ้นชักแต่ละอัน
- ขั้นตอนที่ 5: ด้วยการเจาะรูผ่านลิ้นชักด้านหลัง รูจะต้องเท่ากับขนาดของเซนเซอร์
- ขั้นตอนที่ 6: เชื่อมเซ็นเซอร์แต่ละตัว CNY 70 ด้วยสายทองแดง (ซ้ำอีก 4 ครั้ง)
- ขั้นตอนที่ 7: ใช้วงจรพิเศษสำหรับเซ็นเซอร์
- ขั้นตอนที่ 8: เชื่อมต่อ Sensor Mezzanine กับ Dragon Board 410c (ใช้เพื่อเข้าถึง GPIO)
- ขั้นตอนที่ 9: เชื่อมต่อวงจรจาก Breadboard กับ Mezzanine
- ขั้นตอนที่ 10: เขียนหรือคัดลอกรหัส
- ขั้นตอนที่ 11: เรียกใช้โปรแกรม
- ขั้นตอนที่ 12: บทสรุป
วีดีโอ: ลิ้นชักเก็บของ "Smart Cities Hackathon Qualcomm17": 13 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
ในเอกสารถัดไป คุณสามารถดูกระบวนการสร้างและตั้งโปรแกรมลิ้นชักอัจฉริยะได้ ลิ้นชักนี้ถูกตั้งโปรแกรมไว้ใน 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 (เพื่อผลลัพธ์ที่ดีกว่า ให้ใช้เครื่องตัดเลเซอร์)
ขั้นตอนที่ 3: วางชิ้นส่วนทั้งหมดเข้าด้วยกันเพื่อสร้างลิ้นชักที่มีลิ้นชักเล็ก ๆ สองลิ้นชักและลิ้นชักใหญ่
ขั้นตอนที่ 4: ขันสกรูตรงกลางลิ้นชักแต่ละอัน
ขั้นตอนที่ 5: ด้วยการเจาะรูผ่านลิ้นชักด้านหลัง รูจะต้องเท่ากับขนาดของเซนเซอร์
ขั้นตอนที่ 6: เชื่อมเซ็นเซอร์แต่ละตัว CNY 70 ด้วยสายทองแดง (ซ้ำอีก 4 ครั้ง)
ขั้นตอนที่ 7: ใช้วงจรพิเศษสำหรับเซ็นเซอร์
ขั้นตอนที่ 8: เชื่อมต่อ Sensor Mezzanine กับ Dragon Board 410c (ใช้เพื่อเข้าถึง GPIO)
มันสำคัญมากที่ขั้นตอนนี้จะต้องทำโดยปิดกระดานมังกร ถ้าไม่สามารถเผาไหม้ได้ นอกจากจะต้องวาง PIN ทั้งหมดให้ถูกต้อง
ขั้นตอนที่ 9: เชื่อมต่อวงจรจาก Breadboard กับ 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 ก็สามารถใช้บัตรประจำตัวเพื่อตรวจสอบว่าใครเป็นผู้รับผิดชอบวัสดุ
แนะนำ:
ช่างแกะสลักบาร์โค้ดของ Apple (Photonics Hackathon Phablabs): 3 ขั้นตอน
Apple Barcode Engraver (Photonics Hackathon Phablabs): สวัสดีทุกคน ในฐานะส่วนหนึ่งของความท้าทาย Phablabs Photonics ของเรา เราถูกขอให้สร้างอุปกรณ์ที่สามารถเปลี่ยนสติกเกอร์บนผลไม้ได้ คุณเกลียดสติกเกอร์ผลไม้ด้วยหรือไม่ และคุณต้องการที่จะทำการเปลี่ยนแปลงที่เป็นมิตรต่อสิ่งแวดล้อมหรือไม่? แล้วเราอยากจะอิน
แผ่นโฮโลแกรม - Photonics Challenger Hackathon PhabLabs: 6 Steps
แผ่นโฮโลแกรม - Photonics Challenger Hackathon PhabLabs: เมื่อต้นปีนี้ ฉันถูกขอให้เข้าร่วม PhabLabs Photonics Hackathon ที่ Science Center Delft ในเนเธอร์แลนด์ ที่นี่พวกเขามีพื้นที่ทำงานที่ยอดเยี่ยมพร้อมเครื่องจักรมากมายที่สามารถใช้สร้างบางสิ่งที่ปกติ
"Ready Maker" - ควบคุมโครงการ "Lego Power Functions": 9 ขั้นตอน
"Ready Maker" - ควบคุมโครงการ "Lego Power Functions": เรียนรู้วิธีควบคุม Lego "ฟังก์ชั่นพลังงาน" ส่วนประกอบด้วยบอร์ด Arduino และสร้างโครงการของคุณใน "Ready Maker" ตัวแก้ไข (ไม่ต้องใช้รหัส) เพื่อควบคุมโมเดลของคุณจากระยะไกล
SMART FISH FEEDER "DOMOVOY": 5 ขั้นตอน (พร้อมรูปภาพ)
เครื่องให้อาหารปลาอัจฉริยะ "DOMOVOY": เครื่องป้อน "DOMOVOY" ออกแบบมาเพื่อให้อาหารปลาในตู้อัตโนมัติตามกำหนดเวลา คุณสมบัติ: ออกแบบมาเพื่อให้อาหารปลาในตู้อัตโนมัติ ให้อาหารตามเวลาที่กำหนดอัลกอริธึมพิเศษป้องกันการติดขัดของฟีด พารามิเตอร์สามารถเปลี่ยนแปลงได้
HC - 06 (Slave Module) การเปลี่ยน " NAME " โดยไม่ต้องใช้ " Monitor Serial Arduino " ที่ " ใช้งานได้ง่าย ": Faultless Way !: 3 ขั้นตอน
HC - 06 (Slave Module) การเปลี่ยน " NAME " โดยไม่ต้องใช้ " Monitor Serial Arduino "… ที่ " ใช้งานได้ง่าย ": Faultless Way !: After " นาน " ลองเปลี่ยนชื่อเป็น HC - 06 (โมดูลทาส) โดยใช้ " จอภาพอนุกรมของ Arduino โดยไม่มี " สำเร็จ " ฉันพบวิธีง่ายๆ อีกวิธีหนึ่งแล้ว ฉันกำลังแบ่งปันตอนนี้ ! ขอให้สนุกนะเพื่อน