// Arduino Pro Mini.. Codice per controllo tensione per commutazione enel/batterie.. Edit 17-set-2013
// VERSIONE CON DISTACCO FRIGO prima della commutazione (rettifiche by sabin) (linea con rel่ temporizzato)
// (relay1 high spento (enel), fili su contatto NO, Low = batterie). E pulsante x passaggio batterie.
// Prodotto da calcola (antrec.geo@yahoo.com) .. http://energiaalternativa.forumcommunity.net/?t=54823501

#include "OneWire.h" // Librerie. consente di accedere ai dispositivi 1-wire (1 filo)
#include "Wire.h"

// Definire margine di tensione
#define tensione_bassa 23.4 //valori tipo: 11.9 (sistema 12V); 23.9 (sistema 24V)
#define tensione_alta 27.0 //valori tipo: 13.7 (sistema 12V); 27.4 (sistema 24V)

#define coefficiente_conversione 0.05800 // per alzare tensione letta, alzare numero..
// collegato a bat-24V 0.05800... con usb 0.05400 .. con DC-DC 0.05900.. origine 0.05620

#define RELAY1 4
#define RELAY2 5
#define RELAY3 6
#define a0pin A0 // lettura volt
#define a1pin A1 // pulsante, aperto/chiuso
#define NUMREADINGS 10 // Numero letture tensione

int total = 0; // Somma letture
int average = 0; // Media
int salto = 5; // salta conferma verifica
int pulsante = 0; // controllo pulsante, x passare a batterie

// Comunicazione seriale e settaggi
void setup()
{
Serial.begin(9600);
Wire.begin();
pinMode(RELAY1, OUTPUT);
pinMode(RELAY2, OUTPUT);
pinMode(RELAY3, OUTPUT);
pinMode(a0pin, INPUT);
pinMode(a1pin, INPUT);

digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, LOW);
digitalWrite(RELAY3, HIGH);

}

// Loop infinito
void loop()
{
for (int A = 0; A < NUMREADINGS; A++)
{
total += analogRead(a0pin); //Legge la tensione su A0
delay(250); //ritardo in millisecondi
}
average = total / NUMREADINGS; //Calcola la media
total = 0;  // Azzera per il prossimo calcolo

float VoltageReading; // comprende i numeri reali, rappresentati in virgola mobile , 32 bit, 7 cifre
float media_avvio;
VoltageReading=average*coefficiente_conversione;

if (VoltageReading < tensione_bassa) // passa a enel (se VR minore di TB)
{
{
if (salto != 5 )
digitalWrite(RELAY3, LOW); // bobina relay alimentata
delay(2000);
digitalWrite(RELAY3, HIGH); // bobina relay riposo
salto = 5;
}
digitalWrite(RELAY1, HIGH);
digitalWrite(RELAY2, LOW);
}

if (VoltageReading > tensione_alta) // passa a batterie (se VR maggiore di TB)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(2000);
digitalWrite(RELAY3, HIGH);
salto = 10;
}
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, HIGH);
}

pulsante = analogRead(a1pin); // verifica il pulsante per passaggio anticipato a batterie
if (pulsante > 800)
{
{
if (salto != 10 )
digitalWrite(RELAY3, LOW);
delay(2000);
digitalWrite(RELAY3, HIGH);
salto = 10;
}
digitalWrite(RELAY1, LOW);
digitalWrite(RELAY2, HIGH);
delay(4000);
}

Serial.print(" Voltaggio batteria media 10 letture:   ");
Serial.println(VoltageReading);
Serial.print(" Passa a enel quando minore di:       ");
Serial.println(tensione_bassa);
Serial.print(" Passa a batterie quando maggiore di: ");
Serial.println(tensione_alta);
Serial.print(" Lettura pin A1 (pulsante): ");
Serial.println(pulsante);
Serial.println();
}

//Fine listato


Home - Schede