Cuprins:
- Pasul 1: Materiale
- Pasul 2: 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
- Pasul 5: 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)
- Pasul 7: Se utilizează un circuit special pentru senzor
- Pasul 8: Conectați mezaninul senzorului la Dragon Board 410c. (folosit pentru a accesa GPIO)
- Pasul 9: Conectați circuitul de la panou la mezanin
- Pasul 10: Scrieți sau copiați codul
- Pasul 11: Rulați programul
- Pasul 12: Concluzii
Video: Sertar de inventar „Smart Cities Hackathon Qualcomm17”: 13 pași
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Î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)
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
Pasul 5: 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)
Pasul 7: Se utilizează un circuit special pentru senzor
Pasul 8: 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
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.