Taula de continguts:

Calaix d'inventari "Smart Cities Hackathon Qualcomm17": 13 passos
Calaix d'inventari "Smart Cities Hackathon Qualcomm17": 13 passos

Vídeo: Calaix d'inventari "Smart Cities Hackathon Qualcomm17": 13 passos

Vídeo: Calaix d'inventari
Vídeo: Обучение программированию с помощью хакатонов 2024, Desembre
Anonim
Calaix d’inventari
Calaix d’inventari

Al següent document, podeu veure el procés de construcció i programació d’un calaix intel·ligent. Aquest calaix es va programar en un Dragon Board 410c, amb la finalitat de millorar la qualitat de les ciutats. El projecte forma part del concurs "smart cities hackathon Qualcomm 17".

La idea d’aquest projecte va començar amb un problema que molt poca gent veu, que és la pèrdua i la mala gestió de les eines i el material que proporcionen empreses com fàbriques i fins i tot hospitals. En aquests llocs, es proporcionen alguns materials i eines als treballadors per fer activitats, aquest material i eines han de ser reutilitzats perquè són costosos o la manca de recursos econòmics per substituir-los.

Als hospitals, hi ha persones que prenen el control dels materials que s’eliminen, però quan hi ha una intervenció humana hi ha l’error, que pot comportar despeses innecessàries. La millor solució a aquest problema és un calaix intel·ligent capaç de mantenir un inventari d’objectes que es presten i retornen i, alhora, saber qui n’és el responsable.

Pas 1: materials

El material necessari per al projecte és el següent: 1 x Dragon Board 410c

1 x Sensor Mezzanine 96 taulers per a Dragon Board 410c

1 x Taula de pa

1 x full MDF (Tauler de fibres de densitat mitjana) 61 x 122 cms

5 x sensor CNY 70

1 X TIP31B

1 x electroimant

1 x 7408

1 x teclat

1 x pantalla

3 x cargols

Resistències (varietat)

Filferros de coure

Cola

Trepant

Pas 2: Tallar les peces del calaix al MDF. (Per obtenir millors resultats, utilitzeu un tallador làser)

Talla les peces del calaix al MDF. (Per obtenir millors resultats, utilitzeu un tallador làser)
Talla les peces del calaix al MDF. (Per obtenir millors resultats, utilitzeu un tallador làser)

Pas 3: enganxeu totes les peces juntes per formar un calaix amb dos calaixos petits i un de gran

Pas 4: cargoleu els cargols al centre de cada calaix

Cargoleu els cargols al centre de cada calaix
Cargoleu els cargols al centre de cada calaix

Pas 5: amb el trepant, feu forats a través del calaix a la part posterior, el forat ha de tenir la mida del sensor

Amb el trepant, feu forats a través del calaix a la part posterior, el forat ha de tenir la mida del sensor
Amb el trepant, feu forats a través del calaix a la part posterior, el forat ha de tenir la mida del sensor

Pas 6: soldeu cada sensor CNY 70 amb els cables de coure. (repeteix 4 vegades més)

Soldeu cada sensor CNY 70 amb els cables de coure. (repeteix 4 vegades més)
Soldeu cada sensor CNY 70 amb els cables de coure. (repeteix 4 vegades més)

Pas 7: s’utilitza un circuit especial per al sensor

S'utilitza un circuit especial per al sensor
S'utilitza un circuit especial per al sensor

Pas 8: connecteu el Sensor Mezzanine al Dragon Board 410c. (s'utilitza per accedir al GPIO)

Connecteu el Sensor Mezzanine al Dragon Board 410c. (s'utilitza per accedir al GPIO)
Connecteu el Sensor Mezzanine al Dragon Board 410c. (s'utilitza per accedir al GPIO)

És molt important que aquest pas es faci amb el tauler del drac apagat, si no, es pot cremar, a més, cal que es col·loqui correctament el PIN.

Pas 9: connecteu el circuit des de la taula de pa a l'entresòl

Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell
Connecteu el circuit des de la taula de pa a l’altell

Pas 10: escriviu o copieu el codi

#include #include #include // # include

#include "libsoc_gpio.h"

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

/ * Aquest bit de codi següent fa que aquest exemple funcioni a tots els 96 taulers * /

sense signar int LED_1; // electro iman

unsigned int BUTTON_1; // primer sensor

unsigned int BUTTON_2; // segon sensor unsigned int BUTTON_3; // tanca unsigned int BUTTON_4; // tercer sensor

struct Usuari {

nom d'usuari char [20]; contrasenya char [20]; } Usuari;

base de dades struct {

char Article_Name [20]; char Ubicació [20]; }Base de dades;

int sensor1;

int sensor2; int sensor3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

nom d'usuari char [50];

contrasenya char [50];

char Sí No [40];

FITXA * pFILE;

char Sí [20] = {"Sí"};

int running = 1;

_ atribut _ ((constructor)) static void _init ()

{board_config * config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // sensor de punys BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // segon sensor BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // tanca el bastidor BUTTON_4 = libsoc_board_gpio_id (configuració, "GPIO-B"); // tercer sensor // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");

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

libsoc_board_free (configuració); } / * Final del codi especial de 96 taulers * /

int main ()

{gpio * led_1, * button_1, * button_2, * button_3, * button_4; // int touch; struct Usuari Karina; struct User Manager; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina.password, "Taller Vertical"); strcpy (Manager.username, "El Cap"); strcpy (Manager.password, "ITESM"); Eina de base de dades struct; ploma de la base de dades struct; struct Base de dades; strcpy (Tool. Article_Name, "Eina"); Eina de base de dades struct; ploma de la base de dades struct; struct Base de dades; strcpy (Tool. Article_Name, "Eina"); strcpy (Pen. Article_Name, "Pen"); strcpy (Case. Article_Name, "Case"); 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))

{falla; } libsoc_gpio_set_direction (led_1, OUTPUT); libsoc_gpio_set_direction (botó_1, INPUT); libsoc_gpio_set_direction (botó_2, INPUT); libsoc_gpio_set_direction (botó_3, INPUT); libsoc_gpio_set_direction (botó_4, INPUT); // libsoc_gpio_set_direction (botó_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)) {falla; } sensor1 = libsoc_gpio_get_level (button_1); sensor2 = libsoc_gpio_get_level (botó_2); sensor3 = libsoc_gpio_get_level (botó_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Situat al bastidor"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Mai col·locat en aquest bastidor"); } if (sensor2 == 1) {strcpy (Pen. Location, "Situat al bastidor"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Mai col·locat en aquest bastidor"); } if (sensor3 == 1) {strcpy (Case. Location, "Situat al bastidor"); } else if (sensor3 == 0) {strcpy (Case. Location, "Mai col·locat en aquest bastidor"); } mentre (en execució) {libsoc_gpio_set_level (led_1, HIGH); printf ("Introduïu el nom d'usuari:"); scanf ("% s", nom d'usuari); printf ("Introduïu la contrasenya:"); scanf ("% s", contrasenya); if (strcmp (nom d'usuari, "Karina") == 0 && strcmp (contrasenya, "Taller") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, BAIX); while (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1); sensor2 = libsoc_gpio_get_level (botó_2); sensor3 = libsoc_gpio_get_level (botó_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 al bastidor"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Situat al bastidor"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Situat al bastidor"); }} else if (strcmp (nom d'usuari, "Cap") == 0 && strcmp (contrasenya, "ITESM") == 0) {printf ("Voleu generar un fitxer de text amb la base de dades? [Sí / No] "); scanf ("% s", Sí No); if ((strcmp (SíNo, Sí) == 0)) {// Administrador_usuari (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "% s", "-------- Base de dades de rack ----- / n"); fprintf (pFILE, "% s", "Nom de l'article:"); fprintf (pFILE, "% s", Tool. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Ubicació de l'article:"); fprintf (pFILE, "% s", Tool. Location); fprintf (pFILE, "% s", "\ n"); fprintf (pFILE, "% s", "Nom de l'article:"); fprintf (pFILE, "% s", Pen. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Ubicació de l'article:"); fprintf (pFILE, "% s", Pen. Location); fprintf (pFILE, "% s", "\ n");

fprintf (pFILE, "% s", "Nom de l'article:");

fprintf (pFILE, "% s", Case. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Ubicació de l'article:"); fprintf (pFILE, "% s", Case. Location); fprintf (pFILE, "% s", "\ n");

fclose (pFILE);

}

printf ("Accés denegat / n");

}} falla: if (led_1 || botó_1 || botó_2 || botó_3) {printf ("falla aplicar el recurs gpio! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (botó_1); libsoc_gpio_free (botó_2); libsoc_gpio_free (botó_3); }

Pas 11: executeu el programa

Pas 12: Conclusions

El projecte té un futur prometedor, ja que es pot millorar d’una manera molt eficaç, es poden canviar els sensors per etiquetes RFID i, al mateix temps, amb la RFID és possible utilitzar targetes d’identificació per controlar qui és el responsable del material.

Recomanat: