Problema lettura Ingressi Analogici

Salve ragazzi, sono alle prese con arduino, in pratica non riesco a capire, quando ho una porta analogica senza carico (cioè a vuoto) leggo comunque un valore. Come mai ? Come posso controllare un'ingresso analogico per esempio se c'è inserito un determinato sensore (umidità o luce) ?

Ecco il codice:

int pinA0 = A0;
int pinA1 = A1;
int valpinA0 = 0;
int valpinA1 = 0;
int count = 0;

void setup(){
Serial.begin(9600); // Inizializza la porta seriale
}

void loop(){
while (count <= 10000){
valpinA0 = analogRead(pinA0);
valpinA1 = analogRead(pinA1);
Serial.print ("Pin A0: ");
Serial.print (valpinA0);
Serial.println ("\r");
Serial.print ("Pin A1: ");
Serial.print (valpinA1);
Serial.println ("\r");
delay(5000);
count++;
}
}

Al monitor ho il seguente risultato a secondo dei 3 casi:

  1. A0 e A1 a vuoto:

Pin A0: 354
Pin A1: 355
Pin A0: 356
Pin A1: 356
Pin A0: 356
Pin A1: 356

  1. Con una resistenza da 1 kohm collegata un terminale in 5v, l'altro terminale in A0 e A1 a vuoto:

Pin A0: 1023
Pin A1: 802
Pin A0: 1023
Pin A1: 810
Pin A0: 1023
Pin A1: 814

  1. Con una resistenza da 1 kohm collegata un terminale in GND, l'altro terminale in A0 e A1 a vuoto:

Pin A0: 0
Pin A1: 143
Pin A0: 0
Pin A1: 141
Pin A0: 0
Pin A1: 140
Pin A0: 0
Pin A1: 139

Di norma devi mettere una R da 10k tra ogni pin analogico e GND, in modo da leggere sempre 0 su entrambi, poi in base ai valori che applichi ai due ingressi avrai le letture; i valori NON devno superare i 5V, altrimenti devi usare un idoneo partitore.

wsnicky:
Salve ragazzi, sono alle prese con arduino, in pratica non riesco a capire, quando ho una porta analogica senza carico (cioè a vuoto) leggo comunque un valore. Come mai ? Come posso controllare un'ingresso analogico per esempio se c'è inserito un determinato sensore (umidità o luce) ?

è normale, stai misurando la corrente "ambientale". Se ci fai caso, avvicinando una mano al pin i valori aumenteranno.

per sapere se un sensore è inserito puoi mettere una resistenza bella grossa dal PIN a GND, quando leggerai valori diversi da 0 allora il sensore è stato inserito. E' quasi impossibile che un sensore analogico di una lettura fissa su 0 (forse dei casi limite)

lesto:
per sapere se un sensore è inserito puoi mettere una resistenza bella grossa dal PIN a GND, quando leggerai valori diversi da 0 allora il sensore è stato inserito. E' quasi impossibile che un sensore analogico di una lettura fissa su 0 (forse dei casi limite)

Lui sta dicendo chiaramente che NON ha collegato alcun sensore ma solo delle resistenze, quindi con una normale pull-down da 10K verso massa

menniti:
Di norma devi mettere una R da 10k tra ogni pin analogico e GND, in modo da leggere sempre 0 su entrambi, poi in base ai valori che applichi ai due ingressi avrai le letture; i valori NON devno superare i 5V, altrimenti devi usare un idoneo partitore.

ovviamente deve leggere costantemente 0, in assenza di sensori.

Grazie ragazzi, ho provato i vostri suggerimenti è vanno bene ! :slight_smile:

menniti:
Di norma devi mettere una R da 10k tra ogni pin analogico e GND, in modo da leggere sempre 0 su entrambi, poi in base ai valori che applichi ai due ingressi avrai le letture; i valori NON devno superare i 5V, altrimenti devi usare un idoneo partitore.

Precisazione. Si possono usare anche altre tensioni di riferimento oltre quella standard 5V. In quel caso il fondoscala (valore letto 1023) cambia e non saranno piú 5V ma 1,1 oppure Vref che si applica esternamente (vale per il ATmega328)

Ciao Uwe