Se sei già registrato           oppure    

Orario: 20/11/2019 16:11:21  

 

Energia Alternativa ed Energia Fai Da Te > Arduino

VISUALIZZA L'ALBUM

Pagine: (10)   1   2   3   [4]   5   6   7   8   9   10    (Ultimo Msg)


datalogger con arduino
FinePagina

prius2008

Avatar
MegaWatt


Gruppo:Utente
Messaggi:300

Stato:



Inviato il: 19/12/2013,08:35

Ciao Calcola, cosa ne dici se prendo questi due? Sono compatibili? Per misurare la tensione cosa devo prendere? Grazie!
http://www.ebay.it/itm/Arduino-UNO-Board-R...1#ht_7001wt_800



http://www.ebay.it/itm/16x2-Alphanumeric-L...d#ht_1770wt_800



---------------
6 kwp di pannelli disposti a sud con inclinazione di 41 gradi
n°2 regolatori da 50A mppt collegati in parallelo, + 3 regolatori mppt da 20A. Inverter UPS 24v 3KW. Pacco batterie da trazione 24v 1150Ah

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4345

Stato:



Inviato il: 19/12/2013,18:58

Il primo è un arduino uno, il secondo non è un arduino, solo un LCD per arduino. Anche se il nome arduino è registrato ed in teoria utilizzabile solo sui prodotti originali, spesso si trovano in giro cloni cinesi marcati arduino. Quelli originali hanno un logo con la bandiera italiana, in quello non lo vedo. Bisogna stare attenti a non comprare il clone cinese al prezzo di quello originale che appunto è venduto a 20 euro. Se ne vuoi uno cinese compralo su ebay dalla Cina, lo vendono circa alla metà.

Per misurare la tensione costruisci il partitore indicato all'inizio di questa discussione.



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

prius2008

Avatar
MegaWatt


Gruppo:Utente
Messaggi:300

Stato:



Inviato il: 20/12/2013,09:04

Ok grazie, quindi posso prendere arduino uno, ma che tipo di display devo prendere? Quello che ho postato potredde andar bene? E' troppo caro? Ho trovato dei misuratori per arduino che leggono fino a 200a da c'è solo il componente. Troverò lo schema per collegarlo? Grazie ancora.



---------------
6 kwp di pannelli disposti a sud con inclinazione di 41 gradi
n°2 regolatori da 50A mppt collegati in parallelo, + 3 regolatori mppt da 20A. Inverter UPS 24v 3KW. Pacco batterie da trazione 24v 1150Ah

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:207

Stato:



Inviato il: 24/12/2013 20:46:10

Ciao Elettroshock come da tuo consiglio ho messo dei fusibili sull'alimentazione e sul pin dati dell'acs712 che è collegato all'uscita carico del regolatore di carica.
Dopo questa modifica l'acs712 misura senza carico 1,23 ampere, se tolgo i fusibili e li sostiuisco con dei fili l'acs misura correttamente 0 ampere quale può essere il motivo?
ho notato inoltre che se misuto la resistenza del fusibile è di 17 Ohm può essere questa la causa del problema?



---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 24/12/2013 21:23:48

Probabilmente si crea un partitore resistivo .....
Risolvibile via software regolando l'offset .

Certo 18 Ohm son tanti ,ma se li hai misurati ..... son quelli

Domani mi impegno a testarlo

Se puoi allega il codice ....

Ciao
ElettroshockNow

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:207

Stato:



Inviato il: 24/12/2013 21:27:01

Ecco il codice completo che uso sul mio arduino.
Per la lettura della corrente ho creato una funzione LeggiCorrente.


#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
#include "DHT.h"
#include <SD.h>
 
RTC_DS1307 RTC;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define DHTPIN 2     // what pin we're connected to
#define DHTTYPE DHT22   // DHT 22  (AM2302)
#define btnRIGHT  0
#define btnUP     1
#define btnDOWN   2
#define btnLEFT   3
#define btnSELECT 4
#define btnNONE   5
#define NUMREADINGS 5 //Il numero indica i valori tensione da leggere
#define inputPin (A1) //Sensore tensione collegato al pin analogico 1
#define pinCorrentePannello (A2) //Sensore di corrente per il pannello (pin analogico 2).
#define pinCorrenteCarico (A3) //Sendore di corrente per il carico (pin analogico 3);
#define coefficiente_conversione 0.05471365 //0.0540789 //0.05435
#define numeroPagine 2 //indica il numero di pagine che verranno visualizzate.
const int BACKLIGH_PIN = 10;//Assegnazione Retroilluminazione
const int TempoLed = 200; //Scegli il Tempo della retroilluminazione
int timeOut = TempoLed;

DHT dht(DHTPIN, DHTTYPE);

int numeroPagina = 0;
int oldPagina = -1;
File myFile;
int minuti =0;
int giorno =0;
String nomeFile = "";
char filename[13];

float tensioneBatteria = 0;
float correntePannello = 0;
float correnteCarico = 0;
float umidita = 0;
float temperatura = 0;
 
int read_buttons() {
  
 int adc_key_in = analogRead(0);
 
 if (adc_key_in > 1000) return btnNONE;
 if (adc_key_in < 50)   return btnRIGHT;  
 if (adc_key_in < 195)  return btnUP; 
 if (adc_key_in < 380)  return btnDOWN; 
 if (adc_key_in < 555)  return btnLEFT; 
 if (adc_key_in < 790)  return btnSELECT;   
}
 
void setup()
{
  
 //Inizializzazione timer ds1307
 Serial.begin(57600);
 Wire.begin();
 RTC.begin();
 dht.begin();
 
 if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    RTC.adjust(DateTime(__DATE__, __TIME__));
 }
 
 //usa come chip select della sd il pin 3.
 if (!SD.begin(3)) {
    Serial.println("initialization failed!");
  }
 
 // indica il pin A0 come input.
 pinMode(inputPin, INPUT);  
  
 lcd.begin(16, 2);
 lcd.setCursor(0,0);
 lcd.print("SolarLogger - Jackie2");
 delay(1000);
}

//Legge la tensione (della batteria).
float leggiTensione(int pinAnalogico){
  int index = 0; //Indice della lettura corrente
  int total = 0; //Totale letture
  int average = 0; //Media
  int readings[NUMREADINGS]; //Letture dal input analogico
  
  //azzera il vettore.
  for (int i = 0; i < NUMREADINGS; i++)
readings[i] = 0; //Mette tutti 0 nell'array
  
  //ciclia ed effettua le letture.
  for (int A = 0; A < NUMREADINGS; A++)
  {
    total -= readings[index]; //Sottrae l'ultima lettura
    readings[index] = analogRead(pinAnalogico); //Legge i valori provenienti dal sensore e li salva nell'array
    total += readings[index]; //Aggiunge la lettura al totale
    index = (index + 1); //Incrementa l'indice

    if (index >= NUMREADINGS)
    index = 0; //Alla fine dell'array resetta l'indice a 0

    average = total / NUMREADINGS; //Calcola la media
  }

  float VoltageReading;
  VoltageReading=average*coefficiente_conversione;
  Serial.print("tens ");
  Serial.println(average);
   return VoltageReading;
}

//Restituisce la corrente letta dal sensore ACS712
float leggiCorrente(int pinAnalogico, float taratura){
  float amper = 0;
  for(int i = 0; i < 1000; i++) {
   amper = amper + ((analogRead(pinAnalogico) -512) * 0.07405) / 1000;
  }
  //tolgo 0.03 perchè quando non è collegato nulla mi dà -0.03
  amper += taratura;
  //tolgo il segno negativo.
  amper = abs(amper);
  
  return amper;
}
  
void loop()
{

 DateTime now = RTC.now();
   
 //lcd.setCursor(0,1);
 //lcd.print("Pressed:");
 
 int buttons = read_buttons();
 //lcd.setCursor(9, 1);  
 if(buttons == btnRIGHT)       Serial.print("RIGHT ");
 else if(buttons == btnLEFT)   Serial.print("LEFT  ");
 else if(buttons == btnUP){     
     Serial.print("UP    ");
     if (numeroPagina > 0) {
       oldPagina = numeroPagina;
       numeroPagina -=1;
     }
     else {
       oldPagina = numeroPagina;
       numeroPagina = numeroPagine;}
     timeOut=TempoLed;
 }
 else if(buttons == btnDOWN){
     Serial.print("DOWN  ");
     if (numeroPagina < numeroPagine) {
       oldPagina = numeroPagina;
       numeroPagina +=1;
     }
     else {
       oldPagina = numeroPagina;
       numeroPagina = 0;
     }
     timeOut=TempoLed;
 }
 else if(buttons == btnSELECT) Serial.print("SELECT");
 else if(buttons == btnNONE)   Serial.print("NONE  ");

Serial.println(numeroPagina);

delay(100);

Serial.print("timeout ");
Serial.println(timeOut);

if (timeOut>0)  {
  digitalWrite(BACKLIGH_PIN, HIGH);//accendi LCD
  timeOut--;}
else
  digitalWrite(BACKLIGH_PIN, LOW);//spegni LCD

//Determina la tensione della batteria.
tensioneBatteria = leggiTensione(inputPin);
//Determina la corrente del pannello.
correntePannello = leggiCorrente(pinCorrentePannello, 0.03);
//Determina la corrente del carico.
correnteCarico = leggiCorrente(pinCorrenteCarico, 0.08);

//umidità
umidita = dht.readHumidity();

//temperatura
temperatura = dht.readTemperature();

//Gestione delle Pagine a video. 
//if (numeroPagina != oldPagina){
// oldPagina = numeroPagina;
 switch(numeroPagina)
 {
   case 0:
     // Data e ora.
     lcd.clear();
     char buffer[10];
     sprintf(buffer, "%02d/%02d/%d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
     lcd.setCursor(0,0);
     lcd.print(buffer);
     lcd.setCursor(1,1);
     lcd.print(temperatura);
     lcd.print("C ");
     lcd.print(umidita);
     lcd.print("%");
     if (minuti != now.minute()) lcd.print(" *");
     break;
 
   case 1:
     //Corrente IN = Pannello, OUT = Carico.
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("IN  ");
     //lcd.setCursor(0,6);
     lcd.print(correntePannello);
     lcd.print("A");
     lcd.setCursor(0,1);
     lcd.print("OUT ");
     //lcd.setCursor(1, 6);
     lcd.print(correnteCarico);
     lcd.print("A");
     break;
     
   case 2:
     //Tensione batteria
     lcd.clear();
     lcd.setCursor(0,0);
     lcd.print("Tensione Batteria");
     lcd.setCursor(1,1);
     lcd.print(tensioneBatteria);
     lcd.print("V");
     break;
 }
//}

if (minuti != now.minute()) {
  Serial.print("è passato un minuto");
  minuti = now.minute();

  //scrive i valori sul file ogni minuto.
  
  //now.day(), now.month(), now.year()
  
  //crea il nome del file solo se è cambiato il giorno.
  if (giorno != now.day()) {
      giorno = now.day();
    
    nomeFile = "";
    
    nomeFile += now.year();
   
    if(now.month()<10) nomeFile += "0";
    nomeFile += now.month();
    
    if(now.day()<10) nomeFile += "0";
    nomeFile += now.day();
    
    nomeFile += ".csv";
    
    //converte la stringa in vettore di caratteri.
    nomeFile.toCharArray(filename, sizeof(filename));
  }
  
  //se non esiste il file lo crea
  myFile = SD.open(filename, FILE_WRITE);
  
  // if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Scrivo il file ");
    //tracciato record del file.
    //DATA;ORA;BATTERIA;PANNELLO;CARICO;TEMPERATURA;UMIDITA
    
    //DATA
    myFile.print("\"");
    myFile.print(now.year());
    myFile.print("-");
    myFile.print(now.month());
    myFile.print("-");
    myFile.print(now.day());

    myFile.print(" ");
    //ORA
    myFile.print(now.hour());
    myFile.print(":");
    myFile.print(now.minute());
    myFile.print(":");
    myFile.print(now.second());
    myFile.print("\",");
    
    myFile.print("null,");
    
    //BATTERIA
    myFile.print("\"");
    myFile.print(tensioneBatteria);
    myFile.print("\",");
    
    //PANNELLO
    myFile.print("\"");
    myFile.print(correntePannello);
    myFile.print("\",");
    //CARICO
    myFile.print("\"");
    myFile.print(correnteCarico);
    myFile.print("\",");
    
    //TEMPERATURA
    myFile.print("\"");
    myFile.print(temperatura);
    myFile.print("\",");
    //UMIDITA
    myFile.print("\"");
    myFile.print(umidita);
    myFile.println("\"");
    
  	// close the file:
    myFile.close();
    Serial.println("Fatto.");
  } else {
    // if the file didn't open, print an error:
    Serial.println("errore di apertura del file");
  }
}
}



---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 

calcola
GigaWatt


Gruppo:Utente
Messaggi:4345

Stato:



Inviato il: 25/12/2013 23:31:58

Credo che vi siano alcune parti del codice da spostare dal void setup al void loop, tipo lettura della tensione e della corrente...



---------------
Impara l'arte e mettila da parte
14 pannelli da 100w, inverter kemapower 3kw, regolatore morningstar tristar ts60, banco batterie n.1 di 12 elementi 2v 480Ah C5 corazzate per trazione pesante, banco batterie n.2 di 400Ah in C5 formato da 24 elementi 2V 200Ah corazzate al gel per fotovoltaico in due serie da 12 elementi, centralina di gestione impianto autoprodotta.

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 26/12/2013 10:06:37

CITAZIONE (jackie2_it, 25/12/2013 23:31:58 ) Discussione.php?55442982&4#MSG50

Ecco il codice completo che uso sul mio arduino.
Per la lettura della corrente ho creato una funzione LeggiCorrente.

Ciao jackie,
effettivamente come dice il buon calcola ci sarebbero delle migliorie da fare ,ma visto che funziona perchè modificarlo

Noto che hai pensato anche alla taratura fine in funzione del sensore da leggere (molto elegante ):


CITAZIONE
//Restituisce la corrente letta dal sensore ACS712
float leggiCorrente(int pinAnalogico,float taratura){
float amper = 0;
for(int i = 0; i < 1000; i++) {
amper = amper + ((analogRead(pinAnalogico) -512) * 0.07405) / 1000;
}
//tolgo 0.03 perchè quando non è collegato nulla mi dà -0.03
amper += taratura;
//tolgo il segno negativo.
amper = abs(amper);


Cmq quel 512 è l'offset del sensore ...

In teoria quando non circola corrente il sensore restituisce 2,5V che convertiti dal convertitore del micro e prendendo come riferimento i +5V (5V = 1023) saranno appunto 512 +- .

Adesso visto che leggi 1,23A significa che sul piedino in ingresso (per colpa del partitore resistivo e del leggero assorbimento dello zener) avrai una tensione di 2,5V - sensibilità sensore*Ampere,
quindi usando un sensore acs712/30A :

Vin=2,5 - (66mV*1.23A) = 2.41552 V che convertito =
5V:1023=2.41552V:X
X=1023*2.41552/5= 494

Quindi sostituisci il 512 con 494 e dovresti riottenere lo zero.

Poi controlla la corrispondenza con gli amper letti ,perchè molto probabilmente dovrai modificare anche il coefficiente di conversione evidenziato in arancio

Ora stò al cell ... ,ma come posso faccio una funzione per autotarare i sensori semplicemente premendo un pulsante .....
La mia idea sarebbe :
-premi pulsante taratura senza carichi
-Arduino misura l'offset
-si preme nuovamente il pulsante taratura
-Arduino memorizza in Eeprom l'offset
-Si fà scorrere una corrente di 1A ,semplicemente collegando un alimentatore variabile e una lampadina da 10W
-Si preme il pulsante e arduino calcola il fattore di conversione e lo memorizza in Eeprom

Ciao
ElettroshockNow

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:207

Stato:



Inviato il: 26/12/2013 11:58:48

Interessante il sistema di autoregolazione non vedo l'ora di poterla utilizzare

Altra cosa che vorrei fare è quella di rendere più preciso il partitore di tensione che valori consigli per avere un fondo scala da 30 volt?

Attualmente misura al max 60 ed ha una precisione di 0,05



Modificato da jackie2_it - 26/12/2013, 12:20:48


---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 26/12/2013 14:50:52

CITAZIONE (jackie2_it, 26/12/2013 11:58:48 ) Discussione.php?55442982&4#MSG53


Attualmente misura al max 60 ed ha una precisione di 0,05

ritieni 50mV una precisione non sufficiente ?

Tieni in considerazione che ci sono delle tolleranze intrinseche dei componenti oltre alla qualità della tensione reference del convertitore ........

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:207

Stato:



Inviato il: 26/12/2013 15:51:21

Il problema e che se la tenzione della batteria è a 12,59

e il 0,05 porta ad avere due soglie una da 12,58 (inferiore) e una da 12,64 (soglia superiore) il valore oscilla tra questi due continuamente.
ed il grafico dell'andamento della batteria non risulta molto lineare ma sembra delle montagne russe :-)



---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 26/12/2013 16:23:38

..... affettuosamente pignolo ...

Allora se l'impianto è a 12V puoi sostituire la resistenza da 10K del partitore con una da 4,7K .
Così facendo avrai un fondo scala di 28,5V .

Ciao
ElettroshockNow

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:207

Stato:



Inviato il: 26/12/2013 16:25:49

Grazie in effetti sono troppo pignolo ma sono curioso di capire le minime oscillazioni delle batterie in relazione della temperatura.
Ti faccio poi un regalo per sdebitarmi.



---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 

ElettroshockNow

Avatar
GigaWatt


Gruppo:Utente
Messaggi:4656

Stato:



Inviato il: 26/12/2013 16:56:41

CITAZIONE (jackie2_it, 26/12/2013 16:25:49 ) Discussione.php?55442982&4#MSG57

Ti faccio poi un regalo per sdebitarmi.

Sdebitarti di cosa ?
È solo che un piacere vedere la voglia di fare .... e ancor di più se lo scopo è il bene della collettività .

Vuoi farmi un regalo ? ..... condividi, così cresciamo insieme

 

jackie2_it
KiloWatt


Gruppo:Utente
Messaggi:207

Stato:



Inviato il: 26/12/2013 17:05:54

Certo per me è un onore convidivere i miei esperimenti.
Effettuo subito la modifica al partitore e ti dico come funziona.

Altro piccolo problema non riesco a portare a zero l'acs712 speriamo che San Elettroshock riesca a creare il sistema per autotarare i sensori.
Magari si può utilizzare anche per tarare il partitore di tensione?



---------------
2 pannelli solari da 50 watt con regolatore steca p1010
Ecco i miei pannelli solari [URL=http://www.ilampidigenio.it]qui[/URL]

 
 InizioPagina
 

Pagine: (10)   1   2   3   [4]   5   6   7   8   9   10    (Ultimo Msg)

Versione Mobile!

Home page       TOP100-SOLAR      Home page forum