Мазмуну:

ColorCube: 7 кадам (Сүрөттөр менен)
ColorCube: 7 кадам (Сүрөттөр менен)

Video: ColorCube: 7 кадам (Сүрөттөр менен)

Video: ColorCube: 7 кадам (Сүрөттөр менен)
Video: КАК СОБРАТЬ КУБИК РУБИКА ЗА 4 ДВИЖЕНИЯ БЕЗ АЛГОРИТМОВ И ФОРМУЛ 2024, Декабрь
Anonim
Image
Image
ColorCube
ColorCube
ColorCube
ColorCube

Бул чыракты неберем түстөрдү үйрөнүп жатканда жасадым. Мага MagicCube долбоору шыктандырды, бирок аягында бардык бөлүктөрдү нөлдөн баштап жараттым. Басып чыгаруу оңой жана чогултуу оңой жана сиз гиро модулдун кантип иштээрин билесиз.

1 -кадам: материалдар

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

Arduino бөлүгү:

  • Arduino Nano (ширетүүчү баштыктарсыз жакшы)
  • MPU-6050 3-Axis Gyro модулу
  • TP4056 Micro USB Батареяны Заряддоо модулу
  • MT3608 Step Up Power Booster Module
  • LiPo Батареясы 902936 900mA же 503035 3.7V 500mA. Сиз каалаган LiPo батарейкасын 3, 7V жана өлчөмү 35х30х15ммден аз колдоно аласыз, бирок батарейканы тешикке бекитип коюңуз.
  • PS-22F28 Өзүн-өзү бекитүүчү баскыч же PS-22F27 Өзүн-өзү бекитүүчү баскыч экөө тең басылган бөлүккө эң сонун дал келет.
  • LED RGB WS2812B Ring - 16 LED тышкы диаметри - ар кандай светодиоддор менен да каалаган шакекти колдонсоңуз болот (коддун бир константын өзгөртүүгө туура келет - #define NUMPIXELS 16), максималдуу диаметри 76мм (сиз дагы Neopixel Stickти колдоно аласыз. 8x LED же WS2812b менен каалаган LED тилкеси).

Ring мисалдары: 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 принтер
  • Мультиметр
  • Кандооч
  • Screwdriver

2 -кадам: Басып чыгаруу

Басып чыгаруу
Басып чыгаруу
Басып чыгаруу
Басып чыгаруу

ColorCubeдун бардык бөлүктөрү Autodesk Fusion360да иштелип чыккан. f3d файлы тиркелет.

ColorCube бардык демейки жөндөөлөрү менен Prusa i3 MK3S принтеринде басылган жана мен ар кандай принтерлерде эч кандай зарыл өзгөрүүлөрдү күтпөйм. PLA үчүн сүйүктүү жөндөөлөрүңүздү колдонуңуз (эгер PLAда басылган болсо, PETG же ASAны колдонууда көйгөй жок).

3D басып чыгаруу параметрлери:

  • Катмар 0,2 мм (PrusaSlicerде 0,2мм САПАТТУУ жөндөөлөр)
  • Prusament PLA Filament орнотуулары PrusaSlicerде
  • Толтуруу 15%
  • Колдоо жок
  • Жок

3 -кадам: Circuit

Circuit
Circuit

4 -кадам: ширетүү

Soldering
Soldering
Soldering
Soldering
Soldering
Soldering

Эскертүү: DC-DC күчөткүчү MT3608 5V чыгарып жатканына ишенүү үчүн көп метрди колдонуңуз. Биринчиден - өлчөө алдында - триммерди сааттын жебеси боюнча аягына чейин буруңуз (чыкылдатуу). Чыңалууну (3, 7V) туташтырганда, ал болжол менен бирдей маанини бериши керек. Сааттын жебесине каршы буруңуз (сизге 10-20 толук бурулуш керек) жана күтүлбөгөн жерден чыңалуу көтөрүлөт. Акырындык менен 5В орнотуңуз. (сүрөт)

Кубдун астынкы бөлүгүн караңыз. Ар бир компоненттин өзүнүн тешиги бар. Бул ар бир компоненттин ортосундагы канча зым керектигин аныктайт (ашыкча зымдарды колдонбоңуз, болбосо зым токой аласыз). (сүрөт)

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 кодун жүктөө жана тестирлөө (башка компоненттер батарейка жана кубаттоо үчүн гана). (сүрөт)

Эгерде баары жакшы болсо, калган компоненттерди кошуңуз. Кызыл (+) жана кара (-) зымдар гана бар. Өзүн өзү бекитүүчү баскычка оң казыктарды тандаңыз (басылбаса туташпайт). Батареяны жана батареяны заряддоонун функционалдуулугун текшериңиз. (сүрөт)

Заряддоодо TP4056 кызыл LED чырактары жана толук заряддалганда көк 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 МГц үчүн керектүү Adafruit Trinket #endif #include "Wire.h" камтыйт "I2Cdev.h" #include "MPU6050_6Axis_MotionApps20.h" MPU6050 mpu; #define INTERRUPT_PIN 2 // pin 2ни Arduino Unoдо колдонуңуз & көпчүлүк такталарда #PIN 6ны аныктаңыз #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 гравитациясы; сүзүүчү айлануу [3]; int x, y, z; туруксуз бол mpuInterrupt = false; void dmpDataReady () {mpuInterrupt = true; } void setup () {Serial.begin (115200); piksel.begin (); piksel.clear (); piksel.setBrightness (128); #if аныкталган болсо (_ 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); // 400 кГц I2C сааты. Компиляцияда кыйынчылыктар болсо, бул сапка комментарий жазыңыз #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire:: setup (400, true); #endif while (! Serial); Serial.println (F ("I2C түзмөктөрүн инициализациялоо …")); mpu.initialize (); pinMode (INTERRUPT_PIN, INPUT); // байланышты текшерүү Serial.println (F ("Түзмөктүн туташууларын текшерүү …")); Serial.println (mpu.testConnection ()? F ("MPU6050 туташуусу ийгиликтүү"): F ("MPU6050 туташуусу ишке ашпай калды")); // даяр болууну күтүңүз // Serial.println (F ("\ nDMP программалоо жана демо баштоо үчүн каалаган белгини жөнөтүңүз:")); // 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) {// Калибрлөө убактысы: офсеттерди жаратуу жана биздин 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 желегибизди койгула, ошондо негизги loop () функциясы аны колдонуунун туура экенин билет Serial.println (F ("DMP даяр! Биринчи үзгүлтүктү күтүүдө…")); dmpReady = чын; // кийинчерээк салыштыруу үчүн күтүлгөн DMP пакетинин өлчөмүн алуу packetSize = mpu.dmpGetFIFOPacketSize (); } башка {// КАТА! // 1 = эс тутумдун баштапкы жүктөлүшү ишке ашпай калды // 2 = DMP конфигурациясынын жаңыртуулары ишке ашпай калды // (эгер ал бузула турган болсо, адатта код 1 болот) Serial.print (F ("DMP башталбай калды (код")); Сериялык. басып чыгаруу (devStatus); Serial.println (F (")")); }} void loop () {if (! dmpReady) return; 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 (rotace [0] * 180/M_PI); x = rotace [2] * 180/M_PI; y = айлануу [1] * 180/M_PI; z = rotace [0] * 180/M_PI; if (abs (x) <45 && abs (y) 45 && abs (x) <135 && (abs (y) 135)) {activeColor = пиксел. Color (255, 0, 0); // Капталга бурулганда кызыл} else if if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = piksel. Color (0, 255, 0); // Экинчи тарапка бурулганда жашыл} else if if (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = пиксел. Color (255, 255, 0); // Үчүнчү тарапка бурулганда сары}} if if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = пиксель. Түс (0, 0, 255); // Төртүнчү тарапка бурулганда көк} else if if (abs (y)> 135 && abs (x)> 135) {activeColor = пиксел. Color (0, 0, 0); // Кара болгондо тескери} if (activeColor! = OldActiveColor) {piksel.clear (); piksel.fill (activeColor); piksel.show (); oldActiveColor = активдүүColor; }}

Акыры ColorCube.ino файлын ачып, жүктөй аласыз. ColorCube тегиз жерге коюп, күйгүзүңүз. Калибрлөөдөн кийин (бир нече секунд) ак түс менен жарык башталгыча аны жылдырбаңыз. Кийинки жагына ColorCube коюп, түсү өзгөрөт - ар бир тараптын өзүнүн түсү бар - кызыл, жашыл, көк, сары. ColorCube оодарылганда өчөт.

6 -кадам: чогултуу

Чогултуу
Чогултуу
Чогултуу
Чогултуу
Чогултуу
Чогултуу

Кураштырууда жумшак болуңуз. Зымдар жана бардык бөлүктөр орой мамилени жактырышпайт.

Баскычтын 3d басылган бөлүгү - баскычтын астынкы басылган бөлүгүнүн тешигине жумшак коюңуз (сүрөттө көрсөтүлгөндөй), ал скальпелди же курч бычакты же кум кагазды колдонбосо, ашыкча материалдарды алып салууга туура келет (көбүнчө ичинде асты жагындагы тегерек тешиктин үстү). (сүрөт)

MPU-6050, Arduino Nano, TP4056 жана MT3608 тешиктерине салыңыз. Кутучанын астына сиз MPU-6050 жана MT3608 кыстарган чыгуучу жерлери бар. Arduino Nano жана TP4056 USB туташтыргычтарын кутунун каптал дубалдарындагы тешиктерине салыңыз. (сүрөт)

Компоненттерди оңдоо үчүн 3d басылган кулпуну колдонуңуз (бардык компоненттер астыңкы бөлүгүнө тыгыз салынганына ишениңиз). Бул маанилүү, анткени кимдир бирөө сиздин ColorCube менен кубик сыяктуу ойногонго аракет кылат. (сүрөт)

Батарейканы бекем кармабаса, тешигине салып, бекемдеңиз.

Өзүн өзү бекитүүчү баскычты астыңкы бөлүгүндө даярдалган тешикке коюңуз. Өзүн өзү бекитүүчү баскыч ON күйүндө болушу керек (кыска). Баскычты акырын басыңыз. 3d басып баскычы менен тестирлөө функциясы. (сүрөттөр)

LED шакегин орто басылган бөлүккө бекитүү үчүн эки М2 бураманы колдонуңуз. Зымдын контактылары орто басылган бөлүктүн тегеректелген тешигинде шакектин багытын колдонуу жакшы. (сүрөттөр)

Кошумча: Бул жерде жана бул жерде бир тамчы ысык желимди колдонуңуз - зымдарды туташтыруу, өтө узун зымдар үчүн, эгерде бир нерсе жетиштүү тыгыз болбосо, ж.

ColorCube ичиндеги зымдарды басып чыгарылган бөлүктөргө кысылып калбагандай кылып уюштуруңуз. Ортоңку бөлүгүн түбүнө коюңуз. Аны оңдоо үчүн M3 бурамасын колдонуңуз. (сүрөт)

Акырында үстү басылган бөлүктү астынкы бөлүгүнө акырын түртүңүз. (сүрөт)

7 -кадам: Бүттү

Куттуктоо. Көңүл ачуу.

Сунушталууда: