Indholdsfortegnelse:

ColorCube: 7 trin (med billeder)
ColorCube: 7 trin (med billeder)

Video: ColorCube: 7 trin (med billeder)

Video: ColorCube: 7 trin (med billeder)
Video: seeing wife face for first time #shorts 2024, December
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Jeg lavede denne lampe til mit barnebarn, da hun lærte farver. Jeg blev inspireret til MagicCube -projektet, men skabte til sidst alle dele helt fra bunden. Det er let at udskrive og let at samle, og du får viden om, hvordan gyro -modul fungerer.

Trin 1: Materialer

Materialer
Materialer

Arduino del:

  • Arduino Nano (bedre uden loddehovedstifter)
  • MPU-6050 3-akset giromodul
  • TP4056 Micro USB batterioplader modul
  • MT3608 Step Up Power Booster -modul
  • LiPo batteri 902936 900mA eller 503035 3.7V 500mA. Du kan bruge ethvert LiPo -batteri med 3, 7V og størrelse mindre end 35x30x15mm, men du skal sikre batteriet i hullet.
  • PS-22F28 Selvlåsende knap eller PS-22F27 Selvlåsende knap passer perfekt til den trykte del.
  • LED RGB WS2812B Ring - 16 LED 68mm udvendig diameter - du kan bruge en hvilken som helst ring, selv med et andet antal LED'er (skal ændre en konstant i kode - #define NUMPIXELS 16) med maks. Diameter på 76mm (du kan også bruge en Neopixel Stick med 8x LED eller en hvilken som helst LED -strip med WS2812b).

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

Til montage kan du bruge et hvilket som helst af hullerne trykt i den midterste del. De dækker næsten enhver mulighed (ikke nødvendigt for at have ringen 100% centreret).

Ledninger

Terning

  • PLA filament til den øverste del af terningen - brug hvid farve, fordi gennemsigtig ikke er god (lysdioder er synlige og farven er ikke glat), min anbefaling er Prusament Vanilla White
  • PLA -glødetråd til bund-, midter- og knapdele - brug mørk farve, fordi nogle Arduino -moduler har lys på toppen, og det passer ikke med kubens LED -farver, min anbefaling er Prusament Galaxy Black
  • 1x M3x5 selvskærende skrue - Længden (10 mm) og hovedformen er ikke kritisk - skruen er ikke synlig
  • 2x M2x3 Selvskærende skrue - Længden (5 mm) og hovedformen er ikke kritisk - skruer er ikke synlige

Værktøjer

  • 3D printer
  • Multi-meter
  • Loddekolbe
  • Skruetrækker

Trin 2: Udskrivning

Trykning
Trykning
Trykning
Trykning

Alle dele af ColorCube blev designet i Autodesk Fusion360. f3d -fil er vedhæftet.

ColorCube blev udskrevet på Prusa i3 MK3S printer med alle standardindstillinger, og jeg forventer ikke nogen nødvendige ændringer på forskellige printere. Brug dine yndlingsindstillinger til PLA (hvis det udskrives på PLA, ikke noget problem at bruge PETG eller ASA).

3D -udskrivningsparametre:

  • Lag 0,2 mm (0,2 mm KVALITET indstillinger på PrusaSlicer)
  • Prusament PLA filamentindstillinger på PrusaSlicer
  • Fyld 15%
  • Ingen hjælp
  • Ingen rand

Trin 3: Kredsløb

Kredsløb
Kredsløb

Trin 4: Lodning

Lodning
Lodning
Lodning
Lodning
Lodning
Lodning

Advarsel: Brug en multimeter til at være sikker på, at DC-DC-booster MT3608 udsender 5V. Først - før måling - drejes trimmen med uret til enden (klik). Når spænding (3, 7V) sluttes til input, skal den give omtrent den samme værdi. Drej mod uret (du skal bruge 10-20 hele omdrejninger), og pludselig stiger spændingen. Indstil 5V forsigtigt til udgang. (Foto)

Tag et kig på den trykte nederste del af terningen. Hver komponent har sit eget hul. Det definerer, hvor lange ledninger mellem hver komponent du skal bruge (brug ikke ekstra lange ledninger, ellers får du wirejungle). (Foto)

Loddetråde mellem Arduino Nano og LED -ring kun (3 ledninger: rød 5V - 5V, sort GND - GND, blå D6 - DI). Kør LED -ringfunktionstest fra næste kapitel. (Foto)

Hvis alt er i orden, fortsæt med at tilføje Gyro MPU6050 (5 ledninger: rød 5V - VCC, sort GND - GND, blå A4 - SDA, grøn A5 - SCL, gul D2 - INT). Upload ColorCube.ino -kode og test (andre komponenter er kun til batteri og opladning). (Foto)

Hvis alt er i orden, tilføj resten af komponenterne. Der er kun røde (+) og sorte (-) ledninger. Vælg højre ben på den selvlåsende knap (ikke tilsluttet, når der ikke trykkes på). Test funktionalitet på batteri og batteriopladning. (Foto)

Røde LED -lys på TP4056 ved opladning og blå LED -lamper, når de er fuldt opladet. Hullet over TP4056 i den midterste udskrevne del sender LED -lys til den øverste del af ColorCube, og du kan genkende opladningsfasen. (Foto)

Trin 5: Kode

For det første skal du downloade de nødvendige biblioteker.

Der er detaljerede instruktioner for Adafruit Neopixel bibliotek:

LED -ringfunktionstest: Du kan teste dit kredsløb ved eksempel, der er inkluderet i biblioteket. Åbn filen fra Fil/Eksempler/Adafruit NeoPixels/simple og upload (glem ikke at konfigurere denne linje korrekt efter antallet af pixels, du bruger: #define NUMPIXELS 16).

I2Cdev og MPU6050: Download og pak ud i2cdevlib-master.zip-fil fra https://github.com/jrowberg/i2cdevlib. Kopier formularen udpakket mappe i2cdevlib-master/Arduino to undermapper: I2Cdev og MPU6050. Begge kopieres til Arduino IDE biblioteksmappe (Dokumenter/Arduino/biblioteker hvis standardinstallation).

Glem ikke at genstarte Arduino IDE, efter at biblioteker er kopieret.

#include #ifdef _AVR_ #include // Påkrævet til 16 MHz Adafruit Trinket #endif #include "Wire.h" inkluderer "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // brug pin 2 på Arduino Uno og de fleste boards #define PIN 6 #define NUMPIXELS 16 // Indstil det korrekte antal lysdioder Adafruit_NeoPixel pixels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = falsk; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Kvarternion q; VectorFloat tyngdekraft; float rotace [3]; int x, y, z; flygtig bool mpuInterrupt = falsk; void dmpDataReady () {mpuInterrupt = true; } ugyldig opsætning () {Serial.begin (115200); pixels.begin (); pixels.clear (); pixels.setBrightness (128); #if defineret (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // slutter sig til I2C -bus (I2Cdev -biblioteket gør dette ikke automatisk) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C ur. Kommenter denne linje, hvis du har problemer med kompilering #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif mens (! Seriel); Serial.println (F ("Initialiserer I2C -enheder …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // verificer forbindelsen Serial.println (F ("Test af enhedsforbindelser …")); Serial.println (mpu.testConnection ()? F ("MPU6050 forbindelse lykkedes"): F ("MPU6050 forbindelse mislykkedes")); // vent på klar // Serial.println (F ("\ nSend et tegn for at begynde DMP -programmering og demo:")); // while (Serial.available () && Serial.read ()); // tom buffer // mens (! Serial.available ()); // vent på data // mens (Serial.available () && Serial.read ()); // tom buffer igen // indlæs og konfigurer DMP Serial.println (F ("Initialiserer DMP …")); devStatus = mpu.dmpInitialize (); // angiv dine egne gyrokompensationer her, skaleret til min følsomhed mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 fabriksindstilling for min testchip // sørg for, at den fungerede (returnerer i givet fald 0) hvis (devStatus == 0) {// Kalibreringstid: generer forskydninger og kalibrer vores MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // Tænd DMP, nu hvor den er klar Serial.println (F ("Aktivering af DMP …")); mpu.setDMPEnabled (true); // aktiver Arduino -afbrydelsesdetektering Serial.print (F ("Aktivering af afbrydelsesdetektering (Arduino ekstern afbrydelse")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …"))); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // indstil vores DMP Ready -flag, så hovedsløjfen () -funktionen ved, at det er i orden at bruge det Serial.println (F ("DMP klar! Venter på første afbrydelse …")); dmpReady = sand; // få forventet DMP -pakkestørrelse til senere sammenligning packetSize = mpu.dmpGetFIFOPacketSize (); } andet {// FEJL! // 1 = initial hukommelsesindlæsning mislykkedes // 2 = DMP -konfigurationsopdateringer mislykkedes // (hvis den går i stykker, vil koden normalt være 1) Serial.print (F ("DMP -initialisering mislykkedes (kode")); Seriel. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Få den nyeste pakke // vis Euler -vinkler i grader mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& tyngdekraft, & q); mpu.dmpGetYawPitchRoll (rotace, & q, & tyngdekraft); } 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 = rotation [2] * 180/M_PI; y = rotace [1] * 180/M_PI; z = rotace [0] * 180/M_PI; hvis (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (255, 0, 0); // Rød når den drejes til side} ellers hvis (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Grøn, når du drejer til den anden side} ellers hvis (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Gul når den drejes til den tredje side} ellers hvis (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Blå når den drejes til den fjerde side} ellers hvis (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Sort, når den er på hovedet} hvis (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}

Endelig kan du åbne og uploade ColorCube.ino -filen. Læg ColorCube på en flad overflade, og tænd den. Flyt den ikke, før den begynder at lyse med hvid farve efter kalibrering (få sekunder). Dernæst kan du lægge ColorCube på siden, og farven ændrer sig - hver side har sin egen farve - rød, grøn, blå, gul. ColorCube slukker, når den vendes på hovedet.

Trin 6: Samling

Montering
Montering
Montering
Montering
Montering
Montering

Vær forsigtig under samling. Ledninger og alle dele kan ikke lide hård adfærd.

Knap 3d -udskrevet del - blødt placeret knap til hullet i den nederste udskrevne del (som vist på billedet), den skal gå glat ind og ud, hvis ikke brug skalpel eller skarp kniv eller sandpapir til at fjerne alt overskydende materiale (for det meste inde på toppen af et cirkelhul på den nederste del). (Foto)

Sæt MPU-6050, Arduino Nano, TP4056 og MT3608 til deres huller. Boksen har fremspring, hvorunder du indsætter MPU-6050 og MT3608. Sæt USB -stik fra Arduino Nano og TP4056 til deres huller i boksens sidevægge. (Foto)

Brug 3d -trykt lås til at reparere komponenter (sørg for at alle komponenter ligger tæt på bunddelen). Det er vigtigt, fordi nogen helt sikkert vil prøve at lege med din ColorCube som med terninger. (Foto)

Sæt og fastgør batteriet i dets hul, hvis det ikke holder godt fast.

Sæt selvlåsende knap til det forberedte hul i bunddelen. Selvlåsende knap skal være i ON-position (kort). Tryk forsigtigt knappen ned. Test funktionalitet med 3D -trykt knap. (fotos)

Brug to M2 -skruer til at fastgøre LED -ringen til den midterste udskrevne del. Er god at bruge orienteringen af ringen, hvor trådkontakter er i afrundet hul på den midterste udskrevne del. (fotos)

Valgfrit: Brug en dråbe varm lim hist og her - ledningsforbindelse til ring, for lange ledninger, hvis noget ikke er stramt nok osv. Det kan gøre din ColorCube mere holdbar.

Arranger ledninger inde i ColorCube for ikke at blive klemt af udskrevne dele. Sæt midterdelen til den nederste. Brug M3 -skruen til at reparere det. (Foto)

Skub forsigtigt den øverste udskrevne del til den nederste. (Foto)

Trin 7: Udført

Tillykke. Hav det sjovt.

Anbefalede: