Мазмұны:
- 1 -қадам: материалдар
- 2 -қадам: басып шығару
- 3 -қадам: Схема
- 4 -қадам: дәнекерлеу
- 5 -қадам: код
- 6 -қадам: жинау
- 7 -қадам: Орындалды
Бейне: ColorCube: 7 қадам (суреттермен)
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:23
Мен бұл шамды немерем түстерді үйреніп жүргенде жасадым. Мен MagicCube жобасынан шабыттандым, бірақ соңында барлық бөлшектерді нөлден бастадым. Басып шығару оңай және құрастыру оңай, сіз гиро модулінің қалай жұмыс істейтінін білесіз.
1 -қадам: материалдар
Arduino бөлігі:
- Arduino Nano (дәнекерлеу түйреуішсіз жақсы)
- MPU-6050 3 осьті гиро модулі
- TP4056 Micro USB батарея зарядтау модулі
- MT3608 Step Up Power Booster модулі
- LiPo батареясы 902936 900mA немесе 503035 3.7V 500mA. Сіз кез келген LiPo батареясын 3, 7В және көлемі 35х30х15 мм -ден аз қолдана аласыз, бірақ батареяны тесікке бекіту керек.
- PS-22F28 Өздігінен бекітілетін түйме немесе PS-22F27 өздігінен бекітілетін түйме екеуі де басылған бөлікке өте жақсы сәйкес келеді.
- Жарықдиодты RGB WS2812B сақинасы - сыртқы диаметрі 16 мм - кез келген сақинаны әр түрлі светодиодымен де қолдануға болады (кодтағы бір тұрақты мәнді өзгерту керек - #define NUMPIXELS 16), диаметрі 76 мм (сонымен қатар Neopixel таяқшасын қолдануға болады) 8x жарықдиодты немесе 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 мм (PrusaSlicer -де 0,2 мм QUALITY параметрлері)
- Prusament PLA Filament параметрлері PrusaSlicer
- 15% толтыру
- Қолдау жоқ
- Шеті жоқ
3 -қадам: Схема
4 -қадам: дәнекерлеу
Ескерту: МТ3608 тұрақты ток күшейткіші 5В шығатынына сенімді болу үшін мультиметрді қолданыңыз. Біріншіден - өлшеу алдында - жиекті сағат тілімен аяғына дейін бұрыңыз (шертіңіз). Кернеуді (3, 7В) қосқанда, ол шамамен бірдей мән беруі керек. Сағат тіліне қарсы бұраңыз (сізге 10-20 толық айналым қажет) және кенеттен кернеу көтеріледі. 5 В шығысын ақырын қосыңыз. (фото)
Кубтың басылған төменгі бөлігін қараңыз. Әр компоненттің өзіндік саңылауы бар. Ол әр компонент арасындағы қанша сым қажет болатынын анықтайды (ұзын сымдарды қолданбаңыз, әйтпесе сіз сым джунгли аласыз). (фото)
Тек Arduino Nano мен LED сақинасы арасындағы дәнекерлеу сымдары (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 кітапханасы үшін егжей -тегжейлі нұсқаулар бар:
Жарықдиодты сақинаның функционалдығын тексеру: Сіз тізбекті кітапханаға енгізілген мысалмен тексере аласыз. Файлды File/Examples/Adafruit NeoPixels/қарапайым ішінен ашыңыз және жүктеңіз (бұл жолды сіз қолданатын пиксельдер саны бойынша дұрыс орнатуды ұмытпаңыз: #Define NUMPIXELS 16).
I2Cdev және MPU6050: https://github.com/jrowberg/i2cdevlib сайтынан i2cdevlib-master.zip файлын жүктеңіз және ашыңыз. 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; #анықтаңыз 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); piksel.begin (); piksel.clear (); pixel.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); // 400 кГц I2C сағаты. Егер компиляция қиындықтары болса, осы жолға түсініктеме беріңіз #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 («\ 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) қайтару; 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 = пиксель. Түс (255, 0, 0); // Қызылға қарай бұрылғанда} else if if (x <-45 && abs (x) <135 && (abs (y) 135)) {activeColor = пиксель. Color (0, 255, 0); // Екінші жағына бұрылғанда жасыл} else if else (y> 45 && abs (y) <135 && (abs (x) 135)) {activeColor = пиксель. Color (255, 255, 0); // Үшінші жаққа бұрылғанда сары}} else if if (y <-45 && abs (y) <135 && (abs (x) 135)) {activeColor = пиксель. Color (0, 0, 255); // Төртінші жаққа бұрылғанда көк} else if else (abs (y)> 135 && abs (x)> 135) {activeColor = pixel. Color (0, 0, 0); // Қара болған кезде төңкерілген} if (activeColor! = OldActiveColor) {пиксельдер.ағар (); pixel.fill (activeColor); пиксель.шоу (); oldActiveColor = ActiveColor; }}
Соңында ColorCube.ino файлын ашуға және жүктеуге болады. ColorCube тегіс бетіне қойып, оны қосыңыз. Калибрлегеннен кейін ақ түспен ақшыл түске дейін (бірнеше секунд) қозғалмаңыз. Содан кейін ColorCube -ті бүйірге қоюға болады, түсі өзгереді - әр жақтың өзіндік түсі бар - қызыл, жасыл, көк, сары. ColorCube төңкерілген кезде өшеді.
6 -қадам: жинау
Құрастыру кезінде жұмсақ болыңыз. Сымдар мен барлық бөлшектер дөрекі мінез -құлықты ұнатпайды.
Түймешік 3d басылған бөлігі - түймені астыңғы басылған бөліктің тесігіне жайлап қойыңыз (суретте көрсетілгендей), ол барлық кірістірілген материалдарды (көбінесе ішіндегі төменгі бөлігіндегі дөңгелек тесіктің жоғарғы жағы). (фото)
MPU-6050, Arduino Nano, TP4056 және MT3608 тесіктеріне салыңыз. Қорапта MPU-6050 және MT3608 кірістірілген шығыңқы жерлер бар. Ардуино Нано мен TP4056 USB қосқыштарын қораптың бүйір қабырғаларындағы тесіктеріне қойыңыз. (фото)
Құрамдас бөліктерді түзету үшін 3d басып шығарылған құлыпты қолданыңыз (барлық компоненттер төменгі бөлігінде тығыз орналасқанына көз жеткізіңіз). Бұл маңызды, өйткені біреу сіздің ColorCube -пен сүйектермен ойнауға тырысады. (фото)
Батареяны мықтап ұстамаса, тесікке салыңыз.
Өздігінен бекітілетін түймені төменгі бөлігінде дайындалған тесікке қойыңыз. Өздігінен бекітілетін түйме ON күйінде болуы керек (қысқа). Түймені ақырын басыңыз. 3D басып шығарылған түймемен функционалдылықты тексеру. (суреттер)
Жарық диодты сақинаны ортаңғы басылған бөлікке бекіту үшін екі М2 бұрандасын қолданыңыз. Сымның контактілері ортаңғы басылған бөліктің дөңгеленген тесігінде сақинаның бағытын қолдану жақсы. (суреттер)
Қосымша: ыстық желімнің бір тамшысын қолданыңыз - сымдарды сақинамен байланыстырыңыз, тым ұзын сымдар үшін, егер бір нәрсе жеткілікті тығыз болмаса және т.
ColorCube ішіндегі сымдарды басып шығарылған бөліктерге қысылмайтын етіп орналастырыңыз. Ортаңғы бөлікті төменгі жағына қойыңыз. Оны түзету үшін M3 бұрандасын қолданыңыз. (фото)
Соңында басылған бөлікті ақырын төменге қарай итеріңіз. (фото)
7 -қадам: Орындалды
Құттықтау. Масайрау.
Ұсынылған:
DIY 37 Leds Arduino рулетка ойыны: 3 қадам (суреттермен)
DIY 37 Leds Arduino рулетка ойыны: Рулетка - бұл кішкентай дөңгелекті білдіретін француз сөзімен аталған казино ойыны
Ковидтік қауіпсіздік дулыға 1 -бөлім: Tinkercad схемаларына кіріспе: 20 қадам (суреттермен)
Covid Safety дулыға 1 -бөлім: Tinkercad схемаларына кіріспе !: Сәлеметсіз бе, дос! Бұл екі бөлімнен біз Tinkercad схемаларын қалай қолдануға болатынын білеміз - бұл схемалардың қалай жұмыс істейтінін білуге арналған көңілді, қуатты және білім беру құралы! Оқудың ең жақсы әдістерінің бірі - бұл жасау. Сонымен, біз алдымен өзіміздің жеке жобамызды жасаймыз: th
Arduino басқарылатын робот - екі қадам: 13 қадам (суреттермен)
Arduino басқарылатын роботты екіжақты: Мен әрқашан роботтарға қызығатынмын, әсіресе адамның іс -әрекетіне еліктеуге тырысатын. Бұл қызығушылық мені жаяу жүруге және жүгіруге еліктей алатын екіжақты робот құрастыруға және дамытуға талпындырды. Бұл нұсқаулықта мен сізге көрсетемін
Arduino Uno көмегімен акустикалық левитация Қадамдық қадам (8 қадам): 8 қадам
Акустикалық левитация Arduino Uno Қадамдық қадаммен (8-қадам): ультрадыбыстық дыбыс түрлендіргіштері L298N Dc әйелдер адаптерінің ток көзі еркек тоқ сымымен Arduino UNOBreadboard Бұл қалай жұмыс істейді: Біріншіден, сіз кодты Arduino Uno-ға жүктейсіз (бұл сандық жүйемен жабдықталған микроконтроллер) және кодты түрлендіру үшін аналогтық порттар (C ++)
Болт - DIY сымсыз зарядтау түнгі сағаты (6 қадам): 6 қадам (суреттермен)
Болт - DIY сымсыз зарядтау түнгі сағаты (6 қадам): Индуктивті зарядтау (сымсыз зарядтау немесе сымсыз зарядтау деп те аталады) - сымсыз қуат беру түрі. Ол портативті құрылғыларды электрмен қамтамасыз ету үшін электромагниттік индукцияны қолданады. Ең көп таралған қолданба - Qi сымсыз зарядтау