LED Dimmen über Bewegungsmelder

Guten Abend, ich habe ein kleines Projekt vor, ich möchte zwei LED strips Dimmen.

Habe zwei Bewegungsmelder Module und ein zusätzlichen Schaltkontakt von einem Funkempfänger,
jetzt möchte ich wenn einer von den Kontakten geschlossen wird ( BWM oder Funkempfänger )
sollen die LED Strip in einer Zeit X langsam hochdimmen und wenn der Kontakt geöffnet wird in einer zeit X wieder runtergedimmt werden.

Habe jetzt schon mit dem Standard Programm von Adruino mit dem Fade Skatch und dem Button Skatch
experimentiert, aber komme irgend wie nicht zum ziel.

Vielleicht kann mir ja jemand ein Tip geben.

Dann stell doch Dein Sketch mal hier rein (Bitte in Code-Tags </> oben links).
Damit wir sehen können, wo es klemmt.

Gruß Tommy

Und auch Schaltplan sowie die verwendeten Leds

Guten Abend, habe mich die tage nochmal mit dem Code beschäftigt für mein Vorhaben.

Habe das ganze erstmal mit einem Taster realiesiert, wenn ich den Taster gedrückt halte dimmt die LED hoch,
aller dings wieder holt sie das in der zeit delay(30).

Wenn ich den Taster nur kurz betätige dann dimmt die LED in der Zeit delay 30 hoch und geht danach aus.

Mein ziel ist es wenn ich den Kontakt schließe ( Taster gedrückt ) halte soll die LED in der Zeit x hoch dimmen und so lange in dem hoch gedimmten zustand bleiben bis ich den Kontakt wieder öffne ( Taster los lasse ).

Beim Los lassen des Tasters soll die LED wieder runterdimmen bis sie ausgeht und auch aus bleiben.

Füge mal die ersten versuche des Cods bei.

const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  11;      // the number of the LED pin

// variables will change:
int buttonState = 0;         // variable for reading the pushbutton status

void setup() {
 // initialize the LED pin as an output:
 pinMode(ledPin, OUTPUT);
 // initialize the pushbutton pin as an input:
 pinMode(buttonPin, INPUT);
}

void loop() {
 // read the state of the pushbutton value:
 buttonState = digitalRead(buttonPin);

 // check if the pushbutton is pressed.
 // if it is, the buttonState is HIGH:
 if (buttonState == HIGH) {
   // turn LED on:
// fade in from min to max in increments of 5 points:
 for (int fadeValue = 0 ; fadeValue <= 255; fadeValue += 1) {
   // sets the value (range from 0 to 255):
   analogWrite(ledPin, fadeValue);
   // wait for 30 milliseconds to see the dimming effect
   delay(30);
 }
   
    } else {
   // turn LED off:
   digitalWrite(ledPin, LOW);
 }
}

Wenn Du die for-Schleife öffnest und diese Aufgabe loop überläßt, geht es in die richtige Richtung:

#define VERZOEGERUNG 30
const int buttonPin = 2;     // the number of the pushbutton pin
const int ledPin =  11;      // the number of the LED pin
uint32_t altMillis;
int fadeValue;

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  if (millis() - altMillis >= VERZOEGERUNG) {
    altMillis=millis();
    if (digitalRead(buttonPin)) {
      if (fadeValue < 255) {
        fadeValue++;
      }
    } else {
      if (fadeValue > 0) {
        fadeValue--;
      }
    }
    analogWrite(ledPin, fadeValue);
  }
}

Guten morgen danke schon mal für die Hilfe,
habe den sketch ausprobiert und bekomme folgfende Fehlermeldung.

exit status 1
stray '\302' in program

Du solltest auch beachten, dass die "gefühlte" Helligkeit nicht der linearen Erhöhung des PWM entspricht.

hi,

der sketch von agmue kompiliert ohne fehler. kann es sein, daß Du zuviele zeichen beim kopieren erwischt hast?

gruß stefan

Habe es jetzt noch paar mal probiert,
den sketch markiert und über Strg+C Kopiert und ins neue
sketch eingefügt Strg+V.

Bekomme aber immer wieder die selbe Fehlermeldung exit status 1
stray '\302' in program

Und das Programm markiert mir die Vorletzte } Klammer.

'\302' ist 'Â' , falls du ANSI voreingestellt hast. Solch ein Zeichen sollte man allerdings sehen können.

In agmues Beispiel ist (bzw. sollte) kein einziges nicht-ascii Zeichen enthalten (sein).

Mal copy/paste über einen anderen Editor als Zwischenschritt, oder sich die .ino Datei woanders ansehen?

Den Sketch aus #4 als Anhang.

Test_Forum.ino (556 Bytes)

Guten Morgen es hat geklappt, habe den code abgeschrieben, funktioniert wunderbar.

Eine frage noch die Verzögerungszeit kann man die mittels eines Potis veränder bar machen.

Jens040774:
Eine frage noch die Verzögerungszeit kann man die mittels eines Potis veränder bar machen.

Ja, dann muß VERZOEGERUNG zur Variablen werden. In der Reference analogRead() und möglicherweise map().

Hallo ich bin leider noch nicht so fit wie ihr mit dem Programme schreiben,
wie würde die Veränderung bei meinem Projekt den ausschauen.

Der Poti hängt am Analog eingang A0.

Schau Dir mal in der IDE Beispiele/03.Analog/AnalogInput an.

Habe es so weit hin bekommen, hier den Code.

#define VERZOEGERUNG sensorValue
const int buttonPin = 2;
const int ledPin = 11;
const int sensorPin = 0;
uint32_t altMillis;
int fadeValue;
int sensorValue = 0;

void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
if (millis() - altMillis >= VERZOEGERUNG){
altMillis=millis();
sensorValue = analogRead(sensorPin);
if (digitalRead(buttonPin)){
if (fadeValue < 255) {
fadeValue++;
}
}else{
if (fadeValue > 0) {
fadeValue--;
}
}
analogWrite(ledPin, fadeValue);
}
}

Ich muss doch noch einmal Stören.

ich möchte mit dem Adruino zwei LED Strips 24 Volt / 8 A ansteuern.

Welchen Mosfet bzw Triac eignen sich besonders für dimm Funktion ( PWM ) kann ich da für am besten nehmen.

Ich möchte auch zwischen dem ausgang vom Adruino und dem Mosfet mit einem Optokoppler Arbeiten da

mit ich eine Galvanische Trennung habe zwischen den 5 Volt und den 24 Volt.