Table des matières:
- Étape 1: Matériaux
- Étape 2: Coupez les pièces pour le tiroir dans le MDF. (Pour de meilleurs résultats, utilisez un découpeur laser)
- Étape 3: Collez toutes les pièces ensemble pour former un tiroir avec deux petits tiroirs et un grand
- Étape 4: Vissez les vis au milieu de chaque tiroir
- Étape 5: Avec la perceuse, faites des trous dans le tiroir à l'arrière, le trou doit être de la taille du capteur
- Étape 6: Soudez chaque capteur CNY 70 avec les fils de cuivre. (répéter 4 fois plus)
- Étape 7: un circuit spécial est utilisé pour le capteur
- Étape 8: Connectez la mezzanine du capteur à la Dragon Board 410c. (utilisé pour accéder au GPIO)
- Étape 9: connectez le circuit de la planche à pain à la mezzanine
- Étape 10: écrivez ou copiez le code
- Étape 11: Exécutez le programme
- Étape 12: Conclusions
Vidéo: Tiroir d'inventaire "Smart Cities Hackathon Qualcomm17": 13 étapes
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Dans le document suivant, vous pouvez voir le processus de construction et de programmation d'un tiroir intelligent. Ce tiroir a été programmé dans un Dragon Board 410c, dans le but d'améliorer la qualité des villes. Le projet fait partie du concours « smart cities hackathon Qualcomm 17 ».
L'idée de ce projet est née d'un problème que très peu de gens voient, à savoir la perte et la mauvaise gestion des outils et du matériel fournis par des entreprises telles que des usines et même des hôpitaux. Dans ces lieux, certains matériaux et outils sont fournis aux travailleurs pour faire des activités, ce matériel et outils doivent être réutilisés car ils sont chers ou le manque de ressources économiques pour les remplacer.
Dans les hôpitaux, il y a des gens qui prennent le contrôle des matériaux qui sont retirés, mais lorsqu'il y a une intervention humaine il y a l'erreur, ce qui peut entraîner des dépenses inutiles. La meilleure solution à ce problème est un tiroir intelligent capable de maintenir un inventaire des objets empruntés et rendus et en même temps de savoir qui est le responsable.
Étape 1: Matériaux
Le matériel nécessaire au projet est le suivant:1 x Dragon Board 410c
1 x Capteur Mezzanine 96 Cartes pour Dragon Board 410c
1 x planche à pain
1 x MDF (Medium Density Fiberboard) feuille 61 x 122 cm
5 x capteur CNY 70
1 X TIP31B
1 x électro-aimant
1x7408
1 x clavier
1 écran
3 vis
Résistances (variété)
Fils de cuivre
La colle
Percer
Étape 2: Coupez les pièces pour le tiroir dans le MDF. (Pour de meilleurs résultats, utilisez un découpeur laser)
Étape 3: Collez toutes les pièces ensemble pour former un tiroir avec deux petits tiroirs et un grand
Étape 4: Vissez les vis au milieu de chaque tiroir
Étape 5: Avec la perceuse, faites des trous dans le tiroir à l'arrière, le trou doit être de la taille du capteur
Étape 6: Soudez chaque capteur CNY 70 avec les fils de cuivre. (répéter 4 fois plus)
Étape 7: un circuit spécial est utilisé pour le capteur
Étape 8: Connectez la mezzanine du capteur à la Dragon Board 410c. (utilisé pour accéder au GPIO)
Il est très important que cette étape soit effectuée avec le dragon board éteint, sinon il peut brûler, en plus tous les PIN doivent être placés correctement.
Étape 9: connectez le circuit de la planche à pain à la mezzanine
Étape 10: écrivez ou copiez le code
#include #include #include //#include
#include "libsoc_gpio.h"
#include "libsoc_debug.h" #include "libsoc_board.h"
/* Ce bout de code ci-dessous fait que cet exemple fonctionne sur toutes les 96Boards */
int non signé LED_1; // electro iman
unsigned int BUTTON_1;//premier capteur
unsigned int BUTTON_2;//second capteur unsigned int BUTTON_3;// close unsigned int BUTTON_4;//troisième capteur
struct Utilisateur{
nom d'utilisateur char[20]; mot de passe char[20]; }Utilisateur;
base de données de structure{
char Nom_Article[20]; caractère Emplacement[20]; }Base de données;
int capteur1;
int capteur2; int capteur3;
int sensor1_last_state;
int sensor2_last_state; int sensor3_last_state;
nom d'utilisateur char[50];
mot de passe char[50];
car OuiNon[40];
FICHIER *pFICHIER;
car Oui[20] = {"Oui"};
int en cours d'exécution = 1;
_attribute_((constructeur)) static void _init()
{ board_config *config = libsoc_board_init(); BUTTON_1 = libsoc_board_gpio_id(config, "GPIO-A");//capteur de poings BUTTON_2 = libsoc_board_gpio_id(config, "GPIO-C"); // deuxième capteur BUTTON_3 = libsoc_board_gpio_id(config, "GPIO-D"); // ferme le rack BUTTON_4 = libsoc_board_gpio_id(config, "GPIO-B"); // troisième capteur // BUTTON_5 = libsoc_board_gpio_id(config, "GPIO-E");
LED_1 = libsoc_board_gpio_id(config, "GPIO-E"); // électro iman
libsoc_board_free(config); } /* Fin du code spécial 96Boards */
int main()
{ gpio *led_1, *bouton_1, *bouton_2, *bouton_3, *bouton_4; //int touch; struct Utilisateur Karina; struct Gestionnaire d'utilisateurs; strcpy(Karina.nom d'utilisateur, "Karina Valverde"); strcpy(Karina.password, "Taller Vertical"); strcpy(Manager.nom d'utilisateur, "Le patron"); strcpy(Manager.password, "ITESM"); outil de base de données struct; struct Stylo de base de données; struct Cas de la base de données; strcpy(Tool. Article_Name, "Tool"); outil de base de données struct; struct Stylo de base de données; struct Cas de la base de données; strcpy(Tool. Article_Name, "Tool"); strcpy(Stylo. Nom_Article, "Stylo"); 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))
{ va échouer; } libsoc_gpio_set_direction(led_1, SORTIE); 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) != SORTIE)
|| (libsoc_gpio_get_direction(button_1) != SAISIE) || (libsoc_gpio_get_direction(button_2) != SAISIE) || (libsoc_gpio_get_direction(button_3) != SAISIE) || (libsoc_gpio_get_direction(button_4) != INPUT)) { goto fail; } sensor1 = libsoc_gpio_get_level(button_1); sensor2 = libsoc_gpio_get_level(button_2); sensor3 = libsoc_gpio_get_level(button_4); sensor1_last_state = sensor1; sensor2_last_state = sensor2; sensor3_last_state = sensor3; if (sensor1 ==1){ strcpy(Tool. Location, "Localed on Rack"); } else if (sensor1 == 0){ strcpy(Tool. Location, "Jamais placé dans ce rack"); } if (sensor2 ==1){ strcpy(Pen. Location, "Localed on Rack"); } else if (sensor2 == 0){ strcpy(Pen. Location, "Jamais placé dans ce rack"); } if (sensor3 ==1){ strcpy(Case. Location, "Localed on Rack"); } else if (sensor3 == 0){ strcpy(Case. Location, "Jamais placé dans ce rack"); } while(running) { libsoc_gpio_set_level(led_1, HIGH); printf("Veuillez entrer le nom d'utilisateur: "); scanf("%s", nom d'utilisateur); printf("Veuillez entrer le mot de passe: "); scanf("%s", mot de passe); if (strcmp(nom d'utilisateur, "Karina") == 0 && strcmp(mot de passe, "Taller") == 0){ libsoc_gpio_set_level(led_1, LOW); libsoc_gpio_set_level(led_1, BAS); while(libsoc_gpio_get_level(button_3) != 1){ sensor1 = libsoc_gpio_get_level(button_1); sensor2 = libsoc_gpio_get_level(button_2); sensor3 = libsoc_gpio_get_level(button_4); } libsoc_gpio_set_level(led_1, HAUT); if (sensor1 == 1 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, Karina.username); }else if (sensor1 == 0 && sensor1 != sensor1_last_state){ strcpy(Tool. Location, "Localed on Rack"); } if (sensor2 == 1 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, Karina.username); }else if (sensor2 == 0 && sensor2 != sensor2_last_state){ strcpy(Pen. Location, "Localed 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, "Localed on Rack"); } }else if (strcmp(username, "Boss") == 0 && strcmp(password, "ITESM") == 0){ printf(" Souhaitez-vous générer un fichier texte avec la base de données ? [Oui/Non] "); scanf("%s", OuiNon); if ((strcmp(YesNo, Yes) == 0)){ //Manager_user(pFILE); pFILE = fopen("Database.txt", "w"); fprintf(pFILE, "%s", "--------Base de données du rack----- \n"); fprintf(pFILE, "%s", "Nom de l'article:"); fprintf(pFILE, "%s", Outil. Nom_Article); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Emplacement de l'article:"); fprintf(pFILE, "%s", Outil. Emplacement); fprintf(pFILE, "%s", "\n"); fprintf(pFILE, "%s", "Nom de l'article:"); fprintf(pFILE, "%s", Stylo. Nom_Article); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Emplacement de l'article:"); fprintf(pFILE, "%s", Pen. Location); fprintf(pFILE, "%s", "\n");
fprintf(pFILE, "%s", "Nom de l'article:");
fprintf(pFILE, "%s", Case. Article_Name); fprintf(pFILE, "%s", "\t"); fprintf(pFILE, "%s", "Emplacement de l'article:"); fprintf(pFILE, "%s", Case. Location); fprintf(pFILE, "%s", "\n");
fclose(pFICHIER);
}
printf("Accès refusé \n");
} } échouer: if(led_1 || button_1|| button_2|| button_3) { printf("appliquer la ressource gpio échouer !\n"); libsoc_gpio_free(led_1); libsoc_gpio_free(button_1); libsoc_gpio_free(button_2); libsoc_gpio_free(button_3); }
Étape 11: Exécutez le programme
Étape 12: Conclusions
Le projet a un avenir prometteur, car il peut s'améliorer de manière très efficace, les capteurs peuvent être remplacés par des étiquettes RFID et en même temps, avec la RFID, il est possible d'utiliser des cartes d'identité pour contrôler qui est responsable du matériel.