Forum: Fahrzeugelektronik ESP32 fahrrad blinker mit warnblinker


von Noob (noobcontroller)


Lesenswert?

Guten Tag zusammen ich habe ein esp32 und will eine steuerung damit 
machen für ein blinker mit 3 taster und led´s
Es soll mit einer 12v leitung versehen werden.
Habe nur gelesen das man dies mit mosfet lösen kann.
Folgenden code habe ich:
1
// Verbesserter Fahrradblinker für ESP32
2
// - 3 Taster (INPUT_PULLUP, Taster nach GND)
3
// - 2 LED-Ausgänge (linker/rechter Blinker)
4
// - pro-Taster Debounce
5
// - Serielle Debug-Ausgabe
6
7
// Pin-Konfiguration (anpassbar)
8
const int buttonLeftPin  = 14;
9
const int buttonRightPin = 27;
10
const int buttonWarnPin  = 26;
11
12
const int ledLeftPin  = 12;
13
const int ledRightPin = 13;
14
15
// Blink-Einstellung (ms)
16
unsigned long blinkInterval = 400UL;
17
18
// --- interne Variablen für Blinken ---
19
unsigned long lastBlinkTime = 0;
20
bool blinkState = false;
21
22
// --- Zustände ---
23
enum BlinkerState { OFF, LEFT, RIGHT, WARN };
24
BlinkerState currentState = OFF;
25
26
// --- Debounce pro Taster ---
27
struct Button {
28
  int pin;
29
  bool stableState;       // aktuell entprellter Zustand (true = gedrückt)
30
  bool lastRead;          // letzte gelesene Roh-Bit (LOW/HIGH als bool)
31
  unsigned long lastChangeMillis;
32
  unsigned long debounceMillis;
33
};
34
35
Button btnLeft  = { buttonLeftPin,  false, HIGH, 0UL, 50UL };
36
Button btnRight = { buttonRightPin, false, HIGH, 0UL, 50UL };
37
Button btnWarn  = { buttonWarnPin,  false, HIGH, 0UL, 50UL };
38
39
// Hilfsfunktion: liest einen Button und aktualisiert Debounce
40
bool readButton(Button &b) {
41
  bool raw = digitalRead(b.pin);      // HIGH wenn nicht gedrückt (INPUT_PULLUP)
42
  unsigned long now = millis();
43
44
  if (raw != b.lastRead) {
45
    // Signal hat sich geändert -> setze Zeitstempel
46
    b.lastChangeMillis = now;
47
    b.lastRead = raw;
48
  } else {
49
    // Wenn das Signal stabil ist länger als debounceMillis, übernehme es
50
    if (now - b.lastChangeMillis >= b.debounceMillis) {
51
      bool pressed = (raw == LOW); // LOW = gedrückt bei INPUT_PULLUP
52
      if (pressed != b.stableState) {
53
        b.stableState = pressed;
54
        // Rückgabe true bedeutet: Zustand hat sich geändert (Edge)
55
        return true;
56
      }
57
    }
58
  }
59
  return false;
60
}
61
62
// Aufruf bei erkannten Tasterereignissen (Edge)
63
void handlePress(BlinkerState pressed) {
64
  // Wenn gleicher Modus -> aus, sonst neuen Modus
65
  if (currentState == pressed) currentState = OFF;
66
  else currentState = pressed;
67
68
  // Reset Blink-Phase damit beim Umschalten sofort sichtbar
69
  blinkState = false;
70
  lastBlinkTime = millis();
71
72
  Serial.print("Mode -> ");
73
  switch(currentState) {
74
    case OFF:   Serial.println("OFF"); break;
75
    case LEFT:  Serial.println("LEFT"); break;
76
    case RIGHT: Serial.println("RIGHT"); break;
77
    case WARN:  Serial.println("WARN"); break;
78
  }
79
}
80
81
void setup() {
82
  Serial.begin(115200);
83
  delay(10);
84
  Serial.println("ESP32 Fahrradblinker - Start");
85
86
  // Buttons
87
  pinMode(btnLeft.pin, INPUT_PULLUP);
88
  pinMode(btnRight.pin, INPUT_PULLUP);
89
  pinMode(btnWarn.pin, INPUT_PULLUP);
90
91
  // LEDs
92
  pinMode(ledLeftPin, OUTPUT);
93
  pinMode(ledRightPin, OUTPUT);
94
  digitalWrite(ledLeftPin, LOW);
95
  digitalWrite(ledRightPin, LOW);
96
97
  // Initial lesen
98
  btnLeft.lastRead  = digitalRead(btnLeft.pin);
99
  btnRight.lastRead = digitalRead(btnRight.pin);
100
  btnWarn.lastRead  = digitalRead(btnWarn.pin);
101
  btnLeft.stableState  = (btnLeft.lastRead  == LOW);
102
  btnRight.stableState = (btnRight.lastRead == LOW);
103
  btnWarn.stableState  = (btnWarn.lastRead  == LOW);
104
}
105
106
void loop() {
107
  unsigned long now = millis();
108
109
  // --- Buttons prüfen (Debounce) ---
110
  // readButton liefert true wenn sich der entprellte Zustand geändert hat
111
  if (readButton(btnLeft) && btnLeft.stableState) {
112
    // btnLeft.stableState == true bedeutet: gerade gedrückt geworden
113
    handlePress(LEFT);
114
  }
115
  if (readButton(btnRight) && btnRight.stableState) {
116
    handlePress(RIGHT);
117
  }
118
  if (readButton(btnWarn) && btnWarn.stableState) {
119
    handlePress(WARN);
120
  }
121
122
  // --- Blink-Logik ---
123
  if (currentState != OFF) {
124
    if (now - lastBlinkTime >= blinkInterval) {
125
      blinkState = !blinkState;
126
      lastBlinkTime = now;
127
    }
128
  } else {
129
    // Wenn OFF, LEDs aus
130
    blinkState = false;
131
  }
132
133
  // --- LEDs setzen gemäß Modus ---
134
  switch (currentState) {
135
    case LEFT:
136
      digitalWrite(ledLeftPin,  blinkState ? HIGH : LOW);
137
      digitalWrite(ledRightPin, LOW);
138
      break;
139
    case RIGHT:
140
      digitalWrite(ledLeftPin,  LOW);
141
      digitalWrite(ledRightPin, blinkState ? HIGH : LOW);
142
      break;
143
    case WARN:
144
      digitalWrite(ledLeftPin,  blinkState ? HIGH : LOW);
145
      digitalWrite(ledRightPin, blinkState ? HIGH : LOW);
146
      break;
147
    case OFF:
148
    default:
149
      digitalWrite(ledLeftPin,  LOW);
150
      digitalWrite(ledRightPin, LOW);
151
      break;
152
  }
153
154
  // Optional: weniger Serielle Ausgabe (nur zum Debug, kann auskommentiert werden)
155
  // Serial.print("BlinkState: ");
156
  // Serial.println(blinkState);
157
}

(Edit: code tags eingefügt – Mod.)

: Bearbeitet durch Moderator
von Stephan S. (uxdx)


Lesenswert?

und ... ???

von Ralf X. (ralf0815)


Lesenswert?

Stephan S. schrieb:
> und ... ???

Vielleicht wars das schon? 'gg

von Michael W. (miks)


Angehängte Dateien:

Lesenswert?

Und noch was (siehe Bild)!

von Noob (noobcontroller)


Lesenswert?

Ne das ar alles es hat nach längerem weiter googlen etwas gefunden was 
ich umschreiben musste. jetzt soll es aber als 12V schalltung gemacht 
werden und da finde ich bis heute nichts im internet die blinker müssen 
als 12v laufen da derr strom vom fahrrad 12v ist und die led´s auch. 
vielleicht kann jemand mirr da helfen. Danke im vorraus.

von Noob (noobcontroller)


Lesenswert?

Kann leider es nicht mehr ändern habe versucht den code als datei zu 
machen

: Bearbeitet durch User
von Harald K. (kirnbichler)


Lesenswert?

Ist ein ESP32 mit der Aufgabe nicht ziemlich überfordert? Das sollte man 
mit einem Raspberry Pi machen, der hat den Vorteil, daß man 
Softwareupdates einfach durch Auswechseln der SD-Karte machen kann.

Ein Raspberry Pi 4 dürfte sich da ganz gut eignen.

von Alexander (alecxs)


Lesenswert?

Harald K. schrieb:
> Ist ein ESP32 mit der Aufgabe nicht ziemlich überfordert?

Ironie bitte als solche kennzeichnen

von Harald K. (kirnbichler)


Lesenswert?

Warum?

von Bauform B. (bauformb)


Lesenswert?

Im Ernst: Ein RPi Zero ist kaum größer als ein ESP, hat auch nur 32 Bit 
und ähnlich schlechte Datenblätter und braucht eher weniger Strom...

von Rainer W. (rawi)


Angehängte Dateien:

Lesenswert?

Noob schrieb:
> ...

Wer soll das lesen?

Wichtige Regeln - erst lesen, dann posten!

Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang.

Formatierung mit Code-Tags

von Thomas V. (tomv)


Lesenswert?

Früher(tm) hat man sowas mit einem Multivibrator und ein paar Lämpchen 
gelöst. Heute brauchts einen Microcontroller samt Software.

Schöne, neue Welt...

von Noob (noobcontroller)


Lesenswert?

Harald K. schrieb:
> Ist ein ESP32 mit der Aufgabe nicht ziemlich überfordert? Das sollte man
> mit einem Raspberry Pi machen, der hat den Vorteil, daß man
> Softwareupdates einfach durch Auswechseln der SD-Karte machen kann.
>
> Ein Raspberry Pi 4 dürfte sich da ganz gut eignen.

ein Raspberry pi ist aber zu groß oder gibt es den auch in klein?

von Noob (noobcontroller)


Lesenswert?

Rainer W. schrieb:
> Noob schrieb:
>> ...
>
> Wer soll das lesen?
>
> Wichtige Regeln - erst lesen, dann posten!
>
> Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang.
>
> Formatierung mit Code-Tags

Leider konnte ich es nicht mehr als datei anhängen sorry.

von Manfred P. (pruckelfred)


Lesenswert?

Rainer W. schrieb:
> Wer soll das lesen?

Jemand mit einem richtigen Bildschirm anstatt DummPhone kann das.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Manfred P. schrieb:
> Rainer W. schrieb:
>> Wer soll das lesen?
>
> Jemand mit einem richtigen Bildschirm anstatt DummPhone kann das.

Aber auch erst, seit ein Mod-Kollege die fehlenden Code-Tags eingefügt
hat.


Harald K. schrieb:
> Ist ein ESP32 mit der Aufgabe nicht ziemlich überfordert? Das sollte man
> mit einem Raspberry Pi machen, der hat den Vorteil, daß man
> Softwareupdates einfach durch Auswechseln der SD-Karte machen kann.
>
> Ein Raspberry Pi 4 dürfte sich da ganz gut eignen.

Aber nur mit massiver Übertaktung und Wasserkühlung, damit die
erforderliche Rechenleistung dauerhaft zur Verfügung steht.

von Alexander (alecxs)


Lesenswert?

Harald K. schrieb:
> Warum?

Weil wir das sonst morgen lesen auf ChatGPT.

von Ben B. (Firma: Funkenflug Industries) (stromkraft)


Angehängte Dateien:

Lesenswert?

>>>> Ist ein ESP32 mit der Aufgabe nicht ziemlich überfordert?
>>> Ironie bitte als solche kennzeichnen
>> Warum?
> Weil wir das sonst morgen lesen auf ChatGPT.
Richtig so. Dann lernt der Mensch am schnellsten, daß man diesen Dreck 
am besten nicht benutzt.

Der Beweis dafür, daß KI kein Wissen erhalten kann, ist bereits 
erbracht. Sobald sich eine KI mit den Ausgaben einer anderen KI 
trainiert, geht's steil bergab. Das ist halt der Unterschied zwischen 
selbständig denken und Fehler korrigieren und wild herumraten und Fehler 
ignorieren.

So, und zu dem Problem des TE, gerade erst vor ein paar Tagen mit den 
RGBW-LEDs einer Aquariumlampe gemacht, die dadurch zu einer WLAN-fähigen 
Zimmerbeleuchtung wurde. Der ESP32 steuert über 220 oder 330 Ohm einen 
logic level MOSFET (frag mich bitte nicht mehr welchen genau ich 
genommen habe, hat ein altes PC-Mainboard gespendet, irgend ein 2,5V 
logic level FET, siehe Vgs(th) im Datenblatt) und dieser MOSFET schaltet 
dann die LEDs. Schau Dir an wie ein MOSFET als Schalter eingesetzt 
werden kann, die Schaltung ist so einfach, daß ich dafür keinen 
Schaltplan zeichnen kann. Ich habe aber einen bei Google gefunden, 
Rechnung kommt!

Bei Bastel-Entwürfen im Schaltplan noch einen 10 Kiloohm-Widerstand am 
FET zwischen Gate und Source ergänzen, dann bleibt der FET auch 
geschlossen wenn der Controller ihn nicht aktiv sperrt (z.B. solange er 
noch unprogrammiert ist). Das kann sonst zu Überraschungen führen. Denke 
beim ESP32 daran, daß nicht alle GPIOs als Ausgang verwendet werden 
können und manche GPIOs beim Booten Sonderfunktionen haben.

Ach und bitte nicht vergessen: Das ESP32-Board darf nur 5V, für 12V->5V 
google 7805 und vergiss die Erwärmung durch grob geschätzt 2..3W 
Verlustleistung nicht, der ESP muss die gleiche Masse haben wie der Rest 
der Schaltung (Source am FET).

> Aber nur mit massiver Übertaktung und Wasserkühlung, damit die
> erforderliche Rechenleistung dauerhaft zur Verfügung steht.
Btw... auch wenn Du gefühlt Recht hast und Freitag war, aber glaubst Du 
wirklich, daß sowas eine für einen Moderator angebrachte Antwort an den 
TE ist? Dieses Messen mit doppeltem Maß entwickelt sich in diesem Forum 
echt zu einem invasiven Krebsgeschwür. Wenn man sowas als normaler 
Benutzer schreibt, wird von euch ach so tollen Moderatoren sonst immer 
der halbe Thread gelöscht.

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Ging doch gar nicht an den TE. Außerdem so überzeichnet dass selbst 
fremdsprachige Nutzer es verstehen.

von Mario M. (thelonging)


Lesenswert?

Thomas V. schrieb:
> Früher(tm) hat man sowas mit einem Multivibrator und ein paar Lämpchen
> gelöst.

Früher hatte man nur Wurstblinker. 😂

von Nemopuk (nemopuk)


Lesenswert?

Was willst du mit einem Warnblinker am Fahrrad? Wenn es nicht mehr 
fährt, schafft man es umgehend von der Straße runter!

Oder willst du mit Warnblinklicht den Berufsverkehr blockieren, bis die 
Polizei einen Bericht geschrieben hat und der Abschleppdienst dein Rad 
zum Betriebshof schleift?

: Bearbeitet durch User
von Alexander (alecxs)


Lesenswert?

Warnblinklicht darf man einschalten bei besonders langsamer 
Geschwindigkeit auf schnell befahrenen Straßen oder am Stauende.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Angehängte Dateien:

Lesenswert?

Für massebezogene Lampen, was beim Fahrrad Standard ist, kann man die 
o.a. Schaltung verwenden.

: Bearbeitet durch User
von Noob (noobcontroller)


Lesenswert?

Nemopuk schrieb:
> Was willst du mit einem Warnblinker am Fahrrad? Wenn es nicht mehr
> fährt, schafft man es umgehend von der Straße runter!
>
> Oder willst du mit Warnblinklicht den Berufsverkehr blockieren, bis die
> Polizei einen Bericht geschrieben hat und der Abschleppdienst dein Rad
> zum Betriebshof schleift?

Nein wenn ich mein lastenrad entlade will ich warnblinker anmachen.

von Noob (noobcontroller)


Lesenswert?

Matthias S. schrieb:
> Für massebezogene Lampen, was beim Fahrrad Standard ist, kann man die
> o.a. Schaltung verwenden.

Das ist dann für den jeweilingen blinker oder ist das für beide 
gleichzeitig?

von Björn W. (bwieck)


Lesenswert?

Ganz nebenbei ist eine fest installierte Blinkanlage am Fahrrad nicht 
zulässig. Wenn die Blinker am Fahrer selbst montiert sind ist es OK.

Typischer Regularienquatsch in DE.

von Ralf X. (ralf0815)


Lesenswert?

Björn W. schrieb:
> Ganz nebenbei ist eine fest installierte Blinkanlage am Fahrrad nicht
> zulässig. Wenn die Blinker am Fahrer selbst montiert sind ist es OK.
>
> Typischer Regularienquatsch in DE.

Typischer Fall von Uninformiertheit.

https://www.radfahren.de/test-teile/blinker-fahrrad-produkte-regeln-stvzo/

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Noob schrieb:
> Das ist dann für den jeweilingen blinker oder ist das für beide
> gleichzeitig?

Für jeden Lampenkreis, den du separat ansteuern willst. Das kann vorne 
rechts und hinten rechts zusammen sein, aber eben nicht für links und 
rechts gemeinsam.

von Manfred P. (pruckelfred)


Lesenswert?

Matthias S. schrieb:
> Noob schrieb:
>> Das ist dann für den jeweilingen blinker oder ist das für beide
>> gleichzeitig?
> Für jeden Lampenkreis, den du separat ansteuern willst. Das kann vorne
> rechts und hinten rechts zusammen sein, aber eben nicht für links und
> rechts gemeinsam.

Hier ist doch alles verloren, es fehlen jegliche Grundlagen. Wer für 
einen Blinker einen ESP32 einsetzen will, bettelt eher um Probleme als 
um eine Lösung, siehe:

Thomas V. schrieb:
> Früher hat man sowas mit einem Multivibrator und ein paar Lämpchen
> gelöst. Heute braucht's einen Microcontroller samt Software.
>
> Schöne, neue Welt...

Noob schrieb:
> Nein wenn ich mein lastenrad entlade will ich warnblinker anmachen.

Lastenrad mit großem L und Warnblinker mit großem W - wieder zu faul, 
anständig zu schreiben.

Es gibt im Motorradzubehör Blinkgeber (-relais) ohne Lampenüberwachung. 
Kaufe ein solches und stelle einen Gel-Akku ins Rad. Das mit einem ESP32 
oder anderem µC basteln zu wollen, ist an der Realität vorbei.

von Harald K. (kirnbichler)


Lesenswert?

Noob schrieb:
> Nein wenn ich mein lastenrad entlade will ich warnblinker anmachen.

Genau dann darfst Du bei keinem Fahrzeug Warnblinker einschalten.
Daß es immer noch irgendwelche Idioten machen, heißt nicht, daß das 
legal wäre.

Du kannst natürlich einen Helm mit gelber Rundumblinkleuchte aufsetzen 
und Möööp-Möööp rufen.

von Björn W. (bwieck)


Lesenswert?

Ralf X. schrieb:
> Typischer Fall von Uninformiertheit.

Ja, Stimmt. Ich informier mich üblicherweise nicht jeden Monat über 
Änderungen in der STVZO. Aber Danke für deinen Einwand.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Manfred P. schrieb:
> Wer für
> einen Blinker einen ESP32 einsetzen will, bettelt eher um Probleme als
> um eine Lösung

Das hat aber nichts mit meiner Endstufe zu tun. Die kann mit allem 
möglichen angesteuert werden, auch mit TTL oder CMOS. Ob das alles 
sinnvoll ist, was der TE anfangen will, ist nicht meine Sache und da 
halte ich mich raus.

von Alexander (alecxs)


Lesenswert?

Manfred P. schrieb:
> Es gibt im Motorradzubehör Blinkgeber (-relais) ohne Lampenüberwachung.
> Kaufe ein solches und stelle einen Gel-Akku ins Rad. Das mit einem ESP32
> oder anderem µC basteln zu wollen, ist an der Realität vorbei.

Ohne Pinbelegung und Schaltplan zum Relais geht es mit einem ESP32 wohl 
schneller.

https://www.amazon.de/Sarini-Blinker-Warnblinkrelais-Kfz-Relais-Blinker-Warnblinkrelais-Einheit-Ersatzteil-Nr/dp/B0DPKQ58J5

von Roland F. (rhf)


Lesenswert?

Hallo,
Alexander schrieb:
> Ohne Pinbelegung und Schaltplan zum Relais geht es mit einem ESP32 wohl
> schneller.

Die Anschlussbelegung solcher Relais sind genormt.

rhf

von Alexander (alecxs)


Lesenswert?

Dann sollte es ja nicht schwer sein das hier bereitzustellen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.