Sisukord:

Inventuurisahtel "Nutikad linnad Hackathon Qualcomm17": 13 sammu
Inventuurisahtel "Nutikad linnad Hackathon Qualcomm17": 13 sammu

Video: Inventuurisahtel "Nutikad linnad Hackathon Qualcomm17": 13 sammu

Video: Inventuurisahtel
Video: Tallinna visioonikonverents 2020: „Lahendus on nutikad linnad" 2024, November
Anonim
Varude sahtel
Varude sahtel

Järgmises dokumendis näete intelligentse sahtli ehitamise ja programmeerimise protsessi. See sahtel oli programmeeritud Dragon Board 410c -s, eesmärgiga parandada linnade kvaliteeti. Projekt on osa konkursist “nutikate linnade häkaton Qualcomm 17”.

Selle projekti idee sai alguse probleemist, mida näevad väga vähesed, milleks on tööriistade ja materjalide kadunud ja halb haldamine, mida pakuvad sellised ettevõtted nagu tehased ja isegi haiglad. Nendes kohtades antakse töötajatele teatud materjalid ja tööriistad tegevuste tegemiseks, seda materjali ja tööriistu tuleb uuesti kasutada, kuna need on kallid või nende asendamiseks puuduvad majandusressursid.

Haiglates on inimesi, kes võtavad kontrolli eemaldatavate materjalide üle, kuid inimese sekkumisel on viga, mis võib kaasa tuua tarbetuid kulutusi. Selle probleemi parim lahendus on intelligentne sahtel, mis on võimeline pidama laenatud ja tagastatud objektide nimekirja ning samal ajal teadma, kes on vastutav.

Samm: materjalid

Projekti jaoks vajalik materjal on järgmine: 1 x Dragon Board 410c

1 x Sensor Mezzanine 96 tahvlit Dragon Board 410c jaoks

1 x leivalaud

1 x MDF (keskmise tihedusega puitkiudplaat) leht 61 x 122 cm

5 x andur CNY 70

1 X TIP31B

1 x elektromagnet

1 x 7408

1 x klaviatuur

1 x ekraan

3 x kruvid

Vastupidavus (mitmekesisus)

Vasktraadid

Liim

Puurida

2. samm: lõigake MDF -i sahtlitükid. (Parema tulemuse saamiseks kasutage laserlõikurit)

Lõika MDF -ist sahtli tükid. (Parema tulemuse saamiseks kasutage laserlõikurit)
Lõika MDF -ist sahtli tükid. (Parema tulemuse saamiseks kasutage laserlõikurit)

Samm: kleepige kõik tükid kokku, et moodustada kahe väikese ja suure sahtliga sahtel

Samm: keerake kruvid iga sahtli keskele

Keerake kruvid iga sahtli keskele
Keerake kruvid iga sahtli keskele

5. samm: kui puur teeb tagaküljel olevast sahtlist augud, peab auk olema anduri suurune

Kui puur teeb augud läbi tagakülje sahtli, peab auk olema anduri suurune
Kui puur teeb augud läbi tagakülje sahtli, peab auk olema anduri suurune

Samm: keevitage iga andur CNY 70 vasktraatidega. (korrake veel 4 korda)

Keevitage iga andur CNY 70 vasktraatidega. (korrake veel 4 korda)
Keevitage iga andur CNY 70 vasktraatidega. (korrake veel 4 korda)

Samm 7: Anduri jaoks kasutatakse spetsiaalset vooluahelat

Anduri jaoks kasutatakse spetsiaalset vooluahelat
Anduri jaoks kasutatakse spetsiaalset vooluahelat

Samm 8: ühendage anduri poolkorpus Dragon Board 410c -ga. (kasutatakse GPIO -le juurdepääsuks)

Ühendage mezzanine Dragon Board 410c -ga. (kasutatakse GPIO -le juurdepääsuks)
Ühendage mezzanine Dragon Board 410c -ga. (kasutatakse GPIO -le juurdepääsuks)

On väga oluline, et see samm tehtaks draakoniplaadil välja lülitatud, kui mitte, võib see põletada, peale selle tuleb kõik PIN -koodid õigesti sisestada.

9. samm: ühendage vooluring leivaplaadilt poolkorrusega

Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega
Ühendage vooluring leivaplaadilt poolkorrusega

Samm: kirjutage või kopeerige kood

#include #include #include // #include

#include "libsoc_gpio.h"

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

/ * See allolev koodibitt paneb selle näite tööle kõigil 96 -tahvlitel */

unsigned int LED_1; // elektroiman

unsigned int BUTTON_1; // esimene andur

unsigned int BUTTON_2; // teine andur unsigned int BUTTON_3; // sulge allkirjastamata int BUTTON_4; // kolmas andur

struktuuri kasutaja {

char kasutajanimi [20]; sümboli parool [20]; } Kasutaja;

struktuuri andmebaas {

char Artikli_nimi [20]; char Asukoht [20]; } Andmebaas;

int andur1;

int andur2; int andur3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

char kasutajanimi [50];

sümboli parool [50];

char JahEi [40];

FILE *pFILE;

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

int jooksmine = 1;

_atribuut _ ((konstruktor)) staatiline tühine _init ()

{board_config *config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (konfiguratsioon, "GPIO-A"); // rusikate andur BUTTON_2 = libsoc_board_gpio_id (konfiguratsioon, "GPIO-C"); // teine andur BUTTON_3 = libsoc_board_gpio_id (konfiguratsioon, "GPIO-D"); // sulge riiul BUTTON_4 = libsoc_board_gpio_id (konfiguratsioon, "GPIO-B"); // kolmas andur // BUTTON_5 = libsoc_board_gpio_id (konfiguratsioon, "GPIO-E");

LED_1 = libsoc_board_gpio_id (konfiguratsioon, "GPIO-E"); // elektroiman

libsoc_board_free (konfiguratsioon); } / * 96Boards erikoodi lõpp * /

int main ()

{gpio *led_1, *button_1, *button_2, *button_3, *button_4; // int touch; struk Kasutaja Karina; struktuuri kasutajahaldur; strcpy (Karina.kasutajanimi, "Karina Valverde"); strcpy (Karina.parool, "Kõrgem vertikaal"); strcpy (Manager.username, "The Boss"); strcpy (Manager.parool, "ITESM"); struktuuri andmebaasi tööriist; struktuuri andmebaasipliiats; struktuuri andmebaasi juhtum; strcpy (Tool. Article_Name, "Tool"); struktuuri andmebaasi tööriist; struktuuri andmebaasipliiats; struktuuri andmebaasi juhtum; 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); nupp_3 = libsoc_gpio_request (BUTTON_3, LS_SHARED); nupp_4 = libsoc_gpio_request (BUTTON_4, LS_SHARED); // nupp_5 = libsoc_gpio_request (BUTTON_5, LS_SHARED);

kui ((led_1 == NULL) || (nupp_1 == NULL) || (nupp_2 == NULL) || (nupp_3 == NULL) || (nupp_4 == NULL))

{mine nurjuma; } libsoc_gpio_set_direction (led_1, VÄLJUND); libsoc_gpio_set_direction (nupp_1, INPUT); libsoc_gpio_set_direction (nupp_2, INPUT); libsoc_gpio_set_direction (nupp_3, INPUT); libsoc_gpio_set_direction (nupp_4, INPUT); // libsoc_gpio_set_direction (button_5, INPUT);

if ((libsoc_gpio_get_direction (led_1)! = VÄLJUND)

|| (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 (nupp_1); sensor2 = libsoc_gpio_get_level (nupp_2); sensor3 = libsoc_gpio_get_level (nupp_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Asub rackil"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Pole kunagi sellesse riiulisse paigutatud"); } if (sensor2 == 1) {strcpy (Pen. Location, "Located on Rack"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Pole kunagi sellesse riiulisse paigutatud"); } if (sensor3 == 1) {strcpy (Case. Location, "Asub rackil"); } else if (sensor3 == 0) {strcpy (Case. Location, "Pole kunagi sellesse riiulisse paigutatud"); } töötamise ajal {libsoc_gpio_set_level (led_1, HIGH); printf ("Palun sisesta kasutajanimi:"); scanf ("%s", kasutajanimi); printf ("Palun sisestage parool:"); scanf ("%s", parool); if (strcmp (kasutajanimi, "Karina") == 0 && strcmp (parool, "Kõrgem") == 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 (nupp_2); sensor3 = libsoc_gpio_get_level (nupp_4); } libsoc_gpio_set_level (led_1, KÕRGE); if (sensor1 == 1 && sensor1! = sensor1_last_state) {strcpy (Tool. Location, Karina.kasutajanimi); } else if (sensor1 == 0 && sensor1! = sensor1_last_state) {strcpy (Tool. Location, "Asub rackil"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Located on Rack"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Asub rackil"); }} else if (strcmp (kasutajanimi, "boss") == 0 && strcmp (parool, "ITESM") == 0) {printf ("Kas soovite andmebaasiga tekstifaili luua? [Jah/ei] "); scanf ("%s", JahNo); if ((strcmp (YesNo, Yes) == 0)) {// Manager_user (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "%s", "-------- Racki andmebaas ----- / n"); fprintf (pFILE, "%s", "Artikli nimi:"); fprintf (pFILE, "%s", Tool. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Artikli asukoht:"); fprintf (pFILE, "%s", Tool. Location); fprintf (pFILE, "%s", "\ n"); fprintf (pFILE, "%s", "Artikli nimi:"); fprintf (pFILE, "%s", Pen. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Artikli asukoht:"); fprintf (pFILE, "%s", Pen. Location); fprintf (pFILE, "%s", "\ n");

fprintf (pFILE, "%s", "Artikli nimi:");

fprintf (pFILE, "%s", juhtum. Artikli_nimi); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Artikli asukoht:"); fprintf (pFILE, "%s", Case. Location); fprintf (pFILE, "%s", "\ n");

fclose (pFILE);

}

printf ("Juurdepääs keelatud / n");

}} ebaõnnestumine: if (led_1 || button_1 || button_2 || button_3) {printf ("rakenda gpio ressurss ebaõnnestus! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (nupp_1); libsoc_gpio_free (nupp_2); libsoc_gpio_free (nupp_3); }

Samm: käivitage programm

12. samm: Järeldused

Projektil on tulevik paljutõotav, kuna seda saab väga tõhusalt parandada, andureid saab RFID -siltide vastu vahetada ja samaaegselt RFID -ga on võimalik kasutada ID -kaarte, et jälgida, kes materjali eest vastutab.

Soovitan: