Spisu treści:

ColorCube: 7 kroków (ze zdjęciami)
ColorCube: 7 kroków (ze zdjęciami)

Wideo: ColorCube: 7 kroków (ze zdjęciami)

Wideo: ColorCube: 7 kroków (ze zdjęciami)
Wideo: Farba drogeryjna czy profesjonalna ⭐️ farbowanie odrostów w domu część 1 2024, Grudzień
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Zrobiłem tę lampę dla mojej wnuczki, kiedy uczyła się kolorów. Zainspirował mnie projekt MagicCube, ale ostatecznie stworzyłem wszystkie części od podstaw. Jest łatwy do wydrukowania i łatwy w montażu, a zdobędziesz wiedzę na temat działania modułu żyroskopowego.

Krok 1: Materiały

Materiały
Materiały

Część Arduino:

  • Arduino Nano (lepiej bez pinów lutowniczych)
  • MPU-6050 3-osiowy moduł żyroskopowy
  • Moduł ładowarki Micro USB TP4056
  • Moduł wzmacniacza mocy MT3608 Step Up
  • Akumulator LiPo 902936 900mA lub 503035 3,7V 500mA. Możesz użyć dowolnej baterii LiPo o napięciu 3,7V i rozmiarze mniejszym niż 35x30x15mm, ale musisz zabezpieczyć baterię w otworze.
  • PS-22F28 Przycisk samoblokujący lub PS-22F27 Przycisk samoblokujący oba idealnie pasują do drukowanej części.
  • LED RGB WS2812B Ring – 16 diod LED o średnicy zewnętrznej 68mm – można zastosować dowolny pierścień nawet z różną ilością diod (trzeba zmienić jedną stałą w kodzie – #define NUMPIXELS 16) o maksymalnej średnicy 76mm (można również użyć Neopixel Stick z 8x LED lub dowolna taśma LED z WS2812b).

Przykłady pierścieni:8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

Do montażu można wykorzystać dowolny z otworów wydrukowanych w środkowej części. Obejmują prawie każdą opcję (nie jest konieczne wyśrodkowanie pierścienia w 100%).

Przewody

Sześcian

  • Filament PLA do górnej części sześcianu – użyj koloru białego, ponieważ przezroczystość nie jest dobra (diody są widoczne, a kolor nie jest gładki), polecam Prusament Vanilla White
  • Filament PLA do części dolnej, środkowej i przycisków – użyj ciemnego koloru, ponieważ niektóre moduły Arduino mają światła na górze i nie pasuje do kolorów diod kostkowych, polecam Prusament Galaxy Black
  • 1x Wkręt samogwintujący M3x5 - Długość (10mm) i kształt łba nie jest krytyczny - śruba nie jest widoczna
  • 2x wkręt samogwintujący M2x3 - długość (5 mm) i kształt łba nie są istotne – wkręty nie są widoczne

Narzędzia

  • drukarka 3d
  • Multimetr
  • Lutownica
  • Śrubokręt

Krok 2: Drukowanie

Druk
Druk
Druk
Druk

Wszystkie części ColorCube zostały zaprojektowane w Autodesk Fusion360. plik f3d jest załączony.

ColorCube został wydrukowany na drukarce Prusa i3 MK3S ze wszystkimi domyślnymi ustawieniami i nie oczekuję żadnych niezbędnych zmian na różnych drukarkach. Użyj swoich ulubionych ustawień dla PLA (jeśli wydrukujesz na PLA, nie ma problemu z użyciem PETG lub ASA).

Parametry druku 3d:

  • Warstwa 0,2 mm (ustawienia JAKOŚCI 0,2 mm w PrusaSlicer)
  • Prusament PLA Filament ustawienia w PrusaSlicer
  • Wypełnienie 15%
  • Bez wsparcia
  • Bez brzegów

Krok 3: Obwód

Okrążenie
Okrążenie

Krok 4: Lutowanie

Lutowanie
Lutowanie
Lutowanie
Lutowanie
Lutowanie
Lutowanie

Ostrzeżenie: Użyj multimetru, aby upewnić się, że wzmacniacz DC-DC MT3608 generuje napięcie 5V. Po pierwsze – przed pomiarem – przekręć trymer zgodnie z ruchem wskazówek zegara do końca (kliknięcie). Po podłączeniu napięcia (3, 7V) do wejścia musi ono dawać mniej więcej taką samą wartość. Obróć w kierunku przeciwnym do ruchu wskazówek zegara (potrzebne będzie 10-20 pełnych obrotów) i nagle wzrośnie napięcie. Miękko ustaw 5V na wyjściu. (zdjęcie)

Spójrz na nadrukowaną dolną część kostki. Każdy element ma swój własny otwór. Określa, jak długie przewody między poszczególnymi komponentami będą potrzebne (nie używaj bardzo długich przewodów, w przeciwnym razie uzyskasz dżunglę przewodów). (zdjęcie)

Przylutuj przewody tylko pomiędzy Arduino Nano a pierścieniem LED (3 przewody: czerwony 5V - 5V, czarny GND – GND, niebieski D6 - DI). Uruchom test działania pierścienia LED z następnego rozdziału. (zdjęcie)

Jeśli wszystko jest w porządku kontynuuj dodawanie żyroskopu MPU6050 (5 przewodów: czerwony 5V - VCC, czarny GND - GND, niebieski A4 - SDA, zielony A5 - SCL, żółty D2 - INT). Prześlij kod ColorCube.ino i przetestuj (inne komponenty służą tylko do baterii i ładowania). (zdjęcie)

Jeśli wszystko jest w porządku, dodaj pozostałe składniki. Są tylko przewody czerwony (+) i czarny (-). Wybierz prawe piny na przycisku samoblokującym (niepodłączony, gdy nie jest wciśnięty). Przetestuj działanie baterii i ładowania baterii. (zdjęcie)

Czerwona dioda LED świeci na TP4056 podczas ładowania, a niebieska dioda LED świeci się po pełnym naładowaniu. Otwór nad TP4056 w środkowej części drukowanej przepuszcza światło LED do górnej części ColorCube i można rozpoznać fazę ładowania. (zdjęcie)

Krok 5: Kod

Najpierw musisz pobrać potrzebne biblioteki.

Szczegółowa instrukcja obsługi biblioteki Adafruit Neopixel:

Test funkcjonalności pierścienia LED: Możesz przetestować swój obwód na przykładzie zawartym w bibliotece. Otwórz plik z File/Examples/Adafruit NeoPixels/simple i prześlij (nie zapomnij poprawnie ustawić tej linii według liczby używanych pikseli: #define NUMPIXELS 16).

I2Cdev i MPU6050: Pobierz i rozpakuj plik i2cdevlib-master.zip z https://github.com/jrowberg/i2cdevlib. Skopiuj z rozpakowanego folderu i2cdevlib-master/Arduino dwa podfoldery: I2Cdev i MPU6050. Oba kopiują do folderu biblioteki Arduino IDE (Documents/Arduino/libraries w przypadku instalacji domyślnej).

Nie zapomnij zrestartować Arduino IDE po skopiowaniu bibliotek.

#include #ifdef _AVR_ #include // Wymagane dla 16 MHz Adafruit Trinket #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // użyj pinu 2 w Arduino Uno i większości płyt #define PIN 6 #define NUMPIXELS 16 //Ustaw poprawną liczbę diod LED Adafruit_NeoPixel pikseli (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t kolor aktywny, stary kolor aktywny=0; bool dmpReady = fałsz; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t rozmiarpakietu; uint16_t fifoCount; uint8_t fifoBuffer[64]; Kwaternion q; VectorFloat grawitacja; obrót pływaka[3]; int x, y, z; volatile bool mpuInterrupt = false; void dmpDataReady() { mpuInterrupt = prawda; } void setup() { Serial.begin(115200); piksele.początek(); piksele.wyczyść(); piksele.setJasność (128); #jeśli zdefiniowano(_AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set(clock_div_1); #endif // dołącz do magistrali I2C (biblioteka I2Cdev nie robi tego automatycznie) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // Zegar I2C 400kHz. Skomentuj tę linię, jeśli masz problemy z kompilacją #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif while (!Serial); Serial.println(F("Inicjowanie urządzeń I2C…")); mpu.initialize(); pinMode(PRZERWANIE_PIN, WEJŚCIE); // sprawdź połączenie Serial.println(F("Testowanie połączeń urządzeń…")); Serial.println(mpu.testConnection() ? F("Połączenie MPU6050 powiodło się"): F("Połączenie MPU6050 nie powiodło się")); // czekaj na gotowość // Serial.println(F("\nWyślij dowolny znak, aby rozpocząć programowanie i demo DMP: ")); // while (Serial.available() && Serial.read()); // pusty bufor // while (!Serial.available()); // czekaj na dane // while (Serial.available() && Serial.read()); // ponownie opróżnij bufor // załaduj i skonfiguruj DMP Serial.println(F("Inicjowanie DMP…")); devStatus = mpu.dmpInitialize(); // podaj tutaj własne przesunięcia żyroskopu, przeskalowane dla minimalnej czułości mpu.setXGyroOffset(0); mpu.setYGyroOffset(0); mpu.setZGyroOffset(0); mpu.setZAccelOffset(1688); // ustawienie fabryczne 1688 dla mojego układu testowego // upewnij się, że działa (zwraca 0, jeśli tak) if (devStatus == 0) { // Czas kalibracji: wygeneruj przesunięcia i skalibruj nasz MPU6050 mpu. CalibrateAccel(6); mpu. Kalibruj żyroskop(6); mpu. PrintActiveOffsets(); // włącz DMP, gdy jest gotowy Serial.println(F("Włączanie DMP…")); mpu.setDMPEwłączony(prawda); // włącz wykrywanie przerwań Arduino Serial.print(F("Włączanie wykrywania przerwań (zewnętrzne przerwanie Arduino ")); Serial.print(digitalPinToInterrupt(INTERRUPT_PIN)); Serial.println(F(")…")); attachInterrupt(digitalPinToInterrupt(PINTERRUPT_PIN), dmpDataReady, WSCHODZĄCY); mpuIntStatus = mpu.getIntStatus(); // ustaw naszą flagę DMP Ready, aby funkcja main loop() wiedziała, że można jej użyć Serial.println(F("DMP gotowy! Czekam na pierwsze przerwanie…")); dmpReady = prawda; // uzyskaj oczekiwany rozmiar pakietu DMP do późniejszego porównania packSize = mpu.dmpGetFIFOPacketSize(); } else { // BŁĄD! // 1 = ładowanie pamięci początkowej nie powiodło się // 2 = aktualizacja konfiguracji DMP nie powiodła się // (jeśli ma się zepsuć, zwykle kod to 1) Serial.print(F("Inicjalizacja DMP nie powiodła się (kod")); Serial. print(devStatus); Serial.println(F(")")); } } void loop() { if (!dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Pobierz najnowszy pakiet // wyświetl kąty Eulera w stopniach mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&grawitacja, &q); mpu.dmpGetYawPitchRoll(obrót, &q, &grawitacja); } 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=obrót[2] * 180/M_PI; y=obrót[1] * 180/M_PI; z=obrot[0] * 180/M_PI; if(abs(x)<45 && abs(y)45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(255, 0, 0); //Czerwony, gdy obróci się w bok }else if(x<-45 && abs(x)<135 && (abs(y)135)){ activeColor=pixels. Color(0, 255, 0); //Zielony po przekręceniu na drugą stronę }else if(y>45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(255, 255, 0); //Żółty po przekręceniu na trzecią stronę }else if(y<-45 && abs(y)<135 && (abs(x)135)){ activeColor=pixels. Color(0, 0, 255); //Niebieski po przekręceniu na czwartą stronę }else if(abs(y)>135 && abs(x)>135){ activeColor=pixels. Color(0, 0, 0); // Czarny, gdy do góry nogami } if(activeColor != oldActiveColor){pixel.clear(); piksele.wypełnienie(aktywnyKolor); piksele.pokaż(); staryKolorAktywny=KolorAktywny; } }

Wreszcie możesz otworzyć i przesłać plik ColorCube.ino. Połóż ColorCube o płaskiej powierzchni i włącz go. Nie ruszaj nim, dopóki po kalibracji nie zacznie świecić na biało (kilka sekund). Następnie możesz umieścić ColorCube na boku, a kolor się zmieni – każda strona ma swój własny kolor – czerwony, zielony, niebieski, żółty. ColorCube gaśnie po obróceniu do góry nogami.

Krok 6: Montaż

Montaż
Montaż
Montaż
Montaż
Montaż
Montaż

Bądź delikatny podczas montażu. Przewody i wszystkie części nie lubią szorstkiego zachowania.

Przycisk w części drukowanej 3d – delikatnie włóż przycisk w otwór w dolnej części drukowanej (jak pokazano na zdjęciu), musi on wchodzić i wychodzić płynnie, jeśli nie, użyj skalpela lub ostrego noża lub papieru ściernego, aby usunąć nadmiar materiału (głównie wewnątrz na górnej części okrągłego otworu w dolnej części). (zdjęcie)

Umieść MPU-6050, Arduino Nano, TP4056 i MT3608 w ich otworach. Pudełko posiada wypustki, pod które wkładasz MPU-6050 i MT3608. Podłącz złącza USB Arduino Nano i TP4056 do ich otworów w bocznych ściankach obudowy. (zdjęcie)

Użyj zamka z nadrukiem 3D, aby zamocować elementy (upewnij się, że wszystkie elementy są ciasno ułożone na dolnej części). To ważne, ponieważ ktoś na pewno spróbuje bawić się twoim ColorCube jak kostkami. (zdjęcie)

Włóż i zabezpiecz baterię w otworze, jeśli nie trzyma się mocno.

W przygotowany otwór w dolnej części włożyć przycisk samoblokujący. Przycisk samoblokujący musi być w pozycji ON (krótki). Delikatnie naciśnij przycisk. Przetestuj funkcjonalność za pomocą przycisku drukowanego w 3D. (zdjęcia)

Użyj dwóch śrub M2, aby przymocować pierścień LED do środkowej części drukowanej. Dobrze jest użyć orientacji pierścienia, gdzie styki przewodów znajdują się w zaokrąglonym otworze środkowej części drukowanej. (zdjęcia)

Opcjonalnie: użyj kropli gorącego kleju tu i tam – połączenie przewodów z pierścieniem, w przypadku zbyt długich przewodów, jeśli coś nie jest wystarczająco ciasne itp. Może to sprawić, że ColorCube będzie bardziej wytrzymały.

Ułóż przewody wewnątrz ColorCube tak, aby nie zostały ściśnięte przez drukowane części. Połóż środkową część na dolną. Użyj śruby M3, aby to naprawić. (zdjęcie)

Na koniec delikatnie dociśnij górną zadrukowaną część do dolnej. (zdjęcie)

Krok 7: Gotowe

Gratulacje. Baw się dobrze.

Zalecana: