Arduino Polska Forum
Czujnik GSR - rozbudowa - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Czujnik GSR - rozbudowa (/watek-czujnik-gsr-rozbudowa)



Czujnik GSR - rozbudowa - matchwalik - 22-01-2024

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?


RE: Czujnik GSR - rozbudowa - Irvin - 22-01-2024

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


RE: Czujnik GSR - rozbudowa - matchwalik - 23-01-2024

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


RE: Czujnik GSR - rozbudowa - oscarX - 23-01-2024

(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.


RE: Czujnik GSR - rozbudowa - kaczakat - 23-01-2024

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.


RE: Czujnik GSR - rozbudowa - matchwalik - 24-01-2024

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