Arduino
Convertitore a ADC 16Bit ADS1115 su Arduino

VISUALIZZA L'ALBUM

Pag: (3)   1   [2]   3    (Ultimo)


FinePagina

Bolle

Avatar
GigaWatt


AMMINISTRATORE
Msg:9542

Stato:



Inviato il: 23/11/2018 11:40:55

Va benissimo...è solo un po lento rispetto al ads1115



---------------
Un risultato se non è ripetibile non esiste (by qqcreafis).




 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 11/05/2019 13:24:21

CITAZIONE (Bolle, 16/01/2017 18:21:01 ) Discussione.php?214354&1#MSG0

Vediamo come si interfaccia un convertitore a 16 bit sul nostro arduino.
Questo dispositivo, cioè l'ADS1115, ha anche una preamplificazione settabile a livello SW:



CITAZIONE

Gain 2/3 : VMAX +/-6.144V
Gain 1 : VMAX +/-4.096V
Gain 2 : VMAX +/-2.048V
Gain 4 : VMAX +/-1.024V
Gain 8 : VMAX +/-0.512V
Gain 16 : VMAX +/-0.256V


Questi sono i collegamenti :

http://www.energialternativa.info/public/newforum/ForumEA/P/ads1115PerArduino.jpg



cioè occorre collegare la schedina
Schedina = Arduino
Vdd = +5V
GND = GND
SDA = A4
SCL = A5

Questo convertitore ha la possibbilità di interrogare 4 ingressi mediante un multiplexer sempre gestito a livello SW.

Il protocollo con cui comunica con l'arduino è I2C ed è per quello che occorre collegare SDA e SCL.

Il codice di test è questo...ho dovuto mettere i doppi apici sull'include wire.h altrimenti non compilava.


-TOP CODE-

-BOTTOM CODE-




ma lads1115 misura tramite resistenze ?



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 12/05/2019 08:57:44

Vuoi dire aggiuntive? No, colleghi il modulo alla porta I2C, lo alimenti ed è pronto a leggere gli ingressi analogici



---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 09:09:57

CITAZIONE (calcola, 12/05/2019 08:57:44 ) Discussione.php?214354&2#MSG17

Vuoi dire aggiuntive? No, colleghi il modulo alla porta I2C, lo alimenti ed è pronto a leggere gli ingressi analogici



vorrei leggere la tensione dei miei pannelli massimo 38v

devo mettere partitore di tensione , quanto e massimo il valore che leggono ?

e leggere i segnali provenienti da gli acs da 30A A 100 A



grazie



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 12/05/2019 21:37:25

Quale scheda intendi usare, Arduino, esp8266...



Modificato da calcola - 12/05/2019, 21:42:40


---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 21:46:31

CITAZIONE (calcola, 12/05/2019 21:37:25 ) Discussione.php?214354&2#MSG19

Quale scheda intendi usare, Arduino, esp8266...

Sto già usando Arduino mega , con 4 sensori ACS
3 tensioni pannelli
2 bs da 12v ,
Al momento li vedo online con blynk , e su 2 display a 4 righe



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 21:53:25

questo e il mio schetch , ci sono riuscito a forza di copia incolla dal web ed e molto incasinato

#include

#include

Adafruit_ADS1115 ads; /* Use this for the 16-bit version */


// COMANDO https://youtu.be/bWvOlyGAD-g

// parte del codice e opera di BOB

// comando uscite blynk https://youtu.be/WcFDtBe8pY4

// https://www.youtube.com/watch?v=bWvOlyGAD-g&feature=youtu.be
// https://youtu.be/bWvOlyGAD-g
// https://youtu.be/YRomluFylXQ

#define BLYNK_PRINT Serial


#include
#include
#include

#include


// camper mega 2 char auth[] = "0df85fb625db655";

char auth[] = "17132af5a9c7";

#define W5100_CS 10
#define SDCARD_CS 4


//blynk DISPLAY

#define bsamp V15 // amper BS
#define bsvolt V14 // volt BS

#define solamp V13 //
#define solvolt V12 //

#define solamp2 V11 //
#define solvolt2 V10 //

#define solamp3 V9 //
#define solvolt3 V8 //


#define bmvolt V7 //

// blynk



// Set the LCD address to 0x27 for a 16 chars and 2 line display



LiquidCrystal_I2C lcd(0x27, 20, 4);
LiquidCrystal_I2C lcd2(0x23, 20, 4);






//const int TENSIONE_BS = A14;


const int AMP_BS = A15;



const int AMP_SOL = A14;
const int AMP_SOL2 = A13;
const int AMP_SOL3 = A12;


//const int TENSIONE_BS = adc0;
const int TENSIONE_BS = A0;
const int TENSIONE_SOL = A1;
const int TENSIONE_SOL2 = A2;
const int TENSIONE_SOL3 = A3;
const int TENSIONE_BM = A4;




double tensioneBS = 0; // valore dove leggerò tensione BS

double tensioneSOL = 0; // valore dove leggerò tensione BS
double tensioneSOL2 = 0; // valore dove leggerò tensione BS
double tensioneSOL3 = 0; // valore dove leggerò tensione BS
double tensioneBM = 0; // valore dove leggerò tensione BM

//CORRENTE
double correnteBS = 0; // valore dove leggerò corrente BS

double correnteSOL = 0; // valore dove leggerò corrente BS

double correnteSOL2 = 0; // valore dove leggerò corrente BS
double correnteSOL3 = 0; // valore dove leggerò corrente BS

// CORRENTE


const double R1 = 10000.0;
const double R2 = 1265.0; // EFFETTUARE TARATURA
// se hai multimetro di precisione, puoi cambiare il secondo valore, io lo spostai di 7 (SETTE) ohm

const double partitoreTensione = (R1 + R2) / R2;


const double R3 = 10000.0;
const double R4 = 1265.0; // EFFETTUARE TARATURA
// se hai multimetro di precisione, puoi cambiare il secondo valore, io lo spostai di 7 (SETTE) ohm

const double partitoreTensionesol = (R3 + R4) / R4;

const double R5 = 10000.0;
const double R6 = 1265.0; // EFFETTUARE TARATURA
// se hai multimetro di precisione, puoi cambiare il secondo valore, io lo spostai di 7 (SETTE) ohm

const double partitoreTensionesol2 = (R5 + R6) / R6;


const double R7 = 10000.0;
const double R8 = 1265.0; // EFFETTUARE TARATURA
// se hai multimetro di precisione, puoi cambiare il secondo valore, io lo spostai di 7 (SETTE) ohm

const double partitoreTensionesol3 = (R7 + R8) / R8;


const double R9 = 10000.0;
const double R10 = 1265.0; // EFFETTUARE TARATURA
// se hai multimetro di precisione, puoi cambiare il secondo valore, io lo spostai di 7 (SETTE) ohm

const double partitoreTensionebm = (R9 + R10) / R10;

BlynkTimer timer;



void setup() {

//comando blynk

pinMode(A5,INPUT);
pinMode(A6,INPUT);
pinMode(A7,INPUT);
pinMode(A8,INPUT);


timer.setInterval(300L, leggibt);





// put your setup code here, to run once:
Serial.begin(9600); //per la comunicazione seriale

Serial.println("Hello!");

Serial.println("Getting single-ended readings from AIN0..3");
Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");

// The ADC input range (or gain) can be changed via the following
// functions, but be careful never to exceed VDD +0.3V max, or to
// exceed the upper and lower limits if you adjust the input range!
// Setting these values incorrectly may destroy your ADC!
// ADS1015 ADS1115
// ------- -------
// ads.setGain(GAIN_TWOTHIRDS); // 2/3x gain +/- 6.144V 1 bit = 3mV 0.1875mV (default)
// ads.setGain(GAIN_ONE); // 1x gain +/- 4.096V 1 bit = 2mV 0.125mV
// ads.setGain(GAIN_TWO); // 2x gain +/- 2.048V 1 bit = 1mV 0.0625mV
// ads.setGain(GAIN_FOUR); // 4x gain +/- 1.024V 1 bit = 0.5mV 0.03125mV
// ads.setGain(GAIN_EIGHT); // 8x gain +/- 0.512V 1 bit = 0.25mV 0.015625mV
// ads.setGain(GAIN_SIXTEEN); // 16x gain +/- 0.256V 1 bit = 0.125mV 0.0078125mV

ads.begin();






pinMode(SDCARD_CS, OUTPUT);
digitalWrite(SDCARD_CS, HIGH); // Deselect the SD card

Blynk.begin(auth);
//timer.setInterval(500L, leggidati);











lcd.begin(); //inizializzazione lcd 16x2
lcd2.begin(); //inizializzazione lcd 16x2



//TENSIONE
pinMode (TENSIONE_BS, INPUT);
pinMode (TENSIONE_SOL, INPUT);
pinMode (TENSIONE_SOL2, INPUT);
pinMode (TENSIONE_SOL3, INPUT);
pinMode (TENSIONE_BM, INPUT);




//TEBNSIONE


pinMode (AMP_BS, INPUT); //necessario per essere sicuro che siano pronti a leggere valori
pinMode (AMP_SOL, INPUT); //necessario per essere sicuro che siano pronti a leggere valori
pinMode (AMP_SOL2, INPUT); //necessario per essere sicuro che siano pronti a leggere valori
pinMode (AMP_SOL3, INPUT); //necessario per essere sicuro che siano pronti a leggere valori
//pinMode (adc0,INPUT);
}









void loop() {

int16_t adc0, adc1, adc2, adc3;

adc0 = ads.readADC_SingleEnded(0);
adc1 = ads.readADC_SingleEnded(1);
adc2 = ads.readADC_SingleEnded(2);
adc3 = ads.readADC_SingleEnded(3);
Serial.print("AIN0: "); Serial.println(adc0);
Serial.print("AIN1: "); Serial.println(adc1);
Serial.print("AIN2: "); Serial.println(adc2);
Serial.print("AIN3: "); Serial.println(adc3);
Serial.println(" ");

Blynk.run();
timer.run();


// AMPEROMETRO
double letturaTensioneInVolt;

letturaTensioneInVolt = 5.0 / 1024 * analogRead(AMP_BS);


double letturaTensioneInVoltsol;

letturaTensioneInVoltsol = 5.0 / 1024 * analogRead(AMP_SOL);


double letturaTensioneInVoltsol2;

letturaTensioneInVoltsol2 = 5.0 / 1024 * analogRead(AMP_SOL2);

double letturaTensioneInVoltsol3;

letturaTensioneInVoltsol3 = 5.0 / 1024 * analogRead(AMP_SOL3);






//Serial.print(analogRead(AMP_BS) );
//Serial.print( " " );
//Serial.println(letturaTensioneInVolt, 2);

//(tra parentesi, lascia perdere i float, usa i double -- se vuoi ti spiego perché, altrimenti fidati e basta :-)

// a questo punto, applichiamo la conversione: per ACS 100 sono 20mV/A
// quindi
//correnteLetta = (2.5 - letturaTensioneInVolt ) * 1000 / 20;
// moltiplico per 1000 per ottenere la lettura in millivolt, e divido per 20.
// Dato che è 1000/20 è costante semplifico:

double correnteLetta = (2.2999 - letturaTensioneInVolt ) * 50.0; // bs amp
double correnteLettasol = (2.5000 - letturaTensioneInVoltsol ) * 50.0;

double correnteLettasol2 = (2.5000 - letturaTensioneInVoltsol2 ) * 50.0;
double correnteLettasol3 = (2.5000 - letturaTensioneInVoltsol3 ) * 50.0;


//nota: scrivo 50.0 per abitudine, perché in alcune circostanze il compilatore potrebbbe fare divisione fra interi

// adesso il problema è che quel 2.5 è lo zero dell'amperometro.
// con adeguata precisione, potresti usare un piccolo correttivo
// (ad esempio, da un mio schema reale leggo 2.4754)
// nel tuo caso, ti direi di pensarci in futuro, quando avrai ADS1115 per leggere tensioni


// altro punto: la media delle 5 letture significa che devi leggere 5 volte la corrente, soomarla e fare la media.
//quindi:

double sommaTemporanea = correnteLetta;

for (int i = 0; i < 4; i++) { //ancora 4 letture, la prima l'ha fatta sopra
correnteLetta = (2.5 - letturaTensioneInVolt ) * -50.0;
letturaTensioneInVolt = 5.0 / 1024 * analogRead(AMP_BS);

sommaTemporanea = sommaTemporanea + correnteLetta;
}

correnteBS = sommaTemporanea / 5.0;



double sommaTemporaneasol = correnteLettasol;

for (int i = 0; i < 4; i++) { //ancora 4 letture, la prima l'ha fatta sopra
correnteLettasol = (2.5 - letturaTensioneInVoltsol ) * -50.0;
letturaTensioneInVoltsol = 5.0 / 1024 * analogRead(AMP_SOL);

sommaTemporaneasol = sommaTemporaneasol + correnteLettasol;
}

correnteSOL = sommaTemporaneasol / 5.0;




double sommaTemporaneasol2 = correnteLettasol2;

for (int i = 0; i < 4; i++) { //ancora 4 letture, la prima l'ha fatta sopra
correnteLettasol2 = (2.5 - letturaTensioneInVoltsol2 ) * -50.0;
letturaTensioneInVoltsol2 = 5.0 / 1024 * analogRead(AMP_SOL2);

sommaTemporaneasol2 = sommaTemporaneasol2 + correnteLettasol2;
}

correnteSOL2 = sommaTemporaneasol2 / 5.0;




double sommaTemporaneasol3 = correnteLettasol3;

for (int i = 0; i < 4; i++) { //ancora 4 letture, la prima l'ha fatta sopra
correnteLettasol3 = (2.5 - letturaTensioneInVoltsol3 ) * -50.0;
letturaTensioneInVoltsol3 = 5.0 / 1024 * analogRead(AMP_SOL3);

sommaTemporaneasol3 = sommaTemporaneasol3 + correnteLettasol3;
}

correnteSOL3 = sommaTemporaneasol3 / 5.0;











// SECONDA PARTE

// la lettura BS diventa
// double tensioneCorretta = tensioneAlPartitore * partitoreTensione ;
// quindi



tensioneBS = (5.0 / 1024 * analogRead(TENSIONE_BS)) * partitoreTensione ;
tensioneSOL = (5.0 / 1024 * analogRead(TENSIONE_SOL)) * partitoreTensionesol ;
tensioneSOL2 = (5.0 / 1024 * analogRead(TENSIONE_SOL2)) * partitoreTensionesol2 ;
tensioneSOL3 = (5.0 / 1024 * analogRead(TENSIONE_SOL3)) * partitoreTensionesol3 ;
tensioneBM = (5.0 / 1024 * analogRead(TENSIONE_BM)) * partitoreTensionebm ;


// STAMPA LCD
lcd.clear(); //pulisci lcd
lcd.setCursor(0, 0); //posiziona il cursore sulla prima linea del display
lcd.print("V ");
lcd.print (tensioneBS, 1);
lcd.print(" BS A ");
lcd.print(correnteBS, 1);



lcd.setCursor(0, 1); //posiziona il cursore sulla prima linea del display
lcd.print("V ");
lcd.print (tensioneSOL, 1);
lcd.print(" SOL A ");
lcd.print(correnteSOL, 1);

lcd.setCursor(0, 2); //posiziona il cursore sulla prima linea del display
lcd.print("V ");
lcd.print (tensioneSOL2, 1);
lcd.print(" SOL2 A ");
lcd.print(correnteSOL2, 1);

lcd.setCursor(0, 3); //posiziona il cursore sulla prima linea del display
lcd.print("V ");
lcd.print (tensioneSOL3, 1);
lcd.print(" SOL3 A ");
lcd.print(correnteSOL3, 1);
//lcd.print(adc0, 1);




// 2 LCD

lcd2.clear(); //pulisci lcd
lcd2.setCursor(0, 0); //posiziona il cursore sulla prima linea del display
lcd2.print("V ");
lcd2.print (tensioneBS, 1);
lcd2.print(" A BS ");
lcd2.print(correnteBS, 1);

//pulisci lcd
lcd2.setCursor(0, 1); //posiziona il cursore sulla prima linea del display
lcd2.print("V BM ");
lcd2.print (tensioneBM, 1);



// ********************* DA BOB -- FINE INTERVENTO

delay(250);
//delay(250);

Blynk.run();
timer.run();
}

//void leggidati()




BLYNK_READ(bsamp) //1 amp


{
Blynk.virtualWrite(bsamp, correnteBS);


}






BLYNK_READ(bsvolt) //1 amp


{
Blynk.virtualWrite(bsvolt, tensioneBS);


}





BLYNK_READ(solamp) //1 amp


{
Blynk.virtualWrite(solamp, correnteSOL);


}


BLYNK_READ(solvolt) //1 amp


{
Blynk.virtualWrite(solvolt, tensioneSOL);


}




//2


BLYNK_READ(solamp2) //1 amp


{
Blynk.virtualWrite(solamp2, correnteSOL2);


}


BLYNK_READ(solvolt2) //1 amp


{
Blynk.virtualWrite(solvolt2, tensioneSOL2);


}

BLYNK_READ(solamp3) //1 amp


{
Blynk.virtualWrite(solamp3, correnteSOL3);


}





BLYNK_READ(solvolt3) //1 amp


{
Blynk.virtualWrite(solvolt3, tensioneSOL3);


}

BLYNK_READ(bmvolt) //1 amp


{
Blynk.virtualWrite(bmvolt, tensioneBM);


}

void leggibt()


{
if (digitalRead(A5)){
Blynk.virtualWrite(V5, 255);
} else {
Blynk.virtualWrite(V5, 0);
}


if (digitalRead(A6)){
Blynk.virtualWrite(V6, 255);
} else {
Blynk.virtualWrite(V6, 0);
}

if (digitalRead(A7)){
Blynk.virtualWrite(V4, 255);
} else {
Blynk.virtualWrite(V4, 0);
}

if (digitalRead(A8)){
Blynk.virtualWrite(V3, 255);
} else {
Blynk.virtualWrite(V3, 0);
}




}



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 21:57:43

questo e quello che vedo sul cellulare tramite internet



Immagine Allegata: Screenshot_20190512-215047.jpg
 
ForumEA/U/Screenshot_20190512-215047.jpg



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 21:58:06

2



Immagine Allegata: Screenshot_20190512-215058.jpg
 
ForumEA/U/Screenshot_20190512-215058.jpg



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 21:58:30

3



Immagine Allegata: Screenshot_20190512-215106.jpg
 
ForumEA/U/Screenshot_20190512-215106.jpg



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 12/05/2019 22:13:09

Se usi un arduino mega o anche un arduino uno, l'acs1115 non ti serve, la scheda ha già tutte le porte analogiche che ti servono. L'espansione è necessaria quando non vi sono le porte analogiche o per applicazioni particolari.



---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 12/05/2019 22:34:46

CITAZIONE (calcola, 12/05/2019 22:13:09 ) Discussione.php?214354&2#MSG25

Se usi un arduino mega o anche un arduino uno, l'acs1115 non ti serve, la scheda ha già tutte le porte analogiche che ti servono. L'espansione è necessaria quando non vi sono le porte analogiche o per applicazioni particolari.



un amico me lo consigliava per avere una lettura piu precisa .....



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calcola
GigaWatt


Utente
Msg:4435

Stato:



Inviato il: 13/05/2019 04:25:45

Appunto, è utile per scopi particolari dove la lettura al millesimo fa la differenza, non è il tuo caso. Per leggere la tensione dei pannelli il primo decimale è già sufficiente e lo stesso per la corrente, dove la precisione dipende dall'acs e non è che sia molto preciso.

Il codice per l'arduino devi postarlo con un copia incolla dentro il tag code, quindi prima selezioni il pulsante "code" sul menu' di sinistra e dentro il tag incolli il codice.



Modificato da calcola - 13/05/2019, 04:31:43


---------------
Impara l'arte e mettila da parte

14 pannelli da 100w, inverter kemapower 3kw, regolato...

 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 13/05/2019 07:15:50

-TOP CODE-

-BOTTOM CODE-



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 

calasci
KiloWatt


Utente
Msg:125

Stato:



Inviato il: 13/05/2019 07:17:53

CITAZIONE (calcola, 13/05/2019 04:25:45 ) Discussione.php?214354&2#MSG27

Appunto, è utile per scopi particolari dove la lettura al millesimo fa la differenza, non è il tuo caso. Per leggere la tensione dei pannelli il primo decimale è già sufficiente e lo stesso per la corrente, dove la precisione dipende dall'acs e non è che sia molto preciso.

Il codice per l'arduino devi postarlo con un copia incolla dentro il tag code, quindi prima selezioni il pulsante "code" sul menu' di sinistra e dentro il tag incolli il codice.





dovrei aumentare i sensori per aggiungere sonde temperature ,il mio problema e che non riesco a fare la media del ads1115,



---------------
Impianto camper 24v 4 x 500w solare 280A LIFEPO 4
EASUN REGOLATORE SOLARE 8048


 
 InizioPagina
 

Pag: (3)   1   [2]   3    (Ultimo)

Versione Completa!

Home page     TOP100-SOLAR    Home page forum