Kazalo:

Predal za inventar "Hackathon Qualcomm17 pametnih mest": 13 korakov
Predal za inventar "Hackathon Qualcomm17 pametnih mest": 13 korakov

Video: Predal za inventar "Hackathon Qualcomm17 pametnih mest": 13 korakov

Video: Predal za inventar
Video: Вебинар: Маркировка молочной продукции. Ввод в оборот и агрегация с помощью ПО DataMobile 2024, Julij
Anonim
Predal za zaloge
Predal za zaloge

V naslednjem dokumentu si lahko ogledate postopek izdelave in programiranja inteligentnega predala. Ta predal je bil programiran v Dragon Board 410c z namenom izboljšanja kakovosti mest. Projekt je del natečaja »Hackathon pametnih mest Qualcomm 17«.

Ideja o tem projektu se je začela s problemom, ki ga vidi le malo ljudi, to je izgubljeno in slabo upravljanje orodij in materiala, ki ga ponujajo podjetja, kot so tovarne in celo bolnišnice. V teh krajih so delavcem na voljo nekateri materiali in orodja za opravljanje dejavnosti, zato je treba ta material in orodje ponovno uporabiti, ker so dragi ali zaradi pomanjkanja ekonomskih virov za njihovo zamenjavo.

V bolnišnicah obstajajo ljudje, ki prevzamejo nadzor nad odstranjenimi materiali, ko pa pride do človeškega posredovanja, pride do napake, ki lahko povzroči nepotrebne stroške. Najboljša rešitev tega problema je inteligenten predal, ki lahko vzdržuje popis predmetov, ki so izposojeni in vrnjeni, hkrati pa ve, kdo je odgovoren.

1. korak: Materiali

Za projekt je potreben naslednji material: 1 x Dragon Board 410c

1 x senzorska vmesna plošča 96 za Dragon Board 410c

1 x Ogledna plošča

1 x MDF (vlaknena plošča srednje gostote) 61 x 122 cm

5 x senzor CNY 70

1 X TIP31B

1x elektromagnet

1 x 7408

1 x tipkovnica

1x zaslon

3 x vijaki

Odpornosti (raznolikost)

Bakrene žice

Lepilo

Vrtalnik

2. korak: Kose za predal izrežite v MDF. (Za boljše rezultate uporabite laserski rezalnik)

Kose za predal izrežite v MDF. (Za boljše rezultate uporabite laserski rezalnik)
Kose za predal izrežite v MDF. (Za boljše rezultate uporabite laserski rezalnik)

3. korak: Prilepite vse kose skupaj, da oblikujete predal z dvema majhnima predaloma in velikim

4. korak: Vijake privijte sredi vsakega predala

Vijake privijte sredi vsakega predala
Vijake privijte sredi vsakega predala

5. korak: S svedrom naredite luknje skozi predal na zadnji strani, mora biti luknja velikosti senzorja

S svedrom naredite luknje skozi predal na zadnji strani, mora biti luknja velikosti senzorja
S svedrom naredite luknje skozi predal na zadnji strani, mora biti luknja velikosti senzorja

Korak 6: Vsak senzor zavarite 70 CNY z bakrenimi žicami. (ponovite 4 -krat več)

Zvarite vsak senzor CNY 70 z bakrenimi žicami. (ponovite 4 -krat več)
Zvarite vsak senzor CNY 70 z bakrenimi žicami. (ponovite 4 -krat več)

7. korak: Za senzor se uporablja posebno vezje

Za senzor se uporablja posebno vezje
Za senzor se uporablja posebno vezje

8. korak: Mezzanin senzorja priključite na Dragon Board 410c. (uporablja se za dostop do GPIO)

Mezzanin senzorja priključite na Dragon Board 410c. (uporablja se za dostop do GPIO)
Mezzanin senzorja priključite na Dragon Board 410c. (uporablja se za dostop do GPIO)

Zelo pomembno je, da ta korak naredite z odstranjeno zmajevo ploščo, če ne, lahko zažge, poleg tega pa morate vse PIN pravilno namestiti.

9. korak: Povežite vezje s ploščice na medetažo

Priključite vezje s plošče na medetažo
Priključite vezje s plošče na medetažo
Povežite vezje s plošče na medetažo
Povežite vezje s plošče na medetažo
Priključite vezje s plošče na medetažo
Priključite vezje s plošče na medetažo
Povežite vezje s plošče na medetažo
Povežite vezje s plošče na medetažo

10. korak: Napišite ali kopirajte kodo

#include #include #include // #include

#include "libsoc_gpio.h"

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

/ * Ta del kode spodaj omogoča, da ta primer deluje na vseh 96 ploščah */

nepodpisana int LED_1; // elektro iman

unsigned int BUTTON_1; // prvi senzor

unsigned int BUTTON_2; // drugi senzor unsigned int BUTTON_3; // zapreti brez podpisa int BUTTON_4; // tretji senzor

struct User {

uporabniško ime char [20]; geslo char [20]; } Uporabnik;

struct Database {

char Article_Name [20]; char Lokacija [20]; } Baza podatkov;

int senzor1;

int senzor2; int senzor3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

uporabniško ime char [50];

geslo char [50];

char DaNe [40];

FILE *pFILE;

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

int teče = 1;

_attribute _ ((konstruktor)) static void _init ()

{board_config *config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // senzor pesti BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // drugi senzor BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // zaprite omaro BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // tretji senzor // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");

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

libsoc_board_free (config); } / * Konec posebne plošče 96Boards * /

int main ()

{gpio *led_1, *button_1, *button_2, *button_3, *button_4; // int dotik; uporabnica struct Karina; struct User Manager; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina.password, "Taller Vertical"); strcpy (Manager.username, "Šef"); strcpy (geslo za upravitelja, "ITESM"); struct Database Tool; struct Database Pen; struct Database Case; strcpy (Tool. Article_Name, "Orodje"); struct Database Tool; struct Database Pen; struct Database Case; strcpy (Tool. Article_Name, "Orodje"); 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))

{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; } senzor1 = libsoc_gpio_get_level (gumb_1); senzor2 = libsoc_gpio_get_level (gumb_2); senzor3 = libsoc_gpio_get_level (gumb_4); senzor1_zadnje stanje = senzor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Nahaja se na stojalu"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Nikoli postavljeno v to omaro"); } if (sensor2 == 1) {strcpy (Pen. Location, "Nahaja se na stojalu"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Nikoli postavljeno v to omaro"); } if (sensor3 == 1) {strcpy (Case. Location, "Nahaja se na stojalu"); } else if (sensor3 == 0) {strcpy (Case. Location, "Nikoli postavljeno v to omaro"); } med (tekom) {libsoc_gpio_set_level (led_1, HIGH); printf ("Prosimo, vnesite uporabniško ime:"); scanf ("%s", uporabniško ime); printf ("Prosimo, vnesite geslo:"); scanf ("%s", geslo); if (strcmp (uporabniško ime, "Karina") == 0 && strcmp (geslo, "višje") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, NIZKA); medtem ko (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1); senzor2 = libsoc_gpio_get_level (gumb_2); senzor3 = libsoc_gpio_get_level (gumb_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, "Nahaja se na stojalu"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Nahaja se na stojalu"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Nahaja se na stojalu"); }} else if (strcmp (username, "Boss") == 0 && strcmp (password, "ITESM") == 0) {printf ("Ali želite ustvariti besedilno datoteko z bazo podatkov? [Da/Ne] "); scanf ("%s", DaNe); if ((strcmp (DaNe, Da) == 0)) {// Uporabnik_upravitelja (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "%s", "-------- Baza podatkov Rack ----- / n"); fprintf (pFILE, "%s", "Ime članka:"); fprintf (pFILE, "%s", Tool. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Lokacija članka:"); fprintf (pFILE, "%s", Tool. Location); fprintf (pFILE, "%s", "\ n"); fprintf (pFILE, "%s", "Ime članka:"); fprintf (pFILE, "%s", Pen. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Lokacija članka:"); fprintf (pFILE, "%s", Pen. Location); fprintf (pFILE, "%s", "\ n");

fprintf (pFILE, "%s", "Ime članka:");

fprintf (pFILE, "%s", Case. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Lokacija članka:"); fprintf (pFILE, "%s", Case. Location); fprintf (pFILE, "%s", "\ n");

fclose (pFILE);

}

printf ("Dostop zavrnjen / n");

}} fail: if (led_1 || button_1 || button_2 || button_3) {printf ("uveljavi napako vira gpio! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (button_1); libsoc_gpio_free (button_2); libsoc_gpio_free (gumb_3); }

11. korak: Zaženite program

12. korak: Zaključki

Projekt ima obetavno prihodnost, saj se lahko na zelo učinkovit način izboljša, senzorje je mogoče zamenjati za oznake RFID, hkrati pa je z RFID mogoče uporabiti osebne izkaznice za spremljanje, kdo je odgovoren za material.

Priporočena: