Turtle Roboter

  • Hallo René,


    danke für die Auskünfte. Mal schauen, was der neue Sensor leistet. Es dauert nur eben ein bisschen. Übrigens habe ich mir schon die Software für den neuen Kurs installiert. Hat alles prima geklappt. Den ESP32 (WiFi kit 32 von Heltec) habe ich mir auch schon besorgt. Das gehört aber sicher in die andere Forenrubrik ;)


    Gruss

    Bernhard

  • Theoretisch ist das nicht möglich. 1000 zeigt er an, wenn innerhalb von 50 ms kein Echo empfangen wird. Das entspricht etwa 85 cm. Dann wird angenommen, dass kein Hindernis festgestellt wurde.

    225 ( das wäre dann ja 225 cm!) sollte es gar nie geben, da der Timeout vorher kommen sollte.


    In früheren Programmen wurde remote_init() verwendet. In den neueren Programmen ist es remote.init(). Das hat mit der Version von remote.h und remote.cpp zu tun. Das liegt an einer Fehleinschätzung meinerseits. Ich dachte, die Einführung von Klassen würde die Zuschauer überfordern und habe daher klassenlose Module vorgestellt (das sind die mit remote_init()). Ich musste aber feststellen, dass diejenigen Zuschauer, die in der Lage sind selbst Module zu schreiben auch in der Lage sind Klassen zu erstellen. Für diejenigen welche den Code nur lesen oder herunterkopieren ist es eigentlich egal. Daher werde ich es in Zukunft richtig machen und immer mit Klassen arbeiten (das wäre dann remote.init()). Eine etwas genauere Erklärung zu Klassen ist im Arduino - Kurs zu finden.


    Gruss

    René

  • Hallo Bernhard,


    vielen Dank: Ich hoffe, dass der neue Kurs für Viele verständlich und nützlich wird. Es gibt einige sehr gute deutschsprachige Kanäle auf Youtube. Jeder versucht ein ausgewogenes Verhältnis zwischen Unterhaltung und Wissensvermittlung zu finden. Bei mir sind die Inhalte oft etwas softwarelastig. Das hat wahrscheinlich mit meinem beruflichen Hintergrund zu tun.


    Ich habe übrigens einige der kleinen Lasersensoren bei Aliexpress bestellt. Ich bin gespannt, was man damit erreichen kann.


    Gruss

    René

  • Hallo René,


    habe versucht den Augenabstand auf dem Seriellen Monitor auszugeben. Dazu habe ich geringf. Änderungen im HP (bei mir ist es "HindernisTest1") vorgenommen, wie du im T.5 Hinterniserkennung beschreibst.

    Zwei Fragen habe ich:

    - SM zeigt, wenn kein Hindernis 225 und wenn ein Hindernis 1000 an. Wie kann das sein?

    - ist es irrelevant, ob man die Befehlszeilen mit Unterstrich oder mit Punkt kommentiert? (bspw. remote.init() oder remote_init() )


    Gruss

    Bernhard

  • Hallo René,


    habe gleich den benannten Sensor bestellt, und werde auch so noch mit den Einstellungen experimentieren. Mal schauen was man herauszuholen kann.

    Übrigens, deine Beiträge zu diesen Themen hier im Forum und bei Youtube sind absolute Spitze (jedenfalls im deutschsprachigem Raum - die anderen kann ich nicht beurteilen). Das ist genau das Richtige für Leute wie mich als Beginner (mit etwas Elektronikvorkenntnissen). Ich wünschte nur, es würden sich etwas mehr Leute (vor allem junge Menschen) für diese Themen interessieren.

    Also, vielen Dank und einen guten Start für deinen neuen Kurs Micropython mit ESP32!

    Ich freu mich drauf.


    Gruss

    Bernhard

  • Hallo Bernhard,


    schön, dass es funktioniert. Das Ganze kann natürlich noch stark verbessert werden. So sind die verwendeten Ultraschallsensoren zwar recht beliebt, da sie sehr billig sind und vom Aussehen her an Augen erinnern. Mehrere kleinere und unscheinbarere, aber qualitativ hochstehende Sensoren (z. Bsp. https://www.aliexpress.com/item/33046911235.html ) könnten das Ergebnis sicher verbessern.


    Gruss

    René

  • Hallo René,


    der Roboter reagiert, wie du es beschrieben hast. Vielen Dank dafür! Nach ersten Fahrversuchen kann ich einschätzen, dass er seine Sache schon ganz gut macht. Natürlich bedarf es noch einiger Feineinstellungen, was die Motorgeschwindigkeit und die Ultraschallmessung betrifft. So habe ich z.B. festgestellt, dass der Roboter zu nah an das Hindernis heranfährt und damit keine vernünftigen Echo-Signale erhält. Das gleiche gilt dann auch, wenn der US-Sensor nur zur Hälfte vom Hindernis bedeckt wird.

    Mit besten Grüssen

    Bernhard

  • Hallo Bernhard,


    versuche bitte dieses Programm.

    Beim Einschalten sollte der Roboter stehen bleiben.

    Ein Druck auf die 'Vorwärts-Taste' sollte den Roboter starten. Er sollte ausweichen und sich dabei umschauen.

    Mit der Taste 2 sollte er gestoppt werden können.


    Es könnte sein, dass rechts und links vertauscht sind. Dann müssten in motor.cpp die Pins getauscht werden.


    //=== Konstanten

    //Pindefinitionen für L298N mit ENA/ENB

    const int links_richtung_PinB = 9;

    const int links_richtung_PinF = 8;

    const int links_geschwindigkeit_Pin = 10;


    const int rechts_richtung_PinB = 7;

    const int rechts_richtung_PinF = 6;

    const int rechts_geschwindigkeit_Pin = 5;


    Gruss

    René

  • Hallo Bernhard,


    tut mir leid, dass ich momentan etwas auf Tauchstation gegangen bin. Ich bin das ganze Wochenende unterwegs und habe vermutlich erst wieder am Dienstag Zeit, um etwas anzuschauen.

    Wenn du die Ansteuerung mit ENA und ENB geschafft hast, ist das ideal. Der H-Brücken - Chip L298N wird auch normalerweise so angesteuert. Ich werde es sicher anschauen, es wird leider aber noch einige Tage dauern.


    Gruss

    René

  • Hallo René,


    habe einmal versucht mit folgendem Sketch (s.Anhang) den Motor-Controller (LH-95) anzusteuern. Dazu mußte ich Pin-Belegungen am Arduino verändern, einschließlich der Einbindung von ENA und ENB. Macht für mich den Eindruck, dass dies von Seiten des Motor-Controllers funktioniert. Vielleicht kann man das ja in das Gesamtkonzept 4_Hindernis7.ino einbinden?


    Gruss

    Bernhard

  • Hallo René,

    im Anhang sende ich dir die gewünschte Datei remote.ccp. In dieser habe ich nur die vorhandenen Senderadressen mit denen meines IR-Senders ausgetauscht.


    Freundlichen Gruss

    Bernhard

  • Hallo René,


    ich habe die Testdatei geladen und dabei festgestellt, dass sich bei Einhaltung einer bestimmten Reihenfolge von Tastendrücken (s.u.) folgendes Laufschema der Motoren ergab:


    1. Einschalten => vor

    2. vor => vor

    3. zurück => zurück

    4. rechts => Kurve rechts zurück

    5. links => zurück

    6. ok => zurück

    7. 1 => drehen links zurück

    8. 2 => drehen links vor

    9. 3 => drehen rechts zurück

    10. 4 => drehen rechts vor

    11. 5 => drehen rechts zurück

    12. 6 => drehen rechts zurück

    13. 7 => drehen rechts zurück (durch mehrfaches drücken Geschw.keit nach unten regelbar)

    14. 8 => drehen rechts zurück

    15. 9 => drehen rechts zurück (durch mehrfaches drücken Geschw.keit nach oben regelbar)

    16. 0 => keine Wirksamkeit

    (Bemerkung: bei gleichem Laufschema lagen unterschiedliche Geschwindigkeiten vor)


    Desweiteren habe ich festgestellt, dass bei Unterbrechung der o.g. Tasten-Reihenfolge z. B. folgende Belegungen anders reagierten:


    4 => zurück

    5 => zurück

    6 => zurück

    7 => zurück (durch mehrfaches drücken Geschw.keit nach oben regelbar)

    9 => zurück (durch mehrfaches drücken Geschw.keit nach unten regelbar)


    Ich hoffe, dass ich damit deine Zeit nicht zu sehr beanspruche.


    Viele Grüsse

    Bernhard

  • Hallo Bernhard,


    dann kommen wir der Sache schon näher. Hier ein Testprogramm, das ausschliesslich das Zusammenspiel zwischen Fernbedienung und Motoren testet.

    Der Roboter reagiert auf folgende Befehle:

    - vor, zurück

    - drehen rechts oder links

    - Kurve rechts oder links

    - Geschwindigkeit langsam, mittel, schnell

    - Geschwindigkeit schneller, langsamer

    - gerade aus

    - stopp


    Bei schneller, langsamer und den Kurven muss mehrmals gedrückt werden. Es genügt nicht, einfach den Knopf gedrückt zu halten.


    Welche Taste welche Funktion auslöst, siehst du in remote.cpp.


    Gruss

    René

  • Hallo René,


    zuerst einmal vielen Dank für deine Bemühungen.

    Der Roboter reagiert immerhin schon autonom:)

    Folgendes kann ich feststellen:

    - Einschalten => langsam vorwärts

    - bei Annäherung an ein Objekt schnell vorwärts

    - drücken der Taste 2 beendet autonome Bewegung => schnell vorwärts (dabei sind allerdings keine weiteren Steuerungen mit der

    Fernbedienung möglich, außer s.u.)

    - durch drücken der Taste vor, kann Autonomie wieder hergestellt werden.


    Viele Grüsse

    Bernhard

  • Hallo René,


    ich habe erstmal nur das MotorTest.ino incl. h und cpp auf den Arduino geladen. Bin mir noch unsicher, wie ich dieses nun in das Hauptrogramm 4_Hindernis7.ino implementieren kann. Und muss ich in diesem ebenfalls noch Einstellungen verändern?

    Könntest du mir dazu bitte noch ein paar Hinweise geben?


    Gruss

    Bernhard

  • Hallo René,


    nachdem ich die Motoranschlüsse änderte, haben sie die gleiche Laufrichtung. In der 4-Pin-Fassung arbeiten sie jetzt wie folgt:

    - 5 s schnell vorwärts

    - 5 s stehen bleiben

    - 1 s schnell vorwärts

    - 5 s schnell rückwärts

    - 5 s langsam rückwärts

    - ausschalten.


    Meine Pin-Belegung sieht dabei folgendermaßen aus:

    ENA ==> nicht gesteckt (Jumper)

    IN1 ==> D2

    IN2 ==> D9~

    IN3 ==> D4

    IN4 ==> D5~

    ENB ==> nicht gesteckt (Jumper)


    Sieht eigentlich schon ganz gut aus ;) oder?


    Grüsse

    Bernhard