Druckwellenschlauch für Bumperduino

roland

Active member
Aktuell fehlt aus meiner Sicht noch eine vernünftige, einfache Lösung bezüglich des Druckwellenschlauches für den Bumperduino. Da ich den gleichen Sensor verwende wie der Bumperduino, sollten meine Lösung mit dem Bumperduino kompatibel sein.

Als Schlauch verwende ich EPDM Moosgummi D-profil SK 21x17 mm. Kommerzielle Druckwellenschläuche werden aus dem gleichen Material hergestellt - zumindest was ich gegooglet habe. https://www.technirub.de/moosgummi-d-profil-sk-21x17-mm.html
Der funktioniert sehr gut. Der Sensor spricht schon bei geringstem Druck an. Der Schlauch geht um den ganzen Roboter.
Aktuell habe ich den Pattexkleber im angehängten Bild genommen. Der hält sehr gut. Bei dem nächsten Mal werde ich aber wohl Loctite 406 als Kleber nehmen. Gibt es bei Amazon.

Als ich die Enden vom Schlauch dicht kleben wollte (mit der Unterseite des Schlauches mit Azeton gereinigt), hatte ich den Schlauch mit Gewebeklebeband fixiert. Als ich dieses dann wieder abmachen wollte, hat es so stark geklebt, dass mir das Gummi an der Oberfläche rausgerissen ist. Also nicht nachmachen. ;) Daraufhin habe ich dann das defekte Stück herausgeschnitten und ein Stück dazwischengeklebt. Funktioniert erstmal, aber ich werde es nochmal neu erstellen. Vor dem Kleben das Gummi mit Azeton reinigen.

Den Anschluss an den Silikonschlauch habe ich mit einem Teil von Regenmeister hergestellt. Kleines Loch eingestochen, eingeklebt und den Schlauch draufgesteckt. https://www.regenmeister.de/Beetbew...oer/Adapter-fuer-Steigrohr-5-Stueck::718.html
Als Code habe ich nicht den vom Bumperduion benutzt, da dieser den Zero-Point nicht aus der Vergangenheit nimmt, sondern neu kalkuliert in der Hoffnung das bei der Berechnung nicht gerade der Schlauch gedrückt wird.

Anbei mal mein Testcode wie ich es machen würde. Ich werde wohl noch ein paar mehr Summen aus dem Array berechen. Der Code in run() benötigt bei mir 11uS. Diesen rufe ich dann in Intervallen von 15ms auf.


Code:
#ifndef MPX5010DP_H_INCLUDED
#define MPX5010DP_H_INCLUDED

#include "mbed.h"


#define MPX5010DP_BUF_SIZE 50  // Bei 15ms Intervall sind dies 750ms die zurückgeguckt werden

class CMPX5010DP
{
public:
    bool flagShowBumper;
    void setup();
    void run();
    bool isBumperActivated();
private:
    bool _bumperActivated;
    float _buf[MPX5010DP_BUF_SIZE];
    float _deactivateThreshold;
};

#endif




Code:
#include "mbed.h"
#include "MPX5010DP.h"

#define MPX5010DP_Pin PC_0

extern Serial pc;

AnalogIn aiMPX5010DP(MPX5010DP_Pin);


void   CMPX5010DP::setup()
{
    int i;

    _bumperActivated = false;
    flagShowBumper = false;

    for(i=0; i < MPX5010DP_BUF_SIZE; i++) {
        _buf[i] =  aiMPX5010DP.read();
    }
};

bool CMPX5010DP::isBumperActivated()
{
    return _bumperActivated;
}


void CMPX5010DP::run()
{
    int i;
    float sum1=0.0f, sum2=0.0f, sum3=0.0f;

    memcpy(&_buf[0],&_buf[1],sizeof(float) * (MPX5010DP_BUF_SIZE-1));

    _buf[ MPX5010DP_BUF_SIZE-1 ] = aiMPX5010DP.read();


    for(i=0; i < 4; i++) {
        sum1 += _buf[i];
    }
    sum1 /=4;


    for(i=MPX5010DP_BUF_SIZE-8; i < MPX5010DP_BUF_SIZE-4; i++) {
        sum2 += _buf[i];
    }
    sum2 /=4;

    for(i=MPX5010DP_BUF_SIZE-4; i < MPX5010DP_BUF_SIZE; i++) {
        sum3 += _buf[i];
    }
    sum3 /=4;


    if(!_bumperActivated) {
        if(sum3-sum1 > 0.03f) {
            _bumperActivated = true;
            if(flagShowBumper) {
                pc.printf("3-1: %f-%frn", sum3,sum1);
            }
        }
        if(sum3-sum2 > 0.03f) {
            _bumperActivated = true;
            if(flagShowBumper) {
                pc.printf("3-2: %f-%frn", sum3,sum2);
            }
        }

        // calculate deactivate threshold out of least sum
        if(_bumperActivated) {
            if(sum2<sum1)
                _deactivateThreshold = sum2+0.02f;
            else
                _deactivateThreshold = sum1+0.02f;
        }

    } else {
        if(sum3 < _deactivateThreshold) {
            _bumperActivated = false;
            if(flagShowBumper) {
                pc.printf("3-threshold: %f-%frn",sum3, _deactivateThreshold);
            }
        }

    }

};
 
Wenn jemand das nachbauen möchte, auf jeden Fall darauf achten, dass kein Klebeband an die Gummi-Oberfläche kommt, oder der Kleber auf der Haut ist und man die Oberfläche anfasst. Diese wird angelöst und geht ab. Um die Enden dicht zu kleben, habe ich ein Stück vom Schlauch abgeschnitten und dann die Unterseite von diesem Teil vom Kleber mit Azeton befreit. Das Schlauchende auch mir Azeton gereinigt. Dann einen schönen Wulst von Kleber auf das Schlauchende aufgetragen und 60 Sekunden das abgeschnittene Teil drauf-gedrückt. Danach erst das U-Stück vom Teil abschneiden, da sich die Unterseite sonst durchbiegt. Leider konnte ich diese Lösung aktuell nicht beibehalten, da ich Teile der Oberfläche zerstört habe. Naja, erste Mal mit diesem Material gearbeitet.

Wenn ich in eine Richtung fahre und der Bumper ausgelöst wird, fahre ich in die entgegengesetzte Richtung. Muss ich noch testen, aber ich habe den Gardena RLi45 im Baumarkt angeschaut. Wenn dieser vorwärts fährt und ich das Gehäuse nach vorne drücke, stoppt er und fährt rückwärts. Der hat auch keine Ahnung, von wo der Einschlag kommt.

Wer nicht den Bumperduino verwenden möchte, sondern nur den MPX5010DP anbei der Schaltplan, wie ich diesen im Test angeschlossen habe. VOUT geht an den A/D Wandler des Controllers. Die Schaltung ist nach Data Sheet aufgebaut. Die Noisereduction nach AN1646 wie beim Bumperduino sehe ich im Moment nicht als notwendig. Die Auswertung für den Arduino müsstet Ihr dann selber programmieren.

Anmerkung: Hätte es den MPX5010DP im Shop gegeben, hätte ich diesen dort gekauft ;)
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/2936/Bumper.jpg/
 
Zuletzt bearbeitet von einem Moderator:
Habe gerade üble Erfahrungen gemacht, welche ich eigentlich im Vorfeld schon hätte wissen müssen :whistle: Na ja, hinterher ist man immer schlauer. :lol:
Den Druckwellenschlauch habe ich an einen Aluminiumträger geklebt, der um den Roboter geht und geschlossen ist. Das Magnetfeld der Schleife induziert hier nun einen Strom, der die Ergebnisse der Empfangsspulen extrem dämpft und manchmal auch umkehrt. Obwohl er innerhalb ist, misst er außerhalb oder auch manchmal gar kein Signal. Oder die linke Spule zeigt außerhalb an und die Rechte innerhalb. Werde den Ring erstmal aufschneiden und später durch einen Plexiglasring ersetzen.

Ggf. muss ich den Drucksensor doch noch weiter entstören. Obwohl beide Anschlüsse ab waren, geht die Spannung hoch als ob der Schlauch gedrückt wurde. Kann ich aber erst untersuchen, wenn der Bumper die Spulen nicht stört.
 
So, habe es nun geschafft. Habe den Ring provisorisch aufgetrennt - nichts hält so lange wie ein Provisorium ;). Musste an der Hardware bezüglich des Drucksensors nichts ändern. Habe den Schwellwert geändert und einen Tiefpassfilter in der Software verwendet.
https://youtu.be/N5S1o3wQYV4
Für den, den es interessiert, im Anhang der aktuelle Code. Habe diesen nur kurz getestet. Muss ggf. noch optimiert werden.

bumperSensor.zip

Attachment: https://forum.ardumower.de/data/media/kunena/attachments/2936/bumperSensor.zip/
 
Zuletzt bearbeitet von einem Moderator:
Hallo Roland
schön das du so Erfolg hast mit der Idee von BumperDuino. Den Moosgummi-Schlauch hatte ich schon vor einem Jahr getestet bei mir war es so, dass er sehr empfindlich war was das aufscheuern angeht. Nach einigen Betriebsstunden bildeten sich Risse und Löcher.

Die Problematik mit dem geschlossenen Ring habe ich bei den Tests so gelöst. https://www.youtube.com/watch?v=0Iy82MlMsTA
Um das ganze noch weiter zu verschönern macht man einfach einen größeren Schlauch über den eigentlichen Druckschlauch. Einfach längs aufschneiden und darüber stülpen. Deine Lösung mit dem Moosgummi finde ich ein schöne alternative dazu. Ich hoffe dieser ist beständiger als der den ich getestet habe. Ich werde es jedenfalls ausprobieren.

Was ich auch super finde, dass Du zu den gleichen Ergebnissen kommst wie ich damals bei der Entwicklung der BumperDuino. Was zeigt das dass Konzept richtig ist. Den Kondensator den du ohne Widerstand an den Out gehängt hast, ist für den Sensor auf Dauer nicht so ganz optimal.

Ein fließender Nullpunkt ist bei dieser Anwendung dann erforderlich wenn der Mower z.B. bei nicht allzu starker Sonne startet und im Verlauf seines Schaffens volle Sonne abbekommt. Wie Du schon selbst bemerkt hast ist der Sensor sehr empfindlich was sich bei fixem Nullpunkt in solchen Situationen ungünstig auswirkt. Bei gedrücktem Schlauch wird übrigens kein Nullpunkt in der BumperDuino-Software bestimmt. Jedoch da diese nur eine Test-Software (also eine Beta) ist kann sicher der ein oder andere findige ArduMower Softwareentwickler noch einiges zur Verbesserung beitragen.

In diesem Sinne und ich habe mich sehr über Deine Berichte gefreut

Gruß

Jürgen
 
Hallo Jürgen,

mein Moosgummischlauch ist gestern gekommen. Ich glaub das Zeug ist sehr robust. Lässt sich nur mit einer neuen Cutterklinge gut bearbeiten. Ich glaub ich werde mir eine Lehre drucken um den Schlauch auf Gehrung zu schneiden.
Macht erst mal ´nen guten Eindruck B)

VG
Reiner
 
Hallo Jürgen,

vielen Dank für die Informationen. Deine Auswahl des MPX5010DP für den Bumperduino war wirklich sehr gut.
Die Beständigkeit des Schlauches wird wohl erst in der nächsten Saison richtig getestet werden können.
Vielleicht könnte ja mal jemand einen aus Vollgummi testen wie diesen hier: http://www.technikplaza.de/gummiprofile/schutzleisten/pufferprofil-42x27-mm_schwarz_11837.html Falls jemand im Internet noch suchen möchte könnte folgender Suchbegriff kann ein Anfang sein: fenderprofil gummi
Da gibt es bestimmt was optimaleres.
Aus meiner Sicht ist es wichtig, ein hohes Profil mit hohem Rueckstellvermoegen zu haben, damit der Mower noch die Räder rechtzeitig zum stehen bekommt, bevor das Chassis anschlägt und die Räder sich weiterdrehen. Weiterhin verlangsame ich die Geschwindigkeit, wenn ich ein Hindernis erkenne. Daher darf der Kraftaufwand für das Eindrücken nicht zu hoch sein.

Eine weitere Anforderung von mir war, den Bumper rund um den Mower zu haben. Ansonsten habe ich Bedenken, dass er bei dem Drehen irgendwie mit dem Heck hängen bleibt.

Bezüglich der Berechnung habe ich am Anfang einige Tests gemacht. Wenn ich den Schlauch langsam eindrücke meldet nur der Verlgleich des 750ms alten Wertes eine Veränderung an. Alle vorherigen Summen, bekommen dies nicht mit, da die Steigung der Veränderung zu flach ist.

Würde mich freuen, wenn es im Shop einen Schlauch mit den Anforderungen geben würde der dann ggf. noch selbstklebend ist. Aktuell muss jeder sich was eigenes bezüglich des Schlauches zusammenbasteln. Viele Schläuche sind auch nur in größeren Mengen und dann auch nur als Firma zu bestellen.


Gruß
Roland
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/2936/Kontaktleistenelektrisch8K2.pdf/
 
Zuletzt bearbeitet von einem Moderator:
Hi Roland.
Something to clarify.
If i correctly understand bumperduino test differential with atmospherique pressure.
As the sensor is a differential pressure switch why don't you connect the to P1 and P2 input and use the same lenght of tube at left and right side of the mower.
Perhaps a very small hole in center help equilibrate in case of temperature change.

Picture to clarify.


bumperduinoair.jpg


by.
Attachment: https://forum.ardumower.de/data/media/kunena/attachments/3545/bumperduinoair.jpg/
 
Zuletzt bearbeitet von einem Moderator:
The MPX5010DP is a difference pressure sensor and has two connections. One for pressure and one for reference. If pressure input is higher than reference input, the output changes.

From datasheet:
Freescale designates the two sides of the pressure sensor
as the Pressure (P1) side and the Vacuum (P2) side. The
Pressure (P1) side is the side containing fluorosilicone gel
which protects the die from harsh media. The MPX pressure
sensor is designed to operate with positive differential
pressure applied, P1 > P2.
 
Zuletzt bearbeitet von einem Moderator:
You don't need to connect P2 because the pressure in the tube is the same as in the environment - the hose is not 100% sealed. Maybe the pressure is a little bit higher when driving in the sun, but this doesn't matter in oder I am looking for a change of the values in the array. The last measured value is 750ms old. In 750ms there can't be occure such a big difference in pressure through sunlight.
I don't use an absolute value to find out if the bumper has been hit. This will not work.
 
OK now i understand B) .
Think the hose is 100% sealed and not at atmospherique pressure.
Sorry i didn't view that you compare the value each 750 ms, easy and very good idea.
By.
 
Anyway, if the hose were 100% sealed this should not change anything. My hose holds the pressure maybe some minutes. I only calculate the rise/step of the function in different time intervals. The biggest is 750ms the shortest is 45ms. When the measured value goes from 0.02 to 0.07 for example I realise, that the bumper is pressed. When there is more pressure in the hose and I measure now 0.12 with bumper not activated then I realise that the bumper is pressed, when I measure 0.17 for example. Hope that helps to understand.
 
Hallo Roland,

wollte schon längst mal Rückmeldung geben. Der Schlauch von Dir macht einen guten Eindruck mal sehen wie lange der hält.
Ich mache noch einen 3D-Druck Adapter und probiere das ganze mal an meinem Saugroboter aus.

Gruß

Jürgen

P.S. Danke Frederic den werde ich auch noch testen.
 
Heute kam nach 4 Wochen der Schlauch endlich an, macht erstmal einen guten Eindruck, das 3M Klebeband hält sehr gut(mal schauen wielange) und seine Rückstellkraft ist ausreichend. Bei einem 8mm Chassis schließt der Schlauch bündig ab. Hab noch keinen Bumperduino hier und kann deshalb noch keine Testergebnisse liefern.
Erstelle gerade eine abgeänderte Version des Bumperduinos basierend auf einem Nano, sobald er läuft folgen Ergebnisse.
Gruß Frederic
 
Oben