Kann keine konsistenten Messwerte vom Sharp IR-Entfernungsmesser erhalten

Ich bin noch ganz am Anfang, einen Roboter zu bauen, der umherwandert und eine Karte seiner Umgebung erstellt. Ich verwende ein Arduino und habe derzeit einen Sharp 2Y0A21 IR-Entfernungsdetektor, der auf einem Servo sitzt, sodass er einen 180-Grad-Sweep in 10-Grad-Schritten ausführen kann.

Das Problem ist, dass die Spannungswerte vom Sharp IR-Sensor nicht konsistent sind. Wenn ich eine App schreibe, die einfach den vom Sensor gelesenen Wert über die serielle Schnittstelle sendet und auf meinem Laptop anzeigt, wobei der Sensor auf ein Objekt zeigt, springen die Werte herum.

Wenn ich mir die Werte ansehe, kann ich sehen, dass es dazu neigt, einen Wert mehr als die anderen zu melden, also habe ich eine SharpReader-Klasse geschrieben, die 20 Samples nimmt und dann den Modus dieser Werte zurückgibt. Das bedeutet jetzt, dass ich konsistentere Werte erhalte, aber nicht so gut, wie ich es gerne hätte.

Ich habe einen Code, der den 180-Grad-Scan durchführt und den Winkel und die Entfernung über die Serie sendet. Ich habe dann ein Python-Skript, das diese Werte empfängt und zeichnet, was es auf dem Bildschirm sieht, wobei alle Werte an beiden Enden des Sensorbereichs ignoriert werden. Wenn Sie es also vor eine Kiste stellen, sollte es eine gerade Linie auf dem Bildschirm zeichnen, aber das tut es nicht - die Linie ist schief und nicht durchgehend schief, was mir bestätigt, dass die Messwerte falsch sind, nicht mein Code.

Ich habe im Datenblatt gelesen, dass es ratsam ist, einen Kondensator (ich kann mich nicht ohne weiteres an den Wert erinnern) zwischen die GND- und PWR-Leitungen des Sharp IR zu stecken - ich habe versucht, die Beine des Kondensators in den JST-Anschluss des Sharp zu zwingen IR, aber es machte keinen Unterschied. Ich werde versuchen, es an den Sensor zu löten und sehen, ob das einen Unterschied macht.

Kann jemand etwas anderes zum Ausprobieren empfehlen, oder erwarte ich einfach zu viel von der Sharp IR?

Ich denke auch darüber nach, ein zweites Servo und Sharp IR zu kaufen und zwei gleichzeitig wie ein Paar Augen laufen zu lassen und dann zu versuchen, einen Durchschnitt der beiden Werte zu nehmen, um zu sehen, ob dies die Genauigkeit erhöht.

Übrigens, ich bin ein Neuling in der Elektronik, mein Hintergrund liegt in der Programmierung.

Ich habe etwas Ähnliches mit Fotodioden gemacht, und Sie sind auf dem richtigen Weg, denke ich. Sie können sich auch LMR ( letsmakerobots.com ) ansehen, dort finden Sie viele gute Informationen zu Ihrem scharfen IR.
Genaues Sensormodell bitte + Link zum Datenblatt.
@Bars - Die meisten Sharp IR-Sensoren haben fast die gleichen Datenblätter, nur durchgehend unterschiedliche Nummern. Die gewonnenen Erkenntnisse sollten die gleichen sein.
@Rick_2047 Ich habe darüber nachgedacht, über meine Erfahrungen mit dem Sharp IR zu bloggen - ich könnte hier einen Beitrag schreiben, sobald ich der Sache auf den Grund gegangen bin. @BarsMonster Ich verwende den 2Y0A21.
@littlecharva Ich interessiere mich nicht nur für scharfe IR, ich interessiere mich für das Projekt als Ganzes. Wie gesagt, das ist genau das, was ich in meine Projektwunschliste geschrieben hatte.

Antworten (4)

Der Sensor ist nicht perfekt, wenn Sie sogar einen wirklich, wirklich guten Sensor (besser als die, ähm, 'klassischen' Sharp IR-Sensoren) auf dieselbe Stelle an der Wand richten und ein paar Messungen vornehmen, wird es einige Abweichungen geben. Wenn Sie eine Anzahl niedrigstwertiger Bits verwerfen, ist es möglich, jedes Mal denselben Messwert zu erhalten, aber Ihre Messwerte werden granularer. Sie sollten wahrscheinlich die maximale Genauigkeit beibehalten und dann versuchen, Fehler in der Software zu beheben (dh Ihre Daten so ändern, dass eine fast gerade Linie wirklich gerade ist).

Welchen Sensor verwenden Sie und welchen Messbereich erwarten Sie? Die Ausgabe des Sensors ist sehr stark nichtlinear. Dieses Diagramm (aus dem Datenblatt) vergleicht die Ausgangsspannung auf einer linearen Skala mit der Entfernung:
Alt-Text
Sie werden feststellen, dass es dem Diagramm von y=1/x sehr ähnlich sieht, dh Volt=k(1/Entfernung). Dies kann verwendet werden, um eine anständige erste Annäherung zu erhalten, aber die Aufteilung auf einem Arduino ist teuer. Sie haben mehr Glück, wenn Sie den Sensor kalibrieren und die Spannungs-/Abstandspaare in einer Nachschlagetabelle (natürlich im Programmspeicher) speichern. Dieser wird ab Werk so kalibriert, dass eine Messung bei genau 24 cm auf 24 cm +/- 3 cm misst. Leider geben sie Ihnen keine Möglichkeit zu wissen, wie hoch die Spannung bei 24 cm sein sollte, außer indem Sie auf diese Grafik schielen.

Der Sensor hat in bestimmten Bereichen eine höhere Präzision. Stellen Sie sich vor, dass Ihre Messwerte eine zufällige Variation von beispielsweise +/- 250 mV aufweisen (Gauß, wenn Sie möchten, aber zufällig ist einfacher). Es ist hoffentlich viel kleiner als das, aber es macht es einfach zu visualisieren. Die Variation bedeutet, dass Ihre Messwerte mit diesem Sensor bei beispielsweise 50 cm oder 70 cm über 20 oder 30 cm variieren, aber Messungen bei 15 cm sollten innerhalb weniger cm liegen. Dieser Sensor ist für 10-80 cm ausgelegt, aber Sie erhalten genauere Messwerte, wenn Sie ihm nur für etwa 10-25 cm vertrauen. Wenn Sie den Roboter steuern, sollten Sie in der Lage sein, sich auf diese Entfernungen zu bewegen und die besten Messwerte zu erhalten.

Der Sensor zieht Strom in großen Stößen und ist wahrscheinlich an einem ziemlich langen Kabel montiert. Ein Kondensator hilft, die Messwerte zu stabilisieren. Stecken Sie es nicht in das JST; Löten Sie es auf die Platine auf der Rückseite. Es zieht viel Strom und ist ziemlich langsam, sodass kleine Kapazitäten, die traditionell zur Entkopplung verwendet werden (0,1 uF), wahrscheinlich nicht funktionieren. Ich würde eine 10-uF-1206- oder 1210-Keramik-SMD-Kappe parallel zu einem 100-uF-Elektrolyt verwenden. Wenn Sie feststellen, dass immer noch hochfrequentes Rauschen vorhanden ist, fügen Sie 0,1 uF 1206 zusätzlich zu den 10 uF hinzu. Hier ist ein Bild der Stellen zum Löten (Originalbild von Sparkfun):
Alt-Text
Sie können auch versuchen, der Vo-Leitung eine kleine Kapazität hinzuzufügen, um den Ausgang zu glätten. Sie sollten ausprobieren, ob das hilft oder nicht. Ich würde es unter 100 pF halten und bei etwa 10 pF beginnen. Dadurch wird ein gleitender Durchschnitt der Messwerte in der Hardware erstellt. Mehr Schaltung (ein Vorwiderstand) würde den Effekt verstärken, posten Sie einen Kommentar oder eine andere Frage, wenn Sie zu diesem Zweck ein komplexeres Tiefpassfiltersystem bauen möchten. Hinweis: Der Sharp-Sensor kommt möglicherweise nicht gut mit dem Treiben in eine große Kapazität zurecht und kann blockieren oder brechen, wenn er aufgefordert wird, die Spannung schnell zu ändern. Es ist auch möglich, dass es sich um einen einseitigen Ausgang handelt und möglicherweise einen Widerstand gegen Masse benötigt, um den Kondensator zu entladen, wenn Sie mehr Kapazität hinzufügen, als derzeit in den Parasiten vorhanden ist.

Das Verdrillen der Kabel trägt dazu bei, Rauschen zu reduzieren, das von externen Quellen wie 60-Hz-Netzen eingekoppelt wird. Sie kurz zu halten, wird auch dazu beitragen, Lärm zu mindern.

Es ist das 2Y0A21, das ich verwende, und ich habe eine Nachschlagetabelle erstellt, anstatt eine Funktion zu verwenden. Ich ignoriere auch Werte am anderen Ende des Bereichs. Ich bin ein Elektronik-Neuling, also habe ich nicht viele Kondensatoren, die herumklopfen; Ich habe eine gemischte Tüte von Maplin gekauft, aber die meisten Keramiktüten haben keinen aufgedruckten Wert, nur ein paar Zufallszahlen. Ich habe einige 10-uF-Elektrolytkappen (glaube ich? Sie sehen aus wie winzige Dosen Pop?), Also werde ich versuchen, eine davon anzulöten, und wenn es keinen Unterschied macht, werde ich versuchen, einige der anderen zu beschaffen du erwähnst. Ich werde auch versuchen, die Kabel miteinander zu verdrillen. Vielen Dank!
Die Keramikkappen in einem gemischten Beutel werden wahrscheinlich weniger als 1 uF betragen. Elektrolyte und andere Durchgangslöcher filtern Hochfrequenzsignale nicht so gut wie keramische Oberflächenmontagekappen, die Induktivität der Leitungen beginnt bei hohen Frequenzen einen Unterschied zu machen.
Achten Sie übrigens auf die richtige Polarität; Der Minuspol (oft mit Streifen) sollte mit Masse verbunden werden. Wenn Sie die Kappe zu lange in Sperrrichtung vorgespannt halten, kann sie überhitzen und sogar explodieren.
Ich habe Mühe, 10-uF-Keramik-SMDs zu finden, wie Sie es vorgeschlagen haben. Ich bin mir nicht wirklich sicher, was die Referenzen „1206“ und „SMD“ bedeuten, um ehrlich zu sein. Ich habe mir diese Seite hier angesehen: uk.farnell.com/capacitors_ceramic , weiß aber nicht, welche Dielektrizitäts- oder Spannungsnennwerte ich benötige, daher kann ich nicht herausfinden, welche Kappen geeignet sind. Können Sie etwas vorschlagen?
Großbuchstaben in 600 Zeichen: SMD/SMT/SMC sind Akronyme für Surface Mount Device/Technology/Component. 1206 ist eine Paket-ID, genau wie DIP-8 oder TO-220. 1206 ist die Größe der Komponente – eine 1206-Kappe ist ungefähr 0,12 Zoll mal 0,06 Zoll groß . Das erste Zeichen des Dielektrikums ist die minimale Temperatur (X<Y<Z; X ist am besten) ist die maximale Temperatur (2<3<...<8, 8 ist am besten), und die letzte Zahl ist die Temperaturabhängigkeit ( V ist -20/+80, R ist +/-15 %, es gibt andere). X7R und X5R sind gut. Reduzieren Sie die Spannung um 50-100 %, verwenden Sie also eine 10-V-Kappe auf 5 V.
Um es auf Farnell zu finden, wählen Sie „Capacitance>10uF“ und „Capacitor Case Style>1206“, um es auf 96 Möglichkeiten einzugrenzen. Wählen Sie dann die Nennspannung so, dass sie 50 % bis 100 % höher ist als Ihre erwartete Spannung, also wählen Sie die Nennspannung von 10 V und wählen Sie für diese 15 Möglichkeiten die Dielektrika X5R und X7R . Wählen Sie das billigste auf Lager; sieht so aus: 0,099 £: 1650933 ist derzeit das Beste.
Hinweis: Es sieht so aus, als wären sie auch in 0805 zu ähnlichen (oder sogar niedrigeren!) Preisen erhältlich. Zuletzt habe ich überprüft, dass 10 uF bei 10 V in 0805 schwer zu bekommen waren. Ich schätze, ich bin etwas veraltet.
Danke, das war eine große Hilfe - das Problem ist, dass diese Dinger winzig aussehen, werde ich in der Lage sein, sie mit einem normalen Lötkolben auf den Sharp IR zu löten?

Gute Dinge, die Sie in dieser Phase tun können:

  • Bestimmen Sie, woher das Rauschen kommt: Dies kann mit der FFT-Funktion auf einem DSO erfolgen, während Sie das Signal von einem anderen IR-Sensor messen (IR-LED würde funktionieren), oder mit einem PC, um die gesammelten Daten umzuwandeln. In unseren Haushalten gibt es viele IR-Quellen, die oft in der Nähe von 38 kHz moduliert werden. Ein Antialiasing-Filter für den analogen Eingang, der auf weniger als die Hälfte Ihrer Abtastrate (max. ~7 kHz) eingestellt ist, ist möglicherweise alles, was erforderlich ist, obwohl der Sensor möglicherweise bereits über einen verfügt. Beachten Sie, dass die Mikros in der Arduino-Serie nicht mit mehr als etwa 15 kHz abtasten können, aber 38-kHz-Signale können immer noch durch Aliasing durchschleichen, sodass digitale Filter nicht bei 38 kHz, sondern etwas unter 15 kHz liegen würden.

  • Stellen Sie sicher, dass Sie innerhalb der Reichweite des Geräts (maximal und min) testen. Der 0A700 hat eine Reichweite von 5,5 Metern.
    Alt-Text

  • Kalibrieren und linearisieren Sie den Sensor. Identische Modelle lesen sich unterschiedlich und ihre Ausgabe ist nicht linear. Diese Seite beschreibt eine Möglichkeit, die Daten zu linearisieren und so etwas wie zu erhalten R = (6787 / (V - 3)) - 4. Eine andere Methode besteht darin, eine 8- bis 10-Bit-Nachschlagetabelle zu verwenden. Die Linearisierung hilft nicht beim Rauschproblem, gibt aber eine bessere Vorstellung davon, wie sich das auswirkt und wie viel Minderung tatsächlich erforderlich ist.

  • Essen Sie Oreos, drehen Sie sie in zwei Hälften und lecken Sie zuerst das Weiße heraus. Sorgt für viel erfolgreichere Debugging-Sitzungen.

Guter Fang bei den Oreos, das hätte ich verpasst. Grundsätzlich bekommen Sie mit den Sharp-Sensoren, wofür Sie bezahlen. Ich habe festgestellt, dass Oversampling und dann Mittelwertbildung der beste Ansatz ist. Wenn Sie versuchen, eine Karte zu erstellen, sollten Sie je nach Budget auf einige höherwertige Sensoren umsteigen.
Ich bin mir nicht sicher, was Sie mit FFT und DSO meinen, ich nehme an, dass es etwas mit Oszilloskopen zu tun hat? Ich bin definitiv innerhalb meiner Sensorreichweite und habe mich für die Lookup-Tabelle anstelle der Linearisierung entschieden, da mich meine schlechte Mathematik mit der Linearisierungsfunktion im Stich lässt. Ich habe gerade eine Packung Oreos bestellt, also werde ich Sie wissen lassen, wie es mir geht!
@mjcarroll Welche anderen Sensoren würden Sie empfehlen, ich bin auf keine anderen als die Sharps gestoßen.
@littlecharva Abgesehen von den Ratschlägen in Reemrevniveks Antwort würde ich sagen, probieren Sie auch einige der Ultraschall-Entfernungsmesser aus. Sie können feststellen, dass sie je nach Anwendung besser funktionieren. Wenn Sie es sich leisten können, ist ein Laser-Entfernungsmesser immer eine gute Option (Kosten jedoch 1.100). Es gab auch viele coole Forschungen zur Microsoft Kinect, aber das würde eine reine Arduino-Lösung ausschließen.
Ich hatte gelesen, dass die Ultraschallgeräte nicht so genau waren wie die Sharps, weshalb ich sie zunächst vermied. Ein Laser-Entfernungsmesser wäre großartig, aber außerhalb meines Budgets - obwohl ich einige Artikel gelesen habe, die darauf hindeuten, dass bald <100 £ auf dem Markt fällig werden könnten, halte ich also die Augen offen.

Diese Sensoren benötigen wirklich eine anständige Entkopplungskappe über der Versorgung und eine saubere 5-V-Versorgung, dh nicht die gleiche Versorgung wie ein Servo.

Überprüfen Sie Ihre Eingangsspannungsversorgung zum Sensor. Ich habe den Sensor von meinem Mega 2560 (5 V) mit Strom versorgt und konnte kein sauberes Signal erhalten. Ich verwende immer noch die 5 V vom Mega 2560, lasse sie aber stattdessen durch einen einfachen (1,99 $) Spannungsregler von Radio Shack laufen (schnell zu einem örtlichen Geschäft laufen). Dadurch wurde das Signal stark aufgeräumt. Um es weiter zu bereinigen, ließ ich das Rücksignal durch einen Tiefpassfilter laufen. Ich habe die Frequenz bei 1/10 gewählt und den Widerstand und die Kappe entsprechend dimensioniert.

Können Sie uns die Teilenummer und die Ausgangsspannung des Reglers geben, den Sie Ihrer Schaltung hinzugefügt haben?