Índice:

Gaveta de inventário "Smart Cities Hackathon Qualcomm17": 13 etapas
Gaveta de inventário "Smart Cities Hackathon Qualcomm17": 13 etapas

Vídeo: Gaveta de inventário "Smart Cities Hackathon Qualcomm17": 13 etapas

Vídeo: Gaveta de inventário
Vídeo: Tire suas dúvidas sobre o fim do estoque de IPv4 na América Latina 2024, Julho
Anonim
Gaveta de Estoque
Gaveta de Estoque

No próximo documento, você confere o processo de construção e programação de uma gaveta inteligente. Esta gaveta foi programada em Dragon Board 410c, com o objetivo de melhorar a qualidade das cidades. O projeto faz parte do concurso “smart cities hackathon Qualcomm 17”.

A ideia deste projeto começou com um problema que poucas pessoas veem, que é a perda e má gestão de ferramentas e materiais que são fornecidos por empresas como fábricas e até hospitais. Nesses locais, alguns materiais e ferramentas são fornecidos aos trabalhadores para a realização das atividades, esses materiais e ferramentas devem ser reaproveitados por serem caros ou pela falta de recursos econômicos para substituí-los.

Nos hospitais, há pessoas que assumem o controle dos materiais que são retirados, mas quando há intervenção humana há o erro, que pode levar a gastos desnecessários. A melhor solução para este problema é uma gaveta inteligente, capaz de manter um inventário dos objetos emprestados e devolvidos e ao mesmo tempo saber quem é o responsável.

Etapa 1: Materiais

O material necessário para o projeto é o seguinte: 1 x Dragon Board 410c

1 x sensor Mezanino 96 placas para Dragon Board 410c

1 x tábua de pão

1 x folha de MDF (painel de fibra de densidade média) 61 x 122 cms

5 x sensor CNY 70

1 X TIP31B

1 x eletroímã

1 x 7408

1 x teclado

1 x tela

3 x parafusos

Resistências (variedade)

Fios de cobre

Cola

Furar

Passo 2: Corte as peças da gaveta no MDF. (Para melhores resultados, use um cortador a laser)

Corte as peças para a gaveta no MDF. (Para melhores resultados, use um cortador a laser)
Corte as peças para a gaveta no MDF. (Para melhores resultados, use um cortador a laser)

Passo 3: Cole todas as peças juntas para formar uma gaveta com duas gavetas pequenas e uma grande

Etapa 4: aparafuse os parafusos no meio de cada gaveta

Aparafuse os parafusos no meio de cada gaveta
Aparafuse os parafusos no meio de cada gaveta

Etapa 5: com a broca faça furos na gaveta na parte de trás, o furo deve ter o tamanho do sensor

Com a broca faça furos na gaveta na parte de trás, o furo deve ter o tamanho do sensor
Com a broca faça furos na gaveta na parte de trás, o furo deve ter o tamanho do sensor

Etapa 6: soldar cada sensor CNY 70 com os fios de cobre. (repetir 4 vezes mais)

Solde cada sensor CNY 70 com os fios de cobre. (repetir 4 vezes mais)
Solde cada sensor CNY 70 com os fios de cobre. (repetir 4 vezes mais)

Etapa 7: um circuito especial é usado para o sensor

Um circuito especial é usado para o sensor
Um circuito especial é usado para o sensor

Etapa 8: Conecte o Mezanino do Sensor ao Dragon Board 410c. (usado para acessar o GPIO)

Conecte o Mezanino do Sensor ao Dragon Board 410c. (usado para acessar o GPIO)
Conecte o Mezanino do Sensor ao Dragon Board 410c. (usado para acessar o GPIO)

É muito importante que esta etapa seja feita com a dragon board desligada, caso contrário ela pode queimar, além de todo o PIN precisar ser colocado corretamente.

Etapa 9: conectar o circuito da placa de ensaio ao mezanino

Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino
Conecte o circuito da placa de ensaio ao mezanino

Etapa 10: Escreva ou copie o código

#include #include #include // # include

#include "libsoc_gpio.h"

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

/ * Este trecho de código abaixo faz com que este exemplo funcione em todos os 96Boards * /

unsigned int LED_1; // electro iman

unsigned int BUTTON_1; // primeiro sensor

unsigned int BUTTON_2; // segundo sensor unsigned int BUTTON_3; // feche unsigned int BUTTON_4; // terceiro sensor

struct User {

nome de usuário char [20]; senha char [20]; }Do utilizador;

struct Database {

char Article_Name [20]; Localização char [20]; }Base de dados;

int sensor1;

int sensor2; int sensor3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

nome de usuário char [50];

senha do char [50];

char Sim Não [40];

ARQUIVO * pFILE;

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

execução interna = 1;

_attribute _ ((construtor)) static void _init ()

{board_config * config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // sensor de punhos BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // segundo sensor BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // fecha o rack BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // terceiro sensor // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");

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

libsoc_board_free (config); } / * Fim do código especial 96Boards * /

int main ()

{gpio * led_1, * button_1, * button_2, * button_3, * button_4; // int touch; struct User Karina; struct User Manager; strcpy (Karina.nomedeusuario, "Karina Valverde"); strcpy (Karina.password, "Taller Vertical"); strcpy (Manager.username, "The Boss"); strcpy (Manager.password, "ITESM"); Ferramenta de banco de dados struct; struct Database Pen; struct caso de banco de dados; strcpy (Tool. Article_Name, "Tool"); Ferramenta de banco de dados struct; struct Database Pen; struct caso de banco de dados; strcpy (Tool. Article_Name, "Tool"); strcpy (Caneta. Nome do artigo, "Caneta"); 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))

{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)! = SAÍDA)

|| (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, "Localizado no rack"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Nunca colocado neste Rack"); } if (sensor2 == 1) {strcpy (Pen. Location, "Localizado no rack"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Nunca colocado neste Rack"); } if (sensor3 == 1) {strcpy (Case. Location, "Localizado no rack"); } else if (sensor3 == 0) {strcpy (Case. Location, "Nunca colocado neste Rack"); } enquanto (executando) {libsoc_gpio_set_level (led_1, HIGH); printf ("Por favor, insira o nome de usuário:"); scanf ("% s", nome de usuário); printf ("Digite a senha:"); scanf ("% s", senha); if (strcmp (nome de usuário, "Karina") == 0 && strcmp (senha, "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); 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, "Localizado no rack"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Localizado no rack"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Localizado no rack"); }} else if (strcmp (username, "Boss") == 0 && strcmp (password, "ITESM") == 0) {printf ("Deseja gerar um arquivo de texto com o banco de dados? [Sim / Não] "); scanf ("% s", Sim Não); if ((strcmp (YesNo, Yes) == 0)) {// Manager_user (pFILE); pFILE = fopen ("Banco de dados.txt", "w"); fprintf (pFILE, "% s", "-------- Banco de dados do Rack ----- / n"); fprintf (pFILE, "% s", "Nome do artigo:"); fprintf (pFILE, "% s", Tool. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Localização do artigo:"); fprintf (pFILE, "% s", Tool. Location); fprintf (pFILE, "% s", "\ n"); fprintf (pFILE, "% s", "Nome do artigo:"); fprintf (pFILE, "% s", Pen. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Localização do artigo:"); fprintf (pFILE, "% s", Pen. Location); fprintf (pFILE, "% s", "\ n");

fprintf (pFILE, "% s", "Nome do artigo:");

fprintf (pFILE, "% s", Case. Article_Name); fprintf (pFILE, "% s", "\ t"); fprintf (pFILE, "% s", "Localização do artigo:"); fprintf (pFILE, "% s", Case. Location); fprintf (pFILE, "% s", "\ n");

fclose (pFILE);

}

printf ("Acesso negado / n");

}} falha: if (led_1 || button_1 || button_2 || button_3) {printf ("falha de aplicação GPIO! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (button_1); libsoc_gpio_free (button_2); libsoc_gpio_free (button_3); }

Etapa 11: execute o programa

Etapa 12: Conclusões

O projeto tem um futuro promissor, pois pode melhorar de forma muito eficaz, os sensores podem ser trocados por tags RFID´S e ao mesmo tempo com o RFID é possível usar cartões de identificação para monitorar quem é o responsável pelo material.

Recomendado: