Table des matières:

Fontaine d'eau sans contact : 9 étapes (avec photos)
Fontaine d'eau sans contact : 9 étapes (avec photos)

Vidéo: Fontaine d'eau sans contact : 9 étapes (avec photos)

Vidéo: Fontaine d'eau sans contact : 9 étapes (avec photos)
Vidéo: Messi Compte sa liasse de billet 2024, Novembre
Anonim
Fontaine à eau sans contact
Fontaine à eau sans contact

Pour la fin de ma première année en tant qu'étudiant MCT, j'ai été chargé de faire un projet qui contenait toutes les compétences que j'avais acquises dans les cours tout au long de l'année.

Je cherchais un projet qui vérifierait toutes les exigences fixées par mes professeurs et en même temps serait amusant à réaliser pour moi. Lorsque je cherchais un sujet, je ne pouvais m'empêcher de me sentir inspiré par Covid-19 (c'était juste avant qu'il n'éclate dans le monde.) J'ai choisi une fontaine/un distributeur d'eau sans contact, car il offrirait un moyen de boire de l'eau sans toucher à certains boutons avant que l'eau ne sorte.

Ce projet utilise un capteur de distance pour détecter si une tasse ou un verre a été placé sous la sortie d'eau, la fontaine procédera alors à la sortie d'eau pendant 60 secondes (100 ml / minute). C'est pour le rendre plus cohérent car détecter si le verre a été retiré s'est avéré être une tâche trop difficile/lente, c'est pourquoi une minuterie a été mise en place. Une fois que votre verre a été rempli de 100 ml d'eau, vous pouvez attendre 5 secondes et si le verre est toujours devant le capteur de distance, il se remplira une autre fois (cela signifie qu'il y a également un délai de 5 secondes entre le remplissage de deux éléments).

Fournitures

Composants

- 1x RaspberryPi (j'ai utilisé la 4ème version mais les versions plus anciennes pourraient également fonctionner)- 1x transistor S8050 ou 1x transistor PN2222 pourraient également fonctionner- 1x Photorésistance- 1x HC-SR04 (Capteur de Distance Ultrasonique)- 1x RFID-RC522- 3x Différent couleurs LED (bleu, jaune, rouge)- 1x LCD1602- 1x Buzzer actif- 1x PCF8574- 1x MCP3008- 1x Pompe à eau (Une pompe péristaltique 12v a été utilisée, lien vers cet article)

- 1x alimentation CC (12v, 600mAh)- 1x bloc d'alimentation avec 3 spots- 3x planches à pain (vous pourriez probablement en utiliser moins)- T-cobbler pour les broches RaspberryPi GPIO- Câble T-cobbler (pour la connexion entre pi et cobbler)

Matériaux et outils utilisés

- Une perceuse avec les forets suivants:

- 4mm (pour pré-percer des trous pour les vis) - 15mm (pour percer des trous pour le capteur de distance)

- Tout tournevis- 30 vis de 45mm de long- 6 vis de 20mm- 2 charnières pour la porte- Une plaque de MDF d'environ 130cm sur 80cm- Une paire de limes

Étape 1: Assemblage du circuit

Assemblage du circuit
Assemblage du circuit
Assemblage du circuit
Assemblage du circuit
Assemblage du circuit
Assemblage du circuit

Pour le circuit nous avons 2 capteurs, un capteur de distance et une photorésistance. Le capteur de distance est utilisé pour détecter si une tasse a été mise à portée de la fontaine à eau et en option j'ai ajouté une photorésistance, celle-ci est utilisée pour détecter si le boîtier a été ouvert par quelqu'un qui n'est pas censé l'ouvrir. En plus de cela, nous avons un lecteur RFID qui peut être utilisé pour authentifier un mécanicien qui doit ouvrir le boîtier pour remplir le réservoir d'eau ou pour un autre problème mécanique.

Pour les éléments actifs, nous avons le LCD1602, le buzzer actif et une pompe péristaltique, le LCD est utilisé pour afficher l'état comme si le boîtier est ouvert ou si la pompe fonctionne ainsi que l'adresse IP de l'appareil sera affichée, le buzzer est utilisé pour faire un bruit alarmant lorsque le boîtier a été ouvert sans que quelqu'un l'autorise.

J'ai ajouté la maquette et les vues schématiques du circuit ci-dessous.

Étape 2: Configuration de notre RaspberryPi

Pour configurer notre RaspberryPi, nous allons télécharger le logiciel d'imagerie à partir du site Raspberry, avec cela vous pouvez télécharger la version de Raspbian que vous voulez et imager votre SDCARD pour vous. Une fois que cet outil a fait son travail, vous pouvez ouvrir la SDCARD dans l'Explorateur Windows, vous pourrez voir la partition de démarrage de votre RaspberryPi. Ici, nous trouverons un fichier appelé cmdline.txt (n'ouvrez pas ce fichier dans le bloc-notes, ouvrez-le dans Notepad ++ ou tout autre IDE). Nous ajouterons ip=169.254.10.1 à la fin de ce fichier pour nous assurer que nous pouvons nous connecter à notre appareil via Ethernet (assurez-vous de ne pas ajouter d'ENTRÉE à la fin de votre fichier ou vous aurez des problèmes).

Vous pouvez maintenant mettre votre SDCARD dans votre RaspberryPi et le démarrer, connecter le Pi à votre ordinateur et utiliser Putty pour vous connecter à votre Pi via SSH. J'utilise la commande suivante pour me connecter à mon Pi au lieu d'utiliser Putty. "ssh [email protected]" cela peut expirer, alors soyez patient et attendez que le Pi démarre. Une fois invité à entrer un mot de passe, nous remplirons le mot de passe par défaut de "raspberry". Assurez-vous de changer ce mot de passe après vous être connecté pour empêcher toute personne mal intentionnée d'accéder à votre Raspberry Pi.

Nous allons maintenant configurer notre Pi pour fournir les fonctionnalités nécessaires à notre code. Utilisez "sudo raspi-config" pour ouvrir le menu de configuration et ici, nous irons aux options d'interfaçage.

Sous ici, nous allons activer les options suivantes: - SPI- I2C

Suivez ce guide pour configurer une connexion Internet sans fil sur votre Pi, une fois que vous l'avez fait avec succès, nous pouvons installer nos packages requis.

Packages: (exécutez les commandes dans l'ordre indiqué ici)

Ce qui suit pour obtenir les dernières mises à jour pour notre pi-sudo apt update && apt upgrade -y

Installez notre serveur MySQL et notre serveur Web - sudo apt install mariadb-server apache2

J'utiliserai MySQL Workbench pour configurer la base de données plus tard dans ce guide, si vous ne l'utilisez pas et préférez phpmyadmin, vous pouvez l'installer avec la commande suivante, vous êtes libre d'utiliser n'importe quel autre client MySQL aussi longtemps que vous 'sont capables d'importer correctement la base de données.- sudo apt install phpmyadmin

Après avoir fait tout ce qui précède, nous devons créer un utilisateur pour notre base de données. Utilisez "sudo mysql -u root" pour vous connecter à votre serveur MySQL, ici nous allons créer un utilisateur appelé db_admin avec son mot de passe respectif, garder ce mot de passe noté quelque part pour plus tard dans les instructions. GRANT ALL PRIVILEGES ON *.* TO "db_admin"@"%" IDENTIFIÉ PAR "yourPasswordHere" AVEC GRANT OPTION;

Utilisez la commande "\q" pour quitter le terminal MySQL.

Packages Python: nous devons encore installer certains packages python avant de continuer, exécutez la commande ci-dessous pour vous assurer que tout est là pour une expérience sans faille.

sudo pip3 installer Flask Flask-Cors Flask-SocketIO gevent gevent-websocket greenlet spi SPI-Pyspidev

Ainsi que les packages MySQL suivants connect pythonudo apt install python3-mysql.connector -y

Si tout s'est bien passé, vous pouvez maintenant visiter votre Pi sur votre navigateur Web avec l'adresse suivante

Étape 3: Configuration du backend

Configuration du backend
Configuration du backend

Ici, je vais expliquer comment vous pouvez configurer le backend vous-même, téléchargez d'abord le fichier rar ci-dessous, placez-le dans un répertoire temporaire. Connectez-vous à votre RaspberryPi avec FileZilla ou WinSCP avec les informations d'identification suivantes:

IP: 169.254.10.1User: piPassword: raspberry (si vous avez changé le mot de passe, faites-le également ici)

Vous pouvez ensuite transférer les fichiers que vous avez récupérés dans le répertoire de votre choix dans le répertoire personnel de l'utilisateur pi. Par souci de simplicité, nous supposerons dans cette configuration que nous avons téléchargé tous nos fichiers sous le répertoire de documents.

Gardez votre programme FTP ouvert pour la prochaine étape !

Maintenant, ouvrez à nouveau votre invite de commande avec votre connexion SSH car nous allons devoir apporter quelques modifications au serveur Web afin que le frontend puisse communiquer avec le backend. Nous allons ouvrir le fichier de configuration Apache2 par défaut et le modifier légèrement: sudo nano /etc/apache2/sites-available/000-default.conf

Ajoutez les lignes suivantes sous DocumentRoot dans le fichier de configuration que nous venons d'ouvrir: ProxyPass /api/ https://127.0.0.1:5000/api/ProxyPassReverse /api/

Vous pouvez jeter un oeil à l'image ci-jointe pour un exemple.

Étape 4: Configuration du frontend

Avant de transférer nos fichiers, nous devrons faire quelque chose avant de pouvoir commencer à transférer nos fichiers frontaux. Ouvrez votre invite de commande avec la connexion SSH que vous avez établie précédemment et utilisez la commande ci-dessous pour passer à l'utilisateur root de notre RaspberryPi: "sudo su -"

Après cela, nous pouvons changer le mot de passe de notre utilisateur root avec la commande suivante: "passwd"Cela vous demandera de saisir un nouveau mot de passe, après cela, vous pouvez revenir à votre programme FTP et vous connecter avec vos informations d'identification root:

IP: 169.254.10.1Utilisateur: rootMot de passe:

Téléchargez le fichier rar ci-dessous et décompressez-le dans un dossier temporaire, vous pouvez déplacer ces fichiers vers votre RaspberryPi dans le répertoire suivant /var/www/html/, après avoir fait cela, vous pouvez visiter le frontend sur https:// /169.254.10.1, vous ne pouvez pas encore interagir car le backend n'est pas encore en cours d'exécution, je vous montrerai plus tard dans ce guide comment procéder.

Étape 5: Importation de la base de données pour notre projet

Importation de la base de données pour notre projet
Importation de la base de données pour notre projet
Importation de la base de données pour notre projet
Importation de la base de données pour notre projet

Ouvrez votre programme de gestion de serveur MySQL préféré et connectez-vous à votre Raspberry Pi avec les informations d'identification que nous avons créées à l'étape 2.

Téléchargez le vidage de la base de données ci-dessous et importez-le comme vous le feriez normalement, MySQL Workbench vous iriez dans Fichier> Ouvrir le script SQL et sélectionnez le vidage de la base de données que vous avez téléchargé. Appuyez ensuite sur CTRL + MAJ + ENTRÉE et le script SQL devrait être exécuté et la structure pour la base de données doit être créé.

J'ai ajouté les informations d'identification que j'ai utilisées pour mon RaspberryPi comme exemple ci-dessous ainsi que plusieurs images de la structure de la base de données, vous pouvez y jeter un coup d'œil et essayer d'avoir une idée générale de la façon dont tout fonctionne.

Étape 6: Démarrer notre projet

Démarrer notre projet
Démarrer notre projet
Démarrer notre projet
Démarrer notre projet

Avant de pouvoir démarrer notre projet, nous devons modifier les informations d'identification de la base de données dans le fichier config.py. Si vous avez suivi exactement les instructions indiquées dans ce guide, vous pouvez les trouver sous /home/pi/Documents/Backend/src/config.py ici, vous devez modifier les informations d'identification de la variable db_config pour qu'elles correspondent à celles que nous avons créées précédemment pour notre base de données. J'ai ajouté un exemple de ce que vous verrez dans ce fichier ci-dessous.

Après cela, nous ajouterons un fichier.service. Ce fichier garantira que notre projet démarre lorsque le RaspberryPi démarre, assurez-vous de changer le répertoire de manière appropriée où vous avez installé les fichiers backend. Utilisez la commande suivante pour créer le fichier de service: sudo nano /etc/systemd/system/dispenser.serviceCela va créer un fichier de service et copier-coller le code ci-dessous dans ce fichier.

[Unit]Description=Water DispenserAfter=mysql.service

[Service]Type=simpleRestart=alwaysRestartSec=1User=piExecStart=/usr/bin/python3 /home/pi/Documents/Backend/index.py

[Installer] WantedBy=multi-user.target

Modifiez la ligne où il est écrit /home/pi/Documents/Backend/index.py à l'endroit où vous avez installé vos fichiers backend, si vous ne le faites pas correctement, le projet ne démarrera pas correctement ! Je vais ajouter un fichier exemple ci-dessous.

Après avoir fait cela et quitté l'éditeur de texte, nous pouvons activer le service avec les commandes suivantes:- sudo systemctl daemon-reload- sudo systemctl enable dispenser- sudo systemctl start distributeur

Et en plus, nous pouvons exécuter: sudo systemctl status dispenserCela affichera des informations sur notre service, s'il est actif ou non, …

Étape 7: Le cas

L'affaire
L'affaire
L'affaire
L'affaire
L'affaire
L'affaire
L'affaire
L'affaire

Félicitations nous y sommes presque, je vais ajouter quelques photos qui montreront avec précision les dimensions que j'ai utilisées pour mon projet, j'ai utilisé des plaques MDF de 18mm d'épaisseur, vous pouvez éventuellement utiliser une épaisseur différente. Mon boîtier peut être utilisé comme ligne directrice pour concevoir le vôtre ou vous pouvez recréer ce que j'ai fait. (Si vous utilisez une épaisseur de MDF différente mes dessins ne vous permettront plus de réaliser mon dessin, veillez à l'adapter !)Les panneaux que j'ai réalisés:- 2 panneaux de 32cm par 42cm (panneaux latéraux)- 1 panneau de 24cm par 32cm (plaque inférieure)- 2 panneaux de 16cm par 24cm (plaque avant où reste LCD et plaque voisine)- 1 panneau de 28cm par 24cm (plaque médiane vue de face)- 1 panneau de 30cm par 24cm (plaque supérieure)

Étape 8: Admirez le produit final

Admirez le produit final
Admirez le produit final
Admirez le produit final
Admirez le produit final

Vous avez atteint la fin et, espérons-le, avez réussi à faire de tout cela une réalité. Si vous n'êtes qu'un passant en train de lire, bienvenue également, je vous remercie d'avoir lu jusqu'à la dernière étape !

J'ai dépensé beaucoup de sang, de sueur et de larmes dans ce projet, donc je vous serais reconnaissant si vous laissiez un commentaire, toute critique sur l'amélioration est la bienvenue !

Étape 9: Les problèmes

Je mettrais le projet dans son état actuel en tant que prototype fonctionnel qui peut voir beaucoup plus d'améliorations.

La base de code du backend est structurée de manière à ce qu'une relation maître-esclave puisse être parfaitement établie où une fontaine agirait comme le frontend principal et toutes les autres fontaines pousseraient les données et les modifications sur l'API REST du maître. Il existe également des vestiges d'un système de jetons d'API dans le code, car il était destiné à être implémenté mais coupé plus tard en raison de contraintes de temps.

J'ai téléchargé mon code sur mon serveur Gitlab et vous pouvez y jeter un œil au code dans son ensemble:

Conseillé: