14-04-2021, 18:23
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
Kod do zczytywnia danych z siłomierza(wszystkie dane na monitorze zgadzają się z tymi wyświetlanymi na siłomierzu):
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 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);
}
}
}