Innholdsfortegnelse:

ColorCube: 7 trinn (med bilder)
ColorCube: 7 trinn (med bilder)

Video: ColorCube: 7 trinn (med bilder)

Video: ColorCube: 7 trinn (med bilder)
Video: Моя работа наблюдать за лесом и здесь происходит что-то странное 2024, Desember
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Jeg laget denne lampen til barnebarnet mitt da hun lærte farger. Jeg ble inspirert av MagicCube -prosjektet, men opprettet til slutt alle delene fra bunnen av. Det er enkelt å skrive ut og enkelt å montere, og du vil få kunnskap om hvordan gyro -modulen fungerer.

Trinn 1: Materialer

Materialer
Materialer

Arduino del:

  • Arduino Nano (bedre uten loddtekst)
  • MPU-6050 3-akset giromodul
  • TP4056 mikro USB batterilader modul
  • MT3608 Step Up Power Booster -modul
  • LiPo -batteri 902936 900mA eller 503035 3.7V 500mA. Du kan bruke et hvilket som helst LiPo -batteri med 3, 7V og størrelse mindre enn 35x30x15mm, men du må sikre batteriet i hullet.
  • PS-22F28 Selvlåsende knapp eller PS-22F27 Selvlåsende knapp passer perfekt til den trykte delen.
  • LED RGB WS2812B Ring - 16 LED 68mm ytterdiameter - du kan bruke hvilken som helst ring selv med forskjellige antall lysdioder (må endre en konstant i koden - #define NUMPIXELS 16) med maks diameter på 76mm (du kan også bruke en Neopixel Stick med 8x LED eller en hvilken som helst LED -stripe med WS2812b).

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

For montering kan du bruke alle hullene som er trykt i den midterste delen. De dekker nesten alle alternativer (ikke nødvendig for å ha ringen 100% sentrert).

Ledninger

Kube

  • PLA -filament for den øverste delen av kuben - bruk hvit farge fordi gjennomsiktig ikke er bra (lysdioder er synlige og fargen er ikke glatt), min anbefaling er Prusament Vanilla White
  • PLA -filament for bunn-, midt- og knappdeler - bruk mørk farge fordi noen Arduino -moduler har lys på toppen og den passer ikke med kube -LED -farger, min anbefaling er Prusament Galaxy Black
  • 1x M3x5 selvskruende skrue - Lengden (10 mm) og hodeformen er ikke kritisk - skruen er ikke synlig
  • 2x M2x3 selvskruende skrue - Lengden (5 mm) og hodeformen er ikke kritisk - skruer er ikke synlige

Verktøy

  • 3D -skriver
  • Multi-meter
  • Loddejern
  • Skrujern

Trinn 2: Utskrift

Printing
Printing
Printing
Printing

Alle deler av ColorCube ble designet i Autodesk Fusion360. f3d -fil er vedlagt.

ColorCube ble skrevet ut på Prusa i3 MK3S -skriveren med alle standardinnstillinger, og jeg forventer ingen nødvendige endringer på forskjellige skrivere. Bruk dine favorittinnstillinger for PLA (hvis det skrives ut på PLA, ikke noe problem å bruke PETG eller ASA).

3D -utskriftsparametere:

  • Lag 0,2 mm (0,2 mm KVALITET -innstillinger på PrusaSlicer)
  • Prusament PLA Filament -innstillinger på PrusaSlicer
  • Påfyll 15%
  • Ingen støtte
  • Ingen rand

Trinn 3: Krets

Krets
Krets

Trinn 4: Lodding

Lodding
Lodding
Lodding
Lodding
Lodding
Lodding

Advarsel: Bruk en multimeter for å være sikker på at DC-DC-booster MT3608 sender ut 5V. Først - før du måler - snu trimmen med klokken til slutten (klikk). Når du kobler spenning (3, 7V) til inngangen, må den gi omtrent samme verdi. Drei mot klokken (du trenger 10-20 hele omdreininger) og plutselig øker spenningen. Sett 5V på utgangen mykt. (bilde)

Ta en titt på den trykte nedre delen av terningen. Hver komponent har sitt eget hull. Den definerer hvor lange ledninger mellom hver komponent du trenger (ikke bruk ekstra lange ledninger, ellers får du wirejungel). (bilde)

Loddetråder mellom Arduino Nano og LED -ring bare (3 ledninger: rød 5V - 5V, svart GND - GND, blå D6 - DI). Kjør LED -ringfunksjonalitetstest fra neste kapittel. (bilde)

Hvis alt er OK, fortsett med å legge til Gyro MPU6050 (5 ledninger: rød 5V - VCC, svart GND - GND, blå A4 - SDA, grønn A5 - SCL, gul D2 - INT). Last opp ColorCube.ino -kode og test (andre komponenter er bare for batteri og lading). (bilde)

Hvis alt er i orden, legg til resten av komponentene. Det er bare røde (+) og svarte (-) ledninger. Velg høyre pinner på den selvlåsende knappen (ikke tilkoblet når den ikke trykkes). Test funksjonalitet på batteri og batterilading. (bilde)

Røde LED -lys på TP4056 ved lading og blå LED -lys når den er fulladet. Hullet over TP4056 i den midterste trykte delen passerer LED -lys til den øvre delen av ColorCube, og du kan gjenkjenne ladningsfasen. (bilde)

Trinn 5: Kode

Først må du laste ned nødvendige biblioteker.

Det er detaljerte instruksjoner for Adafruit Neopixel bibliotek:

LED -ringfunksjonalitetstest: Du kan teste kretsen din etter eksempel som er inkludert i biblioteket. Åpne filen fra Fil/Eksempler/Adafruit NeoPixels/simple og last opp (ikke glem å sette opp denne linjen riktig etter antall piksler du bruker: #define NUMPIXELS 16).

I2Cdev og MPU6050: Last ned og pakk ut i2cdevlib-master.zip-filen fra https://github.com/jrowberg/i2cdevlib. Kopier skjemaet utpakket mappe i2cdevlib-master/Arduino to undermapper: I2Cdev og MPU6050. Begge kopierer til Arduino IDE bibliotekmappe (Dokumenter/Arduino/biblioteker hvis standard installasjon).

Ikke glem å starte Arduino IDE på nytt etter at biblioteker har kopiert.

#include #ifdef _AVR_ #include // Påkrevd for 16 MHz Adafruit Trinket #endif #include "Wire.h" inkluderer "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // bruk pin 2 på Arduino Uno og de fleste boards #define PIN 6 #define NUMPIXELS 16 // Still inn riktig antall lysdioder Adafruit_NeoPixel piksler (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 tyngdekraft; float rotace [3]; int x, y, z; flyktig bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } ugyldig oppsett () {Serial.begin (115200); pixels.begin (); pixels.clear (); pixels.setBrightness (128); #if definert (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // bli med i I2C -buss (I2Cdev -biblioteket gjør ikke dette automatisk) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C klokke. Kommenter denne linjen hvis du har problemer med kompilering #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("Initialiserer I2C -enheter …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // bekreft tilkoblingen Serial.println (F ("Tilkobling av testenheter …")); Serial.println (mpu.testConnection ()? F ("MPU6050 tilkobling vellykket"): F ("MPU6050 tilkobling mislyktes")); // vent på klar // Serial.println (F ("\ nSend et hvilket som helst tegn for å begynne DMP -programmering og demo:")); // while (Serial.available () && Serial.read ()); // tom buffer // mens (! Serial.available ()); // vent på data // mens (Serial.available () && Serial.read ()); // tom buffer igjen // last inn og konfigurer DMP Serial.println (F ("Initialiserer DMP …")); devStatus = mpu.dmpInitialize (); // gi dine egne gyroforskyvninger her, skalert for min følsomhet mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 fabrikkstandard for testbrikken min // sørg for at den fungerte (returnerer 0 i så fall) hvis (devStatus == 0) {// Kalibreringstid: generer forskyvninger og kalibrer vår MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // slå på DMP, nå som den er klar Serial.println (F ("Aktiverer DMP …")); mpu.setDMPEnabled (true); // aktiver Arduino avbruddsdeteksjon Serial.print (F ("Aktiverer avbruddsdeteksjon (Arduino ekstern avbrudd")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …"))); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // sett vårt DMP Ready -flagg slik at hovedsløyfen () -funksjonen vet at det er greit å bruke det Serial.println (F ("DMP ready! Waiting for first interrupt…")); dmpReady = true; // få forventet DMP -pakkestørrelse for senere sammenligning packetSize = mpu.dmpGetFIFOPacketSize (); } annet {// FEIL! // 1 = initial minnelast mislyktes // 2 = DMP -konfigurasjonsoppdateringer mislyktes // (hvis den skal gå i stykker, vil koden vanligvis være 1) Serial.print (F ("DMP -initialisering mislyktes (kode")); Seriell. print (devStatus); Serial.println (F (")"))); }} void loop () {if (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Få den siste pakken // vis Euler -vinkler i grader mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& tyngdekraft, & q); mpu.dmpGetYawPitchRoll (rotace, & q, & gravity); } 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 = rotasjon [2] * 180/M_PI; y = rotace [1] * 180/M_PI; z = rotasjon [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 svinger til side} ellers hvis (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Grønn når du svinger til den andre siden} ellers hvis (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Gul når du svinger til den tredje siden} ellers hvis (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Blå når du svinger til fjerde side} ellers hvis (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Svart når den er opp ned} hvis (activeColor! = OldActiveColor) {pixels.clear (); piksler.fyll (activeColor); piksler.vis (); oldActiveColor = activeColor; }}

Til slutt kan du åpne og laste opp ColorCube.ino -filen. Sett ColorCube av flat overflate og slå den på. Ikke flytt den før den begynner å lyse med hvit farge etter kalibrering (noen sekunder). Deretter kan du sette ColorCube på siden og fargen endres - hver side har sin egen farge - rød, grønn, blå, gul. ColorCube slukker når den er snudd på hodet.

Trinn 6: Montering

Montering
Montering
Montering
Montering
Montering
Montering

Vær forsiktig under montering. Ledninger og alle deler liker ikke grov oppførsel.

Knapp 3d -trykt del - myk knapp til hullet i den nedre trykte delen (som vist på bildet), den må gå jevnt inn og ut, hvis ikke bruk skalpell eller skarp kniv eller sandpapir for å fjerne alt overflødig materiale (for det meste inne på toppen av et sirkelhull på nedre del). (bilde)

Sett MPU-6050, Arduino Nano, TP4056 og MT3608 i hullene. Boksen har fremspring som du setter inn MPU-6050 og MT3608 under. Sett USB -kontakter av Arduino Nano og TP4056 i hullene i boksens sidevegger. (bilde)

Bruk 3d -trykt lås for å fikse komponenter (sørg for at alle komponentene ligger tett på bunnen). Det er viktig fordi noen sikkert vil prøve å leke med ColorCube som med terninger. (bilde)

Sett batteriet i hullet hvis det ikke holder godt.

Sett den selvlåsende knappen til det forberedte hullet i den nedre delen. Selvlåsende knapp må være i PÅ-posisjon (kort). Trykk knappen forsiktig ned. Test funksjonalitet med 3d -trykt knapp. (bilder)

Bruk to M2 -skruer for å feste LED -ringen til den midterste trykte delen. Er god å bruke orienteringen av ringen der ledningskontakter er i avrundet hull på den midterste trykte delen. (bilder)

Valgfritt: Bruk en dråpe varmt lim her og der - ledningstilkobling til ring, for lange ledninger, hvis noe ikke er stramt nok osv. Det kan gjøre ColorCube mer holdbar.

Ordne ledninger inne i ColorCube for ikke å bli klemt av trykte deler. Legg den midtre delen til den nederste. Bruk M3 -skruen for å fikse den. (bilde)

Skyv til slutt forsiktig den øverste trykte delen til den nederste. (bilde)

Trinn 7: Ferdig

Gratulerer. Ha det gøy.

Anbefalt: