ky013 (4 sensori analogici di temperatura in multilettura) POSSIBILE?

salve ragazzi sto usando un arduino nano ed un display lcd i2c 16 x c2 ,avevo 4 sensori ky013 con 10k di resistenza cadauno sul pin s (sensore) allora volevo montarli tutti e 4, ma....ammetto che la deficienza mi ha anticipato su ogni mossa e mi sono inchiodato sul codice chiedevo a voi! e dico voi! se potete dare una sbirciatina al mio scarabocchio per dirmi dove sbaglio , perche' so che sbaglio!
il problema di fatto e' che non riesco a fare tutte e 4 le letture correttamente, e non capisco perche'!
il tutto e' riprodotto su display (l'unica cosa che sono riuscito a fare bene...forse)

allego codice e lo scrivo qua sotto anche ...correggetemi se sbotto:

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  
int ThermistorPin1 = A3;
int ThermistorPin2 = A2;
int ThermistorPin3 = A6;
int ThermistorPin4 = A7;
int Va;
int Vb;
int Vc;
int Vd;
float R1 = 10000;
float R3 = 10000;
float R5 = 10000;
float R7 = 10000;
float logR2, R2, Ta;
float logR4, R4, Tb ;
float logR6, R6, Tc ;
float logR8, R8, Td ;
float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741; 
float c4 = 0.001129148, c5 = 0.000234125, c6 = 0.0000000876741; 
float c7 = 0.001129148, c8 = 0.000234125, c9 = 0.0000000876741; 
float c10 = 0.001129148, c11 = 0.000234125, c12 = 0.0000000876741; 
void setup()
{
lcd.init();
lcd.backlight(); 
lcd.setCursor(1,0);
lcd.print("T1:"); 
lcd.setCursor(9,0);
lcd.print("T2:");
lcd.setCursor(1,1);
lcd.print("T3:");
lcd.setCursor(9,1);
lcd.print("T4:");
}
void loop()
{
Va = analogRead(ThermistorPin1);
Vb = analogRead(ThermistorPin2);
Vc = analogRead(ThermistorPin3);
Vd = analogRead(ThermistorPin4);
R2 = R1 * (1023.0 / (float)Va - 1.0); 
R4 = R3 * (1023.0 / (float)Vb - 1.0);
R6 = R5 * (1023.0 / (float)Vc - 1.0);
R8 = R7 * (1023.0 / (float)Vd - 1.0);
logR2 = log(R2);
logR4 = log(R4); 
logR6 = log(R6);  
logR8 = log(R8);  
Ta = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2)); 
Ta = Ta - 273.15;
Tb = (1.0 / (c4 + c5*logR4 + c6*logR4*logR4*logR4)); 
Tb = Tb - 273.15;  
Tc = (1.0 / (c7 + c8*logR6 + c9*logR6*logR6*logR6)); 
Tc = Tc - 273.15;  
Td = (1.0 / (c10 + c11*logR6 + c12*logR8*logR8*logR8)); 
Td = Td - 273.15;  
lcd.setCursor(5,0);
lcd.print(Ta,0);
lcd.setCursor(13,0);
lcd.print(Tb,0);
lcd.setCursor(5,1);
lcd.print(Tc,0);
lcd.setCursor(13,1);
lcd.print(Td,0);
delay(20000);
}

4 sens temp analg.ino (1.77 KB)

>legomania: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More -> Modify che si trova in basso a destra del tuo post) e racchiudere il codice all'interno dei tag CODE (... sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

In pratica, tutto il tuo codice dovrà trovarsi racchiuso tra due tag: [code] _il _tuo_ codice_ [/code] così da non venire interpretato e non dare adito alla formazione di caratteri indesiderati o cattiva formattazione del testo. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non avrai sistemato il codice come richiesto, nessuno ti potrà rispondere, quindi ti consiglio di farlo al più presto. :wink:

dannazione me ne ero dimenticato! l'ho letto qualche mese fa....correggo! capisco le tue intenzioni e spero che tu non debba passare il tempo in questo senso lato perche' sarebbe uno scempio. d'altronde pero' se ci pensi, e ci stavo pensando in questi giorni la natura provvede a riequilibrare le forze costantemente senza nessun mandato per cio', evidentemente tu ed io che facciamo parti di questo mondo siamo inesorabilmente frugati dall'equilibrio e dal caos in un costante sforzo di dimensioni inimmaginabili, ed anche nella meccanica quantistica cio avviene , anzi avviene ancora meglio... detto questo , voleva essere una lusinga al disturbo...correggo e rilancio . passo

Il Tuo codice viene Chiamato Spaghetticode perché é un unico lungo filo.

Stai facendo 4 volte la stessa cosa con 4 volte le stesse Variabili.
Usa arrays e un ciclo for.
Puoi ridurre tutto a un quatro.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  
int ThermistorPin[] = {A3,A2,A6,A6 };
x[] = {5,13,5,13};  /// Koordinaten für die Cursorposition der 4 Werte auf dem Display.
y[] = {0,0,1,1};

int V[4];
float R1 = 10000;
float logR2[4], R2[4], T[4];
float c1 = 0.001129148, c2 = 0.000234125, c3 = 0.0000000876741;


void setup()
{
lcd.init();
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("T1:");
lcd.setCursor(9,0);
lcd.print("T2:");
lcd.setCursor(1,1);
lcd.print("T3:");
lcd.setCursor(9,1);
lcd.print("T4:");
}

void loop()
{
for int i =0; i<4;i++)
{
V[i] = analogRead(ThermistorPin[i]);
V[i] = analogRead(ThermistorPin[i]);
V[i] = analogRead(ThermistorPin[i]);
V[i] = analogRead(ThermistorPin[i]);

R2[i] = R1 * (1023.0 / (float)V[i] - 1.0);
logR[i] = log(R2[i]);
T[i] = (1.0 / (c1 + c2*logR[i] + c3*logR[i]*logR[i]*logR[i]));
T[i] = T[i] - 273.15;
lcd.setCursor(x[i],y[i]);
}


delay(20000);
}

Non l'ho compilato. Non ho neanche il Display per provarlo. Percui non posso garantire il funzionamento.

Se il partitore desistivo del Sensore termico é troppo alto il circuito interno non riese ad essere caricato fino alla tensione del sensore. Aiuta leggerlo piú volte e usare l'ultima lettura. Anche un Condensatore da 0,1µF tra entrata analogica e massa aiuta tanto.

Ciao Uwe

hei la! esatto ! infatti io sono un somaro il c non so usarlo , programmavo quando avevo 8 anni su zx81 (qbasic) che era proprio uno spaghettone! ok quindi parto quindi ad imparare gli harray ed i cicli for per incominciare, mentre a livello meccanico ho la conferma che se il codice e' corretto 4 rilevazioni analogiche possono esistere, e questo mi fa piacere, con i giusti accorgimenti si intende ! ottimo grazie mille.

(vedi ...non sapendo programmare in c , io ho semplicemente copiato e incollato porzioni di codice da altre persone riadattandoli ad istinto....ma non avevo nessuna certezza della fattibilita' ) ti ringrazio...e' domenica tempo ne ho , ora provo !