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:
Die Nebelmaschine steht in einem Schrank
Wenn sich die Türe des Schranks öffnet, dann soll die Nebelmaschine für ca. 2-3sek starten und Nebel ausstossen
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?
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. 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.
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
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?
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
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?
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);
}
}
}
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);
}
}
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.
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
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
}