Sadržaj:
- Korak 1: Materijali
- Korak 2: Izrežite komade za ladicu u MDF -u. (Za bolje rezultate upotrijebite laserski rezač)
- Korak 3: Zalijepite sve dijelove zajedno kako biste formirali ladicu s dvije male ladice i jednom velikom
- Korak 4: Zavijte vijke u sredini svake ladice
- Korak 5: Bušilicom napravite rupe kroz ladicu na stražnjoj strani, rupa mora biti veličine senzora
- Korak 6: Zavarite svaki senzor CNY 70 s bakrenim žicama. (ponovite još 4 puta)
- Korak 7: Za senzor se koristi poseban krug
- Korak 8: Povežite mezanin senzora na Dragon Board 410c. (koristi se za pristup GPIO -u)
- Korak 9: Spojite krug s pločice na međukat
- Korak 10: Napišite ili kopirajte kôd
- Korak 11: Pokrenite program
- Korak 12: Zaključci
Video: Ladica inventara "Hackathon pametnih gradova Qualcomm17": 13 koraka
2025 Autor: John Day | [email protected]. Zadnja izmjena: 2025-01-13 06:57
U sljedećem dokumentu možete vidjeti proces izgradnje i programiranja inteligentne ladice. Ova ladica je programirana u Dragon Board 410c, sa svrhom poboljšanja kvalitete gradova. Projekat je dio takmičenja „Hackathon pametnih gradova Qualcomm 17“.
Ideja o ovom projektu započela je s problemom koji vidi vrlo mali broj ljudi, a to je izgubljeno i loše upravljanje alatima i materijalom koje osiguravaju kompanije poput tvornica, pa čak i bolnica. Na tim mjestima radnicima se pružaju neki materijali i alati za obavljanje aktivnosti, te se materijali i alati moraju ponovo koristiti jer su skupi ili zbog nedostatka ekonomskih resursa koji bi ih zamijenili.
U bolnicama postoje ljudi koji preuzimaju kontrolu nad uklonjenim materijalima, ali kada dođe do ljudske intervencije dolazi do greške koja može dovesti do nepotrebnih troškova. Najbolje rješenje za ovaj problem je inteligentna ladica sposobna održavati popis predmeta posuđenih i vraćenih i istovremeno znati ko je odgovoran.
Korak 1: Materijali
Za projekt je potreban sljedeći materijal: 1 x Dragon Board 410c
1 x Senzorske polukatne ploče 96 za Dragon Board 410c
1 x Oglasna ploča
1 x MDF (Vlaknaste ploče srednje gustoće) 61 x 122 cm
5 x senzor CNY 70
1 X TIP31B
1 x elektromagnet
1 x 7408
1 x Tastatura
1 x ekran
3 x vijci
Otpori (raznolikost)
Bakrene žice
Ljepilo
Drill
Korak 2: Izrežite komade za ladicu u MDF -u. (Za bolje rezultate upotrijebite laserski rezač)
Korak 3: Zalijepite sve dijelove zajedno kako biste formirali ladicu s dvije male ladice i jednom velikom
Korak 4: Zavijte vijke u sredini svake ladice
Korak 5: Bušilicom napravite rupe kroz ladicu na stražnjoj strani, rupa mora biti veličine senzora
Korak 6: Zavarite svaki senzor CNY 70 s bakrenim žicama. (ponovite još 4 puta)
Korak 7: Za senzor se koristi poseban krug
Korak 8: Povežite mezanin senzora na Dragon Board 410c. (koristi se za pristup GPIO -u)
Vrlo je važno da se ovaj korak obavi sa isključenom zmajevom pločom, ako ne može izgorjeti, osim što je sve PIN potrebno pravilno postaviti.
Korak 9: Spojite krug s pločice na međukat
Korak 10: Napišite ili kopirajte kôd
#include #include #include // #include
#include "libsoc_gpio.h"
#include "libsoc_debug.h" #include "libsoc_board.h"
/ * Ovaj dio koda u nastavku čini ovaj primjer da radi na svim 96 pločama */
nepotpisani int LED_1; // elektro iman
unsigned int BUTTON_1; // prvi senzor
unsigned int BUTTON_2; // drugi senzor unsigned int BUTTON_3; // zatvori unsigned int BUTTON_4; // treći senzor
struct User {
char korisničko ime [20]; char lozinka [20]; } Korisnik;
struct Database {
char Article_Name [20]; char Lokacija [20]; } Baza podataka;
int senzor1;
int senzor2; int senzor3;
int sensor1_last_state;
int sensor2_last_state; int sensor3_last_state;
char korisničko ime [50];
char lozinka [50];
char DaNe [40];
FILE *pFILE;
char Da [20] = {"Da"};
int trčanje = 1;
_atribut _ ((konstruktor)) statička void _init ()
{board_config *config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // senzor šake BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // drugi senzor BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // zatvori stalak BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // treći senzor // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");
LED_1 = libsoc_board_gpio_id (konfiguracija, "GPIO-E"); // elektro iman
libsoc_board_free (config); } / * Kraj 96Boards posebnog koda * /
int main ()
{gpio *led_1, *button_1, *button_2, *button_3, *button_4; // int touch; struct User Karina; struct User Manager; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina.password, "Taller Vertical"); strcpy (Manager.username, "The Boss"); strcpy (Password.password, "ITESM"); struct Database Tool; struct Database Pen; struct Baza podataka; strcpy (Tool. Article_Name, "Tool"); struct Database Tool; struct Database Pen; struct Baza podataka; strcpy (Tool. Article_Name, "Tool"); 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 (dugme_1); senzor2 = libsoc_gpio_get_level (button_2); senzor3 = libsoc_gpio_get_level (button_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Nalazi se na stalku"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Nikada postavljeno u ovaj stalak"); } if (sensor2 == 1) {strcpy (Pen. Location, "Nalazi se na stalku"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Nikada postavljeno u ovaj stalak"); } if (sensor3 == 1) {strcpy (Case. Location, "Nalazi se na stalku"); } else if (sensor3 == 0) {strcpy (Case. Location, "Nikada postavljeno u ovaj stalak"); } dok (radi) {libsoc_gpio_set_level (led_1, HIGH); printf ("Molimo unesite korisničko ime:"); scanf ("%s", korisničko ime); printf ("Molimo unesite lozinku:"); scanf ("%s", lozinka); if (strcmp (korisničko ime, "Karina") == 0 && strcmp (lozinka, "Viši") == 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 (button_2); senzor3 = 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, "Nalazi se na stalku"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Nalazi se na stalku"); }
if (sensor3 == 1 && sensor3! = sensor3_last_state) {
strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Nalazi se na stalku"); }} else if (strcmp (korisničko ime, "Šef") == 0 && strcmp (lozinka, "ITESM") == 0) {printf ("Želite li generirati tekstualnu datoteku s bazom podataka? [Da/Ne] "); scanf ("%s", DaNe); if ((strcmp (DaNe, Da) == 0)) {// Korisnički_menadžer (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "%s", "-------- Baza podataka stalka ----- / n"); fprintf (pFILE, "%s", "Naziv č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", "Naziv č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", "Naziv č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 ("Pristup odbijen / n");
}} fail: if (led_1 || button_1 || button_2 || button_3) {printf ("primijeni gpio resurs nije uspio! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (button_1); libsoc_gpio_free (button_2); libsoc_gpio_free (button_3); }
Korak 11: Pokrenite program
Korak 12: Zaključci
Projekt ima budućnost koja obećava, budući da se može poboljšati na vrlo učinkovit način, senzori se mogu mijenjati za RFID oznake, a u isto vrijeme sa RFID -om je moguće koristiti lične karte za praćenje ko je odgovoran za materijal.