Innehållsförteckning:

ColorCube: 7 steg (med bilder)
ColorCube: 7 steg (med bilder)

Video: ColorCube: 7 steg (med bilder)

Video: ColorCube: 7 steg (med bilder)
Video: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, December
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Jag gjorde den här lampan till mitt barnbarn när hon lärde sig färger. Jag blev inspirerad av MagicCube -projektet men skapade slutligen alla delar från grunden. Det är enkelt att skriva ut och enkelt att montera och du får kunskap om hur gyromodulen fungerar.

Steg 1: Material

Material
Material

Arduino del:

  • Arduino Nano (bättre utan lödhuvudstiften)
  • MPU-6050 3-Axis Gyro-modul
  • TP4056 Micro USB -batteriladdningsmodul
  • MT3608 Step Up Power Booster -modul
  • LiPo -batteri 902936 900mA eller 503035 3.7V 500mA. Du kan använda vilket LiPo -batteri som helst med 3, 7V och storlek mindre än 35x30x15mm men du måste säkra batteriet i hålet.
  • PS-22F28 Självlåsande knapp eller PS-22F27 Självlåsande knapp passar perfekt till den tryckta delen.
  • LED RGB WS2812B Ring - 16 LED 68mm ytterdiameter - du kan använda vilken ring som helst med olika antal lysdioder (måste ändra en konstant i kod - #define NUMPIXELS 16) med max diameter på 76mm (du kan också använda en Neopixel Stick med 8x LED eller någon LED -remsa med WS2812b).

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

För montage kan du använda alla hål som är tryckta i mitten. De täcker nästan alla alternativ (behöver inte ha ringen 100% centrerad).

Trådar

Kub

  • PLA -filament för övre delen av kuben - använd vit färg eftersom transparent inte är bra (lysdioder är synliga och färgen är inte slät), min rekommendation är Prusament Vanilla White
  • PLA -filament för botten-, mitten- och knappdelar - använd mörk färg eftersom vissa Arduino -moduler har lampor på toppen och det passar inte med kub -LED -färger, min rekommendation är Prusament Galaxy Black
  • 1x M3x5 självgängande skruv - Längden (10 mm) och huvudformen är inte kritisk - skruven syns inte
  • 2x M2x3 självgängande skruv - Längden (5 mm) och huvudformen är inte kritisk - skruvar syns inte

Verktyg

  • 3d skrivare
  • Multimätare
  • Lödkolv
  • Skruvmejsel

Steg 2: Utskrift

Utskrift
Utskrift
Utskrift
Utskrift

Alla delar av ColorCube designades i Autodesk Fusion360. f3d -fil bifogas.

ColorCube skrevs ut på Prusa i3 MK3S -skrivare med alla standardinställningar och jag förväntar mig inga nödvändiga ändringar på olika skrivare. Använd dina favoritinställningar för PLA (om de skrivs ut på PLA, inga problem att använda PETG eller ASA).

3D -utskriftsparametrar:

  • Skikt 0,2 mm (0,2 mm KVALITET -inställningar på PrusaSlicer)
  • Inställningar för Prusament PLA Filament på PrusaSlicer
  • Infill 15%
  • Inget stöd
  • Ingen rand

Steg 3: Krets

Krets
Krets

Steg 4: Lödning

Lödning
Lödning
Lödning
Lödning
Lödning
Lödning

Varning: Använd en multimätare för att vara säker på att DC-DC-förstärkaren MT3608 matar ut 5V. För det första - innan du mäter - vrid trimmen medsols till slutet (klicka). När spänningen (3, 7V) ansluts till ingången måste den ge ungefär samma värde. Vrid moturs (du behöver 10-20 hela varv) och plötsligt stiger spänningen. Ställ in 5V på utgången mjukt. (Foto)

Ta en titt på den tryckta nedre delen av kuben. Varje komponent har sitt eget hål. Den definierar hur långa ledningar mellan varje komponent du behöver (använd inte extra långa ledningar annars får du tråddjungel). (Foto)

Lödtrådar mellan Arduino Nano och endast LED -ring (3 ledningar: röd 5V - 5V, svart GND - GND, blå D6 - DI). Kör LED -ringfunktionstest från nästa kapitel. (Foto)

Om allt är OK fortsätt med att lägga till Gyro MPU6050 (5 ledningar: röd 5V - VCC, svart GND - GND, blå A4 - SDA, grön A5 - SCL, gul D2 - INT). Ladda upp ColorCube.ino -kod och test (andra komponenter är endast för batteri och laddning). (Foto)

Om allt är OK lägg till resten av komponenterna. Det finns bara röda (+) och svarta (-) trådar. Välj höger stift på den självlåsande knappen (inte ansluten när den inte trycks in). Testa funktionalitet på batteri och batteriladdning. (Foto)

Röda LED -lampor på TP4056 vid laddning och blå LED -lampor när de är fulladdade. Hålet ovanför TP4056 i mitten tryckt del passerar LED -ljus till den övre delen av ColorCube och du kan känna igen laddningsfasen. (Foto)

Steg 5: Kod

Först måste du ladda ner nödvändiga bibliotek.

Det finns detaljerade instruktioner för Adafruit Neopixel bibliotek:

LED -ringfunktionstest: Du kan testa din krets med exempel som ingår i biblioteket. Öppna filen från File/Exemplar/Adafruit NeoPixels/simple och ladda upp (glöm inte att ställa in den här raden korrekt efter antalet pixlar du använder: #define NUMPIXELS 16).

I2Cdev och MPU6050: Ladda ner och packa upp i2cdevlib-master.zip-filen från https://github.com/jrowberg/i2cdevlib. Kopiera formulär uppackad mapp i2cdevlib-master/Arduino två undermappar: I2Cdev och MPU6050. Båda kopieras till Arduino IDE biblioteksmapp (Dokument/Arduino/bibliotek om standardinstallation).

Glöm inte att starta om Arduino IDE efter att bibliotek har kopierats.

#include #ifdef _AVR_ #include // Krävs för 16 MHz Adafruit Trinket #endif #include "Wire.h" inkluderar "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards #define PIN 6 #define NUMPIXELS 16 // Ställ in rätt antal lysdioder Adafruit_NeoPixel pixlar (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Kvarternion q; VectorFloat gravitation; float rotace [3]; int x, y, z; flyktig bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixlar. börjar (); pixlar.clear (); pixlar.setBrightness (128); #if definierat (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // gå med i I2C -buss (I2Cdev -biblioteket gör inte detta automatiskt) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C klocka. Kommentera den här raden om du har problem med sammanställning #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("Initierar I2C -enheter …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verifiera anslutning Serial.println (F ("Testenhetsanslutningar …")); Serial.println (mpu.testConnection ()? F ("MPU6050 -anslutningen lyckades"): F ("MPU6050 -anslutningen misslyckades")); // vänta på redo // Serial.println (F ("\ nSkicka vilket tecken som helst för att påbörja DMP -programmering och demo:")); // while (Serial.available () && Serial.read ()); // tom buffert // while (! Serial.available ()); // vänta på data // while (Serial.available () && Serial.read ()); // tom buffert igen // ladda och konfigurera DMP Serial.println (F ("Initierar DMP …")); devStatus = mpu.dmpInitialize (); // ange dina egna gyroförskjutningar här, skalade för min känslighet mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 fabriksinställning för mitt testchip // se till att det fungerade (returnerar 0 i så fall) om (devStatus == 0) {// Kalibreringstid: generera förskjutningar och kalibrera vår MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // slå på DMP, nu när det är klart Serial.println (F ("Aktiverar DMP …")); mpu.setDMPEnabled (true); // aktivera Arduino avbrottsdetektering Serial.print (F ("Aktiverar avbrottsdetektering (Arduino externt avbrott")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …"))); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // ställ in vår DMP Ready -flagga så att huvudslingan () -funktionen vet att det är okej att använda den Serial.println (F ("DMP ready! Waiting for first interrupt …")); dmpReady = true; // få förväntad DMP -paketstorlek för senare jämförelse packetSize = mpu.dmpGetFIFOPacketSize (); } annat {// FEL! // 1 = initial minnesbelastning misslyckades // 2 = DMP -konfigurationsuppdateringar misslyckades // (om den kommer att gå sönder brukar koden vara 1) Serial.print (F ("DMP -initialisering misslyckades (kod")); Serial. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Skaffa det senaste paketet // visa Euler -vinklar i grader mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravitation, & q); mpu.dmpGetYawPitchRoll (rotace, & q, & gravitation); } Serial.print ("X"); Serial.print (rotace [2] * 180/M_PI); Serial.print ("\ t Y"); Serial.print (rotace [1] * 180/M_PI); Serial.print ("\ t Z"); Serial.println (rotace [0] * 180/M_PI); x = rotera [2] * 180/M_PI; y = rotera [1] * 180/M_PI; z = rotera [0] * 180/M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (255, 0, 0); // Röd när du vänder till sidan} annars om (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Grön när du vrider till andra sidan} annars om (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Gul när du vänder till tredje sidan} annars om (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Blå när du vrider till fjärde sidan} annars if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Svart när den är upp och ner} if (activeColor! = OldActiveColor) {pixels.clear (); pixlar. fyllning (activeColor); pixlar. visa (); oldActiveColor = activeColor; }}

Slutligen kan du öppna och ladda upp filen ColorCube.ino. Sätt ColorCube på en plan yta och slå på den. Flytta inte den förrän den börjar lysa med vit färg efter kalibrering (några sekunder). Därefter kan du lägga ColorCube på sidan och färgen ändras - varje sida har sin egen färg - röd, grön, blå, gul. ColorCube slocknar när den vänds upp och ner.

Steg 6: Montering

Montering
Montering
Montering
Montering
Montering
Montering

Var försiktig under montering. Ledningar och alla delar gillar inte grovt beteende.

Knapp 3d -tryckt del - mjukt sätta knappen till hålet i den nedre tryckta delen (som visas på bilden), den måste gå in och ut smidigt, om inte använda skalpell eller vass kniv eller sandpapper för att ta bort allt överflödigt material (mestadels inuti toppen av ett cirkelhål på nedre delen). (Foto)

Sätt MPU-6050, Arduino Nano, TP4056 och MT3608 i sina hål. Lådan har utsprång under vilka du sätter in MPU-6050 och MT3608. Sätt USB -kontakter av Arduino Nano och TP4056 i sina hål i lådans sidoväggar. (Foto)

Använd 3D -tryckt lås för att fixa komponenter (se till att alla komponenter ligger hårt på botten). Det är viktigt eftersom någon säkert kommer att försöka spela med din ColorCube som med tärningar. (Foto)

Sätt i och säkra batteriet i hålet om det inte håller hårt.

Sätt den självlåsande knappen i det förberedda hålet i botten. Självlåsningsknappen måste vara i PÅ-läge (kort). Tryck försiktigt ner knappen. Testfunktion med 3D -tryckt knapp. (foton)

Använd två M2 -skruvar för att fästa LED -ringen på den mellersta tryckta delen. Är bra att använda orienteringen av ringen där trådkontakterna är i det rundade hålet på den mellersta tryckta delen. (foton)

Valfritt: Använd en droppe varmt lim här och där - trådanslutning till ring, för för långa ledningar, om något inte är tillräckligt tätt etc. Det kan göra din ColorCube mer hållbar.

Ordna trådarna inuti ColorCube så att de inte kläms av tryckta delar. Lägg den mellersta delen till den nedre. Använd M3 -skruven för att fixa den. (Foto)

Skjut försiktigt den övre tryckta delen till den nedre. (Foto)

Steg 7: Klar

Grattis. Ha så kul.

Rekommenderad: