Съдържание:

Чекмедже за инвентар „Хакатон на интелигентни градове Qualcomm17“: 13 стъпки
Чекмедже за инвентар „Хакатон на интелигентни градове Qualcomm17“: 13 стъпки

Видео: Чекмедже за инвентар „Хакатон на интелигентни градове Qualcomm17“: 13 стъпки

Видео: Чекмедже за инвентар „Хакатон на интелигентни градове Qualcomm17“: 13 стъпки
Видео: CS50 2015 - Week 9, continued 2024, Юли
Anonim
Чекмедже за запаси
Чекмедже за запаси

В следващия документ можете да видите процеса на конструиране и програмиране на интелигентно чекмедже. Това чекмедже е програмирано в Dragon Board 410c, с цел подобряване на качеството на градовете. Проектът е част от конкурса „Хакатон за интелигентни градове Qualcomm 17“.

Идеята за този проект започна с проблем, който много малко хора виждат, а именно загубеното и лошо управление на инструменти и материали, което се предоставя от компании като фабрики и дори болници. На тези места някои материали и инструменти се предоставят на работниците за извършване на дейности, тези материали и инструменти трябва да се използват повторно, защото са скъпи или поради липса на икономически ресурси, които да ги заменят.

В болниците има хора, които поемат контрола върху отстранените материали, но когато има човешка намеса, има грешка, която може да доведе до ненужни разходи. Най -доброто решение на този проблем е интелигентно чекмедже, способно да поддържа инвентаризация на предмети, които са взети назаем и върнати, и в същото време да знае кой е отговорен.

Стъпка 1: Материали

Материалът, необходим за проекта, е следният: 1 x Dragon Board 410c

1 x сензорен мецанин 96 платки за Dragon Board 410c

1 x Платка

1 x MDF (ПДЧ със средна плътност) лист 61 x 122 cm

5 x сензор CNY 70

1 X TIP31B

1 x електромагнит

1 x 7408

1 x клавиатура

1 x екран

3 x винтове

Съпротивления (разнообразие)

Медни проводници

Лепило

Пробивна машина

Стъпка 2: Изрежете парчетата за чекмеджето в MDF. (За по -добри резултати използвайте лазерен нож)

Нарежете парчетата за чекмеджето в MDF. (За по -добри резултати използвайте лазерен нож)
Нарежете парчетата за чекмеджето в MDF. (За по -добри резултати използвайте лазерен нож)

Стъпка 3: Поставете всички части заедно, за да оформите чекмедже с две малки чекмеджета и едно голямо

Стъпка 4: Завийте винтовете в средата на всяко чекмедже

Завийте винтовете в средата на всяко чекмедже
Завийте винтовете в средата на всяко чекмедже

Стъпка 5: С пробиването направете дупки през чекмеджето в задната страна, отворът трябва да е с размерите на сензора

С пробиването направете дупки през чекмеджето в задната страна, отворът трябва да е с размера на сензора
С пробиването направете дупки през чекмеджето в задната страна, отворът трябва да е с размера на сензора

Стъпка 6: Заварете всеки сензор CNY 70 с медни проводници. (повторете още 4 пъти)

Заварете всеки сензор CNY 70 с медни проводници. (повторете още 4 пъти)
Заварете всеки сензор CNY 70 с медни проводници. (повторете още 4 пъти)

Стъпка 7: За сензора се използва специална верига

За сензора се използва специална верига
За сензора се използва специална верига

Стъпка 8: Свържете мецанина на сензора към Dragon Board 410c. (използва се за достъп до GPIO)

Свържете мецанина на сензора към Dragon Board 410c. (използва се за достъп до GPIO)
Свържете мецанина на сензора към Dragon Board 410c. (използва се за достъп до GPIO)

Много е важно тази стъпка да бъде направена с изключена драконова дъска, ако не, тя може да изгори, освен всичко, което трябва да бъде поставено правилно.

Стъпка 9: Свържете веригата от платката към мецанина

Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина
Свържете веригата от платката към мецанина

Стъпка 10: Напишете или копирайте кода

#include #include #include // #include

#include "libsoc_gpio.h"

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

/ * Този бит код по -долу кара този пример да работи на всички 96 дъски */

без знак int LED_1; // електроиман

unsigned int BUTTON_1; // първи сензор

unsigned int BUTTON_2; // втори сензор unsigned int BUTTON_3; // затваряне без знак int BUTTON_4; // трети сензор

struct User {

char потребителско име [20]; char парола [20]; } Потребител;

struct Database {

char Article_Name [20]; char Местоположение [20]; }База данни;

int сензор1;

int сензор2; int сензор3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

char потребителско име [50];

char парола [50];

char ДаНе [40];

FILE *pFILE;

char Да [20] = {"Да"};

int работи = 1;

_attribute _ ((конструктор)) static void _init ()

{board_config *config = libsoc_board_init (); BUTTON_1 = libsoc_board_gpio_id (config, "GPIO-A"); // сензор за юмруци BUTTON_2 = libsoc_board_gpio_id (config, "GPIO-C"); // втори сензор BUTTON_3 = libsoc_board_gpio_id (config, "GPIO-D"); // затваряне на багажника BUTTON_4 = libsoc_board_gpio_id (config, "GPIO-B"); // трети сензор // BUTTON_5 = libsoc_board_gpio_id (config, "GPIO-E");

LED_1 = libsoc_board_gpio_id (конфигурация, "GPIO-E"); // електроиман

libsoc_board_free (config); } / * Край на 96Boards специален код * /

int main ()

{gpio *led_1, *button_1, *button_2, *button_3, *button_4; // int докосване; struct User Карина; struct User Manager; strcpy (Karina.username, "Карина Валверде"); strcpy (Karina.password, "Taller Vertical"); strcpy (Manager.username, "The Boss"); strcpy (Manager.password, "ITESM"); struct Database Tool; struct Database Pen; struct Database Case; strcpy (Tool. Article_Name, "Tool"); struct Database Tool; struct Database Pen; struct Database Case; 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; } сензор1 = libsoc_gpio_get_level (бутон_1); сензор2 = libsoc_gpio_get_level (button_2); сензор3 = libsoc_gpio_get_level (бутон_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 == 1) {strcpy (Tool. Location, "Разположен на стелаж"); } else if (sensor1 == 0) {strcpy (Tool. Location, "Никога не се поставя в тази стойка"); } if (sensor2 == 1) {strcpy (Pen. Location, "Разположен на стелаж"); } else if (sensor2 == 0) {strcpy (Pen. Location, "Никога не се поставя в тази стойка"); } if (sensor3 == 1) {strcpy (Case. Location, "Разположен на багажник"); } else if (sensor3 == 0) {strcpy (Case. Location, "Никога не се поставя в този багажник"); } докато (работи) {libsoc_gpio_set_level (led_1, HIGH); printf ("Моля, въведете потребителско име:"); scanf ("%s", потребителско име); printf ("Моля, въведете парола:"); scanf ("%s", парола); if (strcmp (потребителско име, "Karina") == 0 && strcmp (парола, "по -висок") == 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); сензор2 = libsoc_gpio_get_level (button_2); сензор3 = libsoc_gpio_get_level (бутон_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, "Разположен на стелаж"); } if (sensor2 == 1 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, Karina.username); } else if (sensor2 == 0 && sensor2! = sensor2_last_state) {strcpy (Pen. Location, "Разположен на стелаж"); }

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

strcpy (Case. Location, Karina.username); } else if (sensor3 == 0 && sensor3! = sensor3_last_state) {strcpy (Case. Location, "Разположен на стелаж"); }} иначе ако (strcmp (потребителско име, "Бос") == 0 && strcmp (парола, "ITESM") == 0) {printf ("Искате ли да генерирате текстов файл с базата данни? [Да/Не] "); scanf ("%s", ДаНе); if ((strcmp (YesNo, Yes) == 0)) {// потребител на мениджър (pFILE); pFILE = fopen ("Database.txt", "w"); fprintf (pFILE, "%s", "-------- База данни на багажника ----- / n"); fprintf (pFILE, "%s", "Име на статията:"); fprintf (pFILE, "%s", Tool. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Местоположение на статията:"); fprintf (pFILE, "%s", Tool. Location); fprintf (pFILE, "%s", "\ n"); fprintf (pFILE, "%s", "Име на статията:"); fprintf (pFILE, "%s", Pen. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Местоположение на статията:"); fprintf (pFILE, "%s", Pen. Location); fprintf (pFILE, "%s", "\ n");

fprintf (pFILE, "%s", "Име на статията:");

fprintf (pFILE, "%s", Case. Article_Name); fprintf (pFILE, "%s", "\ t"); fprintf (pFILE, "%s", "Местоположение на статията:"); fprintf (pFILE, "%s", Case. Location); fprintf (pFILE, "%s", "\ n");

fclose (pFILE);

}

printf ("Достъпът е отказан / n");

}} неуспех: if (led_1 || button_1 || button_2 || button_3) {printf ("приложи грешка на ресурса на gpio! / n"); libsoc_gpio_free (led_1); libsoc_gpio_free (button_1); libsoc_gpio_free (button_2); libsoc_gpio_free (button_3); }

Стъпка 11: Стартирайте програмата

Стъпка 12: Заключения

Проектът има бъдеще обещаващо, тъй като може да се подобри по много ефективен начин, сензорите могат да се променят за RFID етикети и в същото време с RFID е възможно да се използват лични карти, за да се следи кой е отговорен за материала.

Препоръчано: