nach sorgfältiger Durchsicht des Forums auf Stichworte wie Strobolicht, bin ich nur auf verwandte Fragen gestoßen bzw. Fehlerbeschreibungen. Keine dieser Beiträge war für mich geeignet.
Da auch fremdsprachige Artikel mir nicht weitergeholfen haben, eröffne ich einen neuen Beitrag.
Ich möchte unser Paintbal Schild mit Licht/Strobolicht ausstatten.
Die Idee ist es mit 1 Drucktaster normales Licht ein-/auszuschalten. Bzw. bei gleichem Taster gedrückt, dass Strobolicht zu aktivieren.
Ich verwende den Arduino UNO sowie noch zwei vorhandene LED Fahrradlampen die ich dazu verwenden möchte.
LED Fahrradlampen (keine Daten vorhanden, daher aus dem Internet nach bestem Wissen u. Gewissen recherchiert):
SMD Led weiß XLamp XP-E / 350mA bei (3,0 - 3,5V)
Parallel geschaltet? (so deute ich die Platine) da auch die Fahrradlampe mit 5V läuft kann nur so die Spannung zur Verfügung gestellt werden.
Gleichzeitig soll ein zweiter Sketch auf dem Arduino Musik wiedergeben (bereits implementiert).
GIbt es hier im Forum Hobby-Mentoren, die mich in meinem Projekt unterstützen wollen und für Fragen dies bzgl. offen sind?
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Zur Hardware - den Fahrradscheinwerfern - vielleicht nicht gerade was beitragbares, aber zum Codebasteln gehts immer.
Nö.
Das ist alles in einem Sketch - aber in unterschiedlichen Funktionen.
Geht, ist machbar und keine Hexerei, wenn klar ist wie die Lämpchen angesteuert werden sollen.
Dafür brauchts dann eine Leistungstufe - irgendwas mit Mosfet, dafür gibts hier aber auch Spezialisten, die da mnchmal sogar schon fertige Schaltungen haben....
Oder andersrum: Geht es dir drum, Tasterbetätigungen in Dauer- oder Blitz-Signale umzusetzen oder um die elektrischen Fragen der Ansteuerung von 350 mA LED mit kurzen Impulsen?
Die cree XLAMP XP-E in weiß verträgt übrigens bis 1000 mA, habe ich gelesen.
Die Platine, die aus der Led eine Fahrradbeleuchtung macht, ist vermutlich weniger geeignet, da dort die Aufgabenstellung entgegengesetzt ist: Trotz wechselnder Stromversorgung möglichst gleichmäßige Beleuchtung.
Auch übliche Konstantstromquellen für Leistungs-LED sind eventuell nicht zur Ansteuerung von Stroboskop-Blitzen gedacht/optimiert.
Da sehe ich also auf der elektrischen Seite die größere Herausforderung als beim Arduino - Sketch
Das Fahrradboard, auf dem alles miteinander verknüpft war, kann man vergessen. Tatsächlich werde ich alles selber auf eine Platine bringen. Die Fahrradlampe hat out of the box schon mehrere Zustände: niedrige, mittlere, hohe Leuchtkraft, SOS, blinken.
Zum testen mach einen Taster zwischen PIN 2 und GND.
Auf dem Board ist eine LED, die je nach Tastendruck ihr Verhalten ändert.
Der lange Tastendruck ist auf 600ms gesetzt. Alsobraucht es schon einen Moment.
Um das prellen des Tasters auszublenden habe ich 40ms gewählt, die reichen eigentlich.
Alles was Tastendrücke zwischen 41 und 599ms sind, wird als kurzer Tastendruck gewertet.
Ich hoffe es ausreichend kommentiert zu haben
// Forensketch - kurzer / langer Tastendruck mit Ereignisanzeige ohne lib
// https://forum.arduino.cc/t/strobolicht-fur-paintball-tactical-shield/1059828/7
// ungetestet - kompiliert fehler und warnungsfrei
enum licht {an, aus, strobo}; // mögliche Zustände
byte myLicht = licht::aus; // Startzustand setzen
constexpr byte tasterPin {2}; //
constexpr byte ledPin {LED_BUILTIN}; // OnBoard-LED
void setup()
{
Serial.begin(115200);
Serial.println(F("Start...."));
pinMode(tasterPin, INPUT_PULLUP); // Taster schaltet nach GND!
pinMode(ledPin, OUTPUT);
}
void loop()
{
getTaster(); // Taste abfragen
setLicht(); // Action setzen
}
void getTaster()
{
uint32_t zeit = millis(); // aktuelle Zeit
static bool lastRead = false; // Merker für letzten Zustand
static uint32_t startZeit = 0; // Merker für Auslösezeit
if (!digitalRead(tasterPin)) // Taster gedrückt?
{
if (lastRead == false) // und vorher nicht gedrückt?
{
startZeit = zeit; // Auslösezeit merken
lastRead = true; // sperre setzen
}
if (zeit - startZeit > 600) // Taste lange gedrückt?
{
myLicht = licht::strobo; // dann ...
}
}
else // Taste nicht gedrückt?
{
if (zeit - startZeit > 40) // Prellzeit abgelaufen?
{
lastRead = false; // merker löschen
if (myLicht == licht::strobo || // Licht war vorher nicht aus?
myLicht == licht::an)
{myLicht = licht::aus;} // dann maches aus
else // licht war vorher aus
{myLicht = licht::an;} // dann mach es an
}
}
}
void setLicht()
{
static byte lastLicht = 99; // Merker für letzten Zustand
static uint32_t lastTime = 0; // Merker für letzten Umschaltzeitpunkt
const uint32_t strobeTime = 50; // Blitzerzeit in ms
if (myLicht == licht::strobo && // Aktuell strobo ausgelöst?
lastLicht != licht::strobo) // und vorher nicht?
{
lastLicht = licht::strobo; // dann merken
lastTime = millis(); // Auslösezeit merken
digitalWrite(ledPin, HIGH); // immer mit Licht an starten
}
switch (myLicht) // Auswahl
{
case licht::an:
digitalWrite(ledPin, HIGH);
break;
case licht::aus:
digitalWrite(ledPin, LOW);
break;
case licht::strobo:
if (millis() - lastTime > strobeTime) // Zeit abgelaufen?
{
digitalWrite(ledPin, !digitalRead(ledPin)); // toggle PIN
lastTime = millis(); // neue Zeit merken
}
break;
}
}
Für die Verwendung auf Deiner Platine würde ich evtl. versuchen den Taster gegen einen Optokoppler zu tauschen - dann bist den ganzen Kram um Trennung der Potentiale los.
Ob der Akku den Arduino dann noch mitversorgen kann, dürfte fraglich sein....
Hier kommt ein einfaches Beispiel mit verketteten und ereignisgesteuerten Timern.
struct STROBOLIGHT
{
const byte LedPin;
const byte ButtonPin;
int stateOld;
unsigned long debounceStamp;
const unsigned long debounceDuration;
unsigned long flashTimerStamp;
const unsigned long flashTimerDuration;
int flashTimerOnOff;
unsigned long flashStamp;
const unsigned long flashDuration[2];
int flashOnOff;
};
STROBOLIGHT stroboLight
{
8, A0, false, // LedPin, ButtonPin schaltet GND und aktueller Button Status
0, 20, // Zeitwerte für Entprellen
0, 1000, false, // Zeitwerte für das Warten bevor das "Strobo" eingeschaltet wird
0, {100, 5}, false, // Zeitwerte für das "Strobo" 100=OFF und 5=ON, alle Zeiten in msec.
};
void setup()
{
pinMode(stroboLight.ButtonPin, INPUT_PULLUP);
pinMode(stroboLight.LedPin, OUTPUT);
}
void loop()
{
unsigned long currentTime = millis();
// Timer zum Entprellen der Taste
if (currentTime - stroboLight.debounceStamp >= stroboLight.debounceDuration)
{
stroboLight.debounceStamp = currentTime;
int stateNew = !digitalRead(stroboLight.ButtonPin);
// ist die Taste betätigt worden ?
if (stroboLight.stateOld != stateNew) {
// Sketch verriegeln
stroboLight.stateOld = stateNew;
// Taste gedrückt=?
if (stateNew)
{
// Schalte LED ein oder aus
digitalWrite(stroboLight.LedPin, !digitalRead(stroboLight.LedPin));
// Wenn die LED eingschaltet ist, dann starte den Wartetimer
if (digitalRead(stroboLight.LedPin))
{
stroboLight.flashTimerStamp = currentTime;
stroboLight.flashTimerOnOff = true;
}
}
else // Taste losgelassen
{
// die Timer anhalten
stroboLight.flashTimerOnOff = false;
stroboLight.flashOnOff = false;
}
}
}
// ist der Wartetimer abgelaufen?
if (currentTime - stroboLight.flashTimerStamp >= stroboLight.flashTimerDuration && stroboLight.flashTimerOnOff)
{
// Wartetimer anhalten
stroboLight.flashTimerOnOff = false;
// Strobetimer starten
stroboLight.flashStamp = currentTime;
stroboLight.flashOnOff = true;
}
// ist der StrobeTimer abgelaufen?
if (currentTime - stroboLight.flashStamp >= stroboLight.flashDuration[digitalRead(stroboLight.LedPin)] && stroboLight.flashOnOff)
{
// Lade die aktulle Zeit für das nächste Zeitereignis
stroboLight.flashStamp = currentTime;
// Wartetimer anhalten;
stroboLight.flashTimerOnOff = false;
// und LEDs blitzen lassen
digitalWrite(stroboLight.LedPin, !digitalRead(stroboLight.LedPin));
}
}
Da darf man sich keinesfalls drauf verlassen. So ein Dynamo ist eher eine Stromquelle, die bei zu hohem Lastwiderstand also auch höhere Spannungen induzieren kann.
Dass die klassischen Fahrrad-Glühbirnchen auf 6V ausgelegt sind, ist schon richtig, damit Elektronik überlebt, muss man was machen, ist meine leidvolle Erfahrung.
Aber hier gehts ja zum Glück gar nicht um Fahrrad-Beleuchtung
Vielen Dank für die bisherigen Rückmeldungen. Leider bin ich noch nicht dazu gekommen eure Tipps anzuwenden, da ich derzeit dabei bin die Gehäuse für das Audiosystem zu drucken.
Beim finalen System Check ist mir aufgefallen, dass es mit USB vom PC einwandfrei läuft.
Da das ganze ja tragbar sein soll, habe ich mir eine Powerbank bestellt, die meine Spannungsquelle darstellen soll. Sobald ich diese jedoch anschließe, wird nur ganz kurz Sound angespielt. Danach nicht mehr.
Woran kann das liegen?
Die Powerbank stellt nicht stur 500mA zur Verfügung sondern hat neben einer USB-PD auch eine Abschaltautomatik.
Auf dem USB wird ein Protokoll gefahren, bei dem die Anforderungen ausgehandelt werden. Der Arduino ist aber stumm.
Welche Erfahrung habt ihr denn bei den tragbaren Optionen?
In meinem Fall wird das Schild mit aufs SPielfeld genommen. Und soll das hier erwähnte Audiosystem und o.g. Strobosystem versorgen. Natürlich nicht alles im Dauereinsatz. Aber unabh. voneinander bzw. hin und wieder auch beides zusamnmen.
Da bin ich raus.
Überall, wo ich 5V brauche, hab ich ne Versorgung - manchmal reicht auch ein USB unter einer Bank im Bahnhof der DB...
Mein Tablet lädt damit auch...
Ansonsten: Es gibt LiPo Module, die auch aufgesteckt werden können. Folge dem zweiten Lektürehinweis...