Hallo Hallo – nach einer etwas längeren Pause, folgt nun wieder ein Beitrag 🙂
Diesmal bin ich beim Stöbern auf Thingverse.com
auf ein 3D Modell aus dem Jahr 2016 gestoßen, ein so genannter Alien_Cube.
Sieht ganz spannend aus, jedoch war dieser mit einem Teelicht Imitator realisiert worden und hatte die Größe von 5,5 cm.
Paar kleine Änderungen und es wurde eine Dekolampe der anderen Art, inkl Alexa Support und Steuerbaren LED.
Was benötigen wir?
1 x Wemos D1 mini
1 x WS2812B ( 30 LED auf 1 Meter )
1 x Lötkolben
1 x Klingeldraht ( Jumperkabel gehen auch )
1 x 5V Netzteil
Einen 3D Drucker,
Grundierung / Farbe ( Drucken in gewünschter Farbe natürlich auch möglich )
Das Gesamtgewicht liegt bei 427g inkl Wemos etc.
Die 3D Modelle findet ihr -hier- auf Thingverse.
Die Dateien sind von mir modifiziert worden, eine andere Base und einen WS2812b Turm der dazugekommen ist, das ganze wurde dann noch auf 127 mm skaliert und abgespeichert.
Die Originalen Dateien auf Thingverse -> https://www.thingiverse.com/thing:1803863
Sieht ja wirklich sehr schick aus, zumal man eigene Effekte erstellen kann, ich bin derzeit nur dazu gekommen Farben zu definieren.
Hier noch ein kleines Video was die Farbe rot zeigt:
Ein Laufzeiteffekt ist zusätzlich eingebaut.
Das Arduino Script muss natürlich an euren Broker angepasst werden.
#include <ESP8266WebServer.h> #include <ESP8266WiFi.h> #include <PubSubClient.h> #include <Adafruit_NeoPixel.h> WiFiClient espClient; PubSubClient client(espClient); #ifdef __AVR__ #include <avr/power.h> #endif #define PIN D4 #define NUMPIXELS 14 Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //Starte alle mit false int i = 0; bool m = false; bool four = false; bool rot = false; bool gelb = false; bool gruen = false; bool blau = false; bool aus = false; bool starte = false; // Alle LED beim starten aus. String stat = ""; // Cube an/aus Variablentext char tmp[50]; char ssid[] = "SSID"; // SSID (name) char pass[] = "Passwort"; // password const char* mqtt_server = "192.168.178.62"; //Broker IP Address const char* mqttUser = "iobroker"; // Broker Name const char* mqttPassword = "Passwort"; // Broker Passwort void connect_to_MQTT() { client.setServer(mqtt_server, 1890);//MQTT Server, - Port client.setCallback(Callback); // aktiviere das zuhören if (client.connect("aliencube" , mqttUser, mqttPassword)) { Serial.println("Verbinde zum MQTT Server"); } else { Serial.println("zu MQTT Server nicht verbunden "); if (!client.connect("aliencube" , mqttUser, mqttPassword)) { Serial.print("Fehlgeschlagen, state="); Serial.print(client.state()); Serial.println(" Versuch in 5 Sekunden nochmal"); delay(5000); } } // Siehe Callback weiter unten, 1-7 sind vergeben, erhält der Controller eine Zahl wird die Farbe oder Modus gestartet. client.subscribe("aliencube/modus"); } void setup() { Serial.begin(9600); WiFi.begin(ssid, pass); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); connect_to_MQTT(); #if defined (__AVR_ATtiny85__) if (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif strip.begin(); strip.show(); } void loop() { Serial.print(m); // Starte Funktion wenn modus = x if (m == true) { // Laufmodus for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); // This sends the updated pixel color to the hardware. delay(50); strip.setPixelColor(i, strip.Color(255,0,0)); // strip.show(); // } } if (four == true) { // 4 seiten unterschiedlich strip.setPixelColor(0, strip.Color(255,0,0)); strip.setPixelColor(1, strip.Color(255,0,0)); strip.setPixelColor(2, strip.Color(255,0,0)); strip.setPixelColor(3, strip.Color(255,255,0)); strip.setPixelColor(4, strip.Color(255,255,0)); strip.setPixelColor(5, strip.Color(255,255,0)); strip.setPixelColor(6, strip.Color(0,255,0)); strip.setPixelColor(7, strip.Color(0,255,0)); strip.setPixelColor(8, strip.Color(0,255,0)); strip.setPixelColor(9, strip.Color(255,020,147)); strip.setPixelColor(10, strip.Color(255,020,147)); strip.setPixelColor(11, strip.Color(255,020,147)); strip.show(); // four = false; } if (rot == true) { // rot for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(255,0,0)); // strip.show(); // } rot = false; } if (gelb == true) { // gelb for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(255,255,0)); // strip.show(); // } gelb = false; } if (gruen == true) { // gruen for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(0,255,0)); // strip.show(); // } gruen = false; } if (blau == true) { // blau for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(0,0,255)); // strip.show(); // } blau = false; } if (aus == true) { // Abschalten for(int i=0;i<NUMPIXELS;i++){ strip.setPixelColor(i, strip.Color(0,0,0)); // strip.show(); // } aus = false; } if (!client.connected()) { Serial.println("Keine Verbindung zum MQTT Server"); connect_to_MQTT(); } client.loop(); } void Callback(char* topic, byte* payload, unsigned int length) { // Zähler int i = 0; // Hilfsvariablen für die Convertierung der Nachricht in ein String char message_buff[100]; Serial.println("Message arrived: topic: " + String(topic)); Serial.println("Length: " + String(length,DEC)); // Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0 for(i=0; i<length; i++) { message_buff[i] = payload[i]; } message_buff[i] = '\0'; // Konvertierung der nachricht in ein String String msgString = String(message_buff); Serial.println("Payload: " + msgString); if (strcmp(topic,"aliencube/modus")==0){ if(msgString == "1"){ m = true; client.publish("aliencube/modusstat","Alien Cube - Lauf"); } if(msgString == "2" ) { m = false; four = true; client.publish("aliencube/modusstat","Alien Cube - 4 Seiten"); } if(msgString == "3" ) { m = false; rot = true; client.publish("aliencube/modusstat","Alien Cube - rot"); } if(msgString == "4" ) { m = false; gelb = true; client.publish("aliencube/modusstat","Alien Cube - gelb"); } if(msgString == "5" ) { m = false; gruen = true; client.publish("aliencube/modusstat","Alien Cube - gruen"); } if(msgString == "6" ) { m = false; blau = true; client.publish("aliencube/modusstat","Alien Cube - blau"); } if(msgString == "7" ) { m = false; aus = true; client.publish("aliencube/modusstat","Alien Cube - aus"); } } }
Wir können den Controller auch mit Tasmota Flashen und eine HUE Lampe imitieren, so können wir jede Farbe wählen die HUE unterstütz.
Tasmota findet Ihr hier:
Tasmota Download ( externer Link )
Alexa Support:
Alexa kann diesen Würfel wie folgt steuern:
Solltet Ihr euch für die Tasmota Variante entschieden haben, so müsst Ihr das Gerät wie folgt Konfigurieren:
Ihr musst den WS2812b LED Streife nun auf D7 löten, bzw stecken.
Wir bestätigen dies mit „Save“, und gehen weiter zum nächsten Schritt:
Solltet Ihr MQTT nicht nutzen wollen, so stellt es bitte ab!
Vergebt einen Namen für euren Würfel und setzt den Haken bei Hue Bridge.
Wieder bestätigen wir das ganze mit Save. Anschließend lassen wir über die Alexa neue Geräte suchen und finden nun unseren Würfel. 🙂
Alexa: „name“ rot an
Und schon leuchtet der Würfel rot 😉
Ich hoffe mein Beitrag konnte euch zum nachbauen animieren.
Solltet Ihr den Würfel haben wollen, jedoch keinen 3 D Drucker besitzen, so schreibt mir doch gerne mal eine Mail.
Die Drucklaufzeit beträgt ca 35 Stunden für alle 3D Druckteile.
Bis dahin verbleibe ich mit einen netten Gruß und weiterhin viel Spaß in der Arduino Welt 🙂
*Meine Links führen nach Amazon, solltest Du ein Produkt über diesen Link kaufen, enstehen dir keine weiteren Kosten, jedoch erhalte ich im Cent-Bereich eine kleine Provision. Vielen Dank!