Table des matières:

Moniteur Arduino CO utilisant le capteur MQ-7 : 8 étapes (avec photos)
Moniteur Arduino CO utilisant le capteur MQ-7 : 8 étapes (avec photos)

Vidéo: Moniteur Arduino CO utilisant le capteur MQ-7 : 8 étapes (avec photos)

Vidéo: Moniteur Arduino CO utilisant le capteur MQ-7 : 8 étapes (avec photos)
Vidéo: capteur de tension zmpt 101B & La domotique à 2 euros avec arduino 2024, Juillet
Anonim
Moniteur Arduino CO utilisant le capteur MQ-7
Moniteur Arduino CO utilisant le capteur MQ-7
Moniteur Arduino CO utilisant le capteur MQ-7
Moniteur Arduino CO utilisant le capteur MQ-7

Quelques mots pourquoi cette instructable a été créée: un jour, la mère de ma petite amie nous a téléphoné au milieu de la nuit parce qu'elle se sentait vraiment malade - elle avait des vertiges, de la tachycardie, des nausées, de l'hypertension artérielle, elle s'est même évanouie pendant un temps inconnu (probablement ~ 5 minutes, mais il n'y a aucun moyen de le savoir), le tout sans aucune raison apparente. Elle habite dans un petit village loin des hôpitaux (60 km de chez nous, 30 km de l'hôpital le plus proche, 10 km sans route normale entre les deux), alors nous nous sommes précipités vers elle et sommes arrivés peu après l'ambulance. Elle a été hospitalisée et le matin elle se sentait presque bien, mais les médecins n'ont pas pu en trouver la cause. Le lendemain, nous avons eu une idée: il pourrait s'agir d'un empoisonnement au CO, puisqu'elle a une chaudière à gaz (sur la photo) et qu'elle était assise près d'elle pendant toute la soirée lorsque cela s'est produit. Nous avons récemment acheté un capteur de CO MQ-7, mais je n'ai jamais eu le temps d'assembler un schéma pour cela, c'était donc le moment idéal pour le faire. Après une heure de recherche sur Internet à la n'était pas clair comment l'appliquer, d'autres étaient trop simplifiés et ne fonctionneraient pas bien). Nous avons donc passé environ 12 heures à développer des schémas, à fabriquer et à imprimer un boîtier 3D, à tester et à calibrer le capteur, et le lendemain, nous sommes allés à la chaudière suspecte. Il s'est avéré que les niveaux de CO y étaient extrêmement élevés et pouvaient être mortels si le temps d'exposition au CO était plus long. Je pense donc que quiconque se trouve dans une situation similaire (comme une chaudière à gaz ou une autre combustion se produisant à l'intérieur d'un espace de vie) devrait obtenir un tel capteur pour éviter que quelque chose de grave ne se produise.

Tout ce qui s'est passé il y a deux semaines, depuis lors, j'ai beaucoup amélioré les schémas et le programme, et maintenant cela semble être raisonnablement bon et relativement simple (pas simple à 3 lignes de code, mais quand même). Bien que j'espère que quelqu'un avec un compteur de CO précis me fournira des commentaires sur l'étalonnage par défaut que j'ai mis dans le croquis - je pense que c'est loin d'être bon. Voici un guide complet avec quelques données expérimentales.

Étape 1: Nomenclature

Nomenclature
Nomenclature

Vous aurez besoin de: 0. Carte Arduino. Je préfère le clone chinois d'Arduino Nano pour son prix exceptionnel de 3 $, mais n'importe quel arduino 8 bits fonctionnera ici. Sketch utilise des minuteries avancées et n'a été testé que sur le microcontrôleur atmega328 - même s'il fonctionnera probablement bien sur d'autres également.1. Capteur de CO MQ-7. Le plus souvent disponible avec ce module de capteur Flying Fish, il doit subir une petite modification, des détails à l'étape suivante, ou vous pouvez utiliser un capteur MQ-7 séparé.

2. Transistor bipolaire NPN. Pratiquement n'importe quel transistor NPN pouvant gérer 300 mA ou plus fonctionnera ici. Le transistor PNP ne fonctionnera pas avec un module Flying Fish mentionné (car il a une broche chauffante soudée à la sortie du capteur), mais peut être utilisé avec un capteur MQ-7 discret.

3. Résistances: 2 x 1k (de 0,5k à 1,2k fonctionnera bien) et 1 x 10k (celui-ci est mieux gardé précis - bien que si vous devez absolument utiliser une valeur différente, ajustez la variable reference_resistor_kOhm dans le croquis en conséquence).

4. Condensateurs: 2 x 10 uF ou plus. Le tantale ou les céramiques sont nécessaires, l'électrolyse ne fonctionnera pas bien en raison de l'ESR élevée (elles ne seront pas en mesure de fournir suffisamment de courant pour lisser les ondulations à courant élevé).5. LED verte et rouge pour indiquer le niveau de CO actuel (vous pouvez également utiliser une seule LED bicolore avec 3 bornes, comme nous l'avons utilisé dans notre prototype de boîte jaune).6. Buzzer piézo pour indiquer un niveau élevé de CO.7. Planche à pain et fils (vous pouvez également tout souder sur des broches Nano ou serrer dans des prises Uno, mais il est facile de faire une erreur de cette façon).

Étape 2: Modification du module ou câblage du capteur discret

Modification du module ou câblage du capteur discret
Modification du module ou câblage du capteur discret

Pour le module, vous devez dessouder la résistance et le condensateur, comme indiqué sur la photo. Vous pouvez pratiquement tout dessouder si vous le souhaitez - l'électronique du module est totalement inutile, nous l'utilisons uniquement comme support pour le capteur lui-même, mais ces deux composants vous empêcheront d'obtenir des lectures correctes, Si vous utilisez un capteur discret, fixez les broches chauffantes (H1 et H2) au 5V et au collecteur du transistor en conséquence. Attachez un côté de détection (l'une des broches A) à 5V, un autre côté de détection (l'une des broches B) à la résistance 10k, tout comme la broche analogique du module dans les schémas.

Étape 3: Principe de fonctionnement

Principe de fonctionnement
Principe de fonctionnement
Principe de fonctionnement
Principe de fonctionnement

Pourquoi avons-nous besoin de toutes ces complications, pourquoi ne pas attacher 5 V, la terre et simplement obtenir des lectures ? Eh bien, vous n'obtiendrez rien d'utile de cette façon, malheureusement. Selon la fiche technique MQ-7, le capteur doit fonctionner à haute vitesse. et des cycles de basse chauffe afin d'obtenir des mesures correctes. Pendant la phase à basse température, le CO est absorbé sur la plaque, produisant des données significatives. Pendant la phase à haute température, le CO absorbé et d'autres composés s'évaporent de la plaque du capteur, la nettoyant pour la prochaine mesure.

Donc en général le fonctionnement est simple:

1. Appliquez 5V pendant 60 secondes, n'utilisez pas ces lectures pour la mesure du CO.

2. Appliquez 1,4 V pendant 90 secondes, utilisez ces lectures pour la mesure du CO.

3. Passez à l'étape 1.

Mais voici le problème: Arduino ne peut pas fournir assez de puissance pour faire fonctionner ce capteur à partir de ses broches - le chauffage du capteur nécessite 150 mA, tandis que la broche Arduino ne peut pas fournir plus de 40 mA, donc si elle est attachée directement, la broche Arduino brûlera et le capteur gagnera toujours ça marche pas. Nous devons donc utiliser une sorte d'amplificateur de courant qui prend un petit courant d'entrée pour contrôler un courant de sortie important. Un autre problème est d'obtenir 1,4 V. Le seul moyen d'obtenir cette valeur de manière fiable sans introduire de nombreux composants analogiques est d'utiliser l'approche PWM (Pulse Width Modulation) avec un retour qui contrôlera la tension de sortie.

Le transistor NPN résout les deux problèmes: lorsqu'il est constamment allumé, la tension aux bornes du capteur est de 5 V et il chauffe pour la phase à haute température. Lorsque nous appliquons PWM à son entrée, le courant est pulsé, puis il est lissé par le condensateur et la tension moyenne est maintenue constante. Si nous utilisons un PWM haute fréquence (dans le croquis, il a une fréquence de 62,5 KHz) et faisons la moyenne de beaucoup de lectures analogiques (dans le croquis, nous avons en moyenne plus de ~ 1000 lectures), alors le résultat est assez fiable.

Il est essentiel d'ajouter des condensateurs selon les schémas. Les images ici illustrent la différence de signal avec et sans condensateur C2: sans lui, l'ondulation PWM est clairement visible et fausse considérablement les lectures.

Étape 4: Schémas et planche à pain

Schémas et planche à pain
Schémas et planche à pain
Schémas et planche à pain
Schémas et planche à pain
Schémas et planche à pain
Schémas et planche à pain

Voici les schémas et l'assemblage de la maquette.

ATTENTION! La modification d'un module de dérivation standard est requise ! Sans module de modification est inutile. La modification est décrite dans la deuxième étape

Il est important d'utiliser les broches D9 et D10 pour les LED, car là nous avons des sorties matérielles Timer1, cela permettra de changer en douceur leurs couleurs. Les broches D5 et D6 sont utilisées pour le buzzer, car D5 et D6 sont des sorties du matériel Timer0. Nous allons les configurer pour qu'ils soient inversés l'un par rapport à l'autre, ils basculeront donc entre les états (5V, 0V) et (0V, 5V), produisant ainsi un son sur le buzzer. Attention: cela affecte l'interruption de synchronisation principale d'Arduino, donc toutes les fonctions dépendantes du temps (comme millis ()) ne produiront pas de résultats corrects dans cette esquisse (plus de détails plus tard). La broche D3 a une sortie matérielle Timer2 connectée (ainsi que D11 - mais il est moins pratique de mettre du fil sur D11 que sur D3) - nous l'utilisons donc pour fournir un PWM pour le transistor de contrôle de tension. La résistance R1 est utilisée pour contrôler la luminosité des LED. Il peut aller de 300 à 3000 Ohm, 1k est plutôt optimal en luminosité/consommation d'énergie. La résistance R2 est utilisée pour limiter le courant de base du transistor. Il ne doit pas être inférieur à 300 Ohms (pour ne pas surcharger la broche Arduino) et pas supérieur à 1500 Ohms. 1k il y a un choix sûr.

La résistance R3 est utilisée en série avec la plaque du capteur afin de créer un diviseur de tension. La tension sur la sortie du capteur est égale à R3 / (R3 + Rs) * 5V, où Rs est la résistance actuelle du capteur. La résistance du capteur dépend de la concentration de CO, donc la tension change en conséquence. Le condensateur C1 est utilisé pour lisser la tension PWM d'entrée sur le capteur MQ-7, plus sa capacité est élevée, mieux c'est, mais il doit également avoir une faible ESR - donc céramique (ou tantale) condensateur est préféré ici, un électrolytique ne fonctionnera pas bien.

Le condensateur C2 est utilisé pour lisser la sortie analogique du capteur (la tension de sortie dépend de la tension d'entrée - et nous avons ici un PWM à courant assez élevé, qui affecte tous les schémas, nous avons donc besoin de C2). La solution la plus simple consiste à utiliser le même condensateur que le transistor C1. NPN soit qui conduit du courant tout le temps pour fournir un courant élevé sur le chauffage du capteur, soit qui fonctionne en mode PWM réduisant ainsi le courant de chauffage.

Étape 5: programme Arduino

Programme Arduino
Programme Arduino

AVERTISSEMENT: LE CAPTEUR NÉCESSITE UN CALIBRAGE MANUEL POUR TOUTE UTILISATION PRATIQUE. SANS CALIBRAGE, SELON LES PARAMÈTRES DE VOTRE CAPTEUR PARTICULIER, CE SCHÉMA POURRAIT DÉCLENCHER L'ALARME DANS L'AIR PROPRE OU NE PAS DÉTECTER LA CONCENTRATION MORTELLE DE MONOXYDE DE CARBONE

L'étalonnage est décrit dans les étapes suivantes. L'étalonnage grossier est très simple, précis est assez complexe.

Sur le plan général, le programme est assez simple:

Tout d'abord, nous étalonnons notre PWM afin de produire 1,4 V stable requis par le capteur (la largeur PWM appropriée dépend de nombreux paramètres tels que les valeurs exactes de la résistance, la résistance de ce capteur particulier, la courbe VA du transistor, etc., le meilleur moyen est donc d'essayer différentes valeurs et utilisez celui qui convient le mieux). Ensuite, nous exécutons en continu un cycle de 60 secondes de chauffage et de 90 secondes de mesure. Dans la mise en œuvre, cela devient un peu compliqué. Nous devons utiliser des minuteries matérielles car tout ce que nous avons ici a besoin d'un PWM stable à haute fréquence pour fonctionner correctement. Le code est joint ici et peut être téléchargé depuis notre github, ainsi que la source des schémas dans Fritzing. Dans le programme, il y a 3 fonctions qui gèrent les minuteries: setTimer0PWM, setTimer1PWM, setTimer2PWM. Chacune d'elles règle la minuterie en mode PWM avec des paramètres donnés (commentés dans le code), et règle la largeur d'impulsion en fonction des valeurs d'entrée. Les phases de mesure sont commutées à l'aide des fonctions startMeasurementPhase et startHeatingPhase, elles gérer tout à l'intérieur. et définissez les valeurs de minuterie appropriées pour basculer entre le chauffage 5V et 1,4V. L'état des LED est défini par la fonction setLEDs qui accepte la luminosité verte et rouge sur son entrée (sur une échelle linéaire de 1 à 100) et la convertit en réglage de minuterie correspondant.

L'état du buzzer est contrôlé à l'aide des fonctions buzz_on, buzz_off, buzz_beep. Les fonctions marche/arrêt activent et désactivent le son, la fonction bip produit une séquence de bips spécifiques avec une période de 1,5 seconde si elle est appelée périodiquement (cette fonction revient immédiatement afin de ne pas mettre en pause le programme principal - mais vous devez l'appeler encore et encore pour produire un bip).

Le programme exécute d'abord la fonction pwm_adjust qui détermine la largeur de cycle PWM appropriée afin d'atteindre 1,4 V pendant la phase de mesure. Puis il émet plusieurs bips pour indiquer que le capteur est prêt, passe en phase de mesure et démarre la boucle principale.

Dans la boucle principale, le programme vérifie si nous avons passé suffisamment de temps en phase courante (90 secondes pour la phase de mesure, 60 secondes pour la phase de chauffage) et si oui, change alors de phase courante. De plus, il met constamment à jour les lectures des capteurs à l'aide du lissage exponentiel: nouvelle_valeur = 0,999*ancienne_valeur + 0,001*nouvelle_lecture. Avec de tels paramètres et un tel cycle de mesure, il fait la moyenne du signal sur les 300 dernières millisecondes environ. AVERTISSEMENT: LE CAPTEUR NÉCESSITE UN CALIBRAGE MANUEL POUR TOUTE UTILISATION PRATIQUE. SANS CALIBRAGE, SELON LES PARAMÈTRES DE VOTRE CAPTEUR PARTICULIER, CE SCHÉMA POURRAIT DÉCLENCHER L'ALARME DANS L'AIR PROPRE OU NE PAS DÉTECTER LA CONCENTRATION MORTELLE DE MONOXYDE DE CARBONE.

Étape 6: Première exécution: à quoi s'attendre

Première course: à quoi s'attendre
Première course: à quoi s'attendre

Si vous avez tout assemblé correctement, après avoir exécuté Sketch, vous verrez quelque chose comme ceci dans Serial Monitor:

réglage PWM w=0, V=4.93

réglage PWM w=17, V=3.57PWM résultat: largeur 17, tension 3.57

puis une série de nombres représentant les lectures actuelles du capteur. Cette partie ajuste la largeur PWM afin de produire une tension de chauffage du capteur aussi proche que possible de 1,4 V, la tension mesurée est déduite de 5 V, notre valeur mesurée idéale est donc de 3,6 V. Si ce processus ne se termine jamais ou se termine après une seule étape (résultant en une largeur égale à 0 ou 254) - alors quelque chose ne va pas. Vérifiez si votre transistor est vraiment NPN et est correctement connecté (assurez-vous que vous avez utilisé la base, le collecteur et les broches de l'émetteur correctement - la base va à D3, le collecteur à MQ-7 et l'émetteur à la terre, ne comptez pas sur la vue de la planche à pain Fritzing - c'est mauvais pour certains transistors) et assurez-vous que vous avez connecté l'entrée du capteur à l'entrée A1 d'Arduino. Si tout va bien, vous devriez voir dans Serial Plotter d'Arduino IDE quelque chose de similaire à l'image. Les cycles de chauffage et de mesure d'une durée de 60 et 90 secondes se succèdent, avec des ppm de CO mesurés et mis à jour à la fin de chaque cycle. Vous pouvez prendre une flamme nue près du capteur lorsque le cycle de mesure est presque terminé et voir comment cela affectera les lectures (selon le type de flamme, il peut produire jusqu'à 2000 ppm de concentration de CO à l'air libre - même si seule une petite partie de il entre en fait dans le capteur, il activera toujours l'alarme et ne se déclenchera qu'à la fin du cycle suivant). Je l'ai montré sur l'image, ainsi que la réponse au feu du briquet.

Étape 7: Étalonnage du capteur

Étalonnage du capteur
Étalonnage du capteur
Étalonnage du capteur
Étalonnage du capteur

Selon la fiche technique du fabricant, le capteur doit exécuter des cycles de chauffage-refroidissement pendant 48 heures d'affilée avant de pouvoir être calibré. Et vous devriez le faire si vous avez l'intention de l'utiliser pendant une longue période: dans mon cas, la lecture du capteur dans l'air propre a changé d'environ 30% sur 10 heures. Si vous ne tenez pas compte de cela, vous pouvez obtenir un résultat de 0 ppm là où il y a en fait 100 ppm de CO. Si vous ne voulez pas attendre 48 heures, vous pouvez surveiller la sortie du capteur à la fin du cycle de mesure. Lorsque plus d'une heure, cela ne changera pas pendant plus de 1 à 2 points, vous pouvez arrêter de chauffer là-bas.

Calibrage grossier:

Après avoir exécuté l'esquisse pendant au moins 10 heures dans de l'air pur, prenez la valeur brute du capteur à la fin du cycle de mesure, 2-3 secondes avant le début de la phase de chauffage, et écrivez-la dans la variable sensor_reading_clean_air (ligne 100). C'est ça. Le programme estimera d'autres paramètres du capteur, ils ne seront pas précis, mais devraient être suffisants pour distinguer une concentration de 10 à 100 ppm.

Calibrage précis:

Je recommande fortement de trouver un compteur de CO calibré, de faire un échantillon de CO de 100 ppm (cela peut être fait en prenant du gaz de combustion dans une seringue - la concentration en CO peut facilement être de l'ordre de plusieurs milliers de ppm - et en le mettant lentement dans un bocal fermé avec compteur étalonné et capteur MQ-7), prenez la lecture brute du capteur à cette concentration et placez-la dans la variable sensor_reading_100_ppm_CO. Sans cette étape, votre mesure ppm peut être erronée plusieurs fois dans les deux sens (toujours ok si vous avez besoin d'une alarme pour une concentration dangereuse de CO à la maison, où normalement il ne devrait y avoir aucun CO du tout, mais pas bon pour une application industrielle).

Comme je n'avais pas de compteur de CO, j'ai utilisé une approche plus sophistiquée. J'ai d'abord préparé une forte concentration de CO en utilisant la combustion en volume isolé (première photo). Dans cet article, j'ai trouvé les données les plus utiles, y compris le rendement en CO pour différents types de flammes. Ensuite, il a été dilué au 1:50 afin d'atteindre 100 ppm, comme illustré sur la deuxième photo, et utilisé pour déterminer le point de référence du capteur.

Étape 8: Quelques données expérimentales

Quelques données expérimentales
Quelques données expérimentales

Dans mon cas, le capteur a plutôt bien fonctionné - il n'est pas très sensible pour des concentrations très faibles, mais assez bon pour détecter tout ce qui est supérieur à 50 ppm. J'ai essayé d'augmenter ma concentration progressivement, en prenant des mesures et en construisant un ensemble de graphiques. Il existe deux séries de lignes 0 ppm - vert pur avant l'exposition au CO et vert jaune après. Le capteur semble changer légèrement sa résistance à l'air propre après exposition, mais cet effet est faible. Il ne semble pas pouvoir distinguer clairement entre les concentrations de 8 et 15, 15 et 26, 26 et 45 ppm - mais la tendance est très claire, il peut donc dire si la concentration se situe dans la plage de 0-20 ou 40-60 ppm. Pour des concentrations plus élevées, la dépendance est beaucoup plus distinctive - lorsqu'elle est exposée à l'échappement d'une flamme nue, la courbe monte depuis le début sans descendre du tout, et sa dynamique est totalement différente. Donc, pour des concentrations élevées, il ne fait aucun doute que cela fonctionne de manière fiable, bien que je ne puisse pas confirmer sa précision car je n'ai pas de compteur de CO évalué. pour recommander 10k comme valeur par défaut, cela devrait être plus sensible de cette façon. C'est tout. Si vous disposez d'un compteur de CO fiable et que vous avez assemblé cette carte, veuillez partager vos commentaires sur la précision du capteur - ce serait formidable de collecter des statistiques sur divers capteurs et d'améliorer les hypothèses de croquis par défaut.

Conseillé: