INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Distanzlaser an Arduino
18.09.2015, 20:11
Beitrag #1
Distanzlaser an Arduino
Guten Abend,

ich bastle momentan daran einen Distanzlaser
"Sick DT50 P1123" (eingestellt auf 4mA bei 1000mm, 20mA bei 2023mm)
am Arduino ATMega 2560 auszulesen.
Da ich recht unerfahren in Sachen Elektronik und Programmierung bin
ist das ganze natürlich recht zeitaufwendig und nicht ganz einfach.

Der Laser gibt am Ausgang einen Strom von 4-20mA (je nach gemessener Distanz) ab.
Da der Arduino am Eingang nur Spannung lesen kann habe ich das ganze über einen
Messwiderstand (100 Ohm..der war halt da Wink ) angeschlossen.
Als Referenz habe ich die interne 2.56V genommen.
Verzeiht mir wenn das Programm unübersichtlich oder unlogisch ist
aber mit folgendem Code habe ich das ganze am Laufen:
Code:
const int numReadings = 5;     // Anzahl der Werte für Durchschnittsberechnung

int voltage;                    // Spannung am Analog Eingang
int readings[numReadings];      // Werte von Analog Eingang
int readIndex = 0;              // Index für aktuellen Wert
int total = 0;                  // Summe aller Werte
int average = 0;                // Durchschnitt
int loops = 0;                  // Loop Zähler
int value = 0;                  // Wertberechnung für Distanz
int measure = 0;                // Aktueller Wert am Analog Eingang

int inputPin = A0;              // Eingang A0
int ledPin = 13;                // LED Pin 13


void setup() {
  // Serielle Kommunikation mit Computer:
  Serial.begin(9600);
  analogReference(INTERNAL2V56);
  pinMode(ledPin, OUTPUT);       // LED Pin = Ausgang
  for (int thisReading = 0; thisReading < numReadings; thisReading++)
  {
    readings[thisReading] = 0;
  }
}


void loop() {    
  total = total - readings[readIndex];          // Letzten Wert abziehen    
  readings[readIndex] = analogRead(inputPin);   // Neuen Wert einlesen    
  total = total + readings[readIndex];          // Neuen Wert addieren  
  readIndex = readIndex + 1;                    // Array um eine Position erweitern


  if (readIndex >= numReadings)    // Wenn Ende des Array...
  {      
    readIndex = 0;                 // ...alles von neu
  }

  average = total / numReadings;    // Durchschnitt berechnen:
  
  float value = average*(2.56/1023.0);  // Versuch den ausgegebenen Wert zu berechnen

  loops++;                                //Loop Zähler um eins erhöhen
  if (loops == numReadings)          // Wenn Loop wdh. erreicht, Wert ausgeben
  {
    Serial.print("Ergebnis: ");
    Serial.print(value);             // Ausgabe Wert
    Serial.println("V");            
    loops = 0;                       // loops auf 0 setzen
    digitalWrite(ledPin, HIGH);      // LED einschalten
    delay(2000);                     // Wartezeit
    digitalWrite(ledPin, LOW);       // LED ausschalten
  }

  measure = analogRead(inputPin);    // Ausgabe von aktuellem Wert
  float voltage = measure * (2.56/1023.0);
  Serial.print(loops);
  Serial.print(". ");
  Serial.println(voltage);
  
  
  delay(200);        // Verzögerung zwischen dem Einlesen
}


Jetzt habe ich folgende Werte:

1000mm
Multimeter 0.398V
Arduino 0.44V
Differenz 0.042V

1723mm
Multimeter 1.515V
Arduino 1.61V
Differenz 0.095V

2023mm
Multimeter 1.979V
Arduino 2.10V
Differenz 0.121V

ist da meine Berechnung falsch oder liegt das an der Referenzspannung bzw meinem Widerstand?

Außerdem würde ich dann mal einen Widerstand einsetzen
um die obere Grenze von 5V auch auszunutzen.
Wäre da ein 50 Ohm der richtige oder habe ich einen Denkfehler?
Bzw würde sowas besser laufen

Desweiteren habe ich das Problem dass der Arduino nur 10 Bit kann und der
Laser mit 16 Bit ausgibt.
Somit würde ich mit dem Arduino auf eine Reichweite von 5m höchstens eine
Genauigkeit von 4,9mm hinbekommen wenn das alles überhaupt so klappt.
Könnte ich da mit dem hier Abhilfe schaffen


Ich weiß, sehr viele Fragen aber ich hoffe es gibt ein paar die sich meines Problems annehmen können Big Grin

lg


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 17:00
Beitrag #2
RE: Distanzlaser an Arduino
Gibts keinen der Rat weiß? Huh

Momentan würde es mir schon helfen wenn ich wissen würde wie ich es schaffe
meine Spannung etwas sauberer zum Arduino zu bekommen da meine Werte ja noch schwanken wie sonst was

lg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 17:56
Beitrag #3
RE: Distanzlaser an Arduino
Die 2,56V ist die interne Referenz vom Arduino

Hier habe ich mal auf die schnelle was hingemalt

lg


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 18:49
Beitrag #4
RE: Distanzlaser an Arduino
heißt???
Big Grin sorry bin nicht vom Fach
und auch das einlesen fällt mit dem vielen fachjargon leider schwer.

lg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.09.2015, 23:28
Beitrag #5
RE: Distanzlaser an Arduino
Hallo,

um die 5V Standardreferenz zu verwenden wäre ein Widerstand von 250 Ohm richtig.
250 Ohm * 0,02A= 5V (U=R*I)
Die Idee mit dem ACS714 Stromsensor ist nicht gut, damit geht dir zu viel Auflösung verloren.

250 Ohm Widerstände gibt es aber leider nicht in den Standard E-Reihen. Deshalb muss man den aus zwei einzelnen Widerständen zusammenbauen. (100+150 oder 240+10)

Die Differenz zwischen der Messung mit dem Arduino und den Multimeter kommt vermutlich von der zwar konstanten aber nicht sehr genauen 2,56V Referenzspannung des ATMEGA. Laut Datenblatt kann diese zwischen 2,4 und 2,8 Volt liegen.

Dieses Problem ist aber auch bei Verwendung der der 5V Referenzspannung nicht vom Tisch, denn die 5V Referenzspannung ergibt sich aus der Versorgungsspannung des ATMEGA und die ist auch nicht genau 5V und hängt auch noch davon ab wo die Versorgung herkommt (Netzteil oder USB).

Um eine genaue Messung zu erhalten muss man also die Versorgungsspannung des ATMEGA erst mal sehr konstant halten. (nicht unbedingt genau 5,00V, aber die darf sich nicht ändern)
Dann kann man per Software auf diese Spannung korrigieren oder man ändert dem Messwiderstand so ab, dass bei 20mA genau 1023 aus dem A/D Wandler heraus kommen.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2015, 05:46
Beitrag #6
RE: Distanzlaser an Arduino
Dafür gibt es extra einen Widerstand mit 249Ohm.
http://www.reichelt.de/METALL-249/3/inde...RCH=249ohm

Bei den Daten des Sensors unter "Interfaces" steht auch das du bis 300Ohm gehen kannst. Aber optimal sind 249Ohm für den Arduino.

https://www.sick.com/de/en/distance-sens.../p/p215268
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2015, 16:47 (Dieser Beitrag wurde zuletzt bearbeitet: 24.09.2015 16:48 von thaase.)
Beitrag #7
RE: Distanzlaser an Arduino
(23.09.2015 23:28)ardu_arne schrieb:  Hallo,

um die 5V Standardreferenz zu verwenden wäre ein Widerstand von 250 Ohm richtig.
250 Ohm * 0,02A= 5V (U=R*I)
Die Idee mit dem ACS714 Stromsensor ist nicht gut, damit geht dir zu viel Auflösung verloren.

250 Ohm Widerstände gibt es aber leider nicht in den Standard E-Reihen. Deshalb muss man den aus zwei einzelnen Widerständen zusammenbauen. (100+150 oder 240+10)

Die Differenz zwischen der Messung mit dem Arduino und den Multimeter kommt vermutlich von der zwar konstanten aber nicht sehr genauen 2,56V Referenzspannung des ATMEGA. Laut Datenblatt kann diese zwischen 2,4 und 2,8 Volt liegen.

Dieses Problem ist aber auch bei Verwendung der der 5V Referenzspannung nicht vom Tisch, denn die 5V Referenzspannung ergibt sich aus der Versorgungsspannung des ATMEGA und die ist auch nicht genau 5V und hängt auch noch davon ab wo die Versorgung herkommt (Netzteil oder USB).

Um eine genaue Messung zu erhalten muss man also die Versorgungsspannung des ATMEGA erst mal sehr konstant halten. (nicht unbedingt genau 5,00V, aber die darf sich nicht ändern)
Dann kann man per Software auf diese Spannung korrigieren oder man ändert dem Messwiderstand so ab, dass bei 20mA genau 1023 aus dem A/D Wandler heraus kommen.

Gruß
Arne



Aber wenn das an der Referenzspannung liegt, müsste die Differenz sich dann nicht linear verhalten?
Sprich immer sagen wir mal 0,2V auseinanderliegen?
Oder bin ich da falsch.

Ich habe jetzt mal einen 249 Ohm Widerstand bestellt.

Jedoch würde das schwanken der Werte doch dadurch nicht besser werden!?

lg

E: Achja..Die Stromversorgung kommt von einem Netzteil
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.09.2015, 20:08
Beitrag #8
RE: Distanzlaser an Arduino
Hallo,

wenn die Referenzspannung daneben liegt, ist der absolute Messfehler nicht konstant um z.B. 0,2V daneben.

Ändere doch eine Zeile in deinem Programm mal testweise ab.
aus
Code:
float voltage = measure * (2.56/1023.0);
wird
Code:
float voltage = measure * (2.438/1023.0);
dann wird das Ergebnis schon besser aussehen.

Was meinst du damit dass die Werte schwanken?

Mit dem von dir im ersten Beitrag verlinkten externen A/D-Wandler (ADS1115) wirst du gegenüber dem Arduino A/D-Wandler eine höhere Auflösung erreichen.

Hast du mal den Ausgangsstrom des Lasers nachgemessen? Ist der genau 4,00 bis 20,00mA ?

Vermutlich rührt die "falsche" Anzeige die der Arduino ausgibt aus der Summe der Fehler der verwendeten Komponenten.

Durch die Verwendung des externen 16Bit Wandlers wird zwar die Auflösung besser aber nicht unbedingt die Genauigkeit der Messung. Wenn man weiß wo die Fehler liegen kann man die auch meist per Software korrigieren.

Gruß
Arne

ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  LCD Anzeige für Arduino Mega2560 an Arduino Due? DaniDD 1 818 03.06.2015 12:16
Letzter Beitrag: DaniDD
  Arduino Pin mit anderem Arduino auslesen - geht das? Gelegenheitsbastler 8 3.243 08.05.2015 20:49
Letzter Beitrag: Bitklopfer
Question Arduino Mega ADK oder Arduino Due? Baja-Junky 1 4.176 14.08.2013 21:16
Letzter Beitrag: Bitklopfer

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste