// 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 |