strex Geschrieben July 30, 2013 at 16:27 Geschrieben July 30, 2013 at 16:27 Hi Leute, ich bastel gerade an meinem autonomen Rover auf Basis der Tinkerforge Module. Verbaut sind aktuell IR Sensoren, 2x DC Bricks, 1x Step-down, 1x Master 2.0, Wifi Extension und ein IO-16 Bricklet. Derzeit möchte ich den Rover mit weiteren Sensoren wie etwa Ultraschall, Kollisions- und Crash Sensoren ausstatten. Die IR Sensoren reichen nicht um alles zu detektieren besonders in weiterer Entfernung (3 bis 6 Meter). Da bin ich auf die Idee gekommen die Ultraschall Sensoren aus den Arduino Part zu benutzten. Etwa den SRF04, SRF05 oder SRF08, die per TTL angesteuert werden können. Das funktionieren an sich auch sehr gut, leider ist aber Java nicht in der Lage innerhalb von Mikrosekunden zu arbeiten, so das die Pulse nicht korrekt vom IO-16 Bricklet gelesen werden können. Bis der Interrupt aus dem Listener kommt und der Start Timer gestartet wurde, vergeht einfach ein paar Millisekunden und die Messung wird ungenau oder verpasst gar einen Impuls (zweiter Interrupt). Auch kann die Zeit zwischen Interrupts des Bricklets nur auf maximal 1ms gesenkt werden. Das ist schon zu viel, Mikrosekunden werden benötigt. Eventuell wäre es doch interessant das IO-16 Bricklet so zu erweitern, dass ein Listener abgesetzt werden kann der bei einem Impuls ausgelöst wird und gleichzeitig nicht nur der "interrupt(char port, short interruptMask, short valueMask)" ausgelöst wird, sondern ein Listener "interrupt(char port, short interruptMask, short valueMask, long pulseLength)" der auch die Zeit liefert (Microsekunden) vom Microkontroller. Der Interrupt wird also erst ausgelöst nachdem die Flanke wieder auf Low gewechselt hat. Sonst einer eine Idee wie man sonst die Messung bewerkstelligen könnte, aktuell gibt es ja leider nur wenig Sensoren? Zitieren
borg Geschrieben July 30, 2013 at 16:36 Geschrieben July 30, 2013 at 16:36 Die Plugins der Bricklets werden einmal pro ms aufgerufen. D.h. die Bricklets selbst können auch nur mit einer Auflösung von einer ms einen Puls auswerten. Wir planen ja auch schon seit längerem selbst ein Ultraschallsensor-Bricklet anzubieten, genau wegen dieser Problematik ist das leider nicht so einfach. Da gibt es im Prinzip nur zwei Möglichkeiten: Entweder wir werten die Pulslänge irgendwie über einen weiteren IC aus oder wir nehmen teurere Ultraschallsensoren die selbst schon I2C o.ä. sprechen. Kurz gesagt: Für dein Problem gibt es leider keine einfache Lösung . Am einfachsten wäre es wenn du einen Ultraschallsensor nimmst der eine analoge Spannung ausgibt und diesen am Analog In oder Voltage/Current Bricklet anschließt. Zitieren
strex Geschrieben July 30, 2013 at 18:15 Autor Geschrieben July 30, 2013 at 18:15 Auf die Idee mit einem anlogen Sensor bin ich auch schon gekommen. Ich werde wohl testweise ein Devantech SRF06 ordern und über ein Messwiderstand die Spannung ermitteln. Preislich wohl die Beste Lösung, eventuell wären noch die MaxSonar Sensoren etwas. Edit:// Ich werde jetzt einmal die LV-MaxSonar-EZ0 testen. Zitieren
strex Geschrieben August 1, 2013 at 16:59 Autor Geschrieben August 1, 2013 at 16:59 War echt eine gute Idee. Heute kamen die zwei Analog IN und der Servo Brick. Die MaxBotix LV-MaxSonar-EZ0 Sensoren sind echt gut, ziemlich genau und decken eine Größe Reichweite von über 6 Meter ab. Kein Vergleich zu einem IR Sensor, zumal kein Toter Winkel besteht bzw. zu nahe Entferung. Über die Analog IN wird dann die manuelle Spannung gemessen. Ich hab mir in Java eine Klasse für Ultraschall Sensoren geschrieben, die wie ein Bricklet angesprochen werden kann (inkl. Listener). Die werde ich wohl noch veröffentlichen. Ich werde wohl mein Sensor Arm auch noch mit einem ausstatten, der etwas kleineren Winkel bietet und noch weiter (10m) geht, dann lässt sich eine schöne Abtastung ermöglichen. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.