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.