Nebelmaschine für 2 Sekunden starten

Hallo zusammen,

ich bin ganz neu in der Arduino-Community und habe auch gestern zum ersten Mal einen Arduino in der Hand gehabt, ebenso bin ich im Programmieren nicht der fitteste.

Gerne würde ich nach Hilfe fragen für ein kleines Projekt:
Ich habe eine kleine Nebelmaschine mit einer Fernbedienung am Kabel. Gerne möchte ich die Nebelmaschine nun so mit dem Arduino Uno verbinden, dass folgendes passiert:

  1. Die Nebelmaschine steht in einem Schrank
  2. Wenn sich die Türe des Schranks öffnet, dann soll die Nebelmaschine für ca. 2-3sek starten und Nebel ausstossen
  3. Nach der o.g. Zeit soll die Nebelmaschine wieder im "stand-by" sein, d.h. es soll kein Neben mehr ausgestossen werden.

Also quasi immer wenn die Tür zu war und wieder geöffnet wird, dann soll Nebel gestossen werden.

Hat jemand eine Idee was man dazu alles braucht und wie man das dann programmiert?

Viele Grüsse u danke

Hat jemand eine Idee was man dazu alles braucht und wie man das dann programmiert?

Klar!

Arduino
Netzteil/Batterie
Türschalter
Relais(mit Ansteuerung)
Schrank
Nebelmaschine
1m zweiadriges Kabel

Und ein Forum, welches dir einen endlichen Automaten baut.

Dafür braucht man keinen µC. Taster -> RC-Glied zum Entprellen -> Monoflop -> Transistor -> Relais.

Andererseits sind solche einfachen Sachen auch ein guter Weg um was zu lernen

Hilfreich könnte das Beispiel Digital/StateChangeDetection sein, da Wenn sich die Türe des Schranks öffnet einer Änderung des Türschalterzustands (= Flanke des elektrischen Signals) entspricht. Also wenn Flanke dann Nebel an, zwei Sekunden warten, Nebel aus.

Da führen so viele Wege nach Rom... Du kannst es über eine Taster machen oder über einen Schalter oder über einen Lichtsensor was aber nur am Tage dann funktioniert oder über einen Ultraschallsensor oder über alle zusammen um die Sicherheit zu erhöhen oder einfach nur weil du es kannst. :relaxed: Am besten erstmal festlegen was genau du möchtest. Es gibt günstige Relais auf Platine schon fertig für den Arduino.
Türschalter findest du auch in der Bucht.

Das Programm für den Arduino ist ne Kleingkeit. Quasi wenn Schalter/ Taster/Ultraschallsensor = Ein oder aus dann steuer das Relais für die Zeit an ansonsten mach nix. Das sind 5 Zeilen mit Delay. Du kannst aber auch den etwas schwierigeren Weg nehmen und das ganze über einen Timer steuern. Da musst du dich mal in Blink without Delay durchforsten. Auch hier gibt es unendliche Autobahnen nach Rom.

Grüße

[pingel an] delay und millis() werden beide mittels Timer gesteuert [pingel aus] daher drei Möglichkeiten (möglicherweise mehr, die ich nicht kenne):

  1. delay
  2. millis() siehe Beispiel Blink without Delay
  3. Timer direkt ansteuern (kann ich nicht :frowning: , gibt es aber)

@asalklar: für Dich ist 1. oder 2. relevant.

Hallo zusammen,

danke für den ganzen Input. Das hilft mir so grob schon einmal weiter. Würde sich jemand bereit erklären mir das Ganze via PM irgendwie genauer zu erklären? Ich will nicht, dass es mir jemand vollständig macht, aber halt Hinweise gibt wie das Ding zu bauen ist, wie der Code, etc. Nicht plump vorgeben, sondern hilfestellungen. Das würde mir helfen

asalklar:
Würde sich jemand bereit erklären mir das Ganze via PM irgendwie genauer zu erklären?

Dafür bringt die IDE schon haufenweise Beispiele mit. Kommste sicher mit klar.
Und wie immer: schön das Beispiel "Blink without delay" pauken.

Aber eine LED mit Delay blinken lassen ist hier schon fast die halbe Miete.

Hast Du denn das von mir in #3 vorgeschlagene Beispiel probiert?

Hallo @agmue,

ich habe folgenden Code einmal geschrieben und in dem Seriellen Monitor sehe ich dann immer "0" wenn die Taste nicht gedrückt ist und eine "1", wenn sie gedrückt ist.

int Pin2=2;
int schalterzustand;

void setup()
{
Serial.begin(9600);
pinMode(Pin2,INPUT);
}
 
void loop()
{
  schalterzustand = digitalRead(Pin2);
  Serial.println(schalterzustand,DEC);  
}

wie kann ich das jetzt mit einer Lampe noch kombinieren? D.h. ich drücke den Schalter und dann leuchtet die Lampe für 3sek und dann geht sie wieder aus?

So, bin wieder einen Schritt weiter:

int InputPin=2;
int schalterzustand;
int LEDPin=13;

void setup()
{
Serial.begin(9600);
pinMode(InputPin,INPUT);
pinMode(LEDPin,OUTPUT);
}
 
void loop()
{
  schalterzustand = digitalRead(InputPin);
  Serial.println(schalterzustand,DEC);  
  if (schalterzustand == 1)
  {
    digitalWrite(LEDPin,HIGH);
    delay(3000);
  }
  if (schalterzustand == 0)
  {
    digitalWrite(LEDPin,LOW);
  }
  
}

LED Leuchtet, wenn ich auf den Schalter klicke und geht aus, wenn ich ihn nicht mehr klicke. Aber wie ich jetzt noch die Dauer reinbekomme, weiss ich leider nicht. Mit Delay geht es ja leider nicht :frowning:

void loop()
{
static byte lastState = 0;
byte state = digitalRead(Pin2);

if(state != lastState)
{
lastState = state;
if(state == HIGH) digitalWrite(PinRelais, HIGH);
else digitalWrite(PinRelais, LOW);
delay(2000);
} 
}

Den Code von sschultewolter verstehe ich leider nicht ganz. Liest er da denn überhaupt die 1 und 0 aus, die gesendet werden durch den knopf? Kann mir vll jemand da den code erklären und auch, wie ich das sehe dann wieder im Serial Monitor ob 1 oder 0?

Vor allem geht er nicht.

Bei mir funktioniert es so: Wenn die Tür geöffnet wird, wird der Auslöseschalter/kontakt geschlossen. Dann kommen 2 Sec. Nebel, dann nix mehr, bis die Tür zugemacht und wieder aufgemacht wird.

int InputPin = 2;
int schalterzustand;
int LEDPin = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(InputPin, INPUT);
  pinMode(LEDPin, OUTPUT);
}

void loop()
{
  static byte lastState = 0;
  byte state = digitalRead(InputPin);

  if (state != lastState)
  {
    lastState = state;
    Serial.println(state);
    if (state == HIGH) {
      digitalWrite(LEDPin, HIGH);
      delay(2000);
      digitalWrite(LEDPin, LOW);
    }
  }
}

Hallo,

arbeite dich bitte in den Basics ein!

Der Code macht nichts anderes, als der Basic Demo Sketch aus der IDE
StateChangeDetection

/*
  State change detection (edge detection)

 Often, you don't need to know the state of a digital input all the time,
 but you just need to know when the input changes from one state to another.
 For example, you want to know when a button goes from OFF to ON.  This is called
 state change detection, or edge detection.

 This example shows how to detect when a button or button changes from off to on
 and on to off.

 The circuit:
 * pushbutton attached to pin 2 from +5V
 * 10K resistor attached to pin 2 from ground
 * LED attached from pin 13 to ground (or use the built-in LED on
   most Arduino boards)

 created  27 Sep 2005
 modified 30 Aug 2011
 by Tom Igoe

This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/ButtonStateChange

 */

// this constant won't change:
const int  buttonPin = 2;    // the pin that the pushbutton is attached to
const int ledPin = 13;       // the pin that the LED is attached to

// Variables will change:
int buttonPushCounter = 0;   // counter for the number of button presses
int buttonState = 0;         // current state of the button
int lastButtonState = 0;     // previous state of the button

void setup() {
  // initialize the button pin as a input:
  pinMode(buttonPin, INPUT);
  // initialize the LED as an output:
  pinMode(ledPin, OUTPUT);
  // initialize serial communication:
  Serial.begin(9600);
}


void loop() {
  // read the pushbutton input pin:
  buttonState = digitalRead(buttonPin);

  // compare the buttonState to its previous state
  if (buttonState != lastButtonState) {
    // if the state has changed, increment the counter
    if (buttonState == HIGH) {
      // if the current state is HIGH then the button
      // wend from off to on:
      buttonPushCounter++;
      Serial.println("on");
      Serial.print("number of button pushes:  ");
      Serial.println(buttonPushCounter);
    }
    else {
      // if the current state is LOW then the button
      // wend from on to off:
      Serial.println("off");
    }
    // Delay a little bit to avoid bouncing
    delay(50);
  }
  // save the current state as the last state,
  //for next time through the loop
  lastButtonState = buttonState;


  // turns on the LED every four button pushes by
  // checking the modulo of the button push counter.
  // the modulo function gives you the remainder of
  // the division of two numbers:
  if (buttonPushCounter % 4 == 0) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

}

ElEspanol:
Vor allem geht er nicht.

Stimmt, das delay hätte wie von dir geschrieben in der if-Anweisung gemusst, in der nach Taster gedrückt gefragt wird.

Und somit hätten wir dem TE einen fertigen Code geliefert.

Spenden per PayPal bitte ans Arduino Projekt:
https://www.arduino.cc/en/Main/Donate :smiley: :smiley:

const int Schalter = 2; // Pulldown zu Masse ist in dem Fall ein Taster    
const int ledPin =  13;  //390 Ohm an Led   

int Schalterzustand = 0;         

void setup() {
  
  Serial.begin(9600);
  
  pinMode(ledPin, OUTPUT);      
  pinMode(Schalter, INPUT);    
}

void loop(){
  
  Schalterzustand = digitalRead(Schalter);

 
  if (Schalterzustand == HIGH) {     
     
    digitalWrite(ledPin, HIGH); 
   delay(2000);
  digitalWrite(ledPin,LOW); 
  } 
  else {
    
    digitalWrite(ledPin, LOW); 
  }
Serial.println(Schalterzustand);

delay(10);
}

Das wäre dein Code mit Delay gewesen... aber ist halt nicht wirklich schön und während er in den 2 Sekunden Delay ist kann er auch nix anderes machen. Für eine Anwendung Ok aber wenn du mehr machen willst dann kommst du damit nicht weiter.

Hallo zusammen,

vielen Dank für Eure Hilfe mit dem Code. Habe mir das ganze angeschaut...bin noch nicht ganz fertig mit dem verstehen aber ja: ich arbeite mich in die Basics ein. Habe aber wie gesagt erst seit gestern abend den Arduino und zuvor nichts mit Elelktrotechnik oder Programmierung zu tun gehabt :wink:

Wie würde man das Ganze jetzt mit der Nebelmaschine verbinden? hat da jemand auch einen Hinweis? Um welche es sich handelt hatte ich oben mal gepostet: Sie hat eine verkabelte Fernbedienung mit einem Knopf. Drückt und hält man diesen wird Nebel generiert.

Du müsstes mit den Arduino den Taster deiner Nebelanlage ansteuern. Taster ab und ein Relais dazwischen und anstatt der Led das Relais als Taster ansteuern. Alternativ geht es auch mit einem Transistor aber ich weiß nicht welche Spannung an dem Taster anliegt und die Relaisplatienen für Arduino gibts für 1,50 € in der Bucht.

Ander Vorschlag wäre du brückst den Taster und steuerst mit dem Relais die Spannunsversorgung an. Finger weg von 230V wenn man keine Ahnung hat. Unten ist der Code erklärt und die Ausgänge umbenannt.

const int taster = 2;                        // 100kOhm Pulldown zu Masse an Pin 2 
const int relais_ansteuerung =  13;             // Ansteuerung des Relais durch Pin 13
int tasterzustand = 0;                              // Zuweisung Aus = 0  

void setup() {
  
  Serial.begin(9600);                                // Serielle Übertragung mit 9600 baud starten USB
  
  pinMode(relais_ansteuerung, OUTPUT);     // Pin für Relais wird als Ausgang deklariert
  pinMode(taster, INPUT);                        // Pin für Taster wird als Eingang deklariert 
}

void loop(){
  
  tasterzustand = digitalRead(taster);    // lesen Tastereing.>Übertrag in die Variable Tasterzustand

 
  if (Tasterzustand == HIGH) {                // Wenn Taster an dann... 
     
    digitalWrite(relais_ansteuerung, HIGH); // Relaisansteuerung an...  
   delay(2000);                                     // Warte 2000ms 
  digitalWrite(relais_ansteuerung,LOW);                      // Relaisansteuerung aus.
  } 
  else {                                               // Ansonsten... 
    
    digitalWrite(relais_ansteuerung, LOW);                   // lass aus.
  }
Serial.println(tasterzustand);                // Tasterzustand USB schreiben 

delay(10);                                            // damit er sich ein wenig erholen kann
}