¿Problema de lectura de señal analógica de Arduino?

¿Por qué obtengo lecturas analógicas en los puertos no conectados al tocar el piezoeléctrico en el canal 1?

El elemento piezoeléctrico solo está conectado al Canal 1 (puerto Arduino A[0]). Los canales Ch 1 - Ch 6 están conectados a conectores hembra mono y el cableado de tierra (GND) está en serie desde el conector 1, 2 y 3 y así sucesivamente... hasta el extremo del canal 6 al puerto Arduino GND.

Los canales Ch2 - Ch6 no tienen conexión piezoeléctrica, pero aún están conectados a la placa arduino. A 1 -A[5]

Esta es la lectura en serie... la primera columna es Ch1 … Ch 6.

Taped 3 times

787 0 0 0 0 0 
191 0 0 0 0 0 
19 0 0 0 0 0 
937 123 63 5 0 0 < ch2, ch3 ch4 ERROR !> 
86 0 0 0 0 0 
13 0 0 0 0 0 
507 83 126 16 8 0 < ch2, ch3, ch4 ch5 ERROR !>
21 1 1 0 0 0  < ch2, ch3 ERROR !>
0 0 18 0 0 0 < ch3 ERROR !>

Este es el código de arduino:

const int singnalLevel = 10;  
boolean treshold = false;

int sensorReading[6];

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

void loop() {
   int sensorReading[6] = {0, 0, 0, 0, 0, 0}; 
   boolean treshold = false;
   sensorReading[0] = analogRead(A0);
   sensorReading[1] = analogRead(A1);
   sensorReading[2] = analogRead(A2);
   sensorReading[3] = analogRead(A3);
   sensorReading[4] = analogRead(A4);
   sensorReading[5] = analogRead(A5);

  for (int index = 0; index <= 5 ; index++) {        
    if(sensorReading[index] > singnalLevel){
      treshold = true;
    }
  }
    if(treshold){  
        for (int index = 0; index <= 5 ; index++) {        
          Serial.print(sensorReading[index]);   
          Serial.print(" ");  
        }
    Serial.println();  
  }    
  delay(1);  
}

Este es el esquema del circuito.

esquemático

Respuestas (2)

No estoy seguro de si esta es una respuesta válida o no, pero la enviaré de todos modos, ya que existe una remota posibilidad de que sea útil.

En otros microcontroladores que he usado antes, debe tener un tiempo de establecimiento entre las lecturas del canal ADC, o es probable que la lectura anterior afecte las lecturas posteriores. Todavía no he usado el ADC en el Arduino, pero tal vez haya una función de biblioteca a la que pueda llamar para que haya una suspensión/retraso dependiente del procesador que se usa al leer los canales ADC. En cualquier caso, puede probar fácilmente esta teoría retrasando las lecturas del canal ADC para ver si el problema desaparece.

Buen punto. Además, las cargas de alta resistencia son especialmente preocupantes y, en algunos PIC, incluso he visto que se desvanecen entre las entradas analógicas, probablemente a través del multiplexor analógico.

El multiplexor en ATMega necesita tiempo para cambiar de una entrada a otra entrada. Puede agregar un retraso para esperar hasta que se estabilice y luego leer su entrada.

  analogRead(A0); 
  delay(10);
  sensorReading[0] = analogRead(A0);
  analogRead(A1); 
  delay(10);
  sensorReading[0] = analogRead(A1);