Inhaltsverzeichnis:

ColorCube: 7 Schritte (mit Bildern)
ColorCube: 7 Schritte (mit Bildern)

Video: ColorCube: 7 Schritte (mit Bildern)

Video: ColorCube: 7 Schritte (mit Bildern)
Video: Color Cube - Review & Demo! 2024, Dezember
Anonim
Image
Image
Farbwürfel
Farbwürfel
Farbwürfel
Farbwürfel

Ich habe diese Lampe für meine Enkelin gemacht, als sie Farben lernte. Ich wurde vom MagicCube-Projekt inspiriert, aber schließlich erstellte ich alle Teile von Grund auf neu. Es ist einfach zu drucken und einfach zu montieren und Sie erhalten Kenntnisse über die Funktionsweise des Kreiselmoduls.

Schritt 1: Materialien

Materialien
Materialien

Arduino-Teil:

  • Arduino Nano (besser ohne Lötstifte)
  • MPU-6050 3-Achsen-Gyro-Modul
  • TP4056 Micro-USB-Akkulademodul
  • MT3608 Step Up Power Booster Modul
  • LiPo-Akku 902936 900mA oder 503035 3,7V 500mA. Sie können jeden LiPo-Akku mit 3, 7 V und einer Größe von weniger als 35 x 30 x 15 mm verwenden, aber Sie müssen den Akku im Loch befestigen.
  • PS-22F28 Selbstsichernder Knopf oder PS-22F27 Selbstsichernder Knopf passt beide perfekt zum bedruckten Teil.
  • LED RGB WS2812B Ring – 16 LED 68 mm Außendurchmesser – Sie können jeden Ring verwenden, auch mit unterschiedlicher Anzahl von LEDs (müssen eine Konstante im Code ändern – #define NUMPIXELS 16) mit einem maximalen Durchmesser von 76 mm (Sie können auch einen Neopixel-Stick mit verwenden 8x LED oder beliebiger LED-Streifen mit WS2812b).

Ringbeispiele:8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Für die Montage können Sie jedes der im Mittelteil gedruckten Löcher verwenden. Sie decken fast jede Option ab (nicht notwendig, um den Ring zu 100% zentriert zu haben).

Drähte

Würfel

  • PLA-Filament für den oberen Teil des Würfels – Verwenden Sie weiße Farbe, da transparent nicht gut ist (LEDs sind sichtbar und die Farbe ist nicht glatt), meine Empfehlung ist Prusament Vanilla White
  • PLA-Filament für Unter-, Mittel- und Knopfteile – Verwenden Sie dunkle Farbe, da einige Arduino-Module oben Lichter haben und es nicht zu den Farben der Würfel-LEDs passt. Meine Empfehlung ist Prusament Galaxy Black
  • 1x M3x5 Selbstschneidende Schraube - Die Länge (10mm) und die Kopfform ist nicht kritisch - Schraube ist nicht sichtbar
  • 2x M2x3 selbstschneidende Schraube - Die Länge (5mm) und die Kopfform ist nicht kritisch - Schrauben sind nicht sichtbar

Werkzeuge

  • 3D Drucker
  • Multimeter
  • Lötkolben
  • Schraubenzieher

Schritt 2: Drucken

Drucken
Drucken
Drucken
Drucken

Alle Teile von ColorCube wurden in Autodesk Fusion360 entworfen. f3d-Datei ist angehängt.

Der ColorCube wurde auf Prusa i3 MK3S Drucker mit allen Standardeinstellungen gedruckt und ich erwarte keine notwendigen Änderungen auf verschiedenen Druckern. Verwenden Sie Ihre bevorzugten Einstellungen für PLA (wenn auf PLA gedruckt, kein Problem, PETG oder ASA zu verwenden).

3D-Druckparameter:

  • Schicht 0,2 mm (0,2 mm QUALITÄTSeinstellungen auf PrusaSlicer)
  • Prusament PLA Filament-Einstellungen auf PrusaSlicer
  • Füllung 15%
  • Keine Unterstützung
  • Keine Krempe

Schritt 3: Schaltung

Schaltkreis
Schaltkreis

Schritt 4: Löten

Löten
Löten
Löten
Löten
Löten
Löten

Warnung: Verwenden Sie ein Multimeter, um sicherzustellen, dass der DC-DC-Booster MT3608 5 V ausgibt. Zuerst – vor dem Messen – die Trimmung im Uhrzeigersinn bis zum Ende drehen (Klicken). Wenn die Spannung (3,7 V) an den Eingang angeschlossen wird, muss sie ungefähr den gleichen Wert aufweisen. Drehen Sie gegen den Uhrzeigersinn (Sie benötigen 10-20 volle Umdrehungen) und plötzlich steigt die Spannung. Stellen Sie 5V am Ausgang sanft ein. (Foto)

Werfen Sie einen Blick auf den bedruckten unteren Teil des Würfels. Jedes Bauteil hat sein eigenes Loch. Es definiert, wie lange Drähte zwischen den einzelnen Komponenten benötigt werden (verwenden Sie keine überlangen Drähte, sonst erhalten Sie Drahtdschungel). (Foto)

Lötdrähte nur zwischen Arduino Nano und LED-Ring (3 Drähte: rot 5V - 5V, schwarz GND – GND, blau D6 – DI). Führen Sie den LED-Ring-Funktionstest ab dem nächsten Kapitel durch. (Foto)

Wenn alles in Ordnung ist, fahren Sie mit dem Hinzufügen von Gyro MPU6050 fort (5 Drähte: rot 5V - VCC, schwarz GND - GND, blau A4 - SDA, grün A5 - SCL, gelb D2 - INT). Laden Sie den ColorCube.ino-Code hoch und testen Sie ihn (andere Komponenten dienen nur zum Akku und zum Laden). (Foto)

Wenn alles in Ordnung ist, fügen Sie die restlichen Komponenten hinzu. Es gibt nur rote (+) und schwarze (-) Drähte. Wählen Sie die rechten Pins am selbstsichernden Knopf (nicht verbunden, wenn nicht gedrückt). Testen Sie die Funktionalität beim Akku und beim Laden des Akkus. (Foto)

Rote LED leuchtet am TP4056 beim Laden und blaue LED leuchtet bei voller Ladung. Das Loch über TP4056 im mittleren gedruckten Teil leitet LED-Licht zum oberen Teil des ColorCube und Sie können die Ladephase erkennen. (Foto)

Schritt 5: Code

Zuerst müssen Sie die notwendigen Bibliotheken herunterladen.

Es gibt detaillierte Anweisungen für die Adafruit Neopixel-Bibliothek:

LED-Ring-Funktionstest: Sie können Ihre Schaltung anhand eines in der Bibliothek enthaltenen Beispiels testen. Öffnen Sie die Datei aus Datei/Beispiele/Adafruit NeoPixels/simple und laden Sie sie hoch (vergessen Sie nicht, diese Zeile nach der Anzahl der verwendeten Pixel richtig einzurichten: #define NUMPIXELS 16).

I2Cdev und MPU6050: Laden Sie die Datei i2cdevlib-master.zip von https://github.com/jrowberg/i2cdevlib herunter und entpacken Sie sie. Kopieren Sie aus dem entpackten Ordner i2cdevlib-master/Arduino zwei Unterordner: I2Cdev und MPU6050. Beide kopieren in den Arduino IDE-Bibliotheksordner (Documents/Arduino/libraries bei Standardinstallation).

Vergessen Sie nicht, die Arduino IDE nach dem Kopieren der Bibliotheken neu zu starten.

#include #ifdef _AVR_ #include // Erforderlich für 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // Verwenden Sie Pin 2 auf Arduino Uno und den meisten Boards #define PIN 6 #define NUMPIXELS 16 // Stellen Sie die richtige Anzahl von LEDs ein Adafruit_NeoPixel Pixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor=0; bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t Paketgröße; uint16_t fifoCount; uint8_t fifoBuffer[64]; Quaternion q; VectorFloat-Schwerkraft; Schwimmerrotation[3]; intx, y, z; volatile bool mpuInterrupt = false; Void dmpDataReady () { mpuInterrupt = true; aufrechtzuerhalten. Void setup () { Serial.begin (115200); Pixel.begin(); Pixel.clear(); Pixel.setHelligkeit (128); #wenn definiert(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // I2C-Bus beitreten (die I2Cdev-Bibliothek macht dies nicht automatisch) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // 400kHz I2C-Takt. Kommentieren Sie diese Zeile, wenn Sie Schwierigkeiten beim Kompilieren haben #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif while (!Seriell); Serial.println (F ("Initialisieren von I2C-Geräten …")); mpu.initialize(); pinMode (INTERRUPT_PIN, INPUT); // Verbindung überprüfen Serial.println (F ("Geräteverbindungen testen …")); Serial.println (mpu.testConnection () ? F ("MPU6050-Verbindung erfolgreich"): F ("MPU6050-Verbindung fehlgeschlagen")); // Warte auf Fertig // Serial.println (F ("\nSende ein beliebiges Zeichen, um mit der DMP-Programmierung und Demo zu beginnen: ")); // während (Serial.available () && Serial.read ()); // Puffer leeren // while (!Serial.available()); // auf Daten warten // while (Serial.available() && Serial.read()); // Puffer wieder leeren // DMP laden und konfigurieren Serial.println(F("Initializing DMP…")); devStatus = mpu.dmpInitialize(); // Geben Sie hier Ihre eigenen Gyro-Offsets an, skaliert für die minimale Empfindlichkeit mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset(1688); // 1688 Werkseinstellung für meinen Testchip // Stellen Sie sicher, dass es funktioniert (gibt 0 zurück, wenn ja) if (devStatus == 0) {// Kalibrierungszeit: Offsets generieren und unsere MPU6050 kalibrieren mpu. CalibrateAccel(6); mpu. KalibrierenGyro(6); mpu. PrintActiveOffsets(); // DMP einschalten, jetzt, da es fertig ist Serial.println (F ("DMP aktivieren …")); mpu.setDMPEnabled(true); // Arduino-Interrupt-Erkennung aktivieren Serial.print (F ("Aktivieren der Interrupt-Erkennung (Arduino externer Interrupt")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …")); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // Setzen Sie unser DMP-Ready-Flag, damit die Hauptfunktion loop () weiß, dass es in Ordnung ist, sie zu verwenden Serial.println (F ("DMP ready! Warten auf den ersten Interrupt …")); dmpReady = wahr; // Erwartete DMP-Paketgröße für späteren Vergleich abrufen packetSize = mpu.dmpGetFIFOPacketSize(); } else { // FEHLER! // 1 = anfängliches Laden des Speichers fehlgeschlagen // 2 = DMP-Konfigurationsaktualisierungen fehlgeschlagen // (wenn es kaputt geht, ist der Code normalerweise 1) Serial.print (F ("DMP-Initialisierung fehlgeschlagen (code")); Serial. print(devStatus); Serial.println(F(")")); } } void loop() { if (!dmpReady) zurück; if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Hole das neueste Paket // zeige Euler-Winkel in Grad an mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(rotace, &q, &gravity); } Serial.print ("X"); Serial.print (Rotation [2] * 180/M_PI); Serial.print (" / t Y "); Serial.print (Rotation [1] * 180/M_PI); Serial.print (" / t Z "); Serial.println (rotace [0] * 180/M_PI); x=Rotation [2] * 180/M_PI; y=Rotation[1] * 180/M_PI; z=rotace[0] * 180/M_PI; if (abs (x) < 45 && abs (y) 45 & abs (x) < 135 & (abs (y) 135)) {activeColor = Pixel. Color (255, 0, 0); // Rot beim Drehen zur Seite} Sonst if (x <-45 && abs (x) < 135 & (abs (y) 135)) {activeColor = Pixel. Color (0, 255, 0); // Grün, wenn man sich zur zweiten Seite dreht} sonst if (y>45 && abs(y)<135 && (abs(x)135)){activeColor=pixels. Color(255, 255, 0); // Gelb, wenn man sich zur dritten Seite dreht} sonst if (y<-45 && abs(y)<135 && (abs(x)135)) {activeColor=pixels. Color(0, 0, 255); // Blau beim Drehen zur vierten Seite} Sonst if (abs (y) > 135 & abs (x) > 135) {activeColor = Pixel. Color (0, 0, 0); // Schwarz wenn auf den Kopf gestellt} if(activeColor!= oldActiveColor){pixel.clear(); Pixel.fill (aktive Farbe); Pixel.show(); oldActiveColor=activeColor; } }

Schließlich können Sie die Datei ColorCube.ino öffnen und hochladen. Legen Sie den ColorCube auf eine ebene Fläche und schalten Sie ihn ein. Bewegen Sie es nicht, bis es nach der Kalibrierung (einige Sekunden) weiß leuchtet. Als nächstes können Sie den ColorCube auf die Seite legen und die Farbe ändert sich – jede Seite hat ihre eigene Farbe – rot, grün, blau, gelb. Der ColorCube erlischt, wenn er auf den Kopf gestellt wird.

Schritt 6: Zusammenbauen

Zusammenbau
Zusammenbau
Zusammenbau
Zusammenbau
Zusammenbau
Zusammenbau

Seien Sie beim Zusammenbau vorsichtig. Drähte und alle Teile mögen kein grobes Verhalten.

Knopf 3d gedrucktes Teil – Knopf sanft in das Loch im unteren gedruckten Teil legen (wie auf dem Bild gezeigt), es muss glatt ein- und ausgehen, wenn nicht Skalpell oder scharfes Messer oder Sandpapier verwenden, um alles überschüssige Material zu entfernen (meist innen) oben ein Kreisloch am unteren Teil). (Foto)

Setzen Sie MPU-6050, Arduino Nano, TP4056 und MT3608 in ihre Löcher. Die Box hat Vorsprünge, unter denen Sie MPU-6050 und MT3608 einsetzen. Stecken Sie die USB-Anschlüsse von Arduino Nano und TP4056 in ihre Löcher in den Seitenwänden der Box. (Foto)

Verwenden Sie ein 3D-gedrucktes Schloss, um die Komponenten zu befestigen (achten Sie darauf, dass alle Komponenten fest auf dem unteren Teil liegen). Es ist wichtig, weil sicherlich jemand versuchen wird, mit Ihrem ColorCube wie mit Würfeln zu spielen. (Foto)

Setzen Sie die Batterie in ihr Loch ein und sichern Sie sie, wenn sie nicht fest hält.

Setzen Sie den selbstsichernden Knopf in das vorbereitete Loch im unteren Teil. Der Selbstsperrknopf muss auf ON stehen (kurz). Drücken Sie den Knopf vorsichtig nach unten. Testen Sie die Funktionalität mit dem 3D-Druckknopf. (Fotos)

Verwenden Sie zwei M2-Schrauben, um den LED-Ring am mittleren gedruckten Teil zu befestigen. Es ist gut, die Ausrichtung des Rings zu verwenden, wenn sich die Drahtkontakte im abgerundeten Loch des mittleren gedruckten Teils befinden. (Fotos)

Optional: Verwenden Sie hier und da einen Tropfen Heißkleber – Kabelverbindung zum Ring, für zu lange Kabel, wenn etwas nicht fest genug ist usw. Dies kann Ihren ColorCube haltbarer machen.

Ordnen Sie die Drähte im ColorCube so an, dass sie nicht von gedruckten Teilen eingeklemmt werden. Legen Sie den mittleren Teil auf den unteren. Verwenden Sie zur Befestigung eine M3-Schraube. (Foto)

Schließlich drücken Sie den oberen bedruckten Teil vorsichtig auf den unteren. (Foto)

Schritt 7: Fertig

Herzlichen Glückwunsch. Spaß haben.

Empfohlen: