Table des matières:
- Fournitures
- Étape 1: Configuration de votre RPi
- Étape 2: MCP3008 + TMP36
- Étape 3: Base de données
- Étape 4: HNT11, pour les vrais garçons
- Étape 5: Capteurs de gaz (légendes uniquement)
- Étape 6: Le Shiftregister, 74HC595AG
- Étape 7: Frontend, une leçon précieuse
- Étape 8: le backend
- Étape 9: Faire le cas
- Étape 10: Évaluation et conclusion
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-23 14:45
Bonjour, je suis un étudiant belge et c'est mon premier gros projet pour mon baccalauréat ! Ce Instructable explique comment faire un compteur de pollution de l'air pour les pièces fermées, en particulier les salles de classe !
Je vous entends penser pourquoi ce projet? Eh bien, tout a commencé quand je suis allé au lycée. L'après-midi après un bon déjeuner et une pause, les cours reprennent. Mais il y a un problème, le professeur a oublié d'ouvrir la fenêtre pendant que nous déjeunions donc il fait chaud, en sueur et vous ne pouvez pas vous concentrer car vous vous endormez. C'est parce qu'il y a trop de CO2 dans l'air.
Mon projet résoudra ce problème et rendra tous les étudiants plus concentrés pendant leurs cours.
Fournitures
1 xRaspberry Pi 4 (55 €)
1 x moteur pas à pas avec chauffeur (5 €)
2 piles 12v 6800 mAh (2x 20€)
2 x module abaisseur (2x 5 €)
1 écran LCD 16x2 (1,5 €)
Capteurs: 1x MQ8, 1x MQ4, 1x MQ7, 1x MQ135, 1x HNT11, 1x TMP36 (1 x 23 €)
CI: 1x MCP3008, 2x 74hc595AG (1x 2,30 €, 2x 0,40 €)
LED: 2x vertes, 2x rouges, 3x jaunes (trouvées dans certains vieux matériels, normalement 0,01 € chacune)
Connecteur pour les piles (2 x 0,35 €)
40 câbles de connexion f-to-f (1,80 €)
40 câbles de connexion f-to-m (1,80 €)
Câbles connecteurs 20 m à m (1,80 €)
2 x PCB à souder (2x 0,70 €)
Outils:
Fer à souder (de préférence 60 Watt)
Étain à souder
Tôle d'aluminium 50x 20
Boîtier (j'ai utilisé un vieux mini boîtier d'ordinateur)
Cela pourrait facilement être du MDF ou des idées personnelles.
Étape 1: Configuration de votre RPi
Donc, notre cœur, notre cerveau et notre âme sont dans ce produit. Menacez-le bien, car cela peut vous blesser d'une manière ou d'une autre. J'utilise un RPi 4B 4 Go, les autres modèles devraient faire l'affaire. Vous pouvez vous attendre à plus de décalage sur les anciens modèles.
Nous avons obtenu le système d'exploitation de notre école avec des logiciels préinstallés tels que phpMyAdmin.
Tout d'abord assurez-vous que vous pouvez vous connecter à votre Raspberry Pi via ssh, nous en aurons besoin de beaucoup de temps.
Nous devons donc d'abord activer le bus SPI, les broches GPIO et désactiver les autres bus, nous n'en aurons pas besoin.
Vous pouvez le faire dans le menu raspi-config. Accédez à Interfaces et activez GPIO et SPI normalement, il ne sera pas nécessaire de Pendant que vous êtes ici, développez votre stockage en allant à avancé, puis appuyez sur Entrée pour étendre le stockage.
Maintenant, redémarrez. Nous aurons besoin d'extensions pour utiliser VS Code sur notre pi, pour exécuter notre serveur et notre base de données.
Le processus d'installation de l'extension de code VS peut être trouvé ici.
Nous allons maintenant installer les extensions pour notre serveur et notre base de données. Utilisez le terminal et tapez 'python install flask, flask-cors, mysql-python-connector, eventlet' attendez la fin.
Nous pouvons maintenant commencer par la réalisation du projet.
Étape 2: MCP3008 + TMP36
Nous avons donc 6 capteurs: 4 gaz, 1 capteur d'humidité + température et 1 capteur de température. C'est une vraie tâche de les faire fonctionner. Tous les capteurs sont des capteurs analogiques, nous devons donc convertir le signal analogique en un signal numérique. C'est parce que le RPi (Rasberry Pi) ne peut « comprendre » que les signaux numériques. Pour plus d'informations, cliquez ici.
Pour accomplir cette tâche, vous aurez besoin d'un MCP3008, cela fera l'affaire !
Il a 16 ports, en comptant du haut (la petite bulle) à gauche, en bas, de l'autre côté et en haut. Les broches 1-8 sont les entrées pour le signal analogique de nos capteurs. La broche 9 de l'autre côté est un GND qui doit être connecté au GND du circuit complet, sinon cela ne fonctionnerait pas. Les broches 10-13 doivent être connectées plus soigneusement, elles transmettront les données vers et depuis le RPi. La broche 14 est un autre GND et les broches 15 et 16 sont les VCC, elles doivent être connectées au côté positif du circuit.
Voici la disposition du câblage thr:
- MCP3008 VDD vers 3,3 V externe MCP3008 VREF vers 3,3 V externe
- MCP3008 AGND vers GND externe
- MCP3008 DGND vers GND externe
- MCP3008 CLK vers Raspberry Pi broche 18
- MCP3008 DOUT vers Raspberry Pi broche 23
- MCP3008 DIN vers Raspberry Pi broche 24
- MCP3008 CS/SHDN vers Raspberry Pi broche 25
C'est aussi un bon moment pour connecter le GND du RPI au GND externe. Cela fera couler l'électricité du RPi.
Voici comment le connecter correctement.
Assurez-vous de bien connecter, sinon vous risquez de tout court-circuiter !
Le premier morceau de code entre en place ici.
Vous pouvez copier mon code depuis mon projet github sous models. Analog_Digital.
Au bas de la page, vous trouverez le code source pour le faire fonctionner.
Mais nous avons besoin de notre premier capteur, donc nous pouvons tester.
Nous devons tester notre capteur s'il fonctionne. Connectez une alimentation 3,3 V ou 5 V au côté positif du TMP36. N'oubliez pas de le connecter également au GND, c'est peut-être quelque chose de stupide, mais croyez-moi. C'est la réalité;). Vous pouvez tester avec votre multimètre la sortie du capteur c'est la broche du milieu. Avec cette simple équation, vous pouvez vérifier la température en °C. ((milivolts*tension d'entrée)-500)/10 et le tour est joué ! Au revoir! Eh bien non hahah nous avons besoin du MCP3008. Connectez la broche analogique de votre TMP36 à la première broche d'entrée du MCP3008. C'est la broche 0.
Vous pouvez utiliser l'exemple de code en bas pour cette classe MCP. Ou quelque chose que vous trouverez en ligne fera l'affaire.
Étape 3: Base de données
Alors maintenant que nous pouvons lire dans notre premier capteur, nous devons l'enregistrer dans une base de données. C'est la mémoire de notre cerveau. J'ai conçu cette base de données pour qu'elle soit extensible et facilement modifiable pour de futurs changements.
Nous devons donc d'abord penser à ce que nous obtiendrons en tant qu'entrées et si nous devons enregistrer des éléments spécifiques tels que les statuts de certains objets.
Ma réponse serait: entrée de 6 capteurs donc nous devons faire un tableau de capteurs, avec ces capteurs nous allons faire des valeurs. Qu'est-ce qui est lié à une valeur ? Pour moi c'est l'état de la fenêtre, est-elle ouverte ou est-elle fermée pendant que le capteur mesure la valeur. Mais l'emplacement est également un facteur pour ma valeur, nous y ajouterons donc cela. L'heure et la date d'une valeur sont également importantes, je vais donc l'ajouter.
Pour une expansion future, j'ai ajouté une table utilisateur.
Alors quelle est mon idée en ce qui concerne les tables: valeurs de la table, adresse de la table (liée à la salle), salle de la table (liée à la valeur), fenêtre de la table (liée à la valeur), capteur de table (liée à la valeur) et une table à l'état sauvage pour utilisateurs.
Quant à relier les tables entre elles. Chaque valeur a besoin d'un capteur, d'une fenêtre, d'une valeur pour le capteur, d'un identifiant afin que nous puissions rendre la valeur unique, un horodatage pour le moment où la valeur a été créée et en dernier lieu, nous n'avons pas besoin d'une pièce, ce qui est facultatif mais peut être ajoutée.
Voilà donc à quoi ça ressemble maintenant. C'est ce que j'utilise pour le reste de mon projet.
Étape 4: HNT11, pour les vrais garçons
Donc, comme nous n'étions pas autorisés à utiliser n'importe quel type de bibliothèque. Nous devons tout programmer nous-mêmes.
Le HNT11 est un système à un fil, ce qui signifie que vous avez un GND et un VCC comme tout autre appareil électronique, mais la broche 3 est une broche d'entrée et de sortie. C'est donc un peu étrange, mais j'ai beaucoup appris de cela.
Connectez le VCC au 3,3 V externe et le GND au GND externe.
La fiche technique du DHT11 contient tout pour utiliser ces capteurs.
Nous pouvons déterminer qu'un bit haut contient un bit bas et un bit haut. Mais la durée de la partie haute détermine le bit pour de vrai. Si la partie haute est émise pendant plus de 100 µs (normalement 127 µs), le bit est haut. Si le bit est plus court que 100 µs (normalement autour de 78 µs), le bit est bas.
Lorsque le HNT11 est activé, il commence à émettre des signaux. C'est toujours 41 bits. Cela commence par un bit de départ, cela ne veut rien dire, nous pouvons donc sauter celui-ci. Les 16 premiers bits/2 octets sont la partie entière et flottante pour l'humidité. C'est la même chose pour les 2 derniers octets mais maintenant c'est pour la température.
Il nous suffit donc de calculer la durée de chaque bit et nous avons terminé.
Dans le code source sous DHT11, vous trouverez ma méthode pour résoudre ce problème.
Étape 5: Capteurs de gaz (légendes uniquement)
J'ai donc pensé au début du projet que ce serait une bonne idée d'utiliser de nombreux capteurs. Réfléchissez avant d'agir et achetez localement cela vous fera économiser de nombreuses heures de sommeil ! Parce que vous pouvez commencer plus tôt et cela vous rendra plus disposé à y aller.
J'ai donc 4 capteurs de gaz. MQ135, MQ8, MQ4 et un MQ7 tous ces capteurs ont des gaz spécifiques qu'ils mesurent le mieux. Mais ceux-ci sont tous différents dans leur configuration.
J'ai donc d'abord utilisé la fiche technique, cela ne m'a pas fait envie. Ensuite, j'ai recherché des exemples de code. Ce que j'ai trouvé, c'est une bibliothèque d'Adafruit. J'ai essayé de le reproduire aussi bien que possible. Il fonctionnait avec l'un des quatre capteurs.
Je l'ai laissé reposer un moment et j'y suis revenu.
Ce que j'ai fait pour que cela fonctionne pour ce capteur est:
- J'ai utilisé la fiche technique pour marquer les points du gaz que je voulais mesurer. Donc 1 ro/rs à 400ppm, 1,2 à 600ppm…
- Ensuite, j'ai mis tous ces points en excel et j'ai extrait la formule de la courbe. J'ai enregistré cela dans ma base de données.
- Dans la fiche technique, j'ai également lu la résistance normale et la résistance à l'air propre. Ces valeurs étaient également enregistrées dans la base de données.
J'ai versé tout cela dans du code, vous pouvez le trouver comme les trois dernières fonctions de la classe MCP3008. Mais ce n'est pas encore fini, malheureusement je n'ai pas eu assez de temps.
Étape 6: Le Shiftregister, 74HC595AG
Donc c'est un IC. Et cela fait quelque chose de spécial, avec cet appareil, il est possible d'utiliser moins de sorties GPIO pour le même signal de sortie. Je l'ai utilisé pour le LCD (Liquid Crystal Display) et mes leds. J'afficherai l'adresse IP sur l'écran LCD afin que tout le monde puisse surfer sur le site.
Les LED sont choisies judicieusement 2 rouges, 3 jaunes et 2 vertes. Cela montrera à tout moment la qualité de l'air dans la pièce.
Le registre à décalage est un périphérique de sortie parallèle, il n'est donc pas possible de sortir différents signaux dans une période de temps. Cela serait possible s'il était programmé de l'extérieur mais n'était pas sauvegardé de manière native.
Comment utiliser le CI ? Eh bien, vous avez 5 entrées et 9 sorties. 8 sorties logiques pour les 8 broches, puis la 9e broche pour envoyer les données restantes à un autre registre à décalage.
Nous connectons donc la broche 16 au VCC externe, la broche suivante est la première sortie, nous en aurons donc besoin pour l'écran LCD. La broche 14 est la ligne de données, à laquelle nous enverrons des données. La 13ème broche est l'interrupteur d'activation, un signal faible active le circuit intégré, un signal élevé est nécessaire pour l'arrêter. La broche 12 est la broche où nous pouvons déterminer quand un bit a été envoyé. Lorsque vous tirez cette broche vers le bas, de haut en bas, elle lit l'état du signal de la broche 13 et le stocke dans sa mémoire 8 bits. La broche 11 est similaire lorsque cette broche est définie à l'état haut puis bas, elle envoie les 8 bits à son port. Et la dernière broche, la broche 10 est la réinitialisation générale, cette broche doit rester haute sinon elle ne fonctionnera pas. La dernière connexion est la broche GND 8 dont nous avons besoin pour connecter celle-ci au GND externe.
Alors maintenant, connectez les broches comme vous le souhaitez au raspberry pi. La façon dont je l'ai fait était de les connecter aussi près que possible les uns des autres pour m'assurer que je savais où ils étaient.
Lorsque vous obtenez une sortie correcte. Vous pouvez le souder à un PCB avec les LED. et des résistances de 220 Ohm. Soudez la sortie du CI à la led correspondante. Vous devriez maintenant avoir quelque chose comme ça.
Vous pouvez trouver mon code de test ici sous Shiftregister. Lorsque vous travaillez avec un 74HC595N, vous n'aurez pas besoin du MR, vous pouvez donc le laisser non connecté.
L'écran LCD est à peu près le même. Il est assez facile à utiliser avec le registre à décalage car l'entrée pour l'écran LCD est exactement l'entrée pour le registre à décalage.
Pour l'écran LCD, il existe un autre code pour le faire fonctionner, mais c'est à peu près le même que le shifregister. Vous pouvez trouver le code de test ici sous LCD.
Étape 7: Frontend, une leçon précieuse
Alors ici, je vais m'égarer, c'est une section sur la façon dont vous devriez le faire. C'est quelque chose de très très précieux qui a appris.
Faites le frontend avant le backend !!!!
Je l'ai fait dans l'autre sens. J'ai fait des appels inutiles pour ma base de données, je passe trop de temps là-dessus.
Sur la page de destination, j'avais besoin de la température et de l'humidité actuelles et des valeurs de tous les capteurs de gaz dans un joli graphique. Je dois également montrer l'adresse IP du RPi.
Sur la page des capteurs, j'ai besoin de la sélection d'un capteur et du temps de sélection. J'ai choisi pour la sélection d'un jour puis la période à partir de ce jour. Cela m'a beaucoup facilité la tâche parce que je pouvais mieux le contrôler.
Sur la dernière page, la page des paramètres permet de gérer certaines valeurs telles que les niveaux de gaz et de température sains dangereux ou dangereux. Vous pouvez également faire redémarrer le RPi si vous en ressentez le besoin.
J'ai donc d'abord fait un design pour pouvoir facilement commencer à travailler sur la partie codage. J'ai progressivement progressé une chose à la fois. La mission était d'abord mobile, je vais donc me concentrer sur cela en premier. Ensuite, je me dirigerai vers les écrans plus grands.
Vous pouvez trouver mes pages, css et js dans mon Github.
Étape 8: le backend
Cette partie est la partie que j'ai mixée avec le frontend. Quand j'ai fait quelque chose pour le frontend, je l'ai fait fonctionner sur le backend. Il n'aurait donc pas besoin de révision plus tard. C'est quelque chose que je n'ai pas fait en premier lieu et à cause de cela j'ai perdu certainement 2 semaines de temps. Stupide que je suis! Mais une leçon que je prends heureusement pour d'autres projets.
Ainsi, lorsque vous créez un backend, créez quelque chose que vous utiliserez. Mais rendez-le à l'épreuve du temps en le rendant réutilisable et non codé en dur. Donc, lorsque j'aurai besoin des 50 dernières valeurs de mon DHT11, je vérifierai s'il y a des valeurs en cours ? Oui, comment puis-je les mettre dans la base de données. Comment puis-je les sortir de la base de données. Comment le montrer ? Graphique, graphique ou simplement les données simples ? Ensuite, je crée un nouvel itinéraire avec les différents paramètres et propriétés tels que les dates, les noms de capteurs spécifiques ou ce que je vais appeler. Je veux dire, est-ce que j'appelle toutes les valeurs des capteurs MQ ou est-ce que j'appelle tous les capteurs avec MQ dans leur nom. Ensuite, j'ai mis un peu de gestion des erreurs. Lorsque la demande de l'appel est la bonne méthode, alors elle peut continuer, sinon elle obtient une belle erreur.
Voici également les threads localisés, ce sont des morceaux de logiciels qui vous permettent d'exécuter du code parallèle. Vous pouvez exécuter les appels de sites Web, la fonction de création de valeur et le led+shiftregister. Ces fonctions sont totalement indépendantes les unes des autres.
Donc pour les led. J'ai fait une valeur inférieure/saine pour le CO2. Cette valeur provenait de plusieurs sources gouvernementales. La valeur saine pour les salles de classe est inférieure à 600 ppm de CO2 par mètre cube. La valeur malsaine est tout au-dessus de 2000 ppm. Donc les LED font le pont. Si la valeur du capteur MQ4 est de 1400, il sera automatiquement calculé dans quel niveau de danger il se trouve. 2000 - 600 = 1400, la plage totale est donc de 1400 /7 = 200. Ainsi, lorsque la valeur atteint 550, une LED verte s'affiche. 750 montre 2 LED vertes, 950 1 jaune 2 LED vertes. Etc.
Lorsque la valeur dépasse le milieu, la fenêtre s'ouvre. J'ai utilisé un moteur pas à pas en raison du couple élevé et de la précision. Et lorsque la valeur dépasse les 2000 une petite alarme se déclenche. Il s'agit d'alarmer les personnes à l'intérieur de la pièce.
On peut aussi détecter les gaz de fumée donc en cas d'incendie. Il l'enregistre également. Lorsqu'elle dépasse une certaine valeur, l'alarme se déclenche et la LED clignote.
L'écran LCD est principalement là pour afficher l'adresse IP afin que vous puissiez surfer sur le site.
Vous pouvez trouver tout + code dans mon Githubin l'app.py
Étape 9: Faire le cas
J'ai trouvé un petit boîtier d'ordinateur pour tous mes composants.
J'ai découpé une feuille d'aluminium sur mesure. Et percé des trous où la feuille reposerait. Cela correspond aux trous de la carte mère.
Ensuite, j'ai regardé comment tout irait à l'intérieur du boîtier. J'ai tout rangé et j'ai commencé à bouger.
Quand j'étais satisfait de la façon dont cela fonctionnerait, j'ai commencé à marquer les trous dont j'avais besoin pour les capteurs, RPi, PCB, modules de puissance et module de moteur pas à pas. Les trous sont pour l'entretoise PCB, cela fera de la place pour que les pièces métalliques n'entrent pas en contact avec la feuille d'aluminium. Cela lui donne aussi un joli look.
J'ai attrapé les câbles de chaque circuit intégré ou autre appareil et les ai attachés ensemble. C'est parce que je pouvais voir à quoi servent les câbles. J'ai tout bien placé chacun sur des entretoises et j'ai utilisé des écrous et des vis pour tout maintenir bien en place.
Pour alimenter tout cela, j'ai utilisé 2 piles. Celles-ci fournissent beaucoup d'énergie, mais ce sont toujours des batteries, elles s'épuiseront donc avec le temps. Je les ai montés avec du velcro. J'ai utilisé du velcro car je pouvais facilement remplacer ou me débarrasser des piles.
Le moteur pas à pas, l'écran LCD et les LED sortiront du haut du boîtier. J'ai donc soigneusement posé le couvercle du boîtier sur le dessus, j'ai marqué les trous et les ai percés avec une perceuse. Ainsi, nous pouvons facilement tout voir.
Une fois l'affaire terminée, nous devons tout câbler, ici vous pouvez trouver le schéma de câblage.
Étape 10: Évaluation et conclusion
C'est donc/c'était mon premier projet.
Ça a l'air bien je suppose.
J'ai appris beaucoup de nouvelles choses, j'ai appris le bon et le mauvais côté de la gestion de projet. C'était vraiment une leçon précieuse. J'ai appris que vous ne pouvez pas attendre, vous devez vraiment continuer à donner. Vous devez documenter chaque mouvement (presque très mouvement), et que vous devez le faire quand vous venez de le faire.
Concentrez-vous sur 1 chose à la fois. Vous voulez la température sur votre écran ? Faites ceci, ceci et cela. N'attendez pas ou n'essayez pas de le laisser passer. Cela n'aidera pas. Et cela vous fera perdre un temps si précieux.
Aussi 4 semaines semblent beaucoup de temps. Mais moins est vrai. Ce n'est pas juste. Vous n'avez que 4 semaines. Les 2 premières semaines pas vraiment trop de pression. 3 semaines de finition et la 4ème semaine de nuit sans sommeil. C'est comme ça qu'il ne faut pas le faire.
J'étais peut-être un peu ambitieux: j'ai un boîtier super petit, pas de capteurs faciles à utiliser, de piles… Simplifiez-le beaucoup plus puis rendez-le de plus en plus dur, alors seulement vous obtiendrez un bon prototype/produit.
Conseillé:
Projet de modèle de parc contre la pollution lumineuse : 15 étapes
Projet modèle de parc contre la pollution lumineuse : La pollution lumineuse est un problème grave dans de nombreuses grandes villes du monde entier. La quantité excessive de lumière dans nos villes peut perturber les schémas migratoires de divers animaux, tels que les tortues et les oiseaux et provoquer leur mort, gâchant la charcuterie
Vérificateur de température de l'air de poche bricolage: 6 étapes
Vérificateur de température de l'air de poche bricolage : nous utiliserons un écran Nokia 5110, un module de température numérique et un Arduino Uno pour le faire. Une prise 9V avec des fils, pas un barillet, est également nécessaire, ainsi qu'un interrupteur et des fils. Un fer à souder peut être nécessaire, mais vous pouvez aussi simplement torsader les fils
Faites votre propre vérificateur de résistance : 4 étapes
Faites votre propre vérificateur de résistance : Choses dont vous aurez besoin : Ancienne batterie EGO de type TwistLe multimètre le moins cher que vous puissiez trouver. (Vous pouvez en acheter un pour 6,99 $ chez Harbor Freight. J'ai eu le mien gratuitement avec un coupon dans mes annonces hebdomadaires.)Outils de soudure (je n'ai soudé que 2 ou 3 fois dans ma vie. Je
Vérificateur d'obturation d'appareil photo Arduino : 4 étapes
Vérificateur d'obturation d'appareil photo Arduino : J'ai récemment acheté deux anciens appareils photo argentiques. Après les avoir nettoyés, j'ai réalisé que la vitesse d'obturation pouvait être retardée par la poussière, la corrosion ou le manque d'huile, j'ai donc décidé de faire quelque chose pour mesurer le temps d'exposition réel de n'importe quel appareil photo, car, par m
Vérificateur de batterie avec sélection de température et de batterie : 23 étapes (avec photos)
Vérificateur de batterie avec sélection de la température et de la batterie : testeur de capacité de la batterie. Avec cet appareil, vous pouvez vérifier la capacité de la batterie 18650, acide et autres (la plus grande batterie que j'ai testée est une batterie acide 6v 4,2A). Le résultat du test est en milliampère/heure. Je crée cet appareil car j'en ai besoin pour vérifier