SENSEUR-PARTICULE-GP2Y1010AU0F
Introduction
Le PM2.5 est un senseur de particule (poussière et fumée) analogique avec une tension de sortie de 0.5V par 0.1mg/m³.
Il existe de nombreux senseurs différents dont le prix varie de quelques euros à plus de 100 euro (détecteur avec Laser).
L'air dont ont désire mesurer la teneur en particule passe dans un boîtier contenant un émetteur de lumière et un senseur "photo-sensible".
La qualité du senseur "photosensible" influence directement la sensibilité de la mesure tandis que la longueur d'onde de la source lumineuse permettra de mesurer des particules plus ou moins fine. Pour fixer l'idée de ce principe: un aveugle a plus de chance de rater une orange (= particule fine) en face de lui s'il fait des mouvements amples (1.5m de large) avec sa canne.... alors qu'il n'aurait aucun problème à la détecter (la percuter) s'il faisait des mouvements de 30 cm avec sa canne (qui serait alors plus rapide).
Ce senseur Sharp GP2Y1010AU0F utilise une lumière infrarouge. L'émetteur et le senseur sont placés diagonalement l'un par rapport à l'autre. Le senseur infrarouge mesure la quantité de lumière reflétée par les poussières et fumées.
Ce senseur permet de détecter les poussières dans l'air et des particules très fines comme la fumée de cigarette (dixit Sharp). Il est même possible de faire la distinction entre la fumée et la poussière domestique en détectant des motifs d'impulsion sur la tension de sortie (pulse pattern of output voltage)
Les applications typiques de ce senseur sont:
- conditionnement d'air,
- contrôle de la qualité de l'air,
- purification d'air
Détails techniques
- Compacte: le senseur sharp à les dimensions suivantes: 46 x 30 x 17.6mm
- Basse consommation: max 20mA
- La présence de poussière peut être détecté par photométrie d'une seule impulsion.
- Commande de la LED infrarouge par impulsion (cycle de 10ms avec largeur d'impulsion de 0.32ms)
- Le senseur est équipé d'une résistance variable (Rs) permettant d'ajuster la sensibilité du circuit d'amplification.
- Modifier Rs peut profondément altérer les résultats... à modifier avec précaution.
- Fiche technique du senseur Sharp GP2Y1010AU0F (pdf)
Tension de sortie / densité
Le graphique suivant affiche l'évolution de la tension de sortie en fonction de la densité de poussière/particule.
Comment Brancher
Le graphique suivant vous permet d'identifier les différentes broches du senseur.
Que vous pourrez raccorder comme suit:
Broche senseur | Identification | Broche Arduino |
1 | Vled Alimentation de la LED Infrarouge) |
5V (via la résistance de 150 Ohms, voir schéma ci-dessous) |
2 | LED - | GND |
3 | LED Commande de la LED. |
Pin #2 Broche digital. |
4 | S-GND Masse (y compris du boîtier) |
GND |
5 | Vo Sortie du senseur |
Arduino A0 (analogique) |
6 | Vcc Alimentation circuit logique du senseur |
5V |
N'oubliez pas de monter la capacité et la résistance comme indiqué que le schéma ci-dessous. De sorte, la LED disposera de suffisant d'énergie (fournie par la capacité) lorsque la commande d'impulsion d'Arduino arrivera sur la broche 3 du senseur.
Comme vous pouvez le constater sur le schéma ci-dessus, la LED Infrarouge est pilotée par un transistor de puissance déjà inclus dans le boîtier du senseur. Nous pouvons donc utiliser directement une broche Arduino (PIN 2) pour commander la LED Infrarouge.
Au final, vous devriez obtenir un montage comme celui-ci.
Le code
Le graphique suivant (repris de la fiche technique Sharp) indique que l'échantillonnage (la mesure) se fait 28ms après le début de la mesure.
#define dustPin A0 // Lecture analogique du senseur (A0) #define ledPower 2 // Commande de la LED IR du senseur (digital 2) // Delai avant la mesure analogique (0.28 ms, soit 280 microsecondes) #define delayTime 280 // Délai d'impulsion IR sur le senseur. // 0.32ms actif sur 10ms au total. // // Note: 280 + 40 + 9680 = 10000 micro-secondes, soit 10ms #define delayTime2 40 #define offTime 9680 void setup(){ Serial.begin(9600); pinMode(ledPower,OUTPUT); pinMode(dustPin, INPUT); } void loop(){ float dustVal=0; // Valeur retournée par le senseur // Activation de la LED IR (en passant au niveau bas) digitalWrite(ledPower,LOW); // Attendre 0.28ms (280 micro secondes) avant lecture analogique delayMicroseconds(delayTime); dustVal=analogRead(dustPin); // Attendre encore 40 microseconde pour atteindre // 320 microsecondes (soit 0.32ms). Il est temps d'éteindre // la LED IT delayMicroseconds(delayTime2); digitalWrite(ledPower,HIGH); // Attendre la fin du cycle de 10ms // (soit 10000 microsecondes au total) delayMicroseconds(offTime); // pause de 1 seconde entre chaque capture delay(1000); // Transformation de la lecture analogique + affichage if (dustVal>36.455) Serial.println((float(dustVal/1024)-0.0356)*120000*0.035); }