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!

Schreibe einen Kommentar

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

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.