Problema software o Hardware?

Salve amici
Volevo condividere qualcosa di strano, almeno per me.
Ho programmato un ESP32 per leggere un Phmetro e un TDS per avere uno specchietto in real time del mio acquario (tanto per imparare a usare gli ESP32).
Andiamo al problema: se faccio leggere la sonda del Phmetro la lettura va bene se metto dentro il sensore del TDS la sua lettura va bene ma quella del Ph nello stesso istante che immergo la sonda sale di un punto ad es. 6,9 diventa 7,9 e questo anche se provo a cambiare con un altro board ESP32 e cambia anche se metto le due sonde separate in due bicchieri diversi.
La lettura è falsata sia che la leggo da seriale sia che la leggo da IOT Arduino.
Ho provata anche a cambiare i pin di ingresso.
Vi allego il semplice codice

#define pinIngrPh 35
#define pinIngrEc 32
#define coeff 1.125
#define PH4 2.85
#define PH7 2.30
int buf [10];
int buffr [10];

void setup() {
  Serial.begin(115200);
}

void loop() {
  float avgValue = 0;
  for (int i = 0; i < 10; i++)
  {
    buf[i] = analogRead(pinIngrPh);
    delay(5);
    avgValue += buf[i];
  }
  float tens_ph = (3.3 / 4096.0) * (avgValue / 10);
  float PH_step = (PH4 - PH7) / 3;
  float Po = 0;
  Po = 7.00 + ((PH7 - tens_ph) / PH_step);
  Po = (int(Po * 100))/100.00;

  float avgValue2 = 0;
  for (int j = 0; j < 10; j++)
  {    
   buffr[j] = analogRead(pinIngrEc);
   delay(5);    
   avgValue2 += buffr[j];
  }
  float tens_eC = (3.3 / 4096.0) * (avgValue2 / 10);
  float eC = 0;
  eC = ((2000.0 / 2.30) * tens_eC) * coeff;
  Serial.println(Po);
  Serial.println(eC);
  delay(1000); 
}

Quanti caratteri sono significativi nei nomi delle variabili?

Uhmm...
No... Anche riempiendo tutta la larghezza del monitor con i nomi di due variabili che differiscono solo per l'ultimo carattere vengono comunque distinte. Se fossero considerate uguali, d'altra parte, verrebbe segnalato un errore.

Diciamo che per velocizzare e perchè sono un fan del ctrl/c e ctrl/v non mi cimento a inventarmi nomi alle variabili.
La cosa che mi sta facendo impazzire e che due ingressi analogici separati fra di loro da qualche parte si "immischiano".

Prova ad aggiungere una lettura a vuoto prima dei cicli di lettura.

  float avgValue = 0;
  analogRead(pinIngrPh);     // <-----
  delay(5);                  // <-----
  for (int i = 0; i < 10; i++)
  {
    buf[i] = analogRead(pinIngrPh);
    delay(5);
    avgValue += buf[i];
  }

Non li ho mai usati di persona, ma le sonde per pH non vanno tarate usando le soluzioni campione?

@Claudio_FF
Ok
Grazie

@cotestatnt
Si
Il kit che ho comprato oltre la sonda e la scheda di interfaccia aveva anche le bustine con i test campione da diluire in acqua demi

@Claudio_FF
Ho fatto quanto da te indicato ma nulla, ho anche messo un intervallo di 1sec tra le due letture ma nulla, ho usato i due ingressi analogici adc1 per ph e adc2 per tds ma nulla, non so piu' cosa provare.

Escludi qualcosa con //, una cosa per volta, e vedi da che cosa è causato.

Non proprio ... e' vero che ci sono piu ingressi analogici, ma il convertitore interno AD e' unico, e gli ingressi vengono multiplexati ... anche per quello in molti posti suggeriscono di fare un paio di letture "a vuoto" da scartare quando si leggono due o piu inressi analogici, ogni volta che si cambia l'ingresso letto :wink:

Farò altre prove, ormai è una sfida :rofl:

Pomeriggio ho avuto un pò di tempo per fare dei test; ho simulato con un partitore di tensione l'ingresso del Phmetro e con mia sorpresa inserendo la sonda del TDS il valore simulato non cambiava. Quindi ho riprovato il tutto e l'arcano si è svelato nella scheda di interfaccia della sonda del Ph che immersa in acqua la tensione d'ingresso si abbassa, anche se la alimento a 5V fa lo stesso difetto, quindi è una deficienza della scheda.
Si abbassa solo se la sonda del TDS sviluppa tensione, ovvero immersa.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.