Mục lục:

Ngăn kiểm kê "Smart Cities Hackathon Qualcomm17": 13 bước
Ngăn kiểm kê "Smart Cities Hackathon Qualcomm17": 13 bước

Video: Ngăn kiểm kê "Smart Cities Hackathon Qualcomm17": 13 bước

Video: Ngăn kiểm kê
Video: 🔴 Công thức Quản Lý Tiền Bạc HAY XUẤT SẮC và THÔNG MINH 2024, Tháng bảy
Anonim
Ngăn kéo hàng tồn kho
Ngăn kéo hàng tồn kho

Trong tài liệu tiếp theo, bạn có thể xem quá trình xây dựng và lập trình của một ngăn kéo thông minh. Ngăn kéo này được lập trình trong Dragon Board 410c, với mục đích nâng cao chất lượng của các thành phố. Dự án là một phần của cuộc thi “hackathon thành phố thông minh Qualcomm 17”.

Ý tưởng của dự án này bắt đầu từ một vấn đề mà rất ít người nhìn thấy, đó là việc quản lý thất lạc và tồi tệ các công cụ và vật liệu được cung cấp bởi các công ty như nhà máy và thậm chí bệnh viện. Ở những nơi này, một số vật liệu và công cụ được cung cấp cho người lao động để thực hiện các hoạt động, vật liệu và công cụ này phải được sử dụng lại vì chúng đắt tiền hoặc thiếu nguồn lực kinh tế để thay thế chúng.

Trong bệnh viện, có người kiểm soát những vật liệu được lấy ra, nhưng khi có sự can thiệp của con người sẽ xảy ra sai sót, có thể dẫn đến những chi phí phát sinh không đáng có. Giải pháp tốt nhất cho vấn đề này là một ngăn kéo thông minh có khả năng duy trì một kho đồ vật được mượn và trả lại, đồng thời biết ai là người chịu trách nhiệm.

Bước 1: Vật liệu

Vật liệu cần thiết cho dự án là loại tiếp theo: 1 x Dragon Board 410c

1 x Bộ cảm biến Mezzanine 96 Bo mạch cho Dragon Board 410c

1 x Breadboard

1 x tấm MDF (Tấm sợi quang mật độ trung bình) 61 x 122 cms

5 x cảm biến CNY 70

1 X MẸO31B

1 x nam châm điện

1 x 7408

1 x Bàn phím

1 x màn hình

3 x vít

Sức đề kháng (đa dạng)

Dây đồng

Keo dính

Máy khoan

Bước 2: Cắt các miếng cho ngăn kéo trong MDF. (Để có kết quả tốt hơn, hãy sử dụng máy cắt laser)

Cắt các miếng cho ngăn kéo trong MDF. (Để có kết quả tốt hơn, hãy sử dụng máy cắt laser)
Cắt các miếng cho ngăn kéo trong MDF. (Để có kết quả tốt hơn, hãy sử dụng máy cắt laser)

Bước 3: Dán tất cả các mảnh lại với nhau để tạo thành một ngăn kéo với hai ngăn kéo nhỏ và một ngăn kéo lớn

Bước 4: Vặn các vít ở giữa mỗi ngăn kéo

Vặn các vít ở giữa mỗi ngăn kéo
Vặn các vít ở giữa mỗi ngăn kéo

Bước 5: Với Máy khoan Tạo lỗ Qua Ngăn kéo ở Mặt sau, Lỗ phải có Kích thước của Cảm biến

Với Máy khoan Tạo lỗ Thông qua Ngăn kéo ở Mặt sau, Lỗ phải có Kích thước của Cảm biến
Với Máy khoan Tạo lỗ Thông qua Ngăn kéo ở Mặt sau, Lỗ phải có Kích thước của Cảm biến

Bước 6: Hàn từng bộ cảm biến 70 CNY với dây đồng. (lặp lại 4 lần nhiều hơn)

Hàn mỗi cảm biến 70 CNY với dây đồng. (lặp lại 4 lần nhiều hơn)
Hàn mỗi cảm biến 70 CNY với dây đồng. (lặp lại 4 lần nhiều hơn)

Bước 7: Một mạch đặc biệt được sử dụng cho cảm biến

Một mạch đặc biệt được sử dụng cho cảm biến
Một mạch đặc biệt được sử dụng cho cảm biến

Bước 8: Kết nối Gác lửng cảm biến với Bảng rồng 410c. (được sử dụng để truy cập GPIO)

Kết nối Gác lửng cảm biến với Bảng rồng 410c. (được sử dụng để truy cập GPIO)
Kết nối Gác lửng cảm biến với Bảng rồng 410c. (được sử dụng để truy cập GPIO)

Điều rất quan trọng là bước này phải được thực hiện với bàn cờ rồng, nếu không nó có thể bị cháy, ngoài ra tất cả các mã PIN cần phải được đặt chính xác.

Bước 9: Kết nối mạch từ Breadboard đến Mezzanine

Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine
Kết nối mạch từ Breadboard đến Mezzanine

Bước 10: Viết hoặc sao chép mã

#include #include #include // # bao gồm

#include "libsoc_gpio.h"

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

/ * Đoạn mã dưới đây làm cho ví dụ này hoạt động trên tất cả 96Boards * /

không dấu int LED_1; // điện tử iman

unsigned int BUTTON_1; // cảm biến đầu tiên

unsigned int BUTTON_2; // cảm biến thứ hai chưa ký int BUTTON_3; // đóng không dấu int BUTTON_4; // cảm biến thứ ba

struct Người dùng {

tên người dùng char [20]; mật khẩu char [20]; }Người sử dụng;

struct Cơ sở dữ liệu {

char Điều_kiện [20]; char Vị trí [20]; } Cơ sở dữ liệu;

int cảm biến1;

int cảm biến2; int cảm biến3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

tên người dùng char [50];

mật khẩu char [50];

char YesNo [40];

TẬP TIN * pFILE;

char Có [20] = {"Có"};

int running = 1;

_attribute _ ((hàm tạo)) static void _init ()

{board_config * config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // nắm tay cảm biến BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // cảm biến thứ hai BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // đóng giá đỡ BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // cảm biến thứ ba // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");

LED_1 = libsoc_board_gpio_id (cấu hình, "GPIO-E"); // điện tử iman

libsoc_board_free (cấu hình); } / * Mã đặc biệt cuối 96 Thẻ * /

int main ()

{gpio * led_1, * button_1, * button_2, * button_3, * button_4; // int touch; struct Người dùng Karina; struct Trình quản lý người dùng; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina.password, "Cao hơn theo chiều dọc"); strcpy (Tên người quản lý, "Ông chủ"); strcpy (Manager.password, "ITESM"); Công cụ cơ sở dữ liệu struct; struct Cơ sở dữ liệu Pen; struct Cơ sở dữ liệu Case; strcpy (Tool. Article_Name, "Công cụ"); Công cụ cơ sở dữ liệu struct; struct Cơ sở dữ liệu Pen; struct Cơ sở dữ liệu Case; strcpy (Tool. Article_Name, "Công cụ"); strcpy (Pen. Article_Name, "Pen"); strcpy (Case. Article_Name, "Trường hợp"); 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))

{goto fail; } libsoc_gpio_set_direction (led_1, OUTPUT); 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);

if ((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)) {goto fail; } 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 = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Nằm trên Rack"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Chưa bao giờ được đặt trong Rack này"); } if (sensor2 == 1) {strcpy (Pen. Location, "Nằm trên Rack"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Không bao giờ được đặt trong Rack này"); } if (sensor3 == 1) {strcpy (Case. Location, "Nằm trên Rack"); } else if (sensor3 == 0) {strcpy (Case. Location, "Không bao giờ được đặt trong Rack này"); } while (đang chạy) {libsoc_gpio_set_level (led_1, HIGH); printf ("Vui lòng nhập tên người dùng:"); scanf ("% s", tên người dùng); printf ("Vui lòng nhập mật khẩu:"); scanf ("% s", mật khẩu); if (strcmp (tên người dùng, "Karina") == 0 && strcmp (mật khẩu, "Cao hơn") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, THẤP); while (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); if (sensor1 == 1 && sensor1! = sensor1_last_state) {strcpy (Tool. Location, Karina.username); } else if (sensor1 == 0 && sensor1! = sensor1_last_state) {strcpy (Tool. Location, "Nằm trên Rack"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Nằm trên Rack"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Nằm trên Rack"); }} else if (strcmp (tên người dùng, "Boss") == 0 && strcmp (mật khẩu, "ITESM") == 0) {printf ("Bạn có muốn tạo tệp văn bản với cơ sở dữ liệu không? [Có / Không] "); scanf ("% s", YesNo); if ((strcmp (YesNo, Yes) == 0)) {// Manager_user (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "% s", "-------- Cơ sở dữ liệu của Rack ----- / n"); fprintf (pFILE, "% s", "Tên bài viết:"); fprintf (pFILE, "% s", Tool. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Vị trí của Bài viết:"); fprintf (pFILE, "% s", Tool. Location); fprintf (pFILE, "% s", "\ n"); fprintf (pFILE, "% s", "Tên bài viết:"); fprintf (pFILE, "% s", Pen. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Vị trí của Bài viết:"); fprintf (pFILE, "% s", Pen. Location); fprintf (pFILE, "% s", "\ n");

fprintf (pFILE, "% s", "Tên bài viết:");

fprintf (pFILE, "% s", Case. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Vị trí của Bài viết:"); fprintf (pFILE, "% s", Case. Location); fprintf (pFILE, "% s", "\ n");

fclose (pFILE);

}

printf ("Truy cập Bị Từ chối / n");

}} fail: if (led_1 || button_1 || button_2 || button_3) {printf ("áp dụng tài nguyên gpio fail! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (button_1); libsoc_gpio_free (button_2); libsoc_gpio_free (button_3); }

Bước 11: Chạy chương trình

Bước 12: Kết luận

Dự án có một tương lai đầy hứa hẹn, vì nó có thể cải tiến theo cách rất hiệu quả, các cảm biến có thể được thay đổi cho các thẻ RFID´S và đồng thời với RFID, có thể sử dụng thẻ ID để theo dõi ai chịu trách nhiệm về tài liệu.

Đề xuất: