Проблема чтения аналогового сигнала Arduino?

Почему я получаю аналоговые показания для неподключенных портов, нажимая на пьезоэлемент в канале 1?

Пьезоэлемент подключен только к каналу 1 (порт Arduino A[0]). Каналы Ch 1 – Ch 6 подключены к монофоническим разъемам «мама», а проводка заземления (GND) идет последовательно от разъема 1, 2 и 3 и так далее… до конца канала 6 к порту GND Arduino.

Каналы Ch2 – Ch6 не подключены к пьезоэлементу, но все же подключены к плате arduino. А 1 -А[5]

Это последовательное чтение ... первый столбец - 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 !>

Это код ардуино:

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);  
}

Это принципиальная схема.

схематический

Ответы (2)

Я не уверен, является ли это правильным ответом или нет, но я все равно отправлю его, так как есть небольшой шанс, что он будет полезен.

В других микроконтроллерах, которые я использовал ранее, вам необходимо иметь время установления между операциями чтения канала АЦП, иначе предыдущее чтение, вероятно, повлияет на последующие чтения. Я еще не использовал АЦП на Arduino, но, возможно, есть библиотечная функция, которую вы можете вызвать, чтобы был зависимый от процессора сон/задержка, которая используется при чтении каналов АЦП. В любом случае вы можете легко проверить эту теорию, установив задержку между считываниями канала АЦП, чтобы увидеть, исчезнет ли проблема.

Хорошая точка зрения. Также особенно беспокоят нагрузки с высоким сопротивлением, и на некоторых PIC я даже видел просачивание между аналоговыми входами, вероятно, через аналоговый мультиплексор.

Мультиплексору на ATMega нужно время, чтобы переключиться с одного входа на другой вход. Вы можете добавить задержку, чтобы дождаться стабилизации, а затем прочитать его ввод.

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