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.

16 commentaires:

  1. Bonsoir,
    Merci pour votre joli montage, je voudrai savoir si possible quel servomoteur avez vous utilisé ainsi que la régulation comment elle a été faite.
    pour mon sujet de PFE je vais réaliser aussi un régulateur de T° d'eau et je demanderai volontiers votre aide si vous le souhaitez.
    pourriez vous aussi partager avec moi la librairie que vous avez créer.

    merci d'avance
    bien a vous.

    RépondreSupprimer
    Réponses
    1. Bonjour,

      Merci!!

      Je n'ai fait que le schéma et le programme pour quelqu'un qui me l'a demandé. Je ne suis donc pas possesseur de la vanne mais vous pouvez utiliser n'importe quelle vanne motorisée sous réserve que ce ne soit pas un modèle a commande analogique.
      Je vous envoie la librairie par mail

      Supprimer
  2. Bonjour,

    je tiens à remercier Monsieur JoJo Heim pour le travail qu'il accompli et pour sa disponibilité, il avait déjà réaliser pour moi et mon fils qui devait présenter son travail de fin d'étude ce régulateur pour V3V, et avec lequel mon fils avait obtenu de très bonnes notes.
    De nouveau je lui demande de l'aide pour un autre job et quelque jours plus tard il me donne ce que j'ai demandé.
    C'est un très grand Monsieur, et je l'en remercie énormément.

    RépondreSupprimer
  3. bonjour pouvez vous m'envoyer la librairie svp.
    merci d'avance.
    damien.da@hotmail.fr

    RépondreSupprimer
  4. Bonjour,

    Ce projet date un peu, mais il m'intéresse beaucoup !!

    Que faut-il enlever du programme pour ne pas utiliser le débitmètre ?
    Pus-je vous joindre ? et comment ?

    Merci,

    Hervé

    RépondreSupprimer
    Réponses
    1. Bonjour,
      Cela dépend de ce que vous voulez mettre a la place.
      Je vous envoie un mail vous aurez mon adresse.

      Supprimer
    2. re-bonjour,

      Je ne sais pas quelle adresse vous avez, mais je n'ai rien eu !

      Je voudrai réguler un plancher chauffant, mais je n'ai pas besoin de débit mètre ! d'ailleurs je n'ai pas la place pour l'installer !

      Mon adresse est herve.leger2 chez wanadoo.fr

      Encore merci de m'avoir répondu !!

      Hervé

      Supprimer
  5. Bonjour, par hasard je tombe sur votre site, en plus un sketch sur une horloge, mais comme je n'avais pas de ssd1306 ou sh1106 mais plein d'afficheur LCD à quatre digits fonctionnant avec la librairie SevenSegment.h et décodeur AY0438. des Leds (2) affiche la position pour régler l'heure et les minutes je ne suis pas arrivé à afficher un P (programme) à coté du réglage des heures et minutes. Compile avec l'IDE 1.0.6. Bien cordialement
    Voici le sketch:







    RépondreSupprimer
  6. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  7. #include
    #include
    #include
    #include
    #include

    int swtu = 11; // switch up is at pin 1
    int swtd = 9; // switch down is at pin 6
    int BUTTON1_PIN = 12;


    #define CLOCK 4 // Arudino digital 44 -> AY0438 clock
    #define DATA 6 // Arudino digital 46 -> AY0438 data
    #define LOAD 5 // Arudino digital 45 -> AY0438 load

    const int LED=13;
    const int LED1=10;

    //int LEDState = LOW;

    // Setup seven segment
    SevenSegment screen(CLOCK, DATA, LOAD);
    int Heure;
    int Minute;
    int Seconde;
    int Jour;
    int Mois;
    int Annee;
    uint16_t startAddr = 0x0000;
    uint16_t lastAddr;
    uint16_t TimeIsSet = 0xaa55;
    ////////////////////
    //// Functions ////
    ///////////////////

    Button button1 = Button(BUTTON1_PIN,BUTTON_PULLDOWN);
    boolean longPush = false;
    int value, etat = 0;

    unsigned long get_time2 = millis();
    unsigned long get_time3 = millis();


    int page = 0; // numero d'ecran
    #define NB_PAGE 3





    void setup() {
    Serial.begin(9600);

    button1.releaseHandler(handleButtonReleaseEvents);
    screen.begin("AY0438","8.8|8.8");

    pinMode(11,INPUT_PULLUP);
    pinMode(9,INPUT_PULLUP);
    pinMode(LED, OUTPUT);
    pinMode(LED1, OUTPUT);

    pinMode(12, INPUT_PULLUP);
    button1.isPressed();
    page = 1;
    RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// RAM horloge
    TimeIsSet = 0xffff;
    RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.ctrl = 0x00;

    RTC.setCTRL();
    }

    RépondreSupprimer
  8. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  9. Les includes ne passant les voici:
    Button.h
    SPI.h
    DS1307new.h
    Wire.h
    SevenSegment.h

    RépondreSupprimer
  10. Bonjour
    Je vous remercie pour votre aide, et j'aimerais savoir si possible de m'aider pour réaliser ce projet mais avec 3 sondes.
    Si la température (Pour la sonde 1 par exemple )dépasse 30 C ,le chauffage s'arrête
    Merci

    RépondreSupprimer
  11. Ce commentaire a été supprimé par un administrateur du blog.

    RépondreSupprimer
  12. Ce commentaire a été supprimé par un administrateur du blog.

    RépondreSupprimer
    Réponses
    1. Ce commentaire a été supprimé par un administrateur du blog.

      Supprimer