Ce Programme permet de faire fonctionner la carte arduino Nano en coupleur de batteries.
Le programme est trs simple, il ne fait que tester la tension aux bornes des batteries, et les comparer a des valeurs de rfrence, ces valeurs auront t inscrites dans l'eeprom interne, ce qui permet de ne pas perdre ces valeurs en cas de coupure de la tension d'alimentation.
Les Coupleurs Mon Coupleur Batteries Boutique Me Contacter Accueil Forum Livre d'Or Autres sites Statistiques Aide
/*
 Prog coupleur batteries
 PEREIRA Joao Cration : 17/06/2012
 PEREIRA Joao Rvision : 05/01/2013
 */
// Pin 13 commande aussi la led sur la carte nano.

// ************************************************
// ********** Carte des entrées sorties. **********
// ************************************************

int rx = 0; // D0
int tx = 1; // D1

// Interruptions Externes
int int0 = 2; // D2
int int1 = 3; // D3

int out3 = 4;  // D4
int out4 = 5;  // D5

int in1 = 6;  // D6
int in2 = 7;  // D7
int in3 = 8; // D8
int in4 = 9; // D9
int in5 = 10; // D10 Buzz

int mosi = 11; // D11
int miso = 12; // D12
int clk  = 13; // D13
// Sorties relais sur la carte.

int out1 = 14; // A0
int out2 = 15; // A1
int in8 = 16; // A2
int in7 = 17; // A3

// Entrées i2c
int sda = 18;  // A4
int scl = 19;  // A5

// Entrées Analogiques
int in9  = 20; // A6
int in10 = 21; // A7

// ************************************************
// ********** Fin des entrées sorties. **********
// ************************************************

// --- Inclusion des librairies utilisées ---
#include <EEPROM.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MsTimer2.h> // inclusion de la librairie Timer2
 
// variables
  int tension_couplage        = EEPROM.read(0);  // tension de couplage des deux batteries
  int tension_desacouplage    = EEPROM.read(1);  // tension de desacouplage des deux batteries
  int tension_max_alternateur = EEPROM.read(2);  // tension  partir de laquelle on signal un soucis alternateur, protection des batteries
  int batterie_plat           = EEPROM.read(3);  // tension de la batterie a plat si par exemple l'alternateur ne charge plus
  
  int tension_bat_porteur     = 0;  // tension de la batterie porteur
  int tension_bat_auxiliaire  = 0;  // tension de la batterie auxiliaire
  
  int tension_min_auxiliaire  = EEPROM.read(4);  // tension protection batterie basse auxiliaire, on coupe la sortie
  int tension_con_auxiliaire  = EEPROM.read(5);  // tension de remise en route de la sortie protection batterie basse auxiliaire
  
  bool voltage_trop_haut        = false;  
  bool buzzer                   = true;
  
  LiquidCrystal_I2C lcd(0x20,20,4);   // Fixe l'adresse de l'afficheur LCD  0x20 / 20 caracteres / 4 lignes
   
  void setup()
  {
 // initialise les pins de sortie.
  pinMode(out1, OUTPUT);
  pinMode(out2, OUTPUT);
  pinMode(out3, OUTPUT);     
  pinMode(out4, OUTPUT);
  
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);     
  pinMode(in5, OUTPUT);
 // initialise les pins en entrées. 
    pinMode(in7, INPUT);
    pinMode(in8, INPUT);
 // initialise les pins en entrées digitales, ces deux ci, ne peuvent servir qu'en entrée.    
    pinMode(in9, INPUT);
    pinMode(in10, INPUT);
  
  Serial.begin(9600);
  // demarrage de l'interruption
  MsTimer2::set(50, InterruptTimer2); // période 50ms 
  MsTimer2::start(); // active Timer 2 
  lcd.init();                      // initialize the lcd 
  lcd.backlight();
  lcd.clear();
  // initialisation_eeprom();
  }
  
  // debut de la fonction d'interruption Timer2
void InterruptTimer2() { 
  // lecture tension batteries porteur auxiliaire
  tension_bat_porteur     = (analogRead(in9) * 20) / 100;
  tension_bat_auxiliaire  = (analogRead(in10) * 20) / 100;
  // on teste si l'alternateur charge de trop
  if (tension_bat_porteur > tension_max_alternateur) { voltage_trop_haut = true;} else {voltage_trop_haut = false;}
  
  // test pour le couplage des batteries
  if (tension_bat_porteur > tension_couplage) {digitalWrite(out1, HIGH);} 
  // test pour le desacouplage des batteries
  if (tension_bat_porteur < tension_desacouplage) {digitalWrite(out1, LOW);}
  
 // contrlole tension batterie basse  
  if (tension_bat_auxiliaire > tension_con_auxiliaire) {digitalWrite(out2, HIGH);} 
  if (tension_bat_auxiliaire < tension_min_auxiliaire) {digitalWrite(out2, LOW);}
}
 
  void loop()
  {
// Envoi vers Afficheur
    lcd.setCursor(0, 0);
    lcd.print("B Cam "); lcd.print((tension_bat_porteur / 10.0)); lcd.print(" V");
    delay(50);
    lcd.setCursor(0, 1);
    lcd.print("B Aux "); lcd.print((tension_bat_auxiliaire / 10.0)); lcd.print(" V");
    delay(50);
     
// Mise en fonction du Buzzer si l'alternateur charge de trop
       if (voltage_trop_haut)
         {
          buzzer = !buzzer;
          digitalWrite(in5,buzzer);
         }
       else
        {
         digitalWrite(in5,LOW);
        }
  }
 // initialisation de l'epprom une seule fois ou paramtres par dfaut du coupleur 
    void initialisation_eeprom()
  {
// variables Par default
  EEPROM.write(0,138);  // tension de couplage des deux batteries, 138 => 13.8 Volts, Ce qui permet l'utilisation d'un seul Octet
  EEPROM.write(1,128);  // tension de desacouplage des deux batteries, 128 => 12.8 Volts
  EEPROM.write(2,150);  // tension  partir de laquelle on signal un soucis alternateur, protection des batteries, 150 => 15.0 Volts
  EEPROM.write(3,115);  // tension de la batterie a plat si par exemple l'alternateur ne charge plus
  EEPROM.write(4,120);  // tension protection batterie basse auxiliaire, on coupe la sortie
  EEPROM.write(5,127);  // tension de remise en route de la sortie protection batterie basse auxiliaire
  }

Les Coupleurs Mon Coupleur Batteries Boutique Me Contacter Accueil Forum Livre d'Or Autres sites Statistiques Aide
Cette page à été vue 424 fois depuis sa création par 291 visiteurs.
Aujourd'hui cette page à été vue 0 fois par 0 visiteurs.
Dernière modification : Samedi 11 Avril 2015 à 04:07:42
Création le: 08 Janvier 2013

Toute représentation totale ou partielle de ce site par quelque procédé que ce soit, sans l'autorisation expresse de l'exploitant du site Internet est interdite et constituerait une contrefaçon sanctionnée par les article L 335-2 et suivants du Code de la propriété intellectuelle.
F1LZR 1999 2016