Оглавление:

ColorCube: 7 шагов (с изображениями)
ColorCube: 7 шагов (с изображениями)

Видео: ColorCube: 7 шагов (с изображениями)

Видео: ColorCube: 7 шагов (с изображениями)
Видео: КАК СОБРАТЬ КУБИК РУБИКА ЗА 4 ДВИЖЕНИЯ БЕЗ АЛГОРИТМОВ И ФОРМУЛ 2024, Декабрь
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Я сделал эту лампу для своей внучки, когда она учила цвета. Меня вдохновил проект MagicCube, но в итоге я создал все детали с нуля. Его легко распечатать и легко собрать, и вы узнаете, как работает гироскопический модуль.

Шаг 1: материалы

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

Часть Arduino:

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

Примеры колец: 8 светодиодов 32 мм 12 светодиодов 38 мм 12 светодиодов 50 мм 16 светодиодов 60 мм 24 светодиодов 66 мм 16 светодиодов 44 мм

Для монтажа можно использовать любое из отверстий, напечатанных в средней части. Они охватывают практически любой вариант (необязательно, чтобы кольцо было центрировано на 100%).

Провода

Куб

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

Инструменты

  • 3д принтер
  • Мультиметр
  • Паяльник
  • Отвертка

Шаг 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: пайка

Пайка
Пайка
Пайка
Пайка
Пайка
Пайка

Предупреждение: Используйте мультиметр, чтобы убедиться, что усилитель постоянного и переменного тока MT3608 выдает 5 В. Сначала - перед измерением - поверните триммер по часовой стрелке до конца (щелчок). При подаче напряжения (3,7 В) на вход он должен давать примерно такое же значение. Поверните против часовой стрелки (вам понадобится 10-20 полных оборотов) и внезапно напряжение повысится. Мягко установите 5В на выходе. (Фото)

Взгляните на распечатанную нижнюю часть куба. У каждого компонента своя дыра. Он определяет длину проводов между каждым компонентом, которые вам понадобятся (не используйте сверхдлинные провода, иначе вы получите проволочные джунгли). (Фото)

Припаяйте провода только между Arduino Nano и светодиодным кольцом (3 провода: красный 5V - 5V, черный GND - GND, синий D6 - DI). Запустите проверку работоспособности светодиодного кольца из следующей главы. (Фото)

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

Если все в порядке, добавьте остальные компоненты. Есть только красный (+) и черный (-) провода. Выберите правые штифты на самоблокирующейся кнопке (не подключены, когда не нажата). Проверить работоспособность аккумулятора и зарядки аккумулятора. (Фото)

Красный светодиод горит на TP4056 во время зарядки и синий светодиод горит при полной зарядке. Отверстие над TP4056 в средней печатной части пропускает светодиодный свет в верхнюю часть ColorCube, и вы можете распознать фазу зарядки. (Фото)

Шаг 5: Код

Сначала вам нужно скачать необходимые библиотеки.

Подробные инструкции для библиотеки Adafruit Neopixel:

Проверка работоспособности светодиодного кольца: вы можете протестировать свою схему на примере, включенном в библиотеку. Откройте файл из Файл / Примеры / Adafruit NeoPixels / simple и загрузите (не забудьте правильно настроить эту строку по количеству используемых пикселей: #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 // Требуется для Adafruit Trinket 16 МГц #endif #include "Wire.h" include "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // использовать контакт 2 на Arduino Uno и большинстве плат #define PIN 6 #define NUMPIXELS 16 // Установить правильное количество светодиодов Adafruit_NeoPixel пикселей (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]; Quaternion q; VectorFloat gravity; вращающийся поплавок [3]; int x, y, z; volatile bool mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); pixel.begin (); pixel.clear (); пикселей.setBrightness (128); #if defined (_ 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); // Тактовая частота I2C 400 кГц. Прокомментируйте эту строку, если возникают трудности с компиляцией #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #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 ("Initializing DMP…")); devStatus = mpu.dmpInitialize (); // укажите здесь свои собственные смещения гироскопа, масштабированные для минимальной чувствительности mpu.setXGyroOffset (0); mpu.setYGyroOffset (0); mpu.setZGyroOffset (0); mpu.setZAccelOffset (1688); // Заводское значение по умолчанию 1688 для моего тестового чипа // Убедитесь, что он работает (если да, то возвращает 0) if (devStatus == 0) {// Время калибровки: генерируйте смещения и откалибруйте 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, чтобы функция main loop () знала, что его можно использовать Serial.println (F («DMP готов! Ожидание первого прерывания…»)); dmpReady = true; // получить ожидаемый размер пакета DMP для последующего сравнения packetSize = mpu.dmpGetFIFOPacketSize (); } else {// ОШИБКА! // 1 = начальная загрузка памяти не удалась // 2 = не удалось обновить конфигурацию DMP // (если что-то сломается, обычно код будет 1) Serial.print (F («Ошибка инициализации DMP (код»)); Serial. печать (devStatus); Serial.println (F (")")); }} void loop () {если (! dmpReady) return; if (mpu.dmpGetCurrentFIFOPacket (fifoBuffer)) {// Получение последнего пакета // отображение углов Эйлера в градусах mpu.dmpGetQuaternion (& q, fifoBuffer); mpu.dmpGetGravity (& gravity, & q); mpu.dmpGetYawPitchRoll (вращение, & q, & гравитация); } 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 = вращение [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 = пикселей. 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 (); pixel.fill (activeColor); pixel.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, как с кубиками. (Фото)

Вставьте аккумулятор в отверстие и закрепите, если он не держится.

Вставьте Самоблокирующуюся кнопку в подготовленное отверстие в нижней части. Кнопка самоблокировки должна быть в положении ВКЛ (короткое). Осторожно нажмите кнопку. Проверьте работоспособность с помощью кнопки, напечатанной на 3D-принтере. (фото)

Используйте два винта M2, чтобы прикрепить светодиодное кольцо к средней печатной части. Целесообразно использовать ориентацию кольца, при котором контакты проводов находятся в скругленном отверстии средней печатной части. (фото)

Необязательно: используйте каплю горячего клея здесь и там - соединение проводов с кольцом, для слишком длинных проводов, если что-то недостаточно плотно и т. Д. Это может сделать ваш ColorCube более долговечным.

Расположите провода внутри ColorCube так, чтобы они не защемлялись печатными деталями. Положите среднюю часть на нижнюю. Используйте винт M3, чтобы закрепить его. (Фото)

Наконец, осторожно прижмите верхнюю часть с рисунком к нижней. (Фото)

Шаг 7: Готово

Поздравление. Повеселись.

Рекомендуемые: