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
| const byte MQ_PIN = 0; // Port de sortie analogique A0
const byte RL = 5; // Résistance RL nécessaire, ici 50kOhm
const float R0_propre = 9.83; // Coefficicent permettant de calculer R0, valeur constructeur
const byte Nbr_de_mesures_calibrage = 50; // Nombre de mesures pour le Calibrage
const byte Int_Calibrage = 500; // Temps en Millisecondes entre chaque mesures pour le Calibrage
const byte Nbr_de_mesures = 5; // Nombre de mesures à effectuer pour le test
const byte Int_mesures = 500; // Temps en Millisecondes entre chaque mesures du test
#include <Wire.h> // Déclaration de l'écran
#include "rgb_lcd.h" // ""
rgb_lcd lcd;
float R0 = 10; // Initialisation de la valeur de R0 à 10kOhm (valeur qui va changer)
float rs = 0; // Initialisation de la valeur de rs à 0kOhm
void setup() {
lcd.begin(16, 2); // Taille de l'écran
Serial.begin (9600); // 9600 bauds
lcd.setCursor(0, 0);
lcd.write("Calibrage..."); // Afficher "Calibrage" sur l'écran
R0 = MQCalibration(MQ_PIN); // Appel du sous-Programme MQCalibration
lcd.write("Calibrage fini"); // Afficher "Calibrage effectué" sur l'écran
lcd.setCursor(0, 0);
lcd.write(" "); // Réinitialise l'écran
lcd.setCursor(0, 0);
lcd.write("R0="); // Afficher "R0" sur l'écran
lcd.write(R0); // Afficher la valeur de R0 sur l'écran
lcd.write("kOhm"); // Afficher "kOhm" sur l'écran
delay(2000);
lcd.setCursor(0, 0);
lcd.write(" "); // Réinitialise l'écran
pinMode(4, OUTPUT); // Broche de sortie 4 (LED)
digitalWrite(4, LOW); // Initialisation de la LED
}
void loop()
{
lcd.setCursor(0, 0);
lcd.write(" "); // Réinitialise l'écran
rs = MQMesures(MQ_PIN); // Appel du sous-Programme MQMesures
lcd.setCursor(0, 0);
lcd.write("RS="); // Afficher "RS" sur l'écran
lcd.write(rs); // Afficher la valeur de RS sur l'écran
lcd.write("kOhm"); // Afficher "kOhm" sur l'écran
{
if (analogRead(MQ_PIN)<0); // Condition d'activation de la LED : Si Tension différente de 0
lcd.setCursor(0, 1);
lcd.write("Camarchepas");
digitalWrite(4, HIGH); // Activation de la LED
delay(3000);
digitalWrite(4, LOW); // Désactivation de la LED
lcd.setCursor(0, 1);
lcd.write(" "); // Réinitialise l'écran
}
delay(5000);
}
float MQCalibration(int MQ_PIN) // Sous-Programme MQCalibration
{
int N; // Déclaration de la variable N
float val = 0; // Déclaration de la variable val
for (N=0;N<Nbr_de_mesures_calibrage;N++)
{
val += MQCalculResistance(analogRead(MQ_PIN)); // Addition de toutes les valeurs de MQCalculResistnnce
delay(Int_Calibrage);
}
val /= Nbr_de_mesures_calibrage; // Calcul de la moyenne
val /= R0_propre; // Valeur de R0
return val;
}
int MQMesures(int MQ_PIN) // Sous-Programme MQMesures
{
int i; // Déclaration de la variable i
float rs = 0; // Initialisation de la valeur de RS
for (i=0;i<Nbr_de_mesures;i++)
{ rs += MQCalculResistance(analogRead(MQ_PIN)); // Addition de toutes les valeurs de RS
delay(Int_mesures);
}
rs /= Nbr_de_mesures; // Calcul de la moyenne
return rs;
}
float MQCalculResistance(int courant) // Sous-Programme MQCalculResistance
{
return ( ((float)RL*(1023-analogRead(MQ_PIN))/analogRead(MQ_PIN)));
} |
Partager