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 (?)
par retour je voudrais savoir si quelqu'un a déjà utilisé ce type de capteur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 }
merci par avance
pascal
Partager