Съдържание:

ColorCube: 7 стъпки (със снимки)
ColorCube: 7 стъпки (със снимки)

Видео: ColorCube: 7 стъпки (със снимки)

Видео: ColorCube: 7 стъпки (със снимки)
Видео: Alfaparf Milano - Evolution of the Color - професионална боя за коса 2024, Декември
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Направих тази лампа за внучката си, когато тя изучаваше цветове. Бях вдъхновен от проекта MagicCube, но накрая създадох всички части от нулата. Той е лесен за отпечатване и лесен за сглобяване и ще получите знания как работи жиро модулът.

Стъпка 1: Материали

Материали
Материали

Част от Arduino:

  • Arduino Nano (по -добре без щифтове за заглавка на спойка)
  • MPU-6050 3-ос жироскоп модул
  • TP4056 Модул за зареждане на батерия Micro USB
  • MT3608 Модул за усилване на мощността
  • LiPo батерия 902936 900mA или 503035 3.7V 500mA. Можете да използвате всяка LiPo батерия с 3, 7V и размер по -малък от 35x30x15 мм, но трябва да закрепите батерията в отвора.
  • PS-22F28 Самозаключващ се бутон или PS-22F27 Самозаключващ се бутон пасва идеално на отпечатаната част.
  • LED RGB WS2812B пръстен - 16 LED 68 мм външен диаметър - можете да използвате всеки пръстен дори с различен брой светодиоди (трябва да промените една константа в кода - #define NUMPIXELS 16) с максимален диаметър 76 мм (можете да използвате и Neopixel Stick с 8x LED или всяка LED лента с WS2812b).

Примери за пръстени: 8 LED 32mm12 LED 38mm12 LED 50mm16 LED 60mm24 LED 66 mm16 LED 44mm

За монтаж можете да използвате всяка от дупки, отпечатани в средната част. Те обхващат почти всяка опция (не е необходимо да има пръстен със 100% центриране).

Проводници

Куб

  • PLA нишка за горната част на куба - използвайте бял цвят, защото прозрачният не е добър (светодиодите се виждат и цветът не е гладък), моята препоръка е Prusament Vanilla White
  • PLA нишка за долни, средни и бутони - използвайте тъмен цвят, защото някои модули Arduino имат светлини отгоре и не се вписват в цветове на куб светодиоди, моята препоръка е Prusament Galaxy Black
  • 1x самонарезен винт M3x5 - Дължината (10 мм) и формата на главата не са критични - винтът не се вижда
  • 2x самонарезен винт M2x3 - Дължината (5 мм) и формата на главата не са критични - винтовете не се виждат

Инструменти

  • 3D принтер
  • Мултиметър
  • Поялник
  • Отвертка

Стъпка 2: Отпечатване

Печат
Печат
Печат
Печат

Всички части на ColorCube са проектирани в Autodesk Fusion360. f3d файл е прикачен.

ColorCube е отпечатан на принтер Prusa i3 MK3S с всички настройки по подразбиране и не очаквам никакви необходими промени на различни принтери. Използвайте любимите си настройки за PLA (ако е отпечатано на PLA, няма проблем да използвате PETG или ASA).

Параметри на 3D печат:

  • Слой 0,2 мм (0,2 мм настройки за качество на PrusaSlicer)
  • Настройки на Prusament PLA нишки на PrusaSlicer
  • Напълнете 15%
  • Няма поддръжка
  • Без Брим

Стъпка 3: Схема

Верига
Верига

Стъпка 4: Запояване

Запояване
Запояване
Запояване
Запояване
Запояване
Запояване

Предупреждение: Използвайте мултицет, за да сте сигурни, че DC-DC усилвателят MT3608 извежда 5V. Първо - преди измерване - завъртете тапицерията по посока на часовниковата стрелка до края (щракване). Когато свържете напрежение (3, 7V) към входа, то трябва да даде приблизително същата стойност. Завъртете обратно на часовниковата стрелка (ще ви трябват 10-20 пълни оборота) и внезапно напрежението се повишава. Нагласете меко 5V на изхода. (снимка)

Погледнете отпечатаната долна част на куба. Всеки компонент има своя собствена дупка. Той определя колко дълги проводници между всеки компонент ще ви трябват (не използвайте изключително дълги проводници, в противен случай ще получите телесна джунгла). (снимка)

Запояващи проводници само между Arduino Nano и LED пръстен (3 проводника: червен 5V - 5V, черен GND - GND, син D6 - DI). Стартирайте теста за функционалност на LED пръстена от следващата глава. (снимка)

Ако всичко е наред, продължете с добавянето на Gyro MPU6050 (5 проводника: червен 5V - VCC, черен GND - GND, син A4 - SDA, зелен A5 - SCL, жълт D2 - INT). Качете ColorCube.ino код и тест (другите компоненти са само за батерия и зареждане). (снимка)

Ако всичко е наред, добавете останалите компоненти. Има само червени (+) и черни (-) проводници. Изберете десните щифтове на самозаключващия се бутон (не е свързан, когато не се натисне). Тествайте функционалността на батерията и зареждането на батерията. (снимка)

Червени LED светлини на TP4056 при зареждане и сини LED светлини при пълно зареждане. Отворът над TP4056 в средната печатна част преминава LED светлина към горната част на ColorCube и можете да разпознаете фазата на зареждане. (снимка)

Стъпка 5: Код

Първо трябва да изтеглите необходимите библиотеки.

Има подробни инструкции за библиотеката Adafruit Neopixel:

Тест за функционалност на LED пръстен: Можете да тествате веригата си чрез пример, включен в библиотеката. Отваряне на файл от Файл/Примери/Adafruit NeoPixels/просто и качване (не забравяйте да настроите правилно този ред по брой пиксели, които използвате: #define NUMPIXELS 16).

I2Cdev и MPU6050: Изтеглете и разархивирайте i2cdevlib-master.zip файл от https://github.com/jrowberg/i2cdevlib. Копирайте от разархивирана папка i2cdevlib-master/Arduino две подпапки: I2Cdev и MPU6050. И двете копират в папката на библиотеката на Arduino IDE (Документи/Arduino/библиотеки, ако е инсталирана по подразбиране).

Не забравяйте да рестартирате Arduino IDE след копиране на библиотеките.

#include #ifdef _AVR_ #include // Изисква се за 16 MHz Adafruit Trinket #endif #include "Wire.h" включва "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // използвайте щифт 2 на Arduino Uno и повечето платки #дефинирайте PIN 6 #дефинирайте NUMPIXELS 16 // Задайте правилния брой светодиоди Adafruit_NeoPixel пиксели (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); uint32_t activeColor, oldActiveColor = 0; bool dmpReady = невярно; uint8_t mpuIntStatus; uint8_t devStatus; uint16_t packetSize; uint16_t fifoCount; uint8_t fifoBuffer [64]; Кватернион q; Гравитация VectorFloat; завъртане на поплавък [3]; int x, y, z; летливи bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixels.begin (); pixels.clear (); pixels.setBrightness (128); #ако е дефиниран (_ AVR_ATtiny85_) && (F_CPU == 16000000) clock_prescale_set (clock_div_1); #endif // присъединяване към I2C шина (библиотеката I2Cdev не прави това автоматично) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin (); Wire.setClock (400000); // 400kHz I2C часовник. Коментирайте този ред, ако имате затруднения при компилирането #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, вярно); #endif while (! Сериен); Serial.println (F ("Инициализиране на I2C устройства …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // проверява връзката Serial.println (F ("Тестване на връзките на устройства …")); Serial.println (mpu.testConnection ()? F ("MPU6050 връзката е успешна"): F ("MPU6050 връзката е неуспешна")); // изчакайте готовност // Serial.println (F ("\ nИзпратете всеки знак, за да започнете програмиране и демонстрация на DMP:")); // while (Serial.available () && Serial.read ()); // празен буфер // while (! Serial.available ()); // изчакайте данни // while (Serial.available () && Serial.read ()); // отново изпразваме буфера // зареждаме и конфигурираме DMP Serial.println (F ("Инициализиране на DMP …")); devStatus = mpu.dmpInitialize (); // предоставяте тук собствени жироизмествания, мащабирани за минимална чувствителност mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // 1688 фабрична настройка за моя тестов чип // уверете се, че работи (връща 0, ако е така) if (devStatus == 0) {// Calibration Time: генерирайте отмествания и калибрирайте нашия MPU6050 mpu. CalibrateAccel (6); mpu. CalibrateGyro (6); mpu. PrintActiveOffsets (); // включете DMP, след като е готов Serial.println (F ("Активиране на DMP …")); mpu.setDMPEnabled (вярно); // активирайте откриването на прекъсвания на Arduino Serial.print (F ("Активиране на откриването на прекъсвания (Arduino външно прекъсване")); Serial.print (digitalPinToInterrupt (INTERRUPT_PIN)); Serial.println (F (") …")); attachInterrupt (digitalPinToInterrupt (INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); // задаваме флага на DMP Ready, така че функцията main loop () да знае, че е добре да го използваме Serial.println (F ("DMP готов! Изчакване на първо прекъсване …")); dmpReady = вярно; // получаваме очаквания размер на пакета DMP за по -късно сравнение packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ГРЕШКА! // 1 = първоначалното зареждане на паметта е неуспешно // 2 = актуализациите на конфигурацията на DMP са неуспешни // (ако ще се прекъсне, обикновено кодът ще бъде 1) Serial.print (F ("DMP Initialization failed (code")); Serial. print (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) връщане; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Вземете последния пакет // покажете ъглите на Ойлер в градуси mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& гравитация, & q); mpu.dmpGetYawPitchRoll (завъртане, & q, & гравитация); } Serial.print ("X"); Serial.print (завъртане [2] * 180/M_PI); Serial.print ("\ t Y"); Serial.print (завъртане [1] * 180/M_PI); Serial.print ("\ t Z"); Serial.println (завъртане [0] * 180/M_PI); x = завъртане [2] * 180/M_PI; y = завъртане [1] * 180/M_PI; z = завъртане [0] * 180/M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (255, 0, 0); // Червено, когато се обърнем настрани} else if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = pixels. Color (0, 255, 0); // Зелено, когато се обърнете към втората страна} else if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (255, 255, 0); // Жълто, когато се обърнете към третата страна} else if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = pixels. Color (0, 0, 255); // Синьо, когато се обърнете към четвъртата страна} else if (abs (y)> 135 && abs (x)> 135) {activeColor = pixels. Color (0, 0, 0); // Черно, когато е с главата надолу} if (activeColor! = OldActiveColor) {pixels.clear (); pixels.fill (activeColor); pixels.show (); oldActiveColor = activeColor; }}

Накрая можете да отворите и качите ColorCube.ino файл. Поставете ColorCube на равна повърхност и го включете. Не го премествайте, докато не започне да светва с бял цвят след калибрирането (няколко секунди). След това можете да поставите ColorCube отстрани и цветът ще се промени - всяка страна има свой собствен цвят - червен, зелен, син, жълт. ColorCube изгасва, когато е обърнат с главата надолу.

Стъпка 6: Сглобяване

Сглобяване
Сглобяване
Сглобяване
Сглобяване
Сглобяване
Сглобяване

Бъдете внимателни по време на сглобяването. Проводниците и всички части не харесват грубо поведение.

Бутон 3d отпечатана част - меко поставен бутон към отвора в долната отпечатана част (както е показано на снимката), той трябва да влиза и излиза гладко, ако не използвате скалпел или остър нож или шкурка, за да премахнете целия излишък от материала (най -вече вътре на горната част на кръглия отвор в долната част). (снимка)

Поставете MPU-6050, Arduino Nano, TP4056 и MT3608 в отворите им. Кутията има издатини, под които поставяте MPU-6050 и MT3608. Поставете USB конекторите на Arduino Nano и TP4056 към отворите им в страничните стени на кутията. (снимка)

Използвайте 3D отпечатана ключалка, за да фиксирате компонентите (уверете се, че всички компоненти са плътно поставени върху долната част). Важно е, защото някой със сигурност ще се опита да играе с вашия ColorCube като със зарове. (снимка)

Поставете и закрепете батерията в отвора си, ако не се държи здраво.

Поставете самозаключващ се бутон към подготвения отвор в долната част. Самозаключващият се бутон трябва да е в положение ON (късо). Внимателно натиснете бутона надолу. Тествайте функционалността с 3D отпечатан бутон. (снимки)

Използвайте два винта M2, за да фиксирате LED пръстена към средната отпечатана част. Добре е да използвате ориентация на пръстена, където проводниците са в заоблен отвор на средната печатна част. (снимки)

По избор: Използвайте капка горещо лепило тук -там - свързване на проводници към пръстен, за твърде дълги проводници, ако нещо не е достатъчно здраво и т.н. Това може да направи вашия ColorCube по -издръжлив.

Подредете проводниците вътре в ColorCube, за да не бъдат притискани от отпечатани части. Поставете средната част до долната. Използвайте винт M3, за да го фиксирате. (снимка)

Накрая внимателно натиснете горната отпечатана част до долната. (снимка)

Стъпка 7: Готово

Поздравления. Забавлявай се.

Препоръчано: