Translate

dimanche 4 mai 2014

Régulation en température d'une vanne 3 voies


Le principe de cette régulation est assez simple,  la vanne s'ouvre ou se ferme suivant une consigne de température une fois celle-ci atteinte, elle s'arrête. Le consigne sera donnée par un potentiomètre multi-tours de 10Kohms et la mesure de température se fera a l'aide d'un LM35Z

Le moteur étant piloté en ouverte et fermeture, j'ai donc mis deux relais.

Il est prévu un affichage LCD indiquant
  •  la température de consigne 
  • la température de sortie 
  • l'état de la vanne (ouverture, fermeture ou arrêt).
  • le débit en L/min

Le schéma

 Comme toujours, avec arduino rien de compliqué !!!!

Les transistors sont des BC 547, les résistances pour la base des 1Kohms et les relais sont en 5V.


Le débitmètre est un modèle a effet hall, une impulsion représente 2,25ml.

Le programme

Le programme est assez simple, si on retire la partie gestion de la vanne, cela se résume a une trentaine lignes.

/*
**
** Debit Meter
**
** http://www.arduino-creations.blogspot.fr
*/

#include "Debit.h"
#include "LiquidCrystal.h"

LiquidCrystal lcd(3, 4, 5, 6, 7, 8);
int sensorPin = A0;
int PotPin = A1;    // Entree potentiometre 10K
int PotValue = 0;  // variable de stockage consigne
int setTemp = 0; // variable de stockage sonde
int Vouv = 11;
int Vfer = 12;

const byte pinDebitMeter = 2;    // Broche d'entrée du detecteur de débit
const byte numInterrupt = 0;    // Interruption
const int period = 100;        // Periode de base en millisecondes 1000

const float CoefLitMin = 7.4;


// Declaration du débimetre
Debit myDebit(numInterrupt, pinDebitMeter, period);


void setup() {
  myDebit.begin();         // Initialisation du comptage pour le bébimètre
 
    lcd.begin(20, 4);
    lcd.setCursor(4,1);
    lcd.print("  Mitigeur");
    lcd.setCursor(0,2);
    lcd.print("     Jojo  ");
    lcd.setCursor(0,3);
    lcd.print("      Bricolo  ");
    delay(4000);
    lcd.clear();
}

void loop() {
 
delay(10);
 
   int reading = analogRead(sensorPin); 
  float voltage = reading * 4.5 / 1024;
  int temp = voltage * 1000 ;
 
  //Récupération de la valeur du potentiomètre //******************************************************
  PotValue = analogRead(PotPin); 
 
  setTemp = PotValue / 10.24; //Parametre consigne de 0 a 99 degres ici je n'utilise pas la fonction MAP car une simple division suffit.
 
  lcd.setCursor(0,0);
  lcd.print("Temperature : ");
  delay(10);
  lcd.print(temp);
  lcd.print("C ");
 
  // Affichage de la consigne *********************************************
 lcd.setCursor(0,1);
  lcd.print("Consigne    : ");
  delay(10);
  lcd.print(setTemp);
  lcd.print("C ");  

  myDebit.operate();       // Comptage
 
    if ((myDebit.DebiRate25Period()) == 0)
    {
     lcd.setCursor(0,2);
  lcd.print("Debit : ");

  lcd.print("0.00");
  lcd.print(" l/min ");
  }
    else
    {
   lcd.setCursor(0,2);
  lcd.print("Debit :  ");
  lcd.print(CoefLitMin * myDebit.DebiRate25Period(), 2);
  lcd.print(" l/mn ");
 }

 

 if (temp < setTemp)
{
 digitalWrite (Vouv,HIGH);
 digitalWrite (Vfer,LOW);
  lcd.setCursor(0,3);
  lcd.print("Ouverture vanne  ");
 }

 else

   if (temp > setTemp)
{
 digitalWrite (Vouv,LOW);
 digitalWrite (Vfer,HIGH);
   lcd.setCursor(0,3);
  lcd.print("Fermeture vanne  ");
 }
  else

  if (temp == setTemp)
{
 digitalWrite (Vouv,LOW);
 digitalWrite (Vfer,LOW);
  lcd.setCursor(0,3);
  lcd.print("Arret vanne    ");
  }
 

  delay(100);
}


ATTENTION !!!! Pour faire fonctionner ce programme, il vous faut la librairie Debit.h que j'ai crée. Si ce montage vous intéresse, je vous envoie celle-ci.

Le lien ci-dessous est un essai, merci de me dire si cela fonctionne car avec Blogger, on ne peut pas héberger des fichiers

Téléchargement


Si cela vous intéresse, je suis en mesure de vous faire un kit ou même vous réaliser ce montage !!!
N'hésitez pas a me contacter.