2 pièce(s) jointe(s)
Arduino et ZP07 - MP503 capteur qualité de l'air
Bonjour à tous,
j'essaie de mettre en œuvre ce type de capteur fabriqué par Winsen
voir datasheet
Si j'ai tout compris, il semblerait qu'il y ait une conjonction des 2 sorties A et B pour déterminer
le niveau de pollution (tableau 3)
j'ai effectué le test avec les 2 leds qui semble fonctionner (Application schématic)
néanmoins ce que je souhaiterai c'est d'avoir une mesure 0 à 10 conforme au tableau suivant qui analyse
les largeurs d'impulsions pour A et B voir image
le seul croquis d'application que j'ai trouvé est celui-ci mais il ne gère qu'une seule entrée (?)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
//
// Author: Aiyauto
// VERSION: 0.0.1
// Date:2017/08/16
// PURPOSE: ZP07_MP503 空气质量模块检测 示例 for Arduino
//
// DATASHEET:
//
// URL:
//
//
int airQuality; / Qualité de l'air 0-10
void setup() {
Serial.begin(9600);
}
void loop() {
airQuality = ZP07_MP503(8);
Serial.print(" Cote de la qualité de l'air actuelle.");
Serial.println(airQuality);
}
int ZP07_MP503(int pinA) {
/* Initialisation */
pinMode(pinA, INPUT);
unsigned long millisTimes = millis();
unsigned long startMillisTimes = millisTimes;
unsigned long stopMillisTimes;
signed long deltaMillisTimes = millisTimes - startMillisTimes;
bool turnState = false;
bool pinAstate = digitalRead(pinA);;
bool pinAstateLast = pinAstate;
int result;
/* Test de l'état de lecture */
while (true) {
pinAstate = digitalRead(pinA); // Lire l'état de la broche
if (pinAstate != pinAstateLast) {
if (turnState == true) {
stopMillisTimes = millis();
if (pinAstate == false) {
deltaMillisTimes = stopMillisTimes - startMillisTimes;
}
else {
deltaMillisTimes = 98 - stopMillisTimes + startMillisTimes;
}
result = (deltaMillisTimes + 5) / 10; //Arrondi des résultats arithmétiques
break; // Sortez de la boucle
}
if (turnState == false) {
startMillisTimes = millis(); //refraîchir l'heure actuelle
turnState = true; // Mettre à jour le marqueur
}
pinAstateLast = pinAstate;
}
millisTimes = millis();
deltaMillisTimes = millisTimes - startMillisTimes;
if ( deltaMillisTimes > 100 ) { //Détermination du résultat, boucle d'arrêt
if (pinAstate == true) { // Classe de qualité de l'air 10
result = 1;
}
if (pinAstate == false) { // Classe de qualité de l'air 0
result = 0;
}
break;
}
}
// Serial.print(" pinAstate:");
// Serial.print(pinAstate);
// Serial.print(" , Classement de la qualité de l'air:");
// Serial.print(result);
// Serial.print(", deltaMillisTimes:");
// Serial.println(deltaMillisTimes);
return result; / / résultats de la classe de qualité de l'air extrait
} |
par retour je voudrais savoir si quelqu'un a déjà utilisé ce type de capteur
merci par avance
pascal