KNX Eingangstür-Geräte


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Der blaue Komet
LEDs mit PWM direkt steuern


Arduino Mega 2560 stellt mit Pins 2 – 13 und 44 – 46 insgesamt 15 analoge Ausgänge zur Verfügung. An allen diesen Ausgängen lassen sich PWM-Signale generieren. Man kann an diese Ausgänge z.B. Leuchtdioden anschließen und ihre Helligkeit manipulieren. Hier ein kleines Beispiel mit 12 Leuchtdioden. Dank entsprechender Einstellung der Helligkeit der einzelnen Leuchtdioden, wird der Effekt eines sich bewegenden Kometen erreicht.
Eine passende Testschaltung ist schnell aufgebaut und könnte so aussehen:

Die Testschaltung

Testschaltung

Testschaltung

Das Programm

Das Programm verarbeitet laufend die Helligkeit von fünf Leuchtdioden. Bei jeder Positionsänderung wird die Helligkeit der ersten Diode von 0 auf Maximum gefahren. Die Helligkeit der darauffolgenden Leuchtdioden wird dagegen schrittweise bis auf einen vorbestimmten Wert runtergefahren. Die Soll-Helligkeit für einzelne Dioden kann empirisch ermittelt werden. Auf diese Weise entsteht ein Effekt eines sich mit einem Schatten bewegenden Objektes.
Das Programm (Sketch):

// ****************************************************************************
// Diodenspiele mit PWM: Der blaue Komet
// ****************************************************************************
int LED_1 = 2;
int LED_2 = 3;
int LED_3 = 4;
int LED_4 = 5;
int LED_5 = 6;
int LED_6 = 7;
int LED_7 = 8;
int LED_8 = 9;
int LED_9 = 10;
int LED_10 = 11;
int LED_11 = 12;
int LED_12 = 13;

int Richtung = 1;
int Led_Pos1=0;
int Led_Pos2=0;
int Led_Pos3=0;
int Led_Pos4=0;
int Led_Pos5=0;

int PWM1;
int PWM2;
int PWM3;
int PWM4;
int PWM5;

void setup() {
  pinMode (LED_1, OUTPUT);
  pinMode (LED_2, OUTPUT);
  pinMode (LED_3, OUTPUT);
  pinMode (LED_4, OUTPUT);
  pinMode (LED_5, OUTPUT);
  pinMode (LED_6, OUTPUT);
  pinMode (LED_7, OUTPUT);
  pinMode (LED_8, OUTPUT);
  pinMode (LED_9, OUTPUT);
  pinMode (LED_10, OUTPUT);
  pinMode (LED_11, OUTPUT);
  pinMode (LED_12, OUTPUT);
}

void LED (int Nr, int PWM) {
    switch (Nr) {
      case 1 : { analogWrite (LED_1, PWM); break; }
      case 2 : { analogWrite (LED_2, PWM); break; }
      case 3 : { analogWrite (LED_3, PWM); break; }    
      case 4 : { analogWrite (LED_4, PWM); break; }
      case 5 : { analogWrite (LED_5, PWM); break; }
      case 6 : { analogWrite (LED_6, PWM); break; }
      case 7 : { analogWrite (LED_7, PWM); break; }
      case 8 : { analogWrite (LED_8, PWM); break; }
      case 9 : { analogWrite (LED_9, PWM); break; }
      case 10 : { analogWrite (LED_10, PWM); break; }
      case 11 : { analogWrite (LED_11, PWM); break; }
      case 12 : { analogWrite (LED_12, PWM); break; }
    }
}
        
void loop () {
  Led_Pos1 = Led_Pos1 + Richtung;
  if (Led_Pos1 > 20) { Led_Pos1 = 20; Richtung = -1; }
  if (Led_Pos1 < 1) { Led_Pos1 = 1; Richtung = 1; }
  Led_Pos2 = Led_Pos1 - Richtung;
  if (Led_Pos2 > 20) { Led_Pos2 = 20; Richtung = -1; }
  if (Led_Pos2 < 1) { Led_Pos2 = 1; Richtung = 1; }  
  Led_Pos3 = Led_Pos1 - (2 * Richtung);
  if (Led_Pos3 > 20) { Led_Pos3 = 20; Richtung = -1; }
  if (Led_Pos3 < 1) { Led_Pos3 = 1; Richtung = 1; }  
  Led_Pos4 = Led_Pos1 - (3 * Richtung);
  if (Led_Pos4 > 20) { Led_Pos4 = 20; Richtung = -1; }
  if (Led_Pos4 < 1) { Led_Pos4 = 1; Richtung = 1; } 
  Led_Pos5 = Led_Pos1 - (4 * Richtung);
  if (Led_Pos5 > 20) { Led_Pos5 = 20; Richtung = -1; }
  if (Led_Pos5 < 1) { Led_Pos5 = 1; Richtung = 1; }   
 
  PWM1 = 0;
  PWM2 = 260;
  PWM3 = 60;
  PWM4 = 30;
  PWM5 = 10;
  
  for (int i=0; i<51; i++) {

    // Erste Diode ---------------------------------
    PWM1 = PWM1 + 5;
    if ((Led_Pos1 > 4) && (Led_Pos1 < 17)) {
      LED (Led_Pos1-4, PWM1);
    }
    // Zweite Diode --------------------------------
    if (PWM2 > 60) { PWM2 = PWM2 - 5; }
    if ((Led_Pos2 > 4) && (Led_Pos2 < 17)) {
      LED (Led_Pos2-4, PWM2);
    }
    // Dritte Diode --------------------------------
    if (PWM3 > 30) { PWM3 = PWM3 - 5; }
    if ((Led_Pos3 > 4) && (Led_Pos3 < 17)) {
      LED (Led_Pos3-4, PWM3);
    }    
    // Vierte Diode --------------------------------
    if (PWM4 > 10) { PWM4 = PWM4 - 5; }
    if ((Led_Pos4 > 4) && (Led_Pos4 < 17)) {
      LED (Led_Pos4-4, PWM4);
    } 
    // Fünfte Diode --------------------------------
    if (PWM5 > 0) { PWM5 = PWM5 - 5; }
    if ((Led_Pos5 > 4) && (Led_Pos5 < 17)) {
      LED (Led_Pos5-4, 0);
    }
    delay(2);
  }
}       

Schaltplan

schaltplan

Kurzvideo


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz