Përmbajtje:
- Hapi 1: Materialet
- Hapi 2: Pritini Copat për Sirtarin në MDF. (Për rezultate më të mira përdorni një prestar lazer)
- Hapi 3: Ngjitni të gjitha pjesët së bashku për të formuar një sirtar me dy sirtarë të vegjël dhe një të mëdhenj
- Hapi 4: Vidhosni vidhat në mes të çdo sirtari
- Hapi 5: Me stërvitjen bëni vrima përmes sirtarit në anën e pasme, vrima duhet të jetë madhësia e sensorit
- Hapi 6: Saldoni çdo Sensor CNY 70 Me Telat e Bakrit. (përsëris 4 herë më shumë)
- Hapi 7: Përdoret një qark i veçantë për sensorin
- Hapi 8: Lidheni Sensorin Mezzanine me Dragon Board 410c. (përdoret për të hyrë në GPIO)
- Hapi 9: Lidhni qarkun nga pllaka e bukës në katin e mesëm
- Hapi 10: Shkruani ose Kopjoni Kodin
- Hapi 11: Drejtoni programin
- Hapi 12: Përfundime
Video: Sirtari i Inventarit "Smart Cities Hackathon Qualcomm17": 13 hapa
2025 Autor: John Day | [email protected]. E modifikuara e fundit: 2025-01-13 06:58
Në dokumentin tjetër, mund të shihni procesin e ndërtimit dhe programimit të një sirtari inteligjent. Kjo sirtar u programua në një Bord Dragon 410c, me qëllim të përmirësimit të cilësisë së qyteteve. Projekti është pjesë e konkursit "qytetet e mençura hackathon Qualcomm 17".
Ideja e këtij projekti filloi me një problem që shumë pak njerëz e shohin, i cili është menaxhimi i humbur dhe i keq i mjeteve dhe materialit që ofrohet nga kompani të tilla si fabrika, madje edhe spitale. Në këto vende, disa materiale dhe mjete u sigurohen punëtorëve për të bërë aktivitete, ky material dhe mjete duhet të ripërdoren sepse janë të shtrenjta ose mungesa e burimeve ekonomike për t'i zëvendësuar ato.
Në spitale, ka njerëz që marrin kontrollin e materialeve që hiqen, por kur ka një ndërhyrje njerëzore ndodh gabimi, i cili mund të çojë në shpenzime të panevojshme. Zgjidhja më e mirë për këtë problem është një sirtar inteligjent i aftë të mbajë një inventar të objekteve të huazuara dhe të kthyera dhe në të njëjtën kohë të dijë se kush është përgjegjësi.
Hapi 1: Materialet
Materiali i nevojshëm për projektin është ai tjetër: 1 x Dragon Board 410c
1 x Sensor Mezzanine 96 Borde për Dragon Board 410c
1 x Breadboard
1 x fletë MDF (dërrasë me fibra me densitet të mesëm) 61 x 122 cm
5 x sensor CNY 70
1 X TIP31B
1 x elektromagnet
1 x 7408
1 x Tastiera
1 x ekran
3 vida x
Rezistencat (shumëllojshmëria)
Tela bakri
Zam
Stërvitje
Hapi 2: Pritini Copat për Sirtarin në MDF. (Për rezultate më të mira përdorni një prestar lazer)
Hapi 3: Ngjitni të gjitha pjesët së bashku për të formuar një sirtar me dy sirtarë të vegjël dhe një të mëdhenj
Hapi 4: Vidhosni vidhat në mes të çdo sirtari
Hapi 5: Me stërvitjen bëni vrima përmes sirtarit në anën e pasme, vrima duhet të jetë madhësia e sensorit
Hapi 6: Saldoni çdo Sensor CNY 70 Me Telat e Bakrit. (përsëris 4 herë më shumë)
Hapi 7: Përdoret një qark i veçantë për sensorin
Hapi 8: Lidheni Sensorin Mezzanine me Dragon Board 410c. (përdoret për të hyrë në GPIO)
Veryshtë shumë e rëndësishme që ky hap të bëhet me bordin e dragoit të fikur, nëse jo, ai mund të digjet, përveç të gjithë PIN -it duhet të vendoset në mënyrë korrekte.
Hapi 9: Lidhni qarkun nga pllaka e bukës në katin e mesëm
Hapi 10: Shkruani ose Kopjoni Kodin
#përfshi #përfshi #përfshi // #përfshi
#përfshi "libsoc_gpio.h"
#përfshi "libsoc_debug.h" #include "libsoc_board.h"
/ * Kjo pjesë e kodit më poshtë e bën këtë shembull të funksionojë në të gjitha 96Boards */
pa shenjë në LED_1; // elektro iman
pa shenjë në BUTTON_1; // sensori i parë
pa shenjë int BUTTON_2; // sensori i dytë pa shenjë int BUTTON_3; // mbyll int pa shenjë int BUTTON_4; // sensori i tretë
struktura e Përdoruesit {
emri i përdoruesit char [20]; fjalëkalim char [20]; } Përdoruesi;
strukturë Baza e të dhënave {
emri i artikullit char [20]; char Vendndodhja [20]; } Baza e të dhënave;
int sensor1;
int sensor2; int sensor3;
int sensor1_last_state;
int sensor2_last_state; int sensor3_last_state;
emri i përdoruesit char [50];
fjalëkalim char [50];
char Po Jo Jo [40];
DOSJA *pFILE;
char Po [20] = {"Po"};
int running = 1;
_tribuoj _ ((konstruktor)) zbrazëti statike _init ()
{board_config *config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (konfiguro, "GPIO-A"); // sensor grushton BUTTON_2 = libsoc_board_gpio_id (konfiguro, "GPIO-C"); // sensori i dytë BUTTON_3 = libsoc_board_gpio_id (konfiguro, "GPIO-D"); // mbyll raftin BUTTON_4 = libsoc_board_gpio_id (konfiguro, "GPIO-B"); // sensori i tretë // BUTTON_5 = libsoc_board_gpio_id (konfiguro, "GPIO-E");
LED_1 = libsoc_board_gpio_id (konfiguro, "GPIO-E"); // elektro iman
libsoc_board_free (konfiguro); } / * Fundi i kodit special të 96Boards * /
int kryesore ()
{gpio *led_1, *button_1, *button_2, *button_3, *button_4; // int prekje; struct Përdoruesi Karina; struct User Manager; strcpy (Karina.username, "Karina Valverde"); strcpy (Karina. fjalëkalim, "Vertikal më i gjatë"); strcpy (menaxher.username, "The Boss"); strcpy (Menaxher. fjalëkalim, "ITESM"); strukt Mjeti i bazës së të dhënave; strukturë Pena e bazës së të dhënave; strukt Rasti i bazës së të dhënave; strcpy (Tool. Article_Name, "Tool"); strukt Mjeti i bazës së të dhënave; strukturë Pena e bazës së të dhënave; strukt Rasti i bazës së të dhënave; 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); butoni_1 = libsoc_gpio_request (BUTTON_1, LS_SHARED); button_2 = kërkesë libsoc_gpio_ (BUTTON_2, LS_SHARED); butoni_3 = libsoc_gpio_request (BUTTON_3, LS_SHARED); butoni_4 = kërkesë libsoc_gpio_ (BUTTON_4, LS_SHARED); // butoni_5 = libsoc_gpio_request (BUTTON_5, LS_SHARED);
nëse ((led_1 == NULL) || (button_1 == NULL) || (button_2 == NULL) || (button_3 == NULL) || (button_4 == NULL))
{duhet të dështoj; } libsoc_gpio_set_direction (led_1, OUTPUT); libsoc_gpio_set_direction (butoni_1, INPUT); libsoc_gpio_set_direction (butoni_2, INPUT); libsoc_gpio_set_direction (butoni_3, INPUT); libsoc_gpio_set_direction (butoni_4, INPUT); // libsoc_gpio_set_direction (butoni_5, INPUT);
nëse ((libsoc_gpio_get_direction (led_1)! = JASHT dalje)
|| (libsoc_gpio_get_direction (button_1)! = HYRJE) || (libsoc_gpio_get_direction (button_2)! = HYRJE) || (libsoc_gpio_get_direction (button_3)! = HYRJE) || (libsoc_gpio_get_direction (button_4)! = HYRJE)) {goto dështoj; } sensor1 = libsoc_gpio_get_level (butoni_1); sensor2 = libsoc_gpio_get_level (butoni_2); sensor3 = libsoc_gpio_get_level (butoni_4); sensor1_last_stat = sensor1; sensor2_last_stat = sensor2; sensor3_last_stat = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Located on Rack"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Asnjëherë i vendosur në këtë Rack"); } if (sensor2 == 1) {strcpy (Pen. Location, "Located on Rack"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Asnjëherë i vendosur në këtë Rack"); } if (sensor3 == 1) {strcpy (Case. Location, "Located on Rack"); } else if (sensor3 == 0) {strcpy (Case. Location, "Asnjëherë nuk vendoset në këtë Rack"); } ndërsa (vrapon) {libsoc_gpio_set_level (led_1, HIGH); printf ("Ju lutemi futni emrin e përdoruesit:"); scanf ("%s", emri i përdoruesit); printf ("Ju lutemi futni fjalëkalimin:"); scanf ("%s", fjalëkalim); if (strcmp (emri i përdoruesit, "Karina") == 0 && strcmp (fjalëkalimi, "Taller") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, LOW); ndërsa (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1); sensor2 = libsoc_gpio_get_level (butoni_2); sensor3 = libsoc_gpio_get_level (butoni_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, "E vendosur në Rack"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "E vendosur në Rack"); }
nëse (sensor3 == 1 && sensor3! = sensor3_last_state) {
strcpy (Case. Location, Karina.ername); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "E vendosur në Rack"); }} else if (strcmp (emri i përdoruesit, "Shefi") == 0 && strcmp (fjalëkalimi, "ITESM") == 0) {printf ("A dëshironi të krijoni një skedar teksti me bazën e të dhënave? [Po/Jo] "); scanf ("%s", Po Jo); nëse ((strcmp (Po Jo, Po) == 0)) {// Përdoruesi i menaxherit (pFILE); pFILE = hap ("Baza e të dhënave.txt", "w"); fprintf (pFILE, "%s", "-------- Baza e të dhënave të Rack ----- / n"); fprintf (pFILE, "%s", "Emri i artikullit:"); fprintf (pFILE, "%s", Tool. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Vendndodhja e artikullit:"); fprintf (pFILE, "%s", Tool. Location); fprintf (pFILE, "%s", "\ n"); fprintf (pFILE, "%s", "Emri i artikullit:"); fprintf (pFILE, "%s", Pen. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Vendndodhja e artikullit:"); fprintf (pFILE, "%s", Pen. Location); fprintf (pFILE, "%s", "\ n");
fprintf (pFILE, "%s", "Emri i artikullit:");
fprintf (pFILE, "%s", Case. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Vendndodhja e artikullit:"); fprintf (pFILE, "%s", Case. Location); fprintf (pFILE, "%s", "\ n");
fclose (pFILE);
}
printf ("Qasja është refuzuar / n");
}} fail: if (led_1 || button_1 || button_2 || button_3) {printf ("zbato dështimin e burimit të gpio! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (butoni_1); libsoc_gpio_free (butoni_2); libsoc_gpio_free (butoni_3); }
Hapi 11: Drejtoni programin
Hapi 12: Përfundime
Projekti ka një të ardhme premtuese, pasi mund të përmirësohet në një mënyrë shumë efektive, sensorët mund të ndryshohen për etiketat RFID´S dhe në të njëjtën kohë me RFID është e mundur të përdoren kartat e identitetit për të monitoruar se kush është përgjegjës për materialin.