Faire fonctionner mon ventilateur avec un capteur d'oxygène.

Bonjour,

Je commence à m’initier aux programmes et cartes Arduinos, et j’ai pour objectif de faire tourner et modifier la vitesse de mon ventilateur en fonction de ce qu’indique mon capteur d’oxygène.

En effet si mon capteur indique un taux d’oxygène inférieur a 19.5% d’oxygène, mon ventilateur doit accélérer.
Si mon capteur indique un taux d’oxygène compris entre 19.5 et 23.5% d’oxygène, mon ventilateur doit tourner à vitesse moyenne.
Et enfin si mon capteur indique une vitesse supérieur à 23.5% d’oxygène, mon ventilateur doit alors s’arrêter.

J’ai trouver un câblage qui me semble correcte avec un ventilateur 12V, transistor BDX33C, Arduino UNO, une résistance de 2.2Ohm, un capteur d’oxygène(grove gas sensor)
J’ai déjà trouver mon programme pour faire fonctionner mon capteur d’oxygène brancher à un shield en A0 et celui-ci marche très bien
Malheureusement, je ne sais comment faire marcher mon ventilateur en fonction du taux d’oxygène.

Voici le programme que j’utilise pour faire marcher mon capteur si cela peut aider.

const float VRefer = 3.3;      

const int pinAdc   = A0;

void setup() 
{
    Serial.begin(9600);
    Serial.println("Grove - Gas Sensor Test Code...");
}

void loop() 
{
  
    float Vout =0;
    Serial.print("Vout =");

    Vout = readO2Vout();
    Serial.print(Vout);
    Serial.print(" V, Concentration of O2 is ");
    Serial.println(readConcentration());
    delay(500);
}

float readO2Vout()
{
    long sum = 0;
    for(int i=0; i<32; i++)
    {
        sum += analogRead(pinAdc);
    }

    sum >>= 5;

    float MeasuredVout = sum * (VRefer / 1023.0);
    return MeasuredVout;
}

float readConcentration()
{
  
    float MeasuredVout = readO2Vout();

  
    float Concentration = MeasuredVout * 0.21 / 2.0;
    float Concentration_Percentage=Concentration*100;
    return Concentration_Percentage;
}

Bon, peut être pourriez vous commencer par piloter votre ventilateur en tout ou rien; en branchant le transistor de commande sur une patte libre (vous en avez plein). (en passant, je serais curieux de voir le schema de l'electronique commande de votre ventilateur et en particulier que fait la resistance de "2.20 ohm"). Pour continuer de faire simple, je ... ne brancherais pas le ventilateur, mais j'utiliserais la LED prefournie ave le UNO const int patteVentilo= LED_BUILTIN; // ou 13; veiller à l'initialiser religieusment, comme dans blink()

et, avant le delay(500) de votre loop(), je mettrais:

if (readConcentration() > Seuil) { 
 digitalWrite(patteVentilo, 0); // pas besoin d'oxygène
} else {
digitalWrite(patteVentilo, 1); // on ventile à pleine puissance
}

Ca serait une première étape (et je vérifierais le schéma de l'electronique de commandedu moteur); ensuite, si la LED répond "comme attendu" , je regarderais du côté de pwm pour faire une vitesse moyenne. Seuil serait une constante const float Seuil = 22.0; // entre les deux seuils...

================= Edited : voir https://www.arduino.cc/reference/en/language/functions/analog-io/analogwrite/ pour faire une vitesse moyenne (ni nulle, ni maximum)

Perso, je ferais une mesure du taux de O2 de l'air que j'amène dans la pièce.... histoire de pas avoir un taux de 02 encore plus défavorable ou si il est similaire des deux cotés, ça ne servirait à rien de mouvoir la masse d'air.