GND Signal zählen 3x in 3s zum schalten

Hallo ich bin der Michael aus NRW.
Ich bin gelernter Zerspanungsmechaniker im Siemens bereich und mache viel mit Elektrik im hobby Bereich.

Mein Problem:
Ich muss an einem 3 achsigen Muldenanhänger 27 Tonnen (landwirtschaft) die Lenkachsen sperren beim Rückwärts fahren. Leider gibt es kein Rückfahrsignal wo ich drauf zu greifen kann.

Ich möchte es nun über das bremsiginal machen.

Aufgabe:

3x die Bremse drücken und wieder gehen lassen in 3 Sekunden würde ein relais ansteuern um ein Hdydralikventil zu sperren für die Zwangslenkung

Wieder 3x Bremse in 3 sekunden würde dann das relais wieder ausschalten.

Dann würde ich noch ein relais mit ansteuern beim ein und ausschalten für ein hupe: beim aktivieren 1x hupen beim deaktivieren 2x hupen.

Was das system halt nicht machen darf ist wenn man 3-4 sekunden auf der Bremse bleibt sich zu aktivieren, also wirklich nur die einschaltsignale.

Das Bremsiginal ist ja 12v plus , das könnnte ich aber mit einem Relais umwandeln auf GND vom Arduino zum schalten .

Vorhandene Bauteile:

ELEGOO UNO R3
ELEGOO 4 Kanal DC 5V Relaismodul

Ich hoffe ihr könnt mir helfen .
Vielen dank im vorraus.

Warum der Umweg über das Bremssignal oder Hupe. Ist ein extra Schalter nicht sinnvoller und birgt weniger Gefahren?

Wie willst du das machen wenn du am Berg stehst und nicht von der Bremse runter kannst?

Wie wäre es mit Hallsensoren an einer Achse, die die Rückwärtsfahrt erkennen und dann sperren?

Am Berg bleibst du ja auf der Bremse stehen . Deswegen die 3-4 eingangssignale in 3-4 sekunden damit man die störfallen ausfiltert.
Kein normaler Mensch bezätigt so sinnlos die bremse.

wie sollte die Hilfe ausehen? Was hast du bisher?

Mit einem Hallsensoren könnte man es probieren, aber die Achsen / Reifen fahren durch schlamm und Matsch. Denke sie werden recht schnell dreckig oder gehen kaputt.

Die Doppelbelegung einer Sicherheitsfunktion sehe ich kritisch.

Hast du andere schaltbare Signale am Hänger? Vielleicht Licht?

Und wenn du am Berg in den rückwärtsgang schalten willst?

Ein Auto hat 2 Bremsen... Denke bei Landmaschinen ist das nicht anders.

Wie ich die abfrage schreiben kann mit if...
Also wenn das signal in 3s , 3x kommt dann schalte den ausgang auf aktive

Die abfrage mit if und else habe ich ja im simens bereich an den cnc maschinen auch .
Nur möchte ich jetzt wenn das beremsignal
das erste mal kommt das er dann 3s zählt.
Wenn die zahl =3 oder <3 erreicht ist den ausgang auf high schaltet.

Wenn er dann ja mit dem loop fertig ist ,die letzte
Tasterstellung speichert bis wieder =3 /<3 erreicht sind.

Ich weis nicht wie ich das schreiben soll.

Ich kann euch in Siemens maschinenprogramme für bauteile schreiben oder mit Heidenhain aber dieses Arduino killt mich.

dieser Arduino ist halt in C++ zu programmieren.
C++ kennt Objektorientierung.

Also würde ich mir zunächst eine Klasse suchen die einen Eingang debouncen kann,
Dann würde ich mir eine Klasse schreiben die so einen Eingang einliest und dieses 3 Sekunden Kritierum überwacht

Dann würde ich mir eine Klasse schreiben, die einen Ausgang kurz pulst,

Und dann in einer Statemachine einfach hin und herschalten lassen.

Der loop ist dann schön einfach zu lesen.

/*
    Signal zählen 3x in 3s zum schalten


    by noiasca
    2024-05-18 class Button to debounce
*/

#include <Streaming.h>                 // Streaming by Peter Polidoro (boardmanager) - macht das Serial.print einfacher.

// simple debounce of a button
class Button {                                // a simple class for buttons based on the "Debounce" example
    const uint8_t buttonPin;                  // the GPIO / pin for the button
    static constexpr byte debounceDelay = 30; // the debounce time; Static because we only need one value for all buttons
    const bool active;                        // is the pin active HIGH or active LOW (will also activate the pullups!)
    bool lastButtonState = HIGH;              // the previous reading from the input pin
    uint32_t lastDebounceTime = 0;            // the last time the output pin was toggled

  public:
    /**
       \brief constructor for a button

       The constructor takes the GPIO as parameter.
       If you omit the second parameter, the library will activate the internal pullup resistor
       and the button should connect to GND.
       If you set the second parameter to HIGH, the button is active HIGH.
       The button should connect to VCC.
       The internal pullups will not be used but you will need an external pulldown resistor.

       \param buttonPin the GPIO for the button
       \param active LOW (default) - if button connects to GND, HIGH if button connects to VCC
    */
    Button(uint8_t buttonPin, bool active = LOW) : buttonPin(buttonPin), active(active) {}

    /**
       \brief set the pin to the proper state

       Call this function in your setup().
       The pinMode will be set according to your constructor.
    */
    void begin() {
      if (active == LOW)
        pinMode(buttonPin, INPUT_PULLUP);
      else
        pinMode(buttonPin, INPUT);
    }

    /**
        \brief indicate if button was pressed since last call

        @return HIGH if button was pressed since last call - debounce
    */
    bool wasPressed() {
      bool buttonState = LOW;                                        // the current reading from the input pin
      byte reading = LOW;                                            // "translated" state of button LOW = released, HIGH = pressed, despite the electrical state of the input pint
      if (digitalRead(buttonPin) == active) reading = HIGH;          // if we are using INPUT_PULLUP we are checking invers to LOW Pin
      if ((millis()  - lastDebounceTime) > debounceDelay) { // If the switch changed, AFTER any pressing or noise
        if (reading != lastButtonState && lastButtonState == LOW) {  // If there was a change and and last state was LOW (= released)
          buttonState = HIGH;
        }
        lastDebounceTime = millis();
        lastButtonState = reading;
      }
      return buttonState;
    }
};

class Input {
    Button input;                   // debounce the input with a common button class
    uint32_t previousMillis = 0;    // time management
    uint8_t counter = 0;            // how often was the button pressed
    const uint16_t interval = 3000; // periode of
    const uint8_t maxPress = 3;        // how often do you need to press the button
  public:
    Input(uint8_t buttonPin, bool active = LOW) : input(buttonPin, active) {}

    void begin() {
      input.begin();
    }

    bool tripplePress(uint32_t currentMillis = millis()) {
      if (currentMillis - previousMillis >= interval) {
        counter = 0;                      // reset
      }
      if (input.wasPressed()) {
        if (counter == 0) {
          previousMillis = currentMillis; // remember first press
        }
        if (++counter >= maxPress) {
          Serial << "fire" << endl;
          counter = 0;
          return true;
        }
      }
      return false;
    }
};

class Pulse {                            // a simple class for buttons based on the "Debounce" example
    const uint8_t outputPin;             // the GPIO / pin
    const uint16_t interval = 500;       // the debounce time; Static because we only need one value for all buttons
    uint8_t state;                       // state / restbeeps
    uint32_t previousMillis = 0;         // Time management
    const uint8_t active = HIGH;         // high active;
    const uint8_t inactive = LOW;        // state for inactive;
  public:
    Pulse (uint8_t outputPin) : outputPin(outputPin) {}

    void begin() {
      pinMode(outputPin, OUTPUT);
    }

    void set (uint8_t pulses) {
      state = pulses;
      digitalWrite(outputPin, HIGH);
      previousMillis = millis();
    }

    void update(uint32_t currentMillis = millis()) {
      if (state) {
        if (currentMillis - previousMillis > interval) {
          previousMillis = currentMillis;
          if (digitalRead(outputPin) == active) {
            digitalWrite(outputPin, inactive);
            state--;
          }
          else
            digitalWrite(outputPin, active);
        }
      }
    }

};

Input input(A0);           // the input/ break
Pulse horn(11);           // output to honk the horn
constexpr uint8_t outputPin{2};

enum State {IDLE, REVERSE} state;

void setup() {
  Serial.begin(115200);
  Serial << "Activate/deactivate after 3 presses\n";
  delay(500);
  input.begin();
  horn.begin();
  pinMode (outputPin, OUTPUT);

}

void loop() {

  switch (state) {
    case IDLE :
      if (input.tripplePress()) {
        digitalWrite(outputPin, HIGH);
        horn.set(1);  // einmal hupen
        state = REVERSE;
      }
      break;
    case REVERSE :
      if (input.tripplePress()) {
        digitalWrite(outputPin, LOW);
        horn.set(2);  // zweimal hupen
        state = IDLE;
      }
      break;
  }
  horn.update(); // needs to be called to trigger the horn
}
//

abgesehen davon, dass ich das ganze "12V" Märchen in einem KFZ nicht glaube und die Bedienung über die Bremse bedenklich finde.

LKW = 24V :slight_smile:

(welcher Voll**** hat da einen Validierer für Beiträge aktiviert?)

Traktoren haben 12v und eine 7 pol steckdose

umrüsten/erweitern auf 13 polig oder Nebelschlussleuchte für Rückfahrlicht opfern

... Spannungsspitzen wie jedes KFZ ... häng mal ein Oszi an dein Boardnetzt.

Der Vorteil von Hallsensoren (oder Reedschaltern) ist, dass sie ohne mechanische Verbindung schalten. Du könntest einen Neodymmagneten fest auf die Achse pappen und die Sensoren wasserdicht in die Nähe fest anbauen. Wenn der Schlamm das nicht abschert, schaltet es auch im Volldreck :smile:

Der anhänger wird unter Bauern gerne verliehen. Dann hat es der nächste traktor nicht mit 13 pol.

Das liegt in D, was sagt der TÜV/Dekra und die Versicherung zu Deinen Ideen?

Als junger Erwachsener habe ich gerne an meinem Käfer geschraubt, aber immer nur in enger Abstimmung mit dem netten Herrn vom TÜV. Ich kenne also das euphorische Gefühl einer vermeintlich guten Idee und die manchmal darauf folgende Ernüchterung.

Dann ist Deine Sonderlösung mit dreimal kurz bremsen keine gute Idee, denn der, der den Hänger abholt, gibt die Info möglicherweise nicht an den weiter, der damit fährt. Das muß daher automatisch funktionieren.

Mit

das ganze "12V" Märchen in einem KFZ

ist die instabile Spannung in Kfz gemeint, die nur nominell bei 12 V liegt. Du benötigst daher sehr gute Spannungsfilter für die empfindliche Elektronik. Hier im Forum hatten wir schon genügend Auto- und Motorradschrauber, die an Störungen in der Elektrik verzweifelt sind.

Aber lasse Dich bitte nicht entmutigen, die drei Stufen genialer Ideen sind

  1. Geht nicht!
  2. Unmöglich!
  3. Hätte ich natürlich auch so gemacht!

:crazy_face:

Als Camper habe ich einen Wohnwagen mit Auflaufbremse, solltest Du kennen. Da kann man eigentlich nicht mit rückwärts fahren, geht aber doch. Da wird die Rückwärtsbewegung zum Wirkungslosmachen der Bremse genutzt. Das entspricht dann der Idee mit den zwei Hallsensoren, die übrigens berührungslos mit Magnetfeld arbeiten. Wenn Du das mechanisch geschützt vor Steinschlag, Dreck und Hochdruckreiniger montiert bekommst, kann ich mir das als automatische Lösung zum Sperren der Lenkachsen vorstellen.

1 Like

Das arduino würde stromtechnisch mit einem von 12/24v netzteil auf 5v 3a laufen
Das bremssignal würde ein relais ansteuern das wiederrum als Schließer wie ein Taster arbeitet und das GND signal vom arduino schließen.
Das Arduino würde auf eine recht gleichmäßige Spannung arbeiten.

Bremsanlage läuft über luft. Zu vergleichen wie beim Auto.
Beim pkw anhänger alsu du ja ein Gestänge bzw boutenzüge die mechanisch arbeiten.

Ja, das kann man hinbekommen, beispielsweise die Elektronik in Mähdreschern zur Positionsbestimmung funktioniert ja auch. Ein Freund von mir hat Elektronik für die Landwirtschaft entwickelt, da war Robustheit einschließlich EMV gefragt. Der hat verschiedene Labore zwecks Zertifizierung besucht.

Ich wollte nur die Bemerkung erklärt haben, denn nur wenn Du weißt, wo die Probleme stecken können, kannst Du was dagegen unternehmen.

In Tarnkleidung bin ich LKW mit Druckluftbremsanlage gefahren, die gelben und roten Anschlüsse hatte ich also schon mal in der Hand, auch wenn es lange her ist.

Ja klar, ich wollte eine Analogie zu den Hallsensoren aufbauen.

Programm in #12 hast Du ja, jetzt alles zusammenlöten und dann mal zum TÜV, was die dazu meinen. Entweder finden die das toll oder auch nicht, wird sich zeigen.