Steuerung eines kleinen Kettenfahrwerkes

  • Hallo ihr Lieben,


    ich bin neu hier und wollte euch einerseits mal mein Projekt vorstellen, andererseits auch um ein paar Tips fragen.

    Während Covid habe ich mir ein kleines Kettenfahrwerk geholt (20x25cm, Motoren waren mit dabei) und ich wollte das Ganze zum fahren bewegen. Der Plan dazu sieht eine App als Bluetoothfernsteuerung vor.

    Kurzerhand später ein Raspberry Pi 3b+ geholt und angefangen alles zu verdrahten und aufzusetzen.

    Auf Wunsch kann ich auch gerne mal ein Video hochladen zum ansehen :)

    Aktueller Stand ist, dass ich die Ketten per PC ansteuern kann und vorgegebene Bewegungen abfahren kann. App ist soweit auch bereit.


    Meine Fragen:

    1. Wie schaffe ich es, einen Loop nach folgendem Schema zu erstellen:

    "Wenn die App aktiv ist, überwache die Bluetoothsignale dauerhaft, sobald ein Signal geschaltet wird, führe die dazugehörige Aktion (siehe Bedingungen unten) durch. Wenn die App geschlossen wird (dafür hat sie einen eigenen Button den ich per Bluetooth als Signal geben kann), beende den Loop."

    2. Hat jemand Ahnung wie ich eine Bluetoothverbindung zwischen dem Raspberry Pi und einer App (erstellt mit MIT App Inventor) herstelle? Habe zwar ein paar Hinweise gefunden, aber nichts wirklich passendes speziell für dieses Projekt. Und das was passend war, da war leider einer der Downloadlinks nicht mehr aktiv ;(


    Grundkonzept sieht wie folgt aus (das ist nur eine Notiz für mich, kein fertiges und Python gerechtes Programm)

    Bluetooth Eingänge

    bluetooth_vor =
    bluetooth_vor_links =
    bluetooth_links_drehen =
    bluetooth_rück_links =
    bluetooth_rück =
    bluetooth_rück_rechts =
    bluetooth_rechts_drehen =
    bluetooth_vor_rechts =

    Welcher Zustand soll entstehen, wenn ein Programmabschnitt ein Ergebnis hat?
    vor = LEFT_9V_PIN.High, RIGHT_9V_PIN.High, LEFT_FORWARD.High, RIGHT_FORWARD.high
    vor_links = LEFT_6V_PIN.High, RIGHT_9V_PIN.High, LEFT_FORWARD.High, RIGHT_FORWARD.high
    drehen_links = LEFT_6V_PIN.High, RIGHT_6V_PIN.High, LEFT_BACKWARD.High, RIGHT_FORWARD.high
    rück_links = LEFT_6V_PIN.High, RIGHT_9V_PIN.High, LEFT_BACKWARD.High, RIGHT_BACKWARD.high
    rück = LEFT_9V_PIN.High, RIGHT_9V_PIN.High, LEFT_BACKWARD.High, RIGHT_BACKWARD.high
    rück_rechts = LEFT_9V_PIN.High, RIGHT_6V_PIN.High, LEFT_BACKWARD.High, RIGHT_BACKWARD.high
    rechts = LEFT_6V_PIN.High, RIGHT_6V_PIN.High, LEFT_FORWARD.High, RIGHT_BACKWARD.high
    vor_rechts = LEFT_9V_PIN.High, RIGHT_6V_PIN.High, LEFT_FORWARD.High, RIGHT_FORWARD.high


    Bedingungen (diese sollen so lang überwacht werden, solang die App geöffnet ist) Jede Bedingung ist durch die and not´s gegeneinander verriegelt. Heisst wenn eine Aktion an ist, kann die Andere nicht stattfinden zum Schutz der Komponenten

    #vor
    if bluetooth_vor and not bluetooth_vor_links and not bluetooth_links_drehen and not bluetooth_rück_links and not bluetooth_rück and not bluetooth_rück_rechts and not bluetooth_rechts_drehen and not bluetooth_vor_rechts
    vor
    else: GPIO.cleanup()

    #vor_links
    if not bluetooth_vor and bluetooth_vor_links and not bluetooth_links_drehen and not bluetooth_rück_links and not bluetooth_rück and not bluetooth_rück_rechts and not bluetooth_rechts_drehen and not bluetooth_vor_rechts
    vor_links
    else: GPIO.cleanup()

    #drehen_links
    if not bluetooth_vor and not bluetooth_vor_links and bluetooth_links_drehen and not bluetooth_rück_links and not bluetooth_rück and not bluetooth_rück_rechts and not bluetooth_rechts_drehen and not bluetooth_vor_rechts
    drehen_links
    else: GPIO.cleanup()

    #rück_links
    if not bluetooth_vor and not bluetooth_vor_links and not bluetooth_links_drehen and bluetooth_rück_links and not bluetooth_rück and not bluetooth_rück_rechts and not bluetooth_rechts_drehen and not bluetooth_vor_rechts
    rück_links
    else: GPIO.cleanup()

    #rück
    if not bluetooth_vor and not bluetooth_vor_links and not bluetooth_links_drehen and not bluetooth_rück_links and bluetooth_rück and not bluetooth_rück_rechts and not bluetooth_rechts_drehen and not bluetooth_vor_rechts
    rück
    else: GPIO.cleanup()

    #rechts_rück
    if not bluetooth_vor and not bluetooth_vor_links and not bluetooth_links_drehen and not bluetooth_rück_links and not bluetooth_rück and bluetooth_rück_rechts and not bluetooth_rechts_drehen and not bluetooth_vor_rechts
    rechts_rück
    else: GPIO.cleanup()

    #rechts_drehen
    if not bluetooth_vor and not bluetooth_vor_links and not bluetooth_links_drehen and not bluetooth_rück_links and not bluetooth_rück and not bluetooth_rück_rechts and bluetooth_rechts_drehen and not bluetooth_vor_rechts
    rechts_drehen
    else: GPIO.cleanup()

    #rechts_vor
    if not bluetooth_vor and not bluetooth_vor_links and not bluetooth_links_drehen and not bluetooth_rück_links and not bluetooth_rück and not bluetooth_rück_rechts and not bluetooth_rechts_drehen and bluetooth_vor_rechts
    rechts_vor
    else: GPIO.cleanup()


    Freue mich schon auf regen Austausch :)

  • Guten Tag,

    Der Part Bluetooth, da bin ich raus, außer der schon gewonnen Erkenntnis - das ist nichts für größere Entfernungen.
    Jedoch bei der Steuerung würde ich auf einen µController setzen. Wie dem PICO W, oder einem ESP32.
    Was du als Befehle sendest ist das eine ! Was der Controller ob nun eine RasPI oder µController draus macht ist was ganz anderes und von deinen Motor-Drivern abhängig.
    Dann noch der Hinweis, weil aus deinen Angaben nichts hervorgeht, was soll mit dem Kettenfahrzeug passieren, wenn keine Funkverbindung besteht. Solllen die Ketten via Motorbremse ( Wicklungsschluß ) gebremst werden ? Oder soll sich das Fahrzeug im Falle das es an einem Hang steht der Schwerkraft folgen einfach weiter bewegen dürfen ?

    Das ist aus meiner Betrachtungsweise, weil ja auch durch eine technische Störung ein Abbbruch der Funkverbindung eintreten könnte nicht wirklich bis zum Endedurchdacht. Oder die Angaben fehlen deinerseits.

    Es grüßt
    Roland

  • Hey Roland,

    die Punkte hab ich tatsächlich noch nicht bedacht. Danke für den Hinweis.

    Ich würde dahingehend festlegen wenn die Verbindung unterbrochen wurde, sollen die Gpio's alle auf 0 gesetzt werden (dadurch würden alle Relais abschalten und es ist keime weitere Bewegung möglich), danach das RPi in Standby, bis eine neue Funkverbindung hergestellt wurde oder wenn 5 Minuten überschritten wurden fahre das Pi herunter.

    Bezüglich Thema Hang und co: Ich habe mir einfach, weil ich es für meine Verhältnisse praktischer fand (auch aufgrund dessen dass ich beruflich viel mit Steuer und Laststromkreisen arbeite), die Ansteuerung der Motoren per 6V und 9V Spannungsquellen die über Relais zu und abgeschalten werden geregelt. Der Rollwiderstand der ketten ist dabei so groß, dass das Fahrzeug ohne Probleme am Hang stehen kann und nicht von alleine losrollt. Es ist warscheinlicher dass es rutscht bevor sich die Ketten bewegen. Falls doch, sollte die erzeugte Spannung so gering sein, dass weitere Elektronik davon nicht beeinträchtigt wird und durch die Trennung von Last und Steuerstrom sollte es dahingehend auch keine Probleme geben.


    Danke dir für den Input.


    Liebe Grüße


    Florian

  • Hallo,

    kannst du nich in einem Thread die BT-Verbindungen überwachen, wenn eine aufgebaut wurde, setzt du eine Flag und diese wird im Steuerungsablauf abgefragt und entsprechend gehandelt.(?)


    Grüße
    Dennis

    🎧 Für mich ist es Erfolg, wenn man ein Lächeln schenkt
    Und wer Drama will, bekommt auch ein Happy End 🎧

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!