Die Geschichte dahinter ist die, dass mein Charakter im Live Rollenspiel auf einer Convention Reihe etwas brauchte um sich gegen mächtige Untote Wesen zu wehren. Hier verbaut ist ein 12Ah Stunden Bleiakku um die nötige schwere dem Objekt zu geben. Ein simpler Kasten gebaut aus Leimholz, sowie für das Lichtfenster ein genagelter Rahmen mit Fensterfolie getackert. Als Controller kommt ein Arduino Nano zum Einsatz mit Step Up/Down Wandler für die Platine 12v und dem Arduino Nano 3,3v. Als LED’s sind 26 verbaut auf einer Platine. Kostenpunkt 3€ über Amazon das Stück. Machen ordentlich viel Licht wie man sieht 🙂
Das ganze System verbraucht unter Vollast eta 3-5Ah. Die Folie und die Luft vor den LED’s wird warm, aber nicht heiß. Bei den Kabeln der Platine habe ich drauf geachtet, dass diese einen großen Querschnitt haben damit es nicht anfängt zu brennen. Alle Kabel werden auch nach einer Stunde dauerleuchten nicht warm und bleiben Kalt. Die Kupferplatine wo die LED’s mittels Wärmeleitkleber angebracht sind wird auf der Vorderseite warm, hinten bleibt sie auf normal Temperatur bei ~19 Grad. Die Platine selber ist mit Leistungstransistoren versehen um dem Stormbedarf gerecht zu werden. Diese werden dann mit dem Arudino mittels der Widerstände geschaltet.
Das Holzteil des Kastens hinten ist eingeschoben und mit Klettband befestigt. Damit kann die Kanone auch an der Steuerungseinheit der 4 Buttons auseinander gebaut werden. Die 4 Buttons spielen dann unterschiedliche Licht-Programme an. Als Feature ist oben auf dem Kasten die kleine Lederfläche mit einem Drucksensor (ForceSensor ~7€) versehen, der je nachdem wie viel Druck (Max 13kg) aufgewendet wird das Licht in Helligkeitsstufen einstellt. Die obere LED in der Mitte ist eine Warmweiß damit normales Taschenlampenlicht auch erzeugt werden kann. Sieht man aber nicht auf den Bildern.
Ansonsten wenn die Lichtkanone nicht gerade im Live Rollenspiel im Einsatz ist wird diese als Baustellenleuchte verwendet.
Arduino-Code:
String debugString; const boolean debug = false; int PWM_1 = 3; // PWM fähiger PIN int PWM_2 = 5; // PWM fähiger PIN int PWM_3 = 6; // PWM fähiger PIN int PWM_4 = 9; // PWM fähiger PIN int PWM_5 = 10; // PWM fähiger PIN int PWM_6 = 11; // PWM fähiger PIN int BUTTON_1 = 2; int BUTTON_2 = 4; int BUTTON_3 = 7; int BUTTON_4 = 8; int FORCE_SENSOR = 0; int button_1_value, button_2_value, button_3_value, button_4_value, force_sensor_value; void setup() { if (debug) Serial.begin(9600); if (debug) Serial.println("..Ennohome start.."); pinMode(PWM_1, OUTPUT); pinMode(PWM_2, OUTPUT); pinMode(PWM_3, OUTPUT); pinMode(PWM_4, OUTPUT); pinMode(PWM_5, OUTPUT); pinMode(PWM_6, OUTPUT); pinMode("D"+BUTTON_1, INPUT); pinMode("D"+BUTTON_2, INPUT); pinMode("D"+BUTTON_3, INPUT); pinMode("D"+BUTTON_4, INPUT); pinMode("A"+FORCE_SENSOR, INPUT); TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20); TCCR2B = _BV(WGM22) | _BV(CS20); analogWrite(PWM_1,0); analogWrite(PWM_2,0); analogWrite(PWM_3,0); analogWrite(PWM_4,0); analogWrite(PWM_5,0); analogWrite(PWM_6,0); } void forceLight(int force_sensor_value = 0) { if (force_sensor_value < 200) { force_sensor_value = 40; } else if (force_sensor_value < 250) { force_sensor_value = 70; } else if (force_sensor_value < 300) { force_sensor_value = 100; } else if (force_sensor_value < 350) { force_sensor_value = 130; } else if (force_sensor_value < 400) { force_sensor_value = 160; } else if (force_sensor_value < 450) { force_sensor_value = 190; } else if (force_sensor_value < 500) { force_sensor_value = 220; } else { force_sensor_value = 255; } //forceSensorValue = map(forceSensorValue, 0, 1023, 0, 255); // 1023 Max ForceSensor mit 6k Wiederstand ~930max dient zur exakten PWM-Umrechnung analogWrite(PWM_1,force_sensor_value); analogWrite(PWM_2,force_sensor_value); analogWrite(PWM_3,force_sensor_value); analogWrite(PWM_4,force_sensor_value); analogWrite(PWM_5,force_sensor_value); analogWrite(PWM_6,force_sensor_value); delay(100); } // Flickerlicht void button1Light() { for(int i=0; i<2; i++) { for(int i=255; i>100; i--) { int randomValue = random(0,255); /* analogWrite(PWM_1,random(0,255)); analogWrite(PWM_2,random(0,255)); analogWrite(PWM_3,random(0,255)); analogWrite(PWM_4,random(0,255)); analogWrite(PWM_5,random(0,255)); analogWrite(PWM_6,random(0,255)); */ analogWrite(PWM_1,randomValue); analogWrite(PWM_2,randomValue); analogWrite(PWM_3,randomValue); analogWrite(PWM_4,randomValue); analogWrite(PWM_5,randomValue); analogWrite(PWM_6,randomValue); delay(25); } } } // Langsam aufgehend Step by Step void button2Light() { for(int i=0; i<70; i++) { analogWrite(PWM_1, i); delay(25); } analogWrite(PWM_1,71); for(int i=0; i<70; i++) { analogWrite(PWM_2, i); delay(25); } analogWrite(PWM_2,71); for(int i=0; i<70; i++) { analogWrite(PWM_3, i); delay(25); } analogWrite(PWM_3,71); for(int i=0; i<70; i++) { analogWrite(PWM_4, i); delay(25); } analogWrite(PWM_4,71); for(int i=0; i<70; i++) { analogWrite(PWM_5, i); delay(25); } analogWrite(PWM_5,71); for(int i=0; i<70; i++) { analogWrite(PWM_6, i); delay(25); } analogWrite(PWM_6,71); for(int i=255; i>100; i--) { analogWrite(PWM_1,random(0,255)); analogWrite(PWM_2,random(0,255)); analogWrite(PWM_3,random(0,255)); analogWrite(PWM_4,random(0,255)); analogWrite(PWM_5,random(0,255)); analogWrite(PWM_6,random(0,255)); delay(20); } for(int i=255; i>0; i--) { analogWrite(PWM_1,i); analogWrite(PWM_2,i); analogWrite(PWM_3,i); analogWrite(PWM_4,i); analogWrite(PWM_5,i); analogWrite(PWM_6,i); delay(5); } analogWrite(PWM_1,0); analogWrite(PWM_2,0); analogWrite(PWM_3,0); analogWrite(PWM_4,0); analogWrite(PWM_5,0); analogWrite(PWM_6,0); } // Boom Boom Effekt void button3Light() { for(int i=0; i<4; i++) { for(int i=0; i<255; i=i+5) { analogWrite(PWM_1,i); analogWrite(PWM_2,i); analogWrite(PWM_3,i); analogWrite(PWM_4,i); analogWrite(PWM_5,i); analogWrite(PWM_6,i); delay(15); } delay(20); for(int i=255; i>0; i=i-5) { analogWrite(PWM_1,i); analogWrite(PWM_2,i); analogWrite(PWM_3,i); analogWrite(PWM_4,i); analogWrite(PWM_5,i); analogWrite(PWM_6,i); delay(15); } } } // Normales Licht void button4Light() { analogWrite(PWM_6,255); } void loop() { button_1_value = digitalRead(BUTTON_1); button_2_value = digitalRead(BUTTON_2); button_3_value = digitalRead(BUTTON_3); button_4_value = digitalRead(BUTTON_4); force_sensor_value = analogRead(FORCE_SENSOR); if (debug) debugString = String("Button-Values: ") + String(button_1_value) + String(" ") + String(button_2_value) + String(" ") + String(button_3_value) + String(" ") + String(button_4_value) + String(" Force: ") + String(force_sensor_value); if (debug) Serial.println(debugString); if (force_sensor_value > 100) { forceLight(force_sensor_value); } else if (button_1_value == HIGH) { button1Light(); } else if (button_2_value == HIGH) { button2Light(); } else if (button_3_value == HIGH) { button3Light(); } else if (button_4_value == HIGH) { button4Light(); } else { button_1_value = 0; button_2_value = 0; button_3_value = 0; button_4_value = 0; force_sensor_value = 0; analogWrite(PWM_1,0); analogWrite(PWM_2,0); analogWrite(PWM_3,0); analogWrite(PWM_4,0); analogWrite(PWM_5,0); analogWrite(PWM_6,0); } }