Мазмуну:
- 1 -кадам: материалдар
- 2 -кадам: Басып чыгаруу
- 3 -кадам: Circuit
- 4 -кадам: ширетүү
- 5 -кадам: Код
- 6 -кадам: чогултуу
- 7 -кадам: Бүттү
Video: ColorCube: 7 кадам (Сүрөттөр менен)
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:39
Бул чыракты неберем түстөрдү үйрөнүп жатканда жасадым. Мага 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
4 -кадам: ширетүү
Эскертүү: 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 -кадам: Бүттү
Куттуктоо. Көңүл ачуу.
Сунушталууда:
Батарея менен иштөөчү LED Light (s) Solar Charging менен: 11 кадам (Сүрөттөр менен)
Батарея менен иштөөчү LED Жарыгы (лары) Күндүн кубаттуулугу менен: Аялым самын жасоону үйрөтөт, анын сабактарынын көбү кечинде болчу, кышында бул жерде саат 16:30 чамасында караңгы кирип калат, анын кээ бир окуучулары бизди табууда кыйналышкан. үй Бизде маңдайкы жазуу бар болчу, бирок көчө лигасы менен да
Батарея менен иштеген офис. Күн системасы Чыгыш/Батыш Күн панелдери жана шамал турбинасы менен: 11 кадам (Сүрөттөр менен)
Батарея менен иштеген офис. Күн системасы Чыгыш/Батыш Күн панелдери жана шамал турбинасы менен которулат: Долбоор: 200 чарчы фут офис батарея менен иштеши керек. Офис ошондой эле бул система үчүн зарыл болгон бардык контроллерлерди, батареяларды жана компоненттерди камтышы керек. Күн жана шамал энергиясы батареяларды заряддайт. Кичине гана көйгөй бар
Howto: Rpi-imager жана сүрөттөр менен Raspberry PI 4 Headless (VNC) орнотуу: 7 кадам (Сүрөттөр менен)
Howto: Rpi-imager жана сүрөттөр менен Raspberry PI 4 Headless (VNC) орнотуу: Мен бул блогумда кызыктуу долбоорлордун топтомунда бул Rapsberry PI колдонууну пландап жатам. Аны текшерүүдөн тартынбаңыз. Мен Raspberry PIди колдонууну каалагам, бирок жаңы жерде клавиатура же чычкан жок болчу. Мен Raspberry орнотконума бир топ убакыт болду
Battle City Remake GameGo менен Makecode Arcade менен: 4 кадам (сүрөттөр менен)
Battle City Remake GameGo менен Makecode Arcade: GameGo - бул TinkerGen STEM билим берүү тарабынан иштелип чыккан Microsoft Makecode менен шайкеш ретро оюн портативдик консолу. Бул STM32F401RET6 ARM Cortex M4 чипине негизделген жана STEM педагогдоруна же жөн эле ретро видео түзүүнү жакшы көргөн адамдар үчүн жасалган
Жөнөкөй кадамдар жана сүрөттөр менен компьютерди кантип ажыратуу керек: 13 кадам (сүрөттөр менен)
Жөнөкөй кадамдар жана сүрөттөр менен компьютерди кантип ажыратуу керек: Бул компьютерди кантип ажыратуу керектиги жөнүндө көрсөтмө. Негизги компоненттердин көбү модулдук жана оңой эле алынып салынат. Ошентсе да, бул боюнча уюштуруу маанилүү. Бул сизди бөлүктөрдү жоготпоого, ошондой эле кайра чогултууга жардам берет