Skocz do zawartości

Filtracja odczytu ADC potencjometru


Avabuy

Pomocna odpowiedź

Witam. Posiadam potencjometr który jest podłączony do mikrokontrolera Arduino. Problem polega na tym , że wartości wyświetlane na wyświetlaczu ustawione za pomocą potencjometru stale skaczą, tzn np. jest wartość 87% i za sekunde 86% i znów 87% itd. Czy mógłbym liczyć na Państwa pomoc jak w programie mógłbym może uśrednić te wartość? Wtedy wskazanie potencjometru na wyświetlaczu nie " skakałoby" .

Link do komentarza
Share on other sites

@Avabuy Szkoda, że nie napisałeś w celu użyjesz potencjometru i czym będzie sterował, ale myślę, że powinien zadowolić Cię warunek, który sprawdzi, czy różnica jest odpowiednio duża (faktyczne przekręcenie gałki) i dopiero zmieni, jeżeli zmiana będzie wynosić np. 2, coś takiego:

int obecna_wartosc = analogWrite(A0)*100/1024;

if (abs(poprzednia_wartosc-obecna_wartosc)>2) {/**/} //dopiero, kiedy wartość bezwględna będzie większa od np. 2, napisz na wyświetlaczu lub zrób coś innego

int poprzednia_wartosc = obecna wartosc; //pamiętaj, że wartość zmiennej poprzednia_wartosc zostanie przypisana na końcu wykonywanej pętli

 

Link do komentarza
Share on other sites

(edytowany)

To znaczy potencjometr ma działać w zakresie od 0 do 100.  Ma on za zadanie po prostu wyświetlić ustawioną wartość na ekranie- wg tej wartości ma być załączany np. przekaźnik. I właśnie chciałbym aby co 1% potencjometr wskazywał wartość a nie tak jak wysłałeś w programie co 2 % 🙂 ogólnie obecny kod wygląda tak - czy pomogłbyś mi go przerobić aby była ta stała wartość? 🙂

http://www.wklejto.pl/609118

 

 

Edytowano przez Avabuy
Link do komentarza
Share on other sites

Mała podpowiedź - kody wklejamy za pomocą narzędzia "Kod", bo wiadomo, że na zewnętrznych stronach mogą kiedyś zniknąć 🙂

Wnioskuję po kodzie, że ma on załączać jakąś osuszacz/nawilżacz, ale Ty narazie chcesz, aby wartość zadana była wyświetlana na ekranie. Ta wartość zadana ma być przez napięcie na potencjometrze, który z pewnych powodów się zmienia (np. szczotka drży). Jeżeli nie odpowiada Ci moje rozwiązanie (zmiana wartości dopiero, kiedy zmiana > 2%), nie wiem czy można zrobić to programowo - w końcu skąd program ma wiedzieć, czy ta zmiana o 1% to drgania itd. czy to Ty przekręciłeś lekko gałkę. Mam pomysł natomiast jak usunąć to sprzętowo:

*dodać przycisk - zmiana wartości nastąpi dopiero wówczas, kiedy jest nacisnięty

*potencjometr wieloobrotowy

*enkoder, ale jego obsługa jest trudniejsza od funkcji analogRead()

 

Albo - rzucam jeszcze jeden pomysł, programowy

10% 11% 10% 11% 10% 11% 10% 11% 10% 11%

Pobrałeś 10 pomiarów powiedzmy przez minutę, dodajesz je, uśredniasz, jeżeli wynik jest zmienną int otrzymasz zaokrąglone 10.5 czyli 11%

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

2 minuty temu, woznycola1994 napisał:

Połączyć ten szkic z tamtym ? pomocy

Innej opcji raczej nie ma 🙂 Opisz trochę dokładniej swój problem to będzie łatwiej pomóc.

Link do komentarza
Share on other sites

Dziękuje. Otóż Na Arduino Uno r3 do tej pory miałem wgrany projekt unojoy żeby arduino było widziany jako joystick. Kontroler służy mi do grania w ETS2, Omsi itp był osadzony na 3 potencjometrach b10k liniowych. Wszystko działa w porządku oprócz tego że wolant się trzęsie. Chciałbym programowo to zniwelować. Ale ten szkic nie jest raczej przystosowany do obsługi 3 rezystorów, tylko wnioskuje że do jednego. Próbowałem to połączyć z gotowym (przykładowym szkicem "UnoJoyArduinoSample"). Ale wyskakuje mi komunikat brak plików nagłówkowych. Ogólnie jestem bardzo na wczesnym etapie arduino. Nie mogę tego połączyć.

Link do komentarza
Share on other sites

Próbowałem wgrać taki szkic.

/*
  Smoothing

  Reads repeatedly from an analog input, calculating a running average and
  printing it to the computer. Keeps ten readings in an array and continually
  averages them.

  The circuit:
  - analog sensor (potentiometer will do) attached to analog input 0

  created 22 Apr 2007
  by David A. Mellis  <dam@mellis.org>
  modified 9 Apr 2012
  by Tom Igoe

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Smoothing
*/

// Define the number of samples to keep track of. The higher the number, the
// more the readings will be smoothed, but the slower the output will respond to
// the input. Using a constant rather than a normal variable lets us use this
// value to determine the size of the readings array.
const int numReadings = 10;

int readings[numReadings];      // the readings from the analog input
int readIndex = 0;              // the index of the current reading
int total = 0;                  // the running total
int average = 0;                // the average

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
}

 

Edytowano przez woznycola1994
Link do komentarza
Share on other sites

15 godzin temu, woznycola1994 napisał:

Próbowałem wgrać taki szkic.

I? Jaki efekt, a czego się spodziewałeś? Musisz pamiętać, że nie mamy przed sobą tego sprzętu. Nie możemy wgrać programu i go sprawdzisz, musimy bazować tylko na tym co nam opiszesz 😉

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.