• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czujnik GSR - rozbudowa
#1
Witam.
Przede wszystkim dziękuję za przyjęcie na owe forum. Udało mi się skończyć projekt mający na celu pomiar rezystancji człowieka za pomocą czujnika GSR - wykrywacz kłamstw. Jedna chciałem dodać kolejny czujnik GSR do mojej arduino uno jednak mam duży problem z określeniem komend. Pomimo dodawania różnych nie jestem w stanie osiągnąć poprawnie tego celu. Poniżej oryginalny kod dla arduino z jednym czujnikiem:

const int GSR=A0;
int sensorValue=0;
int gsr_average=0;

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

void loop(){
  long sum=0;
  for(int i=0;i<10;i++)           //Average the 10 measurements to remove the glitch
      {
      sensorValue=analogRead(GSR);
      sum += sensorValue;
      delay(15);
      }
   gsr_average = sum/10;
   Serial.print (200); Serial.print (",");
   Serial.print (300); Serial.print (",");
   Serial.println(gsr_average);
}

Pytanie teraz jaki powinień być poprawny kod dla drugiego czujnika podłączonego do wejścia A1 o tych samych pozostałych parametrach?
 
Odpowiedź
#2
Kod:
const int GSR=A0, GS1=A1;
int sensorValue=0;
int gsr_average=0;

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

void loop(){
  long sum=0;
  for(int i=0;i<10;i++)           //Average the 10 measurements to remove the glitch
      {
      sensorValue=analogRead(GSR);
      sum += sensorValue;
      delay(15);
      }
   gsr_average = sum/10;
   Serial.print (200); Serial.print (",");
   Serial.print (300); Serial.print (",");
   Serial.println(gsr_average);

  for(int i=0;i<10;i++)           //Average the 10 measurements to remove the glitch
      {
      sensorValue=analogRead(GSR1);
      sum += sensorValue;
      delay(15);
      }
   gsr_average = sum/10;
   Serial.print (200); Serial.print (",");
   Serial.print (300); Serial.print (",");
   Serial.println(gsr_average);


   
}
Możesz sobie też zrobić drugi zestaw reszty zmiennych globalnych, jeśli chcesz je potem wykorzystywać. Kod jest oczywiście kiepski, tak samo jak pierwowzór, naucz się używać millis();
 
Odpowiedź
#3
Witam ponownie. Na początek dziękuję Irvin za szybką odpowiedź. Uruchomiłem przesłany przez Ciebie kod oraz go zweryfikowałem jednak nie do końca o taki efekt mi chodziło. Po jego uruchomieniu arduino generuje następujące wartości:
200,300,1073
200,300,583
200,300,1073
200,300,583
200,300,1073
200,300,583
O ile pierwsze dwie wartości są określone "na sztywno", wartość 583 to odczyt z  czujnika  A0 jednak już wartość 1073 to suma z obydwu czujników gdzie powinna to być wartość odczytana tylko z czujnika A1.
Starałem się zmodernizować Twój kod jednak po długich kombinacjach nie udało się osiągnąć celu.
Kolejną rzeczą jest generujący się wykres, chciałbym aby krzywe były niezalezne od siebie i przebiegały według własnych odczytów, na chwilę obecną jest jak na zdjęciu w załączniku.
Pozdrawiam


Załączone pliki Miniatury
   
 
Odpowiedź
#4
(23-01-2024, 00:10)matchwalik napisał(a): O ile pierwsze dwie wartości są określone "na sztywno", wartość 583 to odczyt z  czujnika  A0 jednak już wartość 1073 to suma z obydwu czujników gdzie powinna to być wartość odczytana tylko z czujnika A1.

Trzeba wyzerować zmienną sum po wykorzystaniu, czyli po obliczeniu średniej z pierwszego czujnika.
 
Odpowiedź
#5
Tą zmienną long sum sobie po prostu wyzeruj po zakończeniu wydruków z A0, albo zrób drugi zestaw wszystkich zmiennych. Pierwsza wartość jednak powinna być z A0, rozumiem, że po prostu tak się skopiowało do pokazania tutaj, no i jedna literka koledze umknęła przy definicji zmiennej:
const int GSR=A0, GS1=A1; powinno być const int GSR=A0, GSR1=A1;
Tym bardziej do wykresów musisz możesz drugi zestaw zmiennych i dopiero po wyliczeniu obu średnich zrobić printy, żebyś miał w jednej linii to wydrukowane, albo tak:

Kod:
const int GSR=A0, GSR1=A1;
int sensorValue=0;
int gsr_average=0;

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

void loop(){
  long sum=0;
  for(int i=0;i<10;i++)           //Average the 10 measurements to remove the glitch
      {
      sensorValue=analogRead(GSR);
      sum += sensorValue;
      delay(15);
      }
   gsr_average = sum/10;
   Serial.print (200); Serial.print (",");
   Serial.print (300); Serial.print (",");
   Serial.print(gsr_average);Serial.print (",");
   sum=0;
  for(int i=0;i<10;i++)           //Average the 10 measurements to remove the glitch
      {
      sensorValue=analogRead(GSR1);
      sum += sensorValue;
      delay(15);
      }
   gsr_average = sum/10;

   Serial.println(gsr_average);
  
}
Im bardziej ten program będziesz chciał rozbudować tym bardziej popieram pomysł ogarnięcia millis.
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#6
Bardzo dziękuję Kaczakat. Właśnie o to mi chodziło. Teraz zapoznam się się z funkcją o której pisaliście i będę rozbudowywał projekt.
Pozdrawiam
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości