Hallo, realisiere gerade eine Abstandsmessung mit einem HC-SR04 (nachbau von Devantech srf04?) der an einem Atmega32 hängt. Der sensor hat einen Triggereingang und einen Echoausgang, die Entfernung berechnet man mithilfe der Laufzeit des Echosignals und der halben Schallgeschwindigkeit oder die Laufzeit in mikrosec. /58. Der Quellcode ist in Bascom geschrieben und mithilfe vo pulsein pulseout steuere ich den Sensor an. Es klappt auch ich bekomme werte vom Sensor zurück, soweit so gut. Leider komme ich nicht auf die richtigen Abstände wenn ich die Signallaufzeit * 344M/s /2 nehme auch die Laufzeit /58 bringt keine Verbesserung, ich dachte es würde am Pulsein Signal liegen es wird ja in 10us ausgegeben, habe also diese Laufzeit also esrstmal *10 genommen, auch nichts. Habe mir dan die Formel so umgestellt das ich bei einer Messunch von 20cm auf den richtigen Abstand komme, dachte ich sei schon am Ziel, die Werte sahen vielversprächend aus. Doch dann musste ich feststellen, dass sobbald ich Distanz von 20 auf z.B. 70cm verschiebe die Ergebnisse nicht mehr ganz richtig waren, eine Toleranz von 2-3cm hab ich immer oft auch mehr. Ich habe versucht die Variablen zur Berechnung der Laufzeitz zu vergrößern, also die Laufzeit des Signals nicht nur *172 sodern mal *1000000... und dieses Ergebniss dann so zu teilen, dass ich auf die entsprechende Entfernung komme, habe den Sensor auch auf verschiedene Entfernungen kalibriert, keine verbesserung. Ich könnte mir höchstens vorstellen das es an der Tacktfrequenz meines Mega32 liegt, er läft auf etwas über 14MHz, kann das denn soeine ungenauigkeit bedingen? Habe auch versucht ihn auf 1MHz laufen zu lassen, half auch nichts. Muss dazu sagen das ich mit Bascom und einem USBAVP arbeite, da das ja nicht direkt geht habe ich AVRDUDE bei Bascom benutzt um programmieren zu können. Jetzt kann ich aber leider nichtmehr an die Fusebits ran um diese entsprechend der Frequenz zu ändern. Danke für die Hilfe.
Du musst einen Timer verwenden um zum Ziel zu kommen. In Bascom wird das mit Zeitkritischen Anwendungen sonst nix. Eine weitere Möglichkeit, die allerdings eine Kalibration erforderlich macht wäre die Lineare Interpolation. Joe Joe schrieb: > Jetzt kann ich aber leider nichtmehr an die Fusebits ran um diese > entsprechend der Frequenz zu ändern. Dann solltest du dich entweder um eine besser Programmierumgebung bemühen oder nicht die billigsten Microcontroller verwenden... Und bitte bemüh dich mal richtig zu schreiben. Da wird mir ganz übel wenn ich mir deine Rechtschreibung (oder das was davon übrig geblieben ist) anschaue. Das hat auch was mit Höflichkeit hier im Netz zu tun. Dankeschön =)
Hallo, wie Michael schon geschrieben hat, solltest du für dein Vorhaben auf jeden Fall einen Timer nutzen. Wenn du deinen timer auf etwa 5,82us einstellst, dann hast du genau einen mm Abstand pro Timerauslösung und sparst dir die ganze Rechnerei. Dann Zählst du einfach, wieoft dein Timer ausgelöst hat, bis der Echoausgang ein Signal ausgibt. So richtig wird für mich nicht klar, wie du es im Moment zu lösen versuchst. Die Fuses einzustellen ist elementar und ein externer Quarz wäre wegen der höheren Frequenz und damit besseren Genauigkeit wünschenswert. Viel Glück
Vielen Dank, ich bin leider noch ein blutiger Anfänger in Sachen AVR und Bascom. Ich muss mich erstmal etwas mit dem Timer beschäftigen, um mit ihm die länge des High-Signal am Echoausgang des Ultraschllmodules zu messen. Ich sehe jedoch jetzt schon, dass es nicht ganz so leicht wird, wie mit dem Pulsein Befehl. Jedenfalls weiss ich jetzt, woher die beschriebene Ungenauigkeit herrühren könnte. Mich wudert nur, dass ich bereits einige Bascom Quellcodes gesehen habe, die genau wie ich, die Signallänge am Echoausgang mithilfe des Pulsein Befehles bewekstelligt haben.
Dazu kommt noch, dass deine Annahme, dass die Ausbreitungsgeschwindigkeit konstant wäre, nicht stimmt. Durch Temperaturschwankungen verändert sich die. Kalibrieren solltest du immer bei der größten Entfernung, nicht bei der kleinsten!
Die größten Probleme sind zum einen die Temperatur, die Luftfeuchte, die anderen Bestandteile der Luft usw. Ein andere weiterer Punkt sind Fehler durch Reflektion, Beugung/ Brechung bzw. Streung. Gerade wenn Du mit einem Sender und einem Empfänger arbeitest vergrößert sich dieser Fehler. Nich zu vergessen dass die gesamt Messmethode nur 2 dimensional funktioniert.... Viel Erfolg :-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.