Оглавление:
- Шаг 1: материалы
- Шаг 2: Вырежьте детали для ящика из МДФ. (Для лучших результатов используйте лазерный резак)
- Шаг 3: Склейте все части вместе, чтобы сформировать ящик с двумя маленькими ящиками и одним большим
- Шаг 4: Завинтите винты посередине каждого ящика
- Шаг 5: Просверлите отверстия в выдвижном ящике на задней стороне, отверстие должно быть размером с датчик
- Шаг 6: Приварите каждый датчик 70 китайских юаней к медным проводам. (повторить в 4 раза больше)
- Шаг 7: Для датчика используется особая цепь
- Шаг 8: Подключите сенсорный мезонин к плате Dragon Board 410c. (используется для доступа к GPIO)
- Шаг 9: Подключите схему от макета к антресоли
- Шаг 10: Напишите или скопируйте код
- Шаг 11: Запустите программу
- Шаг 12: выводы
Видео: Ящик инвентаря «Хакатон умных городов Qualcomm17»: 13 шагов
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
В следующем документе вы можете увидеть процесс создания и программирования интеллектуального ящика. Этот ящик был запрограммирован в 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 раза больше)
Шаг 7: Для датчика используется особая цепь
Шаг 8: Подключите сенсорный мезонин к плате 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 можно использовать идентификационные карты для отслеживания того, кто несет ответственность за материал.