Yavaş şekilde Analog okuma??

Başlatan Maxim, 29 Mart 2022, 16:36:21

MCansız

Alıntı yapılan: Maxim - 05 Nisan 2022, 08:59:15Beyler, hepinize ayrı ayrı teşekkür ediyorum.
yazdıklarınızın tamamını harfi harfine not aldım
üzerinde çalışıyorum

genelde moving filter tavsiye edildi
araştırmalarım sonrasında median filter sanki 1 tık daha iyi gibi duruyor
şu an hangi yöntem daha uygun belli değil
sağolun

merhabalar
Filtreler için parametreler aynı olduğunu varsayarsak. Eğer okumalarda istenmeyen değişimler oluyorsa (adc vb.) moving median filtre kullanarak okumayı stabilleştirir ama değişimler yavaş artmaz hızlı yansır. Moving Average filtre kullanırsanız değişimler yavaş yansır ama istenmeyen değişimlerden etkilenecektir.

Eger hatta parazit durumu olmuyor ise direk Moving Average filtresi kullanılabilinir. Parazit durumlarından kurtulmak için önce moving median filtresi sonra Moving Average filtresi kullanılabilinir.

eelkin

Merhaba, internetten hazır bir kod sanırım bu işini görür.

Alıntı Yapgirişe 15 volt verince ekranda 0.0 yazıyor ya, oradaki değerimiz yavaş yavaş yukarıya doğru çıksın?
mesela 0 dan 15 e gelmesi 3 saniye sürsün

numReadings değişkeninin değerini arttırdıkça gereçek değere yaklaşma süresi uzar. Değer arttıkça denetleyici içindeki kaynak kullanımıda artacaktır. Dilersen araya beklemede koyabilirsin.

const int numReadings = 10;

int readings[numReadings];      
int readIndex = 0;              
int total = 0;                 
int average = 0;                

int inputPin = A0;

void setup() {
  // initialize serial communication with computer:
  Serial.begin(9600);
  // initialize all the readings to 0:
  for (int thisReading = 0; thisReading < numReadings; thisReading++) {
    readings[thisReading] = 0;
  }
}

void loop() {
  // subtract the last reading:
  total = total - readings[readIndex];
  // read from the sensor:
  readings[readIndex] = analogRead(inputPin);
  // add the reading to the total:
  total = total + readings[readIndex];
  // advance to the next position in the array:
  readIndex = readIndex + 1;

  // if we're at the end of the array...
  if (readIndex >= numReadings) {
    // ...wrap around to the beginning:
    readIndex = 0;
  }

  // calculate the average:
  average = total / numReadings;
  // send it to the computer as ASCII digits
  Serial.println(average);
  delay(1);        // delay in between reads for stability
}