ich arbeite gerade an meiner maturraarbeit und verwende dafür 4 sfr04 ultraschallmodule. leider weiss ich nicht genau wie ich diese auslesen muss. nach auslösen über einen digitalen output senden diese ja ein signal aus und empfangen das echo des nächstgelegenen objekts. meine frage daher... wird die zeit bis zum empfangen über einen encoder gemessen oder muss dazu die systemzeit zwischen start und eingang der messung zuhilfe gezogen werden?
mfg benjamin
Hallo!
Der SRF04 gibt nach dem Senden einen Impuls zurück, der so lange anhält, bis das Echo empfangen wurde oder ein Timeout erreicht wurde.
Es muss also die Zeitdauer des Impulses gemessen werden. Dazu eignen sich zum Beispiel die Timer der Microcontroller. Hier könnte man das so programmieren, dass man den Timerwert beim Startimpuls auf NULL setzt. Wenn dann der Messimpuls wieder abfällt, ließt man den aktuellen Timerwert aus und hat so die Zeitdauer. Mit der und der bekannten Ausbreitungsgeschwindigkeit von Schall in Luft lässt sich dann die Entfernung des Hindernisses erfassen.
Achte bei mehreren SRF's darauf, dass du nicht mit allen SRF's gleichzeitig misst, sondern hintereinander. Sonst kann es passieren, dass dein Sensor den Schallpegel das Nachbarsensors oder andere Refelxionen aufnimmt.
Was nutzt du für einen Microcontroller?
Viel Erfolg beim Ansteuern.
ich benutze ein handyboard mit erweiterungsplatine.
p.s. noch eine kleine frage, muss die erweiterungsplatine zusatlich an den mit +- markierten stellen mit dem akku verbunden werden, oder wird sie über diue grundplatine versogt?
Hallo!
Die Zusatzplatine braucht nicht extra versorgt zu werden. Sie wird über das Basisbord bereits versorgt.
Die beiden Anschlussleitungen, die du meinst, sind für die Servos gedacht. Im Normalfall werden diese Ebenfalls über das Basisbord mit versorgt. Will man allerdings etwas kräftigere Servos anschließen, empfielt es sich dort eine extra Stromversorgung für die Servos anzuschließen. Dafür muss dann unten an der Platine die dicke Leitung (mit einem Pfeil markiert) durchgetrennt werden.
im ic ist ja bereits eine routine für ultraschallmodule enthalten. kann ich diese durch ein einfaches anpassen der verwendeten ports und namen vervielfälltigen oder oder müsste ich weitere änderungen in der unter #use genannten srf04_sonar.icb datei vornehmen?
mfg benj
edit: resp wäre es möglich die sonar funktion dahingehend zu modifizieren, das man ihr einen wert zwischen 0 und 3 übergeben muss, und aufgrund dieses wertes die digitalen ports zugewiesen und benutzt werden?
Hallo!
Eine einfache Änderung ist leider nicht möglich, da die Funktionalität in der Assemblerdatei srf04_sonar.asm bereit gestellt wird. Die Datei srf04_sonar.icb stellt die Schnittstelle für das Einbinden der Assemblerfunktionen in IC bereit. Um etwas zu ändern, müsstest du die Assemblerdatei ändern und mit einem Compiler (GCC wäre möglich) übersetzen. Dabei musst du aber aufpassen, dass du nicht mit dem restlichen Programm kollidierst, also sich die Speicherbereiche nicht überschneiden. Eine andere Möglichkeit, mehrere SRF04 auszuwerte, wäre diese über einen Demultiplexer anzuschließen. Damit würde man alle Sonare an einen Port anschließen und über drei Adressleitungen auswählen, welcher jetzt durchgeschaltet wird. Und dieser wird dann mit der normalen SRF04-Routine gemessen.
Ich hoffe, das hilft weiter.
vielen dank für ihre hilfe. ich werde mir aller wahrscheinlichkeit nach solch einen demultiplexer bauen ( servo plus kontakte )
mfg benj
Ohh, also eine Art umschalter, der durch einen Servo betätigt wird. Klar, das geht auch. Etwas langsamer als ein IC aber durchaus zweckdienlich.
Viel Erfolg
bevor ich ein neues topic zum srf04 eröffne schreib ich mal hier rein. ich hab mehrere srf04 module in betrieb. leider liefern sie kein ergebniss. neben einem leisen knacksen beim messstart läuft nichts. muss ich da evtl die einzelnen signal(also rückgabe-)leitungen mit jeweils einer diode absichern oder liegt das problem evtl woanders?
mfg benj
Hallo,
der Einsatz mehrerer SRF04 ist nicht ganz ohne Probleme.
Man muss dafür sorgen dass immer nur einer der Sonare aktiv ist. Das bedeutet dass jeder Sensor seinen eigenen Triggerimpuls bekommen muss. Eine gemeinsame Triggereung ist nur dann möglich wenn sich die Sensoren unter keinen Umständen gegenseitig "hören" können!
Das Echosignal des Sensors muss vom steuernden Controller ausgewertet werden. Idealerweise wird jedes Echosignal auf einen separaten Controllereingang gelegt. In diesem Falle wäre eine gemeinsame Triggerung denkbar.
Sollen aber mehrere Sonare mit dem Echosignal auf einen Eingang gelegt werden (Triggerung nicht gleichzeitig ist Bedingung) so müssen die Echosignale über eine ODER-Schaltung an den Auswerteeingang des Controllers geschaltet werden. Eine einfache Parallelschaltung der Echosignale funktioniert NICHT.
Als ODER wäre ein Dioden-Widerstands-Gatter denkbar, man kann aber auch eine IC-Logik verwenden.
Manfred