Оглавление:

Ящик инвентаря «Хакатон умных городов Qualcomm17»: 13 шагов
Ящик инвентаря «Хакатон умных городов Qualcomm17»: 13 шагов

Видео: Ящик инвентаря «Хакатон умных городов Qualcomm17»: 13 шагов

Видео: Ящик инвентаря «Хакатон умных городов Qualcomm17»: 13 шагов
Видео: KCN Технология «BlockBox» выигрывает CoinDesk Hackathon 2024, Июль
Anonim
Ящик для инвентаря
Ящик для инвентаря

В следующем документе вы можете увидеть процесс создания и программирования интеллектуального ящика. Этот ящик был запрограммирован в Dragon Board 410c с целью улучшения качества городов. Проект является частью конкурса «Хакатон умных городов Qualcomm 17».

Идея этого проекта началась с проблемы, которую мало кто видит, а именно с потерянного и плохого обращения с инструментами и материалами, которые поставляются такими компаниями, как фабрики и даже больницы. В этих местах работникам предоставляются некоторые материалы и инструменты для выполнения работ, эти материалы и инструменты необходимо использовать повторно, поскольку они дороги или из-за отсутствия экономических ресурсов для их замены.

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

Шаг 1: материалы

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

1 x Сенсорная мезонинная плата 96 для платы Dragon Board 410c

1 х макет

1 x лист МДФ (древесноволокнистая плита средней плотности) 61 x 122 см

5 датчиков - 70 юаней

1 х TIP31B

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

1 х 7408

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

1 х экран

3 винта

Сопротивления (разновидность)

Медные провода

Клей

Дрель

Шаг 2: Вырежьте детали для ящика из МДФ. (Для лучших результатов используйте лазерный резак)

Вырежьте детали для ящика из МДФ. (Для лучших результатов используйте лазерный резак)
Вырежьте детали для ящика из МДФ. (Для лучших результатов используйте лазерный резак)

Шаг 3: Склейте все части вместе, чтобы сформировать ящик с двумя маленькими ящиками и одним большим

Шаг 4: Завинтите винты посередине каждого ящика

Закрутите винты в середине каждого ящика
Закрутите винты в середине каждого ящика

Шаг 5: Просверлите отверстия в выдвижном ящике на задней стороне, отверстие должно быть размером с датчик

Просверлите отверстие в выдвижном ящике на задней стороне, оно должно быть размером с датчик
Просверлите отверстие в выдвижном ящике на задней стороне, оно должно быть размером с датчик

Шаг 6: Приварите каждый датчик 70 китайских юаней к медным проводам. (повторить в 4 раза больше)

Приварите каждый датчик на 70 юаней к медным проводам. (повторить в 4 раза больше)
Приварите каждый датчик на 70 юаней к медным проводам. (повторить в 4 раза больше)

Шаг 7: Для датчика используется особая цепь

Для датчика используется особая цепь
Для датчика используется особая цепь

Шаг 8: Подключите сенсорный мезонин к плате Dragon Board 410c. (используется для доступа к GPIO)

Подключите сенсорный мезонин к плате Dragon Board 410c. (используется для доступа к GPIO)
Подключите сенсорный мезонин к плате Dragon Board 410c. (используется для доступа к GPIO)

Очень важно, чтобы этот шаг выполнялся с выключенной доской дракона, в противном случае она может сгореть, к тому же все PIN-коды должны быть размещены правильно.

Шаг 9: Подключите схему от макета к антресоли

Подключите схему от макета к антресоли
Подключите схему от макета к антресоли
Подключите схему от макета к антресоли
Подключите схему от макета к антресоли
Подключите схему от макета к антресоли
Подключите схему от макета к антресоли
Подключите схему от макета к антресоли
Подключите схему от макета к антресоли

Шаг 10: Напишите или скопируйте код

#include #include #include // # include

#include "libsoc_gpio.h"

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

/ * Этот фрагмент кода ниже заставляет этот пример работать на всех 96Boards * /

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

unsigned int BUTTON_1; // первый датчик

unsigned int BUTTON_2; // второй датчик unsigned int BUTTON_3; // закрытие беззнакового int BUTTON_4; // третий датчик

struct User {

char имя пользователя [20]; символьный пароль [20]; }Пользователь;

struct Database {

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

int sensor1;

int sensor2; int sensor3;

int sensor1_last_state;

int sensor2_last_state; int sensor3_last_state;

char имя пользователя [50];

символьный пароль [50];

char YesNo [40];

ФАЙЛ * pFILE;

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

int running = 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 (конфигурация); } / * Конец специального кода 96Boards * /

int main ()

{gpio * led_1, * button_1, * button_2, * button_3, * button_4; // int touch; struct User Karina; struct User Manager; strcpy (Karina.username, "Карина Вальверде"); strcpy (Karina.password, "Более высокая вертикаль"); strcpy (Manager.username, «Босс»); strcpy (Manager.password, «ITESM»); struct Database Tool; struct Database Pen; struct Database Case; strcpy (Tool. Article_Name, «Инструмент»); struct Database Tool; struct Database Pen; struct Database Case; strcpy (Tool. Article_Name, «Инструмент»); strcpy (Pen. Article_Name, "Pen"); strcpy (Case. Article_Name, "Дело"); 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, ВЫХОД); libsoc_gpio_set_direction (button_1, ВХОД); libsoc_gpio_set_direction (button_2, ВХОД); libsoc_gpio_set_direction (button_3, ВХОД); libsoc_gpio_set_direction (button_4, ВХОД); // libsoc_gpio_set_direction (button_5, INPUT);

если ((libsoc_gpio_get_direction (led_1)! = ВЫХОД)

|| (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 (кнопка_2); sensor3 = libsoc_gpio_get_level (button_4); sensor1_last_state = датчик1; sensor2_last_state = датчик2; sensor3_last_state = сенсор3; 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 (имя пользователя, "Карина") == 0 && strcmp (пароль, "Таллер") == 0) {libsoc_gpio_set_level (led_1, LOW); libsoc_gpio_set_level (led_1, LOW); в то время как (libsoc_gpio_get_level (button_3)! = 1) {sensor1 = libsoc_gpio_get_level (button_1); sensor2 = libsoc_gpio_get_level (кнопка_2); sensor3 = 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, «Находится на стойке»); } 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, «Находится на стойке»); }} else if (strcmp (username, "Boss") == 0 && strcmp (password, "ITESM") == 0) {printf ("Вы хотите создать текстовый файл с базой данных? [Да / Нет] "); scanf ("% s", Да Нет); if ((strcmp (YesNo, Yes) == 0)) {// Manager_user (pFILE); pFILE = fopen ("База данных.txt", "ш"); 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 (кнопка_1); libsoc_gpio_free (кнопка_2); libsoc_gpio_free (button_3); }

Шаг 11: Запустите программу

Шаг 12: выводы

У этого проекта есть многообещающие перспективы, так как он может быть очень эффективно улучшен, датчики могут быть заменены на метки RFID´S, и в то же время с RFID можно использовать идентификационные карты для отслеживания того, кто несет ответственность за материал.

Рекомендуемые: