Riccardo
| Inviato il: 29/03/2017 21:00:17
|
Oggi ho comperato un'altro d1 mini,ho caricato lo sketch e devo dire che funziona perfettamente.
Un grazie a BellaEli per il suo algoritmo l'ho provato con un alimentatore variabile simulando le variazioni sulle batterie,con ottimi ottimi ottimi risultati di precisione.
Un grazie anche a Vincent per avermi fornito lo spunto di partenza per creare la parte con visualizzazione da remoto,se vuoi continuare con le prove per il tuo software sono sempre disponibile
Ho provato continui refresh ogni 4 secondi senza problemi per più di 2 ore
La prossima settimana provo sul mio banco da 8x6v 300ah
allego sketch funzionante
#define NumeroCelle 4
#define kPartTens 6
#include <ESP8266WiFi.h>
const char* ssid = "Telecom-93798311";
const char* password = "------------";
IPAddress ip(192,168,3,101); //ip statico
IPAddress gateway(192,168,3,1); //gateway
IPAddress subnet(255,255,255,0);
int s0 = 2;
int s1 = 0;
int s2 = 4;
int s3 = 5;
float SIG_pin = 0;
WiFiServer server(80);
void setup() {
pinMode(s0, OUTPUT);
pinMode(s1, OUTPUT);
pinMode(s2, OUTPUT);
pinMode(s3, OUTPUT);
digitalWrite(s0, LOW);
digitalWrite(s1, LOW);
digitalWrite(s2, LOW);
digitalWrite(s3, LOW);
Serial.begin(115200);
delay(10);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.print("Use this URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP());
Serial.println("/");
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while(!client.available()){
delay(1);
}
// Read the first line of the request
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush();
double VBattLett[NumeroCelle];
double VBattCalc, VCellPrec;
int i;
// Leggo le tensioni sulle singole celle
for (i = 0; i < NumeroCelle; i++)
{
VBattLett[i] = Mux(i);
}
VCellPrec = 0;
for (i = 0; i < NumeroCelle; i ++)
{
// Calcolo le tensioni delle singole celle
VBattCalc = (VBattLett[i] * (i + 1)) - VCellPrec;
VCellPrec += VBattCalc;
// Se utilizzo delle celle diverse da 2 Volt calcolo i valori da mostrare a video
VBattCalc = VBattCalc * kPartTens;
// Mostro i valori a video
client.print ("Batteria ");
client.print (i + 1);
client.print (" = ");
client.print (VBattCalc);
client.print (" V - ");
delay (10);
}
}
float Mux(int channel){
int controlPin[] = {s0, s1, s2, s3};
int muxChannel[16][4]={
{0,0,0,0}, //channel 0
{1,0,0,0}, //channel 1
{0,1,0,0}, //channel 2
{1,1,0,0}, //channel 3
{0,0,1,0}, //channel 4
{1,0,1,0}, //channel 5
{0,1,1,0}, //channel 6
{1,1,1,0}, //channel 7
{0,0,0,1}, //channel 8
{1,0,0,1}, //channel 9
{0,1,0,1}, //channel 10
{1,1,0,1}, //channel 11
{0,0,1,1}, //channel 12
{1,0,1,1}, //channel 13
{0,1,1,1}, //channel 14
{1,1,1,1} //channel 15
};
for(int i = 0; i < 4; i ++){
digitalWrite(controlPin[i], muxChannel[channel][i]);
}
float val = analogRead(SIG_pin)* (3.3 / 1024);
return val;
}
Immagine Allegata: def.JPG
Modificato da BellaEli - 29/03/2017, 23:46:13
--------------- Q.CELLS Q.PEAK 4575W sud-est Solar Frontier CIS 850W sud-ovest Inverter PIP5048MST Batterie:LifePo4 Seplos MASON-48280-DIY EVE280AK 28,6 kWh Scaldabagno Ferroli 30l 1500w Scaldabagno Ariston 80l 1200w
|