Table des matières:
- Fournitures
- Étape 1: Assemblage du circuit
- Étape 2: Configuration de notre RaspberryPi
- Étape 3: Configuration du backend
- Étape 4: Configuration du frontend
- Étape 5: Importation de la base de données pour notre projet
- Étape 6: Démarrer notre projet
- Étape 7: Le cas
- Étape 8: Admirez le produit final
- Étape 9: Les problèmes
Vidéo: Fontaine d'eau sans contact : 9 étapes (avec photos)
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:05
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
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
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
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
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
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
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é:
Distributeur de désinfectant pour les mains sans contact bricolage sans Arduino ni microcontrôleur : 17 étapes (avec photos)
Distributeur de désinfectant pour les mains sans contact bricolage sans Arduino ni microcontrôleur : Comme nous le savons tous, l'épidémie de COVID-19 a frappé le monde et a changé notre mode de vie. Dans cette condition, l'alcool et les désinfectants pour les mains sont des fluides vitaux, cependant, ils doivent être utilisés correctement. Toucher des contenants d'alcool ou des désinfectants pour les mains avec des mains infectées c
Cloche de porte bricolage sans contact sans Arduino ! : 7 étapes
Sonnette de porte bricolage sans contact sans Arduino ! : Les interrupteurs de sonnette sont l'une des choses les plus touchées par les étrangers. Et avec la pandémie de covid 19 devenant un problème sérieux, le maintien d'une bonne hygiène est devenu une priorité absolue de nos jours. Donc, dans ce instructable, je vais vous montrer un moyen simple
Indicateur de niveau d'eau et contrôle du moteur sans contact et sans corrosion. : 5 étapes
Indicateur de niveau d'eau sans contact et sans corrosion et contrôle du moteur. Manière sans contact à l'aide d'un capteur à ultrasons et d'une carte Arduino uno.P
Économisez de l'eau et de l'argent avec le moniteur d'eau de douche : 15 étapes (avec photos)
Économisez de l'eau et de l'argent avec le moniteur d'eau de douche : qu'est-ce qui utilise le plus d'eau - un bain ou une douche ? Je sais que quand je suis sous la douche, parfois mon esprit vagabonde, pensant à un cool
Fontaine d'eau Bluetooth Mood Light : 5 étapes
Fontaine d'eau Bluetooth Mood Light : nous allons utiliser à mauvais escient une vieille boîte en plastique et des bouchons de bouteilles dans une fontaine d'eau intelligente qui change de couleur de manière aléatoire ou selon notre humeur. Nous pouvons changer la couleur de la lumière en fonction de notre humeur à partir de notre smartphone via la connectivité Bluetooth