Inhoudsopgave:

ColorCube: 7 stappen (met afbeeldingen)
ColorCube: 7 stappen (met afbeeldingen)

Video: ColorCube: 7 stappen (met afbeeldingen)

Video: ColorCube: 7 stappen (met afbeeldingen)
Video: how to solve rubik's cube 3x3 - cube solve magic trick #rubikscube 2024, December
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Ik maakte deze lamp voor mijn kleindochter toen ze kleuren leerde. Ik werd geïnspireerd door het MagicCube-project, maar heb uiteindelijk alle onderdelen helemaal opnieuw gemaakt. Het is gemakkelijk te printen en eenvoudig te monteren en u krijgt kennis van hoe de gyromodule werkt.

Stap 1: Materialen

Materialen
Materialen

Arduino-onderdeel:

  • Arduino Nano (beter zonder soldeerkoppen)
  • MPU-6050 3-assige gyromodule
  • TP4056 Micro USB-batterijladermodule
  • MT3608 Step-Up Power Booster-module
  • LiPo-batterij 902936 900mA of 503035 3,7V 500mA. U kunt elke LiPo-batterij gebruiken met 3, 7V en een formaat kleiner dan 35x30x15 mm, maar u moet de batterij in het gat bevestigen.
  • PS-22F28 Zelfsluitende knop of PS-22F27 Zelfsluitende knop passen beide perfect op het afgedrukte onderdeel.
  • LED RGB WS2812B Ring – 16 LED 68 mm buitendiameter - u kunt elke ring gebruiken, zelfs met een verschillend aantal LED's (moet één constante in code veranderen - #definieer NUMPIXELS 16) met een maximale diameter van 76 mm (u kunt ook een Neopixel Stick gebruiken met 8x LED of een willekeurige LED-strip met WS2812b).

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

Voor montage kunt u elk van de gaten gebruiken die in het middengedeelte zijn afgedrukt. Ze dekken bijna elke optie (niet nodig om de ring 100% gecentreerd te hebben).

Draden

Kubus

  • PLA-filament voor het bovenste deel van de kubus - gebruik een witte kleur omdat transparant niet goed is (LED's zijn zichtbaar en de kleur is niet glad), mijn aanbeveling is Prusament Vanilla White
  • PLA-filament voor onderste, middelste en knoponderdelen - gebruik een donkere kleur omdat sommige Arduino-modules lampjes aan de bovenkant hebben en het niet past bij de kleuren van kubus-LED's, mijn aanbeveling is Prusament Galaxy Black
  • 1x M3x5 zelftappende schroef - De lengte (10 mm) en de vorm van de kop is niet kritisch - schroef is niet zichtbaar
  • 2x M2x3 zelftappende schroef - De lengte (5 mm) en de vorm van de kop is niet kritisch - schroeven zijn niet zichtbaar

Gereedschap

  • 3D-printer
  • Multimeter
  • Soldeerbout
  • Schroevendraaier

Stap 2: Afdrukken

Afdrukken
Afdrukken
Afdrukken
Afdrukken

Alle onderdelen van ColorCube zijn ontworpen in Autodesk Fusion360. f3d-bestand is bijgevoegd.

De ColorCube is afgedrukt op Prusa i3 MK3S-printer met alle standaardinstellingen en ik verwacht geen noodzakelijke wijzigingen op verschillende printers. Gebruik je favoriete instellingen voor PLA (indien geprint op PLA, geen probleem om PETG of ASA te gebruiken).

3D-afdrukparameters:

  • Laag 0,2 mm (0,2 mm KWALITEIT instellingen op PrusaSlicer)
  • Prusament PLA-filamentinstellingen op PrusaSlicer
  • Invulling 15%
  • Geen steun
  • Geen rand

Stap 3: Circuit

Stroomkring
Stroomkring

Stap 4: Solderen

Solderen
Solderen
Solderen
Solderen
Solderen
Solderen

Waarschuwing: gebruik een multimeter om er zeker van te zijn dat de DC-DC-booster MT3608 5V levert. Draai eerst - voor het meten - de trim met de klok mee tot het einde (klikken). Wanneer spanning (3, 7V) op de ingang wordt aangesloten, moet deze ongeveer dezelfde waarde geven. Draai tegen de klok in (u hebt 10-20 volledige slagen nodig) en plotseling stijgt de spanning. Zet 5V zacht op uitgang. (foto)

Kijk eens naar het bedrukte onderste deel van de kubus. Elk onderdeel heeft zijn eigen gat. Het definieert hoe lang de draden tussen elk onderdeel nodig zijn (gebruik geen extra lange draden, anders krijg je draadjungle). (foto)

Alleen soldeerdraden tussen Arduino Nano en LED-ring (3 draden: rood 5V - 5V, zwart GND – GND, blauw D6 - DI). Voer de functietest van de LED-ring uit vanaf het volgende hoofdstuk. (foto)

Als alles in orde is, ga dan verder met het toevoegen van Gyro MPU6050 (5 draden: rood 5V - VCC, zwart GND - GND, blauw A4 - SDA, groen A5 – SCL, geel D2 - INT). Upload ColorCube.ino-code en test (andere componenten zijn alleen voor batterij en opladen). (foto)

Als alles in orde is, voegt u de rest van de componenten toe. Er zijn alleen rode (+) en zwarte (-) draden. Selecteer rechter pinnen op zelfvergrendelende knop (niet aangesloten wanneer niet ingedrukt). Test functionaliteit op batterij en batterij opladen. (foto)

Rode LED-lampjes op TP4056 tijdens opladen en blauwe LED-lampjes wanneer volledig opgeladen. Het gat boven de TP4056 in het middelste geprinte deel laat LED-licht door naar het bovenste deel van ColorCube en u kunt de oplaadfase herkennen. (foto)

Stap 5: Coderen

Allereerst moet u de benodigde bibliotheken downloaden.

Er zijn gedetailleerde instructies voor de Adafruit Neopixel-bibliotheek:

LED-ringfunctionaliteitstest: u kunt uw circuit testen door een voorbeeld in de bibliotheek te vinden. Open het bestand vanuit Bestand/Voorbeelden/Adafruit NeoPixels/simple en upload (vergeet niet om deze regel correct in te stellen op het aantal pixels dat u gebruikt: #define NUMPIXELS 16).

I2Cdev en MPU6050: Download en unzip het bestand i2cdevlib-master.zip van https://github.com/jrowberg/i2cdevlib. Kopieer de uitgepakte map i2cdevlib-master/Arduino twee submappen: I2Cdev en MPU6050. Beide kopiëren naar de Arduino IDE-bibliotheekmap (Documents/Arduino/libraries als standaardinstallatie).

Vergeet niet om Arduino IDE opnieuw te starten nadat bibliotheken zijn gekopieerd.

#include #ifdef _AVR_ #include // Vereist voor 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // gebruik pin 2 op Arduino Uno & de meeste boards #define PIN 6 #define NUMPIXELS 16 //Stel het juiste aantal LED's in Adafruit_NeoPixel pixels (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor=0; bool dmpReady = false; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t pakketgrootte; uint16_t fifoCount; uint8_t fifoBuffer[64]; Quaternion q; VectorFloat zwaartekracht; vlotterrotatie[3]; int x, y, z; vluchtige bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt = true; } void setup() { Serial.begin(115200); pixels.begin(); pixels.clear(); pixels.setHelderheid (128); #if gedefinieerd(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // join I2C bus (I2Cdev bibliotheek doet dit niet automatisch) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Draad.setClock(400000); // 400 kHz I2C-klok. Geef commentaar op deze regel als u compilatieproblemen heeft #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif while (!Serial); Serial.println(F("I2C-apparaten initialiseren…")); mpu.initialiseren(); pinMode (INTERRUPT_PIN, INPUT); // verifieer verbinding Serial.println (F ("Testapparaatverbindingen …")); Serial.println(mpu.testConnection() ? F("MPU6050 verbinding succesvol"): F("MPU6050 verbinding mislukt")); // wacht op gereed // Serial.println(F("\nStuur een willekeurig teken om de DMP-programmering en demo te starten: ")); // while (Serial.available() && Serial.read()); // lege buffer // while (!Serial.available()); // wacht op gegevens // while (Serial.available() && Serial.read()); // lege buffer opnieuw // laad en configureer de DMP Serial.println(F("Initializing DMP…")); devStatus = mpu.dmpInitialize(); // geef hier uw eigen gyro-offsets op, geschaald voor minimale gevoeligheid mpu.setXGyroOffset (0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset (1688); // 1688 fabrieksinstelling voor mijn testchip // zorg ervoor dat het werkte (retourneert 0 als dat zo is) if (devStatus == 0) { // Kalibratietijd: genereer offsets en kalibreer onze MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro(6); mpu. PrintActiveOffsets(); // zet de DMP aan, nu die klaar is Serial.println(F("DMP inschakelen…")); mpu.setDMPEnabled(true); // Arduino-onderbrekingsdetectie inschakelen Serial.print (F ("Interruptdetectie inschakelen (Arduino externe onderbreking")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F(")…")); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // stel onze DMP Ready-vlag zo in dat de hoofdlus()-functie weet dat het goed is om het te gebruiken Serial.println(F ("DMP ready! Waiting for first interrupt…"")); dmpReady = waar; // haal de verwachte DMP-pakketgrootte op voor latere vergelijking packetSize = mpu.dmpGetFIFOPacketSize(); } anders { // FOUT! // 1 = initiële geheugenbelasting mislukt // 2 = DMP-configuratie-updates mislukt // (als het kapot gaat, is de code meestal 1) Serial.print(F ("DMP-initialisatie mislukt (code")); Serial. print(devStatus);Serial.println(F(")")); } } void loop() { if (!dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) {// Haal het nieuwste pakket op // toon Euler-hoeken in graden mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(rotace, &q, &gravity); } Serieel.print("X "); Serial.print (rotatie [2] * 180/M_PI); Serial.print(" \t Y "); Serial.print (rotatie [1] * 180/M_PI); Serial.print(" \t Z "); Serial.println(rotace[0] * 180/M_PI); x=rotatie[2] * 180/M_PI; y=rotatie[1] * 180/M_PI; z=rotatie[0] * 180/M_PI; if(abs(x)<45 && abs(y)45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(255, 0, 0); //Rood wanneer naar de zijkant }else if(x<-45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(0, 255, 0); // Groen als je naar de tweede kant draait }else if(y>45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(255, 255, 0); // Geel als je naar de derde kant draait }else if(y<-45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color (0, 0, 255); // Blauw als je naar de vierde kant draait }else if(abs(y)>135 && abs(x)>135){ activeColor=pixels. Color (0, 0, 0); // Zwart wanneer ondersteboven } if(activeColor!= oldActiveColor){pixels.clear(); pixels.fill(actieveKleur); pixels.show(); oldActiveColor=activeColor; } }

Eindelijk kunt u het ColorCube.ino-bestand openen en uploaden. Zet de ColorCube op een vlakke ondergrond en zet hem aan. Verplaats het niet totdat het na kalibratie (enkele seconden) licht begint te worden met een witte kleur. Vervolgens kun je de ColorCube op de zijkant leggen en de kleur verandert – elke kant heeft zijn eigen kleur – rood, groen, blauw, geel. De ColorCube gaat uit als hij ondersteboven wordt gedraaid.

Stap 6: Monteren

Montage
Montage
Montage
Montage
Montage
Montage

Wees voorzichtig tijdens het monteren. Draden en alle onderdelen houden niet van ruw gedrag.

Knoop 3D-geprint onderdeel - plaats de knop zachtjes in het gat in het onderste gedrukte deel (zoals weergegeven op de afbeelding), het moet soepel in en uit gaan, zo niet, gebruik dan een scalpel of een scherp mes of schuurpapier om al het overtollige materiaal te verwijderen (meestal binnen op bovenkant van een cirkelgat op het onderste gedeelte). (foto)

Zet MPU-6050, Arduino Nano, TP4056 en MT3608 in hun gaten. De doos heeft uitsteeksels waaronder u de MPU-6050 en MT3608 plaatst. Plaats USB-connectoren van Arduino Nano en TP4056 in hun gaten in de zijwanden van de doos. (foto)

Gebruik een 3D-geprint slot om componenten te bevestigen (zorg ervoor dat alle componenten stevig op het onderste deel liggen). Het is belangrijk omdat iemand zeker zal proberen met uw ColorCube te spelen zoals met dobbelstenen. (foto)

Plaats de batterij in het gat en zet deze vast als deze niet goed vastzit.

Zet de zelfsluitende knop in het voorbereide gat in het onderste gedeelte. De zelfvergrendelende knop moet in de AAN-stand staan (kort). Druk de knop voorzichtig naar beneden. Test functionaliteit met 3D-geprinte knop. (foto's)

Gebruik twee M2-schroeven om de LED-ring aan het middelste geprinte deel te bevestigen. Het is goed om de oriëntatie van de ring te gebruiken waar de draadcontacten zich in het ronde gat van het middelste gedrukte deel bevinden. (foto's)

Optioneel: Gebruik hier en daar een druppel hete lijm - verbinding van draden met ring, voor te lange draden, als iets niet strak genoeg is, enz. Het kan uw ColorCube duurzamer maken.

Leg de draden in de ColorCube zo dat ze niet bekneld raken door geprinte onderdelen. Zet het middelste deel op de onderste. Gebruik de M3-schroef om het te bevestigen. (foto)

Duw tot slot het bovenste bedrukte deel voorzichtig naar de onderste. (foto)

Stap 7: Klaar

Gefeliciteerd. Veel plezier.

Aanbevolen: