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.
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.
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.
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.
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
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
Geht nicht!
Unmöglich!
Hätte ich natürlich auch so gemacht!
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.
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.