Inhoudsopgave:
- Stap 1: Materialen
- Stap 2: Snijd de stukken voor de lade in de MDF. (Gebruik voor betere resultaten een lasersnijder)
- Stap 3: Plak alle stukken samen om een lade te vormen met twee kleine lades en een grote
- Stap 4: Schroef de schroeven in het midden van elke lade
- Stap 5: Maak met de boor gaten door de lade aan de achterkant, het gat moet de grootte van de sensor hebben
- Stap 6: Las elke sensor CNY 70 met de koperdraden. (herhaal 4 keer meer)
- Stap 7: Er wordt een speciaal circuit gebruikt voor de sensor
- Stap 8: Sluit de Sensor Mezzanine aan op de Dragon Board 410c. (gebruikt om toegang te krijgen tot de GPIO)
- Stap 9: Verbind het circuit van het breadboard naar de mezzanine
- Stap 10: Schrijf of kopieer de code
- Stap 11: Voer het programma uit
- Stap 12: Conclusies
Video: Inventarislade "Smart Cities Hackathon Qualcomm17" - Ajarnpa
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
In het volgende document ziet u het proces van constructie en programmering van een intelligente lade. Deze lade is geprogrammeerd in een Dragon Board 410c, met als doel de kwaliteit van steden te verbeteren. Het project maakt deel uit van de wedstrijd “smart cities hackathon Qualcomm 17”.
Het idee van dit project begon met een probleem dat maar heel weinig mensen zien, namelijk het verloren en slecht beheer van gereedschappen en materiaal dat wordt geleverd door bedrijven zoals fabrieken en zelfs ziekenhuizen. Op deze plaatsen worden sommige materialen en gereedschappen aan de arbeiders verstrekt om activiteiten uit te voeren. Dit materiaal en gereedschap moeten worden hergebruikt omdat ze duur zijn of vanwege het gebrek aan economische middelen om ze te vervangen.
In ziekenhuizen zijn er mensen die de controle nemen over de materialen die worden verwijderd, maar wanneer er een menselijke tussenkomst is, is er de fout, die tot onnodige kosten kan leiden. De beste oplossing voor dit probleem is een intelligente lade die in staat is om een inventaris bij te houden van geleende en ingeleverde objecten en tegelijkertijd te weten wie de verantwoordelijke is.
Stap 1: Materialen
Het materiaal dat nodig is voor het project is het volgende: 1 x Dragon Board 410c
1 x Sensor Mezzanine 96 Boards voor Dragon Board 410c
1 x Breadboard
1 x MDF (Medium Density Fiberboard) plaat 61 x 122 cm
5 x sensor CNY 70
1 X TIP31B
1 x elektromagneet
1x 7408
1 x toetsenbord
1 x scherm
3 x schroeven
Weerstanden (variëteit)
Koperdraden
Lijm
Oefening
Stap 2: Snijd de stukken voor de lade in de MDF. (Gebruik voor betere resultaten een lasersnijder)
Stap 3: Plak alle stukken samen om een lade te vormen met twee kleine lades en een grote
Stap 4: Schroef de schroeven in het midden van elke lade
Stap 5: Maak met de boor gaten door de lade aan de achterkant, het gat moet de grootte van de sensor hebben
Stap 6: Las elke sensor CNY 70 met de koperdraden. (herhaal 4 keer meer)
Stap 7: Er wordt een speciaal circuit gebruikt voor de sensor
Stap 8: Sluit de Sensor Mezzanine aan op de Dragon Board 410c. (gebruikt om toegang te krijgen tot de GPIO)
Het is erg belangrijk dat deze stap wordt uitgevoerd met het drakenbord uit, anders kan het branden, bovendien moet de pincode correct worden geplaatst.
Stap 9: Verbind het circuit van het breadboard naar de mezzanine
Stap 10: Schrijf of kopieer de code
#include #include #include //#include
#include "libsoc_gpio.h"
#include "libsoc_debug.h" #include "libsoc_board.h"
/* Dit stukje code hieronder zorgt ervoor dat dit voorbeeld op alle 96Boards werkt */
niet-ondertekend int LED_1; // electro iman
unsigned int BUTTON_1;//eerste sensor
unsigned int BUTTON_2;//tweede sensor unsigned int BUTTON_3;// sluit unsigned int BUTTON_4;//derde sensor
struct Gebruiker{
char gebruikersnaam[20]; char wachtwoord[20]; }Gebruiker;
struct Database{
char Artikel_Naam[20]; char Locatie[20]; }Database;
int-sensor1;
int-sensor2; int-sensor3;
int sensor1_last_state;
int sensor2_last_state; int sensor3_last_state;
char gebruikersnaam [50];
char wachtwoord [50];
char JaNee[40];
BESTAND *pBESTAND;
char Ja[20] = {"Ja"};
int actief = 1;
_attribute_((constructor)) statische leegte _init()
{ board_config * config = libsoc_board_init(); BUTTON_1 = libsoc_board_gpio_id(config, "GPIO-A");//fists sensor BUTTON_2 = libsoc_board_gpio_id(config, "GPIO-C");// tweede sensor BUTTON_3 = libsoc_board_gpio_id(config, "GPIO-D"); // rek sluiten BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // derde 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); } /* Einde van speciale code 96Boards */
int hoofd()
{ gpio *led_1, *button_1, *button_2, *button_3, *button_4; //int-aanraking; struc Gebruiker Karina; struct gebruikersbeheer; strcpy(Karina.gebruikersnaam, "Karina Valverde"); strcpy(Karina.wachtwoord, "Groter Verticaal"); strcpy(Manager.gebruikersnaam, "The Boss"); strcpy(Manager.wachtwoord, "ITESM"); struct Database-tool; structuur Database Pen; structuur Database Case; strcpy(Tool. Article_Name, "Tool"); struct Database-tool; structuur Database Pen; structuur Database Case; strcpy(Tool. Article_Name, "Tool"); strcpy(Pen. Artikelnaam, "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))
{ ga mislukken; } 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; } 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, "Bevindt zich op Rack"); } else if (sensor1 == 0){ strcpy(Tool. Location, "Nooit in dit rek geplaatst"); } if (sensor2 ==1){ strcpy(Pen. Locatie, "Gelegen op rek"); } else if (sensor2 == 0){ strcpy(Pen. Location, "Nooit in dit rek geplaatst"); } if (sensor3 ==1){ strcpy(Case. Location, "Bevindt zich in rack"); } else if (sensor3 == 0){ strcpy(Case. Location, "Nooit in dit rek geplaatst"); } while(running) {libsoc_gpio_set_level(led_1, HIGH); printf("Voer gebruikersnaam in: "); scanf("%s", gebruikersnaam); printf("Voer wachtwoord in: "); scanf("%s", wachtwoord); if (strcmp(gebruikersnaam, "Karina") == 0 && strcmp(wachtwoord, "Groter") == 0){ libsoc_gpio_set_level(led_1, LOW); libsoc_gpio_set_level (led_1, LAAG); 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, HOOG); if (sensor1 == 1 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, Karina.username); }else if (sensor1 == 0 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, "Bevindt zich in rack"); } if (sensor2 == 1 && sensor2 != sensor2_last_state){ strcpy(Pen. Locatie, Karina.gebruikersnaam); }else if (sensor2 == 0 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, "Bevindt zich in rack"); }
if (sensor3 == 1 && sensor3 != sensor3_last_state){
strcpy (Case. Locatie, Karina.gebruikersnaam); }else if (sensor3 == 0 && sensor3 != sensor3_last_state){ strcpy(Case. Location, "Bevindt zich in rack"); } }else if (strcmp(gebruikersnaam, "Boss") == 0 && strcmp(wachtwoord, "ITESM") == 0){ printf(" Wilt u een tekstbestand genereren met de database? [Ja/Nee] "); scanf("%s", JaNee); if ((strcmp(YesNo, Yes) == 0)){ //Manager_user(pFILE); pFILE = fopen("Database.txt", "w"); fprintf(pFILE, "%s", "--------De database van het rack ----- \n"); fprintf(pFILE, "%s", "Artikelnaam:"); fprintf(pFILE, "%s", Tool. Article_Name); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Locatie van artikel:"); fprintf(pFILE, "%s", Tool. Location); fprintf(pFILE, "%s", "\n"); fprintf(pFILE, "%s", "Artikelnaam:"); fprintf(pFILE, "%s", Pen. Artikelnaam); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Locatie van artikel:"); fprintf(pFILE, "%s", Pen. Locatie); fprintf(pFILE, "%s", "\n");
fprintf(pFILE, "%s", "Artikelnaam:");
fprintf(pFILE, "%s", Case. Article_Name); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Locatie van artikel:"); fprintf(pFILE, "%s", Case. Locatie); fprintf(pFILE, "%s", "\n");
fclose(pFILE);
}
printf("Toegang geweigerd \n");
} } fail: if(led_1 || button_1|| button_2|| button_3) { printf("apply gpio resource fail!\n"); libsoc_gpio_free(led_1); libsoc_gpio_free(button_1); libsoc_gpio_free(button_2); libsoc_gpio_free(button_3); }
Stap 11: Voer het programma uit
Stap 12: Conclusies
Het project heeft een veelbelovende toekomst, omdat het op een zeer effectieve manier kan worden verbeterd, de sensoren kunnen worden gewijzigd voor RFID'S-tags en tegelijkertijd met de RFID het mogelijk is om ID-kaarten te gebruiken om te controleren wie verantwoordelijk is voor het materiaal.