Zeitzünder für Feuerwerk

Hi
ich baue einen Zeitzünder für Feuerwerk mit einem Arduino UNO.
Man kann bis jetzt die Zeit in 5sek Schritten verstellen und den Countdown starten.
Allerdings Funktioniert der Relais nicht mit dem ich den Strom anschalten möchte, der dann das Feuerwerk zündet.

int kstart=5     ;   //Knopf zum Starten
int kstop=2      ;   //Knopf zum Restarten
int kplus=8      ;   //Knopf +
int kminus=7     ;   //Knopf -
int ledr=3       ;   //Led Rot
int ledg=4       ;   //Led Grün
int zuendung=6    ;   //Zündung
int an=0;
int z=0;
int aus=0;
int bis=5;
int o=1;
void setup() {
 pinMode (kstart, INPUT_PULLUP);
 pinMode (kstop, OUTPUT);
 pinMode (kplus, INPUT_PULLUP);
 pinMode (kminus, INPUT_PULLUP);
 pinMode (ledr, OUTPUT);
 pinMode(zuendung,OUTPUT);
 pinMode(zuendung,LOW);
 digitalWrite(ledg, HIGH);          //grün an
}

void loop() {
 if(digitalRead(kplus)==HIGH)       //wenn + gedrückt wird
 {
   bis=bis+5;
   digitalWrite(ledg,LOW);
   delay(250);
   digitalWrite(ledg,HIGH);   
 }
 if((digitalRead(kminus)==HIGH)&&(bis>5)) //wenn - gedrückt wird
 {
   bis=bis-5;
   digitalWrite(ledg,LOW);
   delay(250);
   digitalWrite(ledg,HIGH);
 }
 if (digitalRead(kstart) == LOW)   //wenn der Schalter gedrückt wird 
 {
   an=an+1;
 }
 while ((an>0)&&(z<bis))
 { 
   digitalWrite(ledr,HIGH);        //rot an
   z++;
   delay(1000);
   digitalWrite(ledr,LOW);         //rot aus
   delay(1000); 
 }

 if (z>=bis)
 { 
   digitalWrite(ledr,HIGH);
   digitalWrite(ledg,LOW);
   digitalWrite(zuendung,HIGH);   
   delay(5000);                
   digitalWrite(zuendung,LOW);
 }

}

Wäre cool wenn mir jemand helfen kann.

(das ist das erste was ich mit einem Arduino mache also sorry falls ich da umständliche Dinge eingebaut habe)

Was für ein Relais verwendest du ?
Bitte Hyperlink posten.
Und wie hast du das Relais angeschlossen ?
Bitte Schaltung posten.

Und setze deinen Sketch bitte in Code-Tags, damit ist dieser für alle besser lesbar.
Das kannst du noch nachträglich machen. Verwende dazu die Schaltfläche </> oben links im Editor-Fenster.

Relais: https://www.amazon.de/SRD-05VDC-SL-C-Kanal-Low-Level-Trigger-Relais-Modul-DC-10A/dp/B01EZZL14Y/ref=sr_1_fkmr1_1?ie=UTF8&qid=1507488217&sr=8-1-fkmr1&keywords=relais+songle+srd-05vdc

ich weiß in welchem programm ich die schaltung "machen" kann

shlet: Relais: https://www.amazon.de/SRD-05VDC-SL-C-Kanal-Low-Level-Trigger-Relais-Modul-DC-10A/dp/B01EZZL14Y/ref=sr_1_fkmr1_1?ie=UTF8&qid=1507488217&sr=8-1-fkmr1&keywords=relais+songle+srd-05vdc

ich weiß in welchem programm ich die schaltung "machen" kann

Das ist leider kein Hyperlink, den kann ich so im Tablet nicht öffnen.

Schaltbild reicht auch als Bleistiftzeichnung.

Edit: Der Titel des Relais sagt "LOW getriggert". Du steuerst das Relais mit HIGH an, das funktioniert nicht.

ich hab beides probiert also LOW und HIGH https://www.amazon.de/SRD-05VDC-SL-C-Kanal-Low-Level-Trigger-Relais-Modul-DC-10A/dp/B01EZZL14Y/ref=sr_1_fkmr1_1?ie=UTF8&qid=1507488217&sr=8-1-fkmr1&keywords=relais+songle+srd-05vdc

Guten Abend,

am TV lief nix, da dachte ich mir ich kann ja mal deinen Sketch aufhübschen. :slight_smile:

Du hast ja einen verstellbaren Countdown vorgesehen, nur wie möchtest du den Wert
ohne LCD oder 7-Segmentanzeigen darstellen?

Möchtest du nur eine Zündung nach einer bestimmten Zeit auslösen?

Wenn erwünscht setze ich mich morgen nochmal an den Sketch, für heute ist erst mal “Feierabend”.

//NICHT VOLLSTAENDIGER CODE!!!
//Feuerwerk ist kein SPIELZEUG !!!
//zur Visualisierung der Countdownzeit fehlt ein LCD
//Eingaenge
const uint8_t s_save = 2; //Sicherheitsschalter
const uint8_t s_start = 3; //Starttaster
const uint8_t s_stopp = 4; //Stopptaster
const uint8_t s_plus = 5; //countdown +
const uint8_t s_minus = 6; //countdown -
const uint8_t s_kreis = 7; //zuendungskreis auswaehlen
//Ausgaenge
const uint8_t statusled = 8;
const uint8_t scharfled = 9;
const uint8_t zuendung[2]={10,11};
const uint8_t kreisled[2]={12,13};
/*----------------Variablen----------------*/
bool save = 0;
bool start = 0;
bool stopp = 0;
bool plus = 0;
bool minus = 0;
bool kreis = 0;
uint16_t zeit1 = 10000; //10s bis Kreis 1 zuendet
uint16_t zeit2 = 10000; //10s bis Kreis 2 zuendet
const uint16_t m_1s = 1000; //1s
unsigned long j_ms = 0; //Zeitpunkt "jetzt"
unsigned long l_ms = 0; //Zeitpunkt "zuletzt"

void setup()
{
    //pulldown Widerstaende verwenden 10kOhm
    pinMode(s_save, INPUT);
    pinMode(s_start, INPUT);
    pinMode(s_stopp, INPUT);
    pinMode(s_plus, INPUT);
    pinMode(statusled, OUTPUT);
    pinMode(scharfled, OUTPUT);
    for (uint8_t i; i < 2; i++) //zuendung als OUTPUT & LOW setzen
    {
    pinMode(zuendung[i], OUTPUT);
    digitalWrite(zuendung[i], LOW);
    }
    for (uint8_t x; x < 2; x++) //kreisled als OUTPUT festlegen
    {
    pinMode(kreisled[x], OUTPUT);
    }
    digitalWrite(statusled, HIGH);
}
void loop()
{
    //Eingaenge einlesen (erspart Platz)
    save = digitalRead(s_save);
    start = digitalRead(s_start);
    stopp = digitalRead(s_stopp);
    plus = digitalRead(s_plus);
    minus = digitalRead(s_minus);
    kreis = digitalRead(s_kreis);

    if ( == 0)
    {
    
    }
    else
    {
        l_ms = millis();
    }

    j_ms = millis();
    if (j_ms - l_ms >= m_5s)
    {
      
    }
}

Ich hoffe das geht

shlet: Ich hoffe das geht

Fast..... Wo ist der Relaiskontakt ? Was machst du mit 3,3 Volt ? Was machst du mit dem Reset ?

Ich weiß nicht was ein Relaiskontakt ist, falls das die "gesteuerte" Seite ist, dann ist die nicht drauf, weil ich dachte, dass die unwichtig ist, da das einfach ein 18V Stromkreis mit einem Stück Stahlwolle sein wird.

Die 3,3V sind am VCC pin (ich kenn mich da nicht aus, hab also keine Ahnung ob das so richtig ist)

Der ist dafür da, dass man (weil ich ja kein Display habe) wenn man vergessen hat wie viele Sekunden man eingestellt hat das ganze zurücksetzen kann. Oder man den Countdown abbrechen kann.

shlet: Ich weiß nicht was ein Relaiskontakt ist, falls das die "gesteuerte" Seite ist, dann ist die nicht drauf, weil ich dachte, dass die unwichtig ist, da das einfach ein 18V Stromkreis mit einem Stück Stahlwolle sein wird.

Die 3,3V sind am VCC pin (ich kenn mich da nicht aus, hab also keine Ahnung ob das so richtig ist)

Der ist dafür da, dass man (weil ich ja kein Display habe) wenn man vergessen hat wie viele Sekunden man eingestellt hat das ganze zurücksetzen kann. Oder man den Countdown abbrechen kann.

Oh, dann solltest du aber Grundlagen lernen. Ein Relaiskontakt ist der "Schaltkontakt", der beim Anlegen einer Spannung am Relais schließt oder öffnet.

Das Relais braucht 5 Volt, die 3,3 Volt sind zu wenig und der Strom ist evtl. zu knapp.

Das mit Reset ist also eine Notlösung.

Max_Beginner:
Guten Abend,

am TV lief nix, da dachte ich mir ich kann ja mal deinen Sketch aufhübschen. :slight_smile:

Du hast ja einen verstellbaren Countdown vorgesehen, nur wie möchtest du den Wert
ohne LCD oder 7-Segmentanzeigen darstellen?

Möchtest du nur eine Zündung nach einer bestimmten Zeit auslösen?

Wenn erwünscht setze ich mich morgen nochmal an den Sketch, für heute ist erst mal “Feierabend”.

//NICHT VOLLSTAENDIGER CODE!!!

//Feuerwerk ist kein SPIELZEUG !!!
//zur Visualisierung der Countdownzeit fehlt ein LCD
//Eingaenge
const uint8_t s_save = 2; //Sicherheitsschalter
const uint8_t s_start = 3; //Starttaster
const uint8_t s_stopp = 4; //Stopptaster
const uint8_t s_plus = 5; //countdown +
const uint8_t s_minus = 6; //countdown -
const uint8_t s_kreis = 7; //zuendungskreis auswaehlen
//Ausgaenge
const uint8_t statusled = 8;
const uint8_t scharfled = 9;
const uint8_t zuendung[2]={10,11};
const uint8_t kreisled[2]={12,13};
/----------------Variablen----------------/
bool save = 0;
bool start = 0;
bool stopp = 0;
bool plus = 0;
bool minus = 0;
bool kreis = 0;
uint16_t zeit1 = 10000; //10s bis Kreis 1 zuendet
uint16_t zeit2 = 10000; //10s bis Kreis 2 zuendet
const uint16_t m_1s = 1000; //1s
unsigned long j_ms = 0; //Zeitpunkt “jetzt”
unsigned long l_ms = 0; //Zeitpunkt “zuletzt”

void setup()
{
   //pulldown Widerstaende verwenden 10kOhm
   pinMode(s_save, INPUT);
   pinMode(s_start, INPUT);
   pinMode(s_stopp, INPUT);
   pinMode(s_plus, INPUT);
   pinMode(statusled, OUTPUT);
   pinMode(scharfled, OUTPUT);
   for (uint8_t i; i < 2; i++) //zuendung als OUTPUT & LOW setzen
   {
   pinMode(zuendung[i], OUTPUT);
   digitalWrite(zuendung[i], LOW);
   }
   for (uint8_t x; x < 2; x++) //kreisled als OUTPUT festlegen
   {
   pinMode(kreisled, OUTPUT);
   }
   digitalWrite(statusled, HIGH);
}
void loop()
{
   //Eingaenge einlesen (erspart Platz)
   save = digitalRead(s_save);
   start = digitalRead(s_start);
   stopp = digitalRead(s_stopp);
   plus = digitalRead(s_plus);
   minus = digitalRead(s_minus);
   kreis = digitalRead(s_kreis);

if ( == 0)
   {
   
   }
   else
   {
       l_ms = millis();
   }

j_ms = millis();
   if (j_ms - l_ms >= m_5s)
   {
     
   }
}

Danke ich habe nur echt keine Ahnung was das alles bedeutet und wie es funktioniert.

Weil ich kein Display habe muss man mitzählen wie oft man gedrückt hat.

Eine Zündung reicht mir. Ich habe auch nur einen Relais.

HotSystems: Das Relais braucht 5 Volt, die 3,3 Volt sind zu wenig und der Strom ist evtl. zu knapp.

Das mit Reset ist also eine Notlösung.

Ich habe auch 5 Volt ausprobiert

Ja der Reset ist eine Notlösung, nachdem ich mit interrupt Probleme hatte.

(sorry Ich musste 5 min watrten)

shlet: Ich habe auch 5 Volt ausprobiert

Ja der Reset ist eine Notlösung, nachdem ich mit interrupt Probleme hatte.

Interrupt ist für dein Projekt quatsch.

Und das Relais muss an 5 Volt angeschlossen werden.

Du musst einen einfachen Sketch aufbauen und mit dem das Relais zum schalten bringen. Wenn das funktioniert, machst du mit deinem Teil weiter.

Aber einen entsprechenden Kenntnisnachweis/Prüfung/Schein/Zulassung hast du schon, um “Feuerwerk” automatisiert zu zünden?