WS2811 Atmega Led Strip (Musikgesteuert)

Endlich ist er da! Nachdem die Ansteuerung der einzelnen WS2811 LED Chips relativ reibungslos abgelaufen ist haben wir uns mal beim Chinesen um die Ecke einen 5 Meter WS2811 Led Streifen besorgt. Nach einer kleinen Änderung im Code läuft er besser als erwartet! Kein flackern kein zucken er tut genau das was man ihm sagt. Nach den ersten Tests und den ersten Luftsprüngen, weil das ding einfach so geil aussieht. Haben wir uns daran gemacht ein Musikgesteuerten Levelmeter zu programmieren. Dieser soll mit Audioinput gefüttert werden und dann einen Ausschlag anzeigen. Natürlich im Takt der Musik.

Um das zu realisieren verwenden wir einen Atmega 328P der auf den internen 8 Mhz läuft. Den Audioinput bekommen wir über einen der Analogports des Atmegas rein.

Hier der Code unserer Auswertungsroutine

/************************************************************************/
/*                      Musiksteuerung                                  */
/************************************************************************/
void music(void)
{
	int startLedIndex = 0; // Index der ersten WS2811 LED
	int endLedIndex = 147; // Index der letzten WS2811 LED
	int audioAmount = 0; // Zahl zwischen 0 und 100 // Audioinput
	int redLimitPercent = 75; // Ab wann der Rote Bereich anfängt in %

	//Interne Variablen
        int highCountTimerMAX = 30;
	int highAmount = 0;
	int highCount = 0;

	while(1)
	{
		//audioAmount = rand() % 20 + audioAmount-10; // Zufallswerte für Testzwecke
		audioAmount = readADC(0)*2; // Hier der Audio Analoginput

		audioAmount = (audioAmount>100) ? 100 : audioAmount;
		audioAmount = (audioAmount<0) ? 0 : audioAmount; 		//audioAmount = 100; // Für Debuggen Audioinput auf 100% setzten 		int maxLedON = (endLedIndex-startLedIndex) * audioAmount / 100; 		int ledRedLimit = (endLedIndex-startLedIndex) * redLimitPercent / 100; 		if(highCount==highCountTimerMAX) 		{ 			highCount = 0; 			highAmount = 0; 		} 		if(maxLedON > highAmount)
		{
			highCount = 0;
			highAmount = maxLedON;
		}

		for(int i=0;i<150;i++)
		{
			if(i != highAmount-1)
			{
				int newVal = leds[startLedIndex+i].blue-15;
				leds[startLedIndex+i].blue = (newVal<=0) ? 0 : newVal;
				newVal = leds[startLedIndex+i].red-15;
				leds[startLedIndex+i].red = (newVal<=0) ? 0 : newVal;
			}
		}

		for(int i=0;i<maxLedON;i++)
		{
			if(i <= ledRedLimit)
				set_col(startLedIndex+i,3,255);
			else
				set_col(startLedIndex+i,1,255);

			if(i == ledRedLimit)
			{
				leds[startLedIndex+i].red = 140;
				leds[startLedIndex+i].blue = 50;
			}
			if(i == ledRedLimit-1)
			{
				leds[startLedIndex+i].red = 110;
				leds[startLedIndex+i].blue = 75;
			}
			if(i == ledRedLimit-2)
			{
				leds[startLedIndex+i].red = 75;
				leds[startLedIndex+i].blue = 110;
			}
			if(i == ledRedLimit-3)
			{
				leds[startLedIndex+i].red = 50;
				leds[startLedIndex+i].blue = 140;
			}
		}

		highCount++;

		send_all();
		_delay_ms(2);
	}
}

Wenn du weitere Fragen bezüglich unserer WS2811 Projekte hast oder Hilfe bei deinem Projekt brauchst. Schreib einfach einen Kommentar und wir werden dir weiterhelfen. Bilder und Videos zu diesem Projekt werde ich in nächster Zeit online stellen.

5 Kommentare

  1. Hallo, meine Eltern renovieren mein Zimmer neu und ich wollte mir LED RGB Stripes kaufen
    die musikgesteuert sind also synchron zur Musik hin und her leuchten
    aber bei diesen IRC Audio Controllern kann man nur bestimmen ob hell und dunkel langsam oder schnell
    an und aus aber nicht bestimmen wie sie verlaufen sollen

    Daher frag ich was für Geräte ich brauche um sowas erreichen zu können wie dieses YT Video:
    https://www.youtube.com/watch?v=NhOxCGzSEYw

    möchte nicht das meine LED nur blinken sondern wie Lauflicht hin und her wandern wie ich es möchte
    brauch ich Arduino oder sowas?

    Könnt ihr mir auflisten was ich brauche? Sollte nicht all zu teuer sein
    Was ich angeben kann ist
    – 16 Meter LED RGB Stripes

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.