Arduino yun con sensori lm35

Ciao a tutti! Sono nuovo del forum.
Voelvo chiedervi una mano per un progetto che sto facendo per la tesina per la maturità perchè ho alcuni problemi che non riesco proprio a capire e quindi a risolvere.

Il mio progetto consiste nel controllo di paramentri ambienatli (temperatura e luce) di 6 zone diverse della casa. Per il controllo della luce uso una fotoresitenza mentre per il controllo della temperatura uso un lm35 che fornisce in uscita una tensione analogica che varia di 10 mV/°C. Essendo un controllo su 6 zone diverse ho fatto 6 schede di acquisizione tutte uguali collegate con circa 5-6 metri di cavo schermato da allarme verso il cuore centrale, che è una scheda arduino yun.
Su ogni scheda di acquisizione il segnale dell’lm35 viene amplificato di 10 volte con un ampli non invertente ad operazionale. La misura di ogni sensore di temperatura viene tarata con un trimmer in modo che sulla scheda yun arrivi una tensione che corrisponde alla temperatura misurata dal termostato che ho in casa.

Le tensioni analogiche (2 per ogni “zona”) vengono convertite dall’adc interno alla scheda yun, che dispone di 12 ingressi analogici (come la leonardo).
I valori convertiti vengono poi elaborati per ritornare al valore in gradi e vengono inviate su un sito di hosting di valori tramite uno script che ho scritto e che risiede sul lato LININO della scheda.

Il programma per arduino è:

#include <Bridge.h>
 
int pins[6][6] = {{0, 2, 4, 6, 8},{1, 3, 5, 7, 9}};
float tempValue = 0;
float temperatura[6];
float luceValue = 0;
float luce[6];
float tempProva[6];

void settaPermessi() {
  Process chmod;
  chmod.begin("chmod");      
  chmod.addParameter("+x");  
  chmod.addParameter("/mnt/sda1/inviaGrandezza.sh");  
  chmod.run();
}

void setup() {
  Bridge.begin();
  Serial.begin(9600);
}

void loop() {
  settaPermessi();
  for (int i=0; i<6; i++){
    
    analogRead(pins[i][0]);
    delay(1000);
    luceValue = 0;
    
    for (int l=0; l<3; l++){
      luceValue += analogRead(pins[i][0]);
      delay(5);
    }
    luceValue /= 4.0;
    
    luce[i] = luceValue * 100.0 / 1023.0;
    delay(1000);
    
    
    analogRead(pins[i][1]);
    delay(1000);
    tempValue = 0;  
    
    for (int t=0; t<3; t++){
      tempValue += analogRead(pins[i][1]);
      delay(5);
    }
    tempValue /= 4.0;
    
    tempProva[i] = tempValue;
    temperatura[i] = tempValue * 50.0 / 1023.0;
    delay(1000);
  }
 
  for (int c=0; c<6; c++){
    Process inviaDati;
    inviaDati.begin("sh");
    inviaDati.addParameter("/mnt/sda1/inviaGrandezza.sh");
    inviaDati.addParameter("luce"+String(c+1));
    inviaDati.addParameter(String(luce[c]));
    inviaDati.run();
    
    Process inviaDati1;
    inviaDati1.begin("sh");
    inviaDati1.addParameter("/mnt/sda1/inviaGrandezza.sh");
    inviaDati1.addParameter("temperatura"+String(c+1));
    inviaDati1.addParameter(String(temperatura[c]));
    inviaDati1.run();
    
    Process inviaDati2;
    inviaDati2.begin("sh");
    inviaDati2.addParameter("/mnt/sda1/inviaGrandezza.sh");
    inviaDati2.addParameter("temperaturaProva"+String(c+1));
    inviaDati2.addParameter(String(tempProva[c]));
    inviaDati2.run();  
  }
  
  delay(300000);
}

Il problema che sorge è il seguente: misurando col tester sui vari piedini analogici collegati ai sensori di temperatura la tensione è praticamente uguale (varia di qualche decina di mV), ma il valore dopo la conversione viene sballato su un piedino di circa 150-200 punti. Sugli altri 5 bene o male si rimane uguali (variazione di 2-3 LSB).
Per cercare di ovviare al problema ho provato a fare prima di ogni acquisizione una lettura sul piedino a vuoto e poi una pausa di un secondo per stabilizzare l’amux interno prima dell’adc, poi per ogni valore da acquisire ho fatto 4 acquisizioni con pausa di 5 ms tra una e l’altra e poi ne ho fatto la media.
Nonostante tutto questo il problema persiste.

Alimento la scheda arduino yun con questo articolo ALIMENTATORE CON USCITA MICRO USB - 5 VDC/500 mA
Ho letto su questa discussione http://forum.arduino.cc/index.php?topic=236409.0 che possono esserci problemi nell’usare un caricacellulare per alimentare la yun, ma non so se l’articolo che uso io è un alimentatore o un caricabatterie, in quanto sulla scatola è riportata la dicitura “power supply” che dovrebbe significare alimentatore e non “charger” che starebbe a significare caricatore.

Spero di essere stato abbastanza esauriente, se avete bisogno di altri chiarimenti per poter provare a darmi una mano non esitate a chiedere.

Grazie mille fin da subito a chi può aiutarmi!!!
Nicola

Ti invitiamo a presentarti qui: Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! - Generale - Arduino Forum
e a leggere il regolamento: [REGOLAMENTO] Come usare questa sezione del forum - Italiano - Arduino Forum

Ciao,
quel che posso dirti intanto è che quell'alimentatore potrebbe essere al limite: 500mA per la Yun son tirati.

Poi, domanda stupidina: hai provato ad attaccare la board ad altro piedino analogico? Lì la lettura è corretta? Se usi meno board hai gli stessi problemi?

Scusate la mancata presentazione (alla quale ho già provveduto).
Le altre informazioni sono molto interessanti ed utili. Grazie.

Poi, domanda stupidina: hai provato ad attaccare la board ad altro piedino analogico? Lì la lettura è corretta?

Ho appena provato a invertire due schedine di acquisizione e il problema si presenta sempre sullo stesso piedino analogico della yun, quindi credo che il problema possa essere quello.
Adesso provo anche a cambiare alimentatore e usarne uno da 1A, dici che possa bastare?

Nicola

alcuni errori di programmazone
riga 27 non assegni il valore a nessuna variabile
analogRead(pins[i][0]);
riga 31 ff

 for (int l=0; l<3; l++){
      luceValue += analogRead(pins[i][0]);
      delay(5);
    }
    luceValue /= 4.0;

il for gira 3 volte non 4 volte percui leggi 3 volte e dividi per 4. La stessa cosa vale per riga 45 ff

riga 41 non assegni il valore a nessuna variabile

analogRead(pins[i][1]);

ma il valore dopo la conversione viene sballato su un piedino di circa 150-200 punti. Sugli altri 5 bene o male si rimane uguali (variazione di 2-3 LSB).

Quale piedino Ti da il problema???

Ciao Uwe

Quale piedino Ti da il problema???

Il piedino che mi dà questo problema è A3.

riga 27 non assegni il valore a nessuna variabile

analogRead(pins[i][0]);

Si lo so ma è per fare una prima lettura "a vuoto" senza considerarne il valore. Può dare problemi??

Nicola