Bonjours les "bidouilleurs"
Je vous présente une partie finie de mon projet.
comment utiliser un capteur d'éthanol automobile avec nos petites bêtes.
Les capteurs fabriqué par Continental donnent les mêmes donnée sous la même forme d’après les dadasheets.
Un capteur d’éthanol automobile ressemble à:
Capteur Fuel Flex Continental
ou encore à
Celui que j'utilise est d'origine pour une volkswagen. Une GOLF VI il me semble mais pas sur.
Acheté chez Aliexpress.
Ce qui les différencie c'est la capacité à passer un volume de carburent par heure (L/h), Bien choisir son capteur parce qu'un capteur pour une twingo ne vas peut être pas pour un 1000 CBR ou un V8 de 12l.
Ils sont allimenté en 12V continue via VCC et GND.
Les informations, température et taux d'éthanol, en 5V via OUT.
Ce "OUT" est en faite un signal en fréquence et en "PWM".
On y retrouve le taux avec la fréquence de 100 à 150 Hz pour 0 à 100% d'éthanol et la température avec le temps à l'état 1 et 1 à 5 ms pour -40 à +125°c.
En regardant le code plus bas vous vous diriez "Mais pour quoi ne pas utilisé pulseIn()? C'est fait pour ça et ça tien sur 2 ligne".
Je vais répondre OUI sa fait le job MAIS c'est une fonction bloquante et j'ai besoin que ma petite bête ne perde pas de temps.
Donc j'ai utilisé micros().
Je remercie les personnes qui m'on aidé dans la réalisation de ce début de projet.
//Parametrge des constantes
int PIN_SIGNAL_1 = A0;
// variable globale
float ajout = 0;
boolean flag_b = false;
boolean flag_h = true;
unsigned Incr_Capt = 0;
unsigned long etat_haut = 0;
unsigned long etat_haut_bis = 0;
unsigned long etat_bas = 0;
unsigned long etat_bas_bis = 0;
float temper = 0;
float taux = 0;
void setup()
{
// parametrage entrée
pinMode(PIN_SIGNAL_1, INPUT);
//ATTENTION COMM. EN 115200!
Serial.begin(115200);
}
void loop()
{
// mesure temperature et ethanole dans capteur
if ((digitalRead(PIN_SIGNAL_1)) && (flag_h == true)) {
etat_haut = micros();
etat_bas_bis = micros() - etat_bas;
flag_h = false;Incr_Capt = Incr_Capt + 1;
}
if ((!digitalRead(PIN_SIGNAL_1)) && (flag_h == false)) {
etat_haut_bis = micros() - etat_haut;
etat_bas = micros();
flag_h = true;
}
if (Incr_Capt >= 50){//Tempo "virtuelle" sans blocage du programme (calcule et affiche toutes les 50 impulsions du capteur)
unsigned long period = (etat_haut_bis + etat_bas_bis);// pour calcule de la fréquence
unsigned long temper_1 = etat_haut_bis / 1000;//passage de us à ms pour calcule de la température
double frequance = (1/(period*0.000001));//calcule de la fréquence en Hz
temper = 125-(41.25*(5-temper_1));//calcule de la température (1ms = -40°c; 5ms = 125°c)
taux = (100-(2*(150-frequance)));// calcule de la fréquence en % ethanole (100Hz = 0%; 150Hz = 100%)
ajout = (taux/100)*0.3;// utilisé dans la suite du projet (NON fini)
//Affichage des valeur dans le moniteur serie peut etre retiré n'a aucune obligation dans le programme
Serial.print("temp ");Serial.print(temper);Serial.println(" C");
Serial.print("temp_1 ");Serial.print(temper_1),Serial.println(" Us");
Serial.print("Taux ");Serial.print(tot);Serial.println(" %");
Serial.print("ajout ");Serial.print(ajout);Serial.println(" %");
Serial.print("Freq ");Serial.print(frequance);Serial.println(" Hz");
Serial.print("haut---- ");Serial.print(etat_haut_bis);Serial.println(" us");
Serial.print("bas---- ");Serial.print(etat_bas_bis);Serial.println(" us");
Serial.print("period---- ");Serial.print(period);Serial.println(" us");
Incr_Capt = 0;}// tempo "virtuelle" remise à zero
}
Il n'est peut être pas parfait mais fait le job que je lui demande et soyez indulgent à la date d'écriture de ce post je n'ai que 3 semaines d’expérience en langage C arduino ou en C tout cour.
Quand le reste seras opérationnel je ferais un post avec le projet complet.
Merci d'avoir pris le temps de lire mon premier post en projet et n’hésitez pas à commenté, toute critique est constructive
!


