• 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
Arduino - filtracja zakłoceń
#1
Witam wszystkich, jestem początkującym z arduino i mam pewien problem z zakłóceniami danych. Sytuacja jest następująca - do Arduino UNO do wirtualnych portów Rx i Tx mam podłączony siłomierz przez konwerter RS232 na TTL, dodatkowo do Arduino podłączony jest czujnik indukcyjny oddzielony od płytki przez transoptor. Założenie projektowe jest takie, ze w momencie wykrycia obiektu przez czujnik indukcyjny Arduino odczytuje jedną wartość z siłomierza w tym samym momencie i wyświetla to na monitorze portu szeregowego. Jeżeli chcę odczytywać tylko dane z siłomierza to wszystko jest w porządku, zero zakłóceń - problem pojawia się w momencie dodania czujnika indukcyjnego. Wtedy dane zczytywane z siłomierza w większości się zgadzają, jednak czasami następują losowe piki(zakłócenia?)w odczycie danych, i np zamiast 2Nm odczytana jest wartość 50Nm. Zakładam, że mogą to być zakłócenia związane z przetwarzaniem informacji przez Arduino z dwóch urządzeń jednocześnie co powoduje pewne problemy, czy wiecie może w jaki sposób można tych zakłóceń się pozbyć? W załączniku zamieściłem układ czujnika indukcyjnego z transoptorem. Bardzo proszę o wszelkie porady, projekt jest praktycznie na ukończeniu i bardzo zależy mi aby wszystko w nim dobrze grało  Undecided 

Kod do zczytywnia danych z siłomierza(wszystkie dane na monitorze zgadzają się z tymi wyświetlanymi na siłomierzu):

Cytat:
Kod:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(4,5); //rx, tx

float x;
String str;

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

void loop() {
  if (mySerial.available() > 0) {
  str = mySerial.readStringUntil('\n');
  x = mySerial.parseFloat();
  Serial.println(mySerial.parseFloat());
  delay(5);
 
  }
}


Kod po dodaniu czujnika indukcyjnego, dane wyświetlanie w porcie monitora szeregowego pojawiają się tylko w momencie wykrycia metalu przez czujnik, jednak wyświetlane dane te nie zawsze pokrywają się z wartościami rzeczywistymi: 
Kod:
#include "SoftwareSerial.h"
SoftwareSerial mySerial(4,5); //rx, tx
#define czujnik 13 //pin czujnika indukcyjnego

String str;
float x;
int aktualnyStanCzujnika = 0;

void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(czujnik, INPUT_PULLUP);

}

void loop() {

  aktualnyStanCzujnika = digitalRead(czujnik);

  if (aktualnyStanCzujnika == LOW) {
  if (mySerial.available()>0) {
  str = mySerial.readStringUntil('\n');
  x = mySerial.parseFloat();
  Serial.println(mySerial.parseFloat());
  delay(50);
  }
}
}


Załączone pliki Miniatury
   
 
Odpowiedź
#2
(14-04-2021, 18:23)barciak napisał(a): Przeczytal kolega dane tego czunjnika?
pisze wyraznie "Aktywny na metal w pobliżu glowicy, czulosc na Metal odleglosc max 4 mm".
Pozatym czujniki indukcyjna sa wrazliwe na zmieniajace sie pola magetyczne cuasami juz kabel w poblizu powoduje zaklocenia
Sory nie posiadam pl Liter
Pozdrowienia z koloni


Cytat:
Kod:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(4,5); //rx, tx

float x;
String str;

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

void loop() {
  if (mySerial.available() > 0) {
  str = mySerial.readStringUntil('\n');
  x = mySerial.parseFloat();
  Serial.println(mySerial.parseFloat());
  delay(5);
 
  }
}


Kod po dodaniu czujnika indukcyjnego, dane wyświetlanie w porcie monitora szeregowego pojawiają się tylko w momencie wykrycia metalu przez czujnik, jednak wyświetlane dane te nie zawsze pokrywają się z wartościami rzeczywistymi: 
Kod:
#include "SoftwareSerial.h"
SoftwareSerial mySerial(4,5); //rx, tx
#define czujnik 13 //pin czujnika indukcyjnego

String str;
float x;
int aktualnyStanCzujnika = 0;

void setup()
{
Serial.begin(9600);
mySerial.begin(9600);
pinMode(czujnik, INPUT_PULLUP);

}

void loop() {

  aktualnyStanCzujnika = digitalRead(czujnik);

  if (aktualnyStanCzujnika == LOW) {
  if (mySerial.available()>0) {
  str = mySerial.readStringUntil('\n');
  x = mySerial.parseFloat();
  Serial.println(mySerial.parseFloat());
  delay(50);
  }
}
}
przeczatal kolega dane tego czujnika?
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości