Cuprins:

Sertar de inventar „Smart Cities Hackathon Qualcomm17”: 13 pași
Sertar de inventar „Smart Cities Hackathon Qualcomm17”: 13 pași

Video: Sertar de inventar „Smart Cities Hackathon Qualcomm17”: 13 pași

Video: Sertar de inventar „Smart Cities Hackathon Qualcomm17”: 13 pași
Video: CS50 2015 - Week 9, continued 2024, Iulie
Anonim
Sertar de inventar
Sertar de inventar

În documentul următor, puteți vedea procesul de construcție și programare a unui sertar inteligent. Acest sertar a fost programat într-un Dragon Board 410c, cu scopul de a îmbunătăți calitatea orașelor. Proiectul face parte din concursul „smart cities hackathon Qualcomm 17”.

Ideea acestui proiect a început cu o problemă pe care o văd foarte puțini oameni, care este gestionarea pierdută și proastă a sculelor și a materialelor furnizate de companii precum fabrici și chiar spitale. În aceste locuri, unele materiale și instrumente sunt puse la dispoziția lucrătorilor pentru a desfășura activități, acest material și instrumente trebuie refolosite deoarece sunt scumpe sau lipsa resurselor economice care să le înlocuiască.

În spitale, există oameni care preiau controlul asupra materialelor care sunt îndepărtate, dar atunci când există o intervenție umană există eroarea, care poate duce la cheltuieli inutile. Cea mai bună soluție la această problemă este un sertar inteligent capabil să mențină un inventar al obiectelor care sunt împrumutate și returnate și, în același timp, să știe cine este responsabilul.

Pasul 1: Materiale

Materialul necesar pentru proiect este următorul: 1 x Dragon Board 410c

1 x senzor Mezzanine 96 plăci pentru Dragon Board 410c

1 x panou de pâine

1 x foaie MDF (fibră de densitate medie) 61 x 122 cms

5 x senzor CNY 70

1 X TIP31B

1 x electromagnet

1 x 7408

1 x tastatură

1 x ecran

3 x șuruburi

Rezistențe (varietate)

Sârme de cupru

Lipici

Burghiu

Pasul 2: Tăiați piesele pentru sertar în MDF. (Pentru rezultate mai bune, utilizați un tăietor cu laser)

Tăiați piesele pentru sertar în MDF. (Pentru rezultate mai bune, utilizați un tăietor cu laser)
Tăiați piesele pentru sertar în MDF. (Pentru rezultate mai bune, utilizați un tăietor cu laser)

Pasul 3: lipiți toate piesele împreună pentru a forma un sertar cu două sertare mici și unul mare

Pasul 4: Înșurubați șuruburile în mijlocul fiecărui sertar

Înșurubați șuruburile în mijlocul fiecărui sertar
Înșurubați șuruburile în mijlocul fiecărui sertar

Pasul 5: Cu burghiul, faceți găuri prin sertarul din partea din spate, gaura trebuie să aibă dimensiunea senzorului

Cu burghiul, faceți găuri prin sertarul din partea din spate, gaura trebuie să aibă dimensiunea senzorului
Cu burghiul, faceți găuri prin sertarul din partea din spate, gaura trebuie să aibă dimensiunea senzorului

Pasul 6: Sudați fiecare senzor CNY 70 cu firele de cupru. (repetă de 4 ori mai mult)

Sudați fiecare senzor CNY 70 cu firele de cupru. (repetă de 4 ori mai mult)
Sudați fiecare senzor CNY 70 cu firele de cupru. (repetă de 4 ori mai mult)

Pasul 7: Se utilizează un circuit special pentru senzor

Pentru senzor se folosește un circuit special
Pentru senzor se folosește un circuit special

Pasul 8: Conectați mezaninul senzorului la Dragon Board 410c. (folosit pentru a accesa GPIO)

Conectați mezaninul senzorului la Dragon Board 410c. (folosit pentru a accesa GPIO)
Conectați mezaninul senzorului la Dragon Board 410c. (folosit pentru a accesa GPIO)

Este foarte important ca acest pas să fie făcut cu placa dragonului oprită, dacă nu, poate arde, în afară de toate, PIN-ul trebuie să fie plasat corect.

Pasul 9: Conectați circuitul de la panou la mezanin

Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin
Conectați circuitul de la panou la mezanin

Pasul 10: Scrieți sau copiați codul

#include #include #include // # include

#include "libsoc_gpio.h"

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

/ * Acest bit de cod de mai jos face ca acest exemplu să funcționeze pe toate cele 96 de plăci * /

unsigned int LED_1; // electro iman

unsigned int BUTTON_1; // primul senzor

unsigned int BUTTON_2; // al doilea senzor unsigned int BUTTON_3; // închide unsigned int BUTTON_4; // al treilea senzor

struct Utilizator {

numele de utilizator char [20]; parola char [20]; }Utilizator;

struct Database {

char Article_Name [20]; char Location [20]; }Bază de date;

int senzor1;

int senzor2; int sensor3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

numele de utilizator char [50];

parola char [50];

char Da Nu [40];

FIȘIER * pFILE;

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

int rulare = 1;

_attribute _ ((constructor)) static void _init ()

{board_config * config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // senzor de pumn BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // al doilea senzor BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // închideți raftul BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // al treilea senzor // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");

LED_1 = libsoc_board_gpio_id (config, "GPIO-E"); // electro iman

libsoc_board_free (config); } / * Sfârșitul codului special 96Boards * /

int main ()

{gpio * led_1, * button_1, * button_2, * button_3, * button_4; // int touch; struct Utilizator Karina; struct User Manager; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina.password, "Taller Vertical"); strcpy (Manager.username, „Șeful”); strcpy (Manager.password, "ITESM"); Instrumentul de baze de date struct; struct Database Pen; struct Case de date; strcpy (Tool. Article_Name, „Instrument”); Instrumentul de baze de date struct; struct Database Pen; struct Case de date; strcpy (Tool. Article_Name, „Instrument”); strcpy (Pen. Article_Name, „Pen”); strcpy (Case. Article_Name, „Caz”); libsoc_set_debug (0); led_1 = libsoc_gpio_request (LED_1, LS_SHARED); button_1 = libsoc_gpio_request (BUTTON_1, LS_SHARED); buton_2 = cerere libsoc_gpio_ (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))

{go fail; } libsoc_gpio_set_direction (led_1, OUTPUT); libsoc_gpio_set_direction (buton_1, INPUT); libsoc_gpio_set_direction (buton_2, INPUT); libsoc_gpio_set_direction (buton_3, INPUT); libsoc_gpio_set_direction (buton_4, INPUT); // libsoc_gpio_set_direction (buton_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)) {merge eșuat; } sensor1 = libsoc_gpio_get_level (button_1); senzor2 = libsoc_gpio_get_level (buton_2); sensor3 = libsoc_gpio_get_level (button_4); sensor1_last_state = senzor1; sensor2_last_state = senzor2; sensor3_last_state = senzor3; if (senzor1 == 1) {strcpy (Tool. Location, „Situat pe rack”); } else if (senzor1 == 0) {strcpy (Tool. Location, „Niciodată plasat în acest rack”); } if (senzor2 == 1) {strcpy (Pen. Location, „Situat pe rack”); } else if (senzor2 == 0) {strcpy (Pen. Location, „Niciodată plasat în acest rack”); } if (senzor3 == 1) {strcpy (Case. Location, „Situat pe rack”); } else if (senzor3 == 0) {strcpy (Case. Location, „Niciodată plasat în acest rack”); } în timp ce (rulează) {libsoc_gpio_set_level (led_1, HIGH); printf ("Vă rugăm să introduceți numele de utilizator:"); scanf („% s”, nume de utilizator); printf ("Vă rugăm să introduceți parola:"); scanf („% s”, parolă); if (strcmp (nume de utilizator, "Karina") == 0 && strcmp (parola, "Taller") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, LOW); while (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1); senzor2 = libsoc_gpio_get_level (buton_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, "Situat pe rack"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Situat pe rack"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Situat pe rack"); }} else if (strcmp (nume de utilizator, "Boss") == 0 && strcmp (parola, "ITESM") == 0) {printf ("Doriți să generați un fișier text cu baza de date? [Da / Nu] "); scanf („% s”, da nu); if ((strcmp (YesNo, Yes) == 0)) {// Manager_user (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "% s", "-------- Rack's Database ----- / n"); fprintf (pFILE, "% s", "Numele articolului:"); fprintf (pFILE, "% s", Tool. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Locația articolului:"); fprintf (pFILE, "% s", Tool. Location); fprintf (pFILE, "% s", "\ n"); fprintf (pFILE, "% s", "Numele articolului:"); fprintf (pFILE, "% s", Pen. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Locația articolului:"); fprintf (pFILE, "% s", Pen. Location); fprintf (pFILE, "% s", "\ n");

fprintf (pFILE, "% s", "Numele articolului:");

fprintf (pFILE, "% s", Case. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Locația articolului:"); fprintf (pFILE, "% s", Case. Location); fprintf (pFILE, "% s", "\ n");

fclose (pFILE);

}

printf ("Acces refuzat / n");

}} fail: if (led_1 || button_1 || button_2 || button_3) {printf ("aplicați resursa gpio fail! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (buton_1); libsoc_gpio_free (buton_2); libsoc_gpio_free (buton_3); }

Pasul 11: Rulați programul

Pasul 12: Concluzii

Proiectul are un viitor promițător, deoarece se poate îmbunătăți într-un mod foarte eficient, senzorii pot fi schimbați pentru etichetele RFID și în același timp cu RFID este posibilă utilizarea cardurilor de identificare pentru a monitoriza cine este responsabil de material.

Recomandat: