Мазмұны:

Сәнді жарықдиодты қалпақ: 5 қадам (суреттермен)
Сәнді жарықдиодты қалпақ: 5 қадам (суреттермен)

Бейне: Сәнді жарықдиодты қалпақ: 5 қадам (суреттермен)

Бейне: Сәнді жарықдиодты қалпақ: 5 қадам (суреттермен)
Бейне: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Қараша
Anonim
Image
Image
Сәнді жарықдиодты қалпақ
Сәнді жарықдиодты қалпақ

Мен әрқашан Arduino жобасын жасағым келеді, бірақ менің отбасым сәнді қалпақ кешіне шақырылғанға дейін бірде -бір керемет идея болған емес. Екі апталық уақыт ішінде мен қозғалысқа сезімтал жарықдиодты анимация қалпағын жоспарлап, орындай алатынымды білгім келді. Мен қолымнан келді! Мен шамадан тыс асып кеткен шығармын, бірақ жобаның жалпы құны шамамен 80 доллар. Эксперимент және кейбір кодтау арқылы сіз мұны аз жасай аласыз.

Шляпаның мақсаты келесі болды:

  1. Шамдар жиынтығын қалпақтың алдыңғы алдыңғы жағынан артқы жағына жылжытыңыз, әр жағынан бір шам
  2. Шляпаның алдыңғы және артқы жағына еңкейтуге байланысты жарықтың қозғалу жылдамдығын өзгертіңіз
  3. Шляпалық жолақ төмен қарай қисайған кезде шамдардың кері кетуіне рұқсат етіңіз (яғни гравитацияның шамдарға әсерін еліктеңіз)
  4. Шляпаның солдан оңға қарай қисайуына қарай түсін өзгертіңіз
  5. Сезімдерді сезініп, ерекше әсер көрсетеді
  6. Иесінің айналатынын сезіп, ерекше әсер көрсетіңіз
  7. Ол шляпаның ішінде толық болуы керек

1 -қадам: қажет бөлшектер

Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер

Мен келесі негізгі компоненттерді қолдандым (серіктестік емес Amazon сілтемелері бар):

  • Teensy LC микроконтроллері - Мен оны кішкентай Arduino -дан таңдадым, ол менің жарықдиодты басқару үшін арнайы қосылымға, сонымен қатар кітапхана мен қоғамдастықтың қолдауына ие.
  • Bosch BNO055 позициялық сенсоры - шынымды айтсам, мен құжаттаманы алғашқылардың бірі болдым. Қымбат емес опциялар бар, бірақ сіз Bosch -ті анықтағаннан кейін, ол сізге көп нәрсе жасайды, әйтпесе сіз кодты жасауыңыз керек еді.
  • WS2812 адрестік жарық диодты жолағы - мен ұзындығы 1 метрді, 144 жарық диоды бар метрді таңдадым. Бұл тығыздықтың болуы жарықтың жеке элементтердің ретімен жануына емес, оның қозғалатын сияқты болуына көмектеседі.

Және келесі кіші компоненттер:

  • Шляпа - қалпақшасы бар кез келген бас киім жасайды. Бұл жергілікті дүкеннен 6 доллар тұратын бас киім. Егер оның артқы жағында тігіс болса, сымдарды өткізу оңай болады. Шляпалар жабыстырылғанына назар аударыңыз, себебі бұл қосымша қиындық тудырады. Бұл жоғарыдан тігілген, бірақ төменгі жағы оңай көтеріледі.
  • 4,7 кОм резисторлар
  • 3x ААА батарея корпусы - 3 ААА батареясын қолдану кернеуді дәл электроника қажет диапазонда шығарады, бұл жағдайды жеңілдетеді. AAA қалпаққа AA -ға қарағанда оңай сәйкес келеді және әлі де жақсы жұмыс уақыты бар.
  • Шағын калибрлі сым - мен алдыңғы жарықдиодты жобадан төселген қатты сымды қолдандым.
  • Дәнекерлеуіш пен дәнекерлеуіш
  • Бас киім мен жіптің ішкі түсіне сәйкес келетін кейбір спандекс

Ұсынылған, бірақ міндетті емес:

  • Батарея сымдарына арналған жылдам қосқыштар
  • Қолдар көмекші құралы, бұл заттар өте кішкентай және оларды дәнекерлеу қиын

2 -қадам: шляпаны өзгертіңіз

Шляпаны өзгертіңіз
Шляпаны өзгертіңіз
Шляпаны өзгертіңіз
Шляпаны өзгертіңіз
Шляпаны өзгертіңіз
Шляпаны өзгертіңіз
Шляпаны өзгертіңіз
Шляпаны өзгертіңіз

Сізге электрониканы орнататын қалпақша мен батареяға орын қажет болады. Әйелім киіммен кәсіби түрде айналысады, сондықтан мен одан кеңес пен көмек сұрадым. Біз спандексі бар екі қалта жасадық. Алдыңғы жағындағы бірінші кіші қалта шляпаның өзіне ұқсас, сондықтан электрониканы орнатқан кезде позициялық сенсор жақсы бекітілген, бірақ қажет болған жағдайда оны оңай алып тастауға болады. Артқы жағындағы екінші қалта - батарея жинағын орнында ұстау.

Қалталар шляпаның түсіне сәйкес келетін жіппен себілген. Шляпалар мен материалдардың стиліне байланысты ол YMMV -ден осы техникамен жасалған.

Біз сондай -ақ бір жағынан шляпалар байланғанын анықтадық, және ол дәл осы жерде бас киімге тігілген. Жарық диодты диапазонға қосу үшін бастапқы тігісті алып тастауға тура келді. Құрылыс кезінде ол түйреуіштермен бекітіліп, аяқталғаннан кейін сәйкес жіппен тігілген.

Ақырында біз шляпаның артқы жағындағы тігісті аштық, егер ол таспамен жабылған болса. Біз светодиодтармен бірге келген сымдарды осы тігістен өткізіп, жолақтың бірінші жарық диодын тігістің дәл жағына қойдық. Содан кейін біз жарықдиодты шляпаның айналасына орап, жолақты соңғы жарықдиодты біріншісінің жанында болатындай етіп кесіп тастадық. Жарық диодты таспаны қалпақша таспасымен ғана ұстауға болады, бірақ сіздің таспаңызға және материалыңызға байланысты жарықдиодты тігу немесе желімдеу арқылы бекіту қажет болуы мүмкін.

3 -қадам: оны қосыңыз

Сымды қосыңыз
Сымды қосыңыз

Teensy тақтасы мен светодиодтар 3.3 -тен 5В -қа дейін кез келген жерде жұмыс істейді. Сондықтан мен 3 ААА батареясын пайдалануды таңдадым, шығыс кернеуі 4,5 в осы диапазонда жақсы, және олардың жарықдиодты жұмыс істеуін бағдарламалауға арналған жұмыс уақыты көп. Сіз 8 сағаттық жұмыс уақытын жақсы алуыңыз керек.

Қуатты қосу

Мен аккумулятор қорапшасы мен светодиодтардан оң және теріс сымдарды жалғадым, содан кейін тиісті орындарда Teensy -ге дәнекерледім. Батареядан алынған позитивті диаграммадағы Teensy жоғарғы оң жақ түйреуішіне қосу керек (тақтада Вин белгісі бар), ал негативті GND деп белгіленген кез келген түйреуішке қосуға болады. Тақтаның қарама -қарсы жағында немесе Вин түйреуішінің жанында біреуі ыңғайлы. Тақтаның толық диаграммасын осы беттің төменгі жағында табуға болады. Ал кейбір жағдайларда тақтаға тапсырыс берген кезде қағаз көшірмесі қосылады.

Егер сіз бір уақытта тек бірнеше жарық диодтары қосылатын кодты іске қосуды жоспарлап отырсаңыз, 3.3в шығысы мен GND көмегімен Teensy -дан светодиодты қосуға болады, бірақ егер сіз тым көп қуат тартуға тырыссаңыз. тақтаға зақым келтіру. Өзіңізге ең көп нұсқаларды беру үшін жарықдиодты батарея көзіне тікелей қосқан дұрыс.

Жарықдиодты сымдарды қосу

Мен бұл жоба үшін Teensy LC -ді таңдадым, себебі оның істікшесі бар, ол светодиодты сымды қосуды жеңілдетеді. Тақтаның төменгі жағында №17 түйреуіштің сол жақ айналарынан екінші, бірақ сонымен бірге 3,3В бар түйреуіш бар. Бұл тарту деп аталады, ал басқа тақталарда кернеуді қамтамасыз ету үшін резисторға сым қосуға тура келеді. Teensy LC жағдайында, сіз бұл түйреуіштен тікелей светодиодтың сымына сым қосуға болады.

Позиция сенсорының сымы

Кейбір BNO055 тақталары кернеуге әлдеқайда қатал және тек 3,3 вольтты қажет етеді. Осының арқасында мен BNO055 тақтасындағы Винді Teensy -дегі арнайы 3.3в шығысынан сыммен байланыстырдым, бұл оң жақтағы 3 -ші түйреуіш. Содан кейін сіз BNO055 -тегі GND -ді Teensy -дегі кез келген GND -ге қосуға болады.

BNO055 позиция сенсоры Teensy -мен сөйлесу үшін I2c пайдаланады. I2c тартылуды талап етеді, сондықтан мен Teensy-дегі 3,3В шығудан 4,7К Ом екі резисторды 18 және 19 түйреуіштерге жалғадым. Содан кейін 19-пинді BNO055 тақтасындағы SCL түйреуішіне, ал 18-ін SDA түйреуішіне жалғадым.

Сымдар бойынша кеңестер/амалдар

Бұл жобаны орындау үшін мен тұйықталғаннан гөрі қатты сымды қолдандым. Қатты сымның бір артықшылығы - осындай прототипті тақталарға дәнекерлеу. Сіз сымды жұлып алып, 90 градусқа бүгіп, терминалдардың бірінің түбіне кіргізе аласыз, сымның кесілген ұшы тақтаның үстіне жабысып қалады. Терминалға ұстау үшін сізге аз мөлшерде дәнекерлеу керек, және сіз оның артық бөлігін оңай кесіп тастай аласыз.

Қатты сыммен жұмыс істеу қиын болуы мүмкін, себебі ол бүгілген күйінде қалғысы келеді. Алайда бұл жоба үшін бұл артықшылық болды. Мен сымдарды туралауға және бағдарламалауға электрониканы қалпақтан енгізгенде және алып тастағанда позициялық сенсордың бағыты сәйкес келетін етіп кесіп, пішімдедім.

4 -қадам: Бағдарламалау

Енді бәрі жиналғаннан кейін сізге Arduino үйлесімді бағдарламалау құралы қажет болады. Мен нақты Arduino IDE қолдандым (Linux, Mac және компьютерде жұмыс істейді). Teensyduino тақтасымен жұмыс істеу үшін сізге Teensyduino бағдарламасы қажет болады. Бұл жоба светодиодтардың түсі мен орналасуын бағдарламалау үшін FastLED кітапханасын қатты қолданады.

Калибрленуде

Сіз жасағыңыз келетін бірінші нәрсе - Крис Уинердің BNO055 үшін тамаша GitHub репозиторийіне өтіп, оның BNO_055_Nano_Basic_AHRS_t3.ino нобайын жүктеп алу. Бұл кодты сериялық монитор жұмыс істеп тұрған кезде орнатыңыз, ол сізге BNO055 тақтасы желіге дұрыс қосылғанын және өзін -өзі тексеруден өткенін айтады. Бұл сізге BNO055 калибрлеуін жүргізуге мүмкіндік береді, бұл сізге кейінірек дәйекті нәтиже береді.

Fancy LED эскизін бастау

Fancy LED қалпақшасының коды, сонымен қатар менің GitHub репозиторийімде арнайы бекітілген. Мен кодқа көбірек түзетулер енгізуді жоспарлап отырмын және олар GitHub репозиторийінде орналастырылады. Бұл нұсқаулық осы нұсқаулық жарияланған кездегі кодты көрсетеді. Эскизді жүктеп, ашқаннан кейін сізге бірнеше нәрсені өзгерту қажет болады. Өзгертуге болатын маңызды мәндердің көпшілігі #define мәлімдемелері ретінде жоғарғы жағында орналасқан:

24 -жол: NUM_LEDS 89 -ді анықтаңыз - мұны жарық диодты жолағыңыздағы светодиодтардың нақты санына өзгертіңіз

28 -жол: #SERIAL_DEBUG жалғанын анықтаңыз - сериялық монитордан шығуды көру үшін сіз мұны шындыққа айналдырғыңыз келуі мүмкін

Позицияны анықтау коды

Позицияны анықтау және сіздің көптеген түзетулеріңіз 742 жолынан басталады және 802 арқылы өтеді. Біз позиция сенсорынан Pitch, Roll және Yaw деректерін аламыз және оны мәндерді орнату үшін қолданамыз. Электроника қалай орнатылғанына байланысты оларды өзгерту қажет болуы мүмкін. Егер сіз позиция сенсорын чиппен шляпаның жоғарғы жағына орнатсаңыз және тақтада басылған X белгісінің басы шляпаның алдыңғы жағына бағытталған болса, сіз мынаны көресіз:

  • Дауыс басыңды иіп тұр
  • Ролл сіздің басыңызды қисайтады, мысалы. құлағыңызды иығыңызға тигізіңіз
  • Ия - бұл қай бағыт. сіз қарайсыз (Солтүстік, Батыс және т.

Егер сіздің тақтайшаңыз басқа бағытта орнатылса, сізге олардың қалай әрекет етуі үшін Pitch/Roll/Yaw ауыстыру қажет болады.

Roll параметрлерін реттеу үшін келесі #define мәндерін өзгертуге болады:

  • ROLLOFFSET: шляпаңыз тұрақты және мүмкіндігінше орталықтандырылған болса, егер орам 0 болмаса, оны айырмашылық бойынша өзгертіңіз. Яғни егер сіз шляпаңыз ортасында болғанда -20 -да Роллды көріп тұрсаңыз, оны 20 жасаңыз.
  • ROLLMAX: орамды өлшеу үшін қолданылатын ең үлкен мән. Бас киімді киіп, оң құлағыңызды оң иығыңызға қарай жылжыту арқылы табу оңай. Сериялық мониторды пайдалану үшін сізге ұзын USB кабелі қажет.
  • РОЛЛМИН: басыңызды солға еңкейту кезінде айналдыруды өлшеу үшін қолданылатын ең төменгі мән

Сол сияқты, Pitch үшін:

  • MAXPITCH - жоғары қараған кездегі максималды мән
  • MINPITCH - төмен қараған кездегі минималды мән
  • PITCHCENTER - тікелей алға қараған кездегі қадамның мәні

Егер сіз файлдың жоғарғы жағында SERIALDEBUG мәнін шын деп орнатсаңыз, бұл мәндерді реттеуге көмектесу үшін сериялық мониторға Roll/Pitch/Yaw шығысының ағымдағы мәндерін көруіңіз керек.

Өзгерткіңіз келетін басқа параметрлер

  • MAX_LED_DELAY 35 - жарықдиодты бөлшектердің қозғала алатын ең баяу. Бұл миллисекундтарда. Бұл жолдағы бір жарық диодынан екіншісіне ауысудың кешігуі.
  • MIN_LED_DELAY 10 - жарықдиодты бөлшектер қозғалатын ораза. Жоғарыда көрсетілгендей миллисекундтарда.

Қорытынды

Егер сіз осы жерге барсаңыз, сізде толықтай жұмыс істейтін және көңілді, жарықдиодты қалпақ болуы керек! Егер сіз онымен көбірек жұмыс жасағыңыз келсе, келесі бетте параметрлерді өзгерту және өзіңіздің жеке істеріңіз туралы қосымша ақпарат бар. сонымен қатар менің кодтың қалған бөлігі не істейтіні туралы кейбір түсініктеме.

5 -қадам: Қосымша және қосымша: Код ішінде

Соққы мен айналуды анықтау

Соқтығысу/айналуды анықтау BNO055 жоғары G сенсорлық функциялары арқылы жүзеге асады. InitBNO055 () ішіндегі келесі жолдармен оның сезімталдығын реттеуге болады:

  • № 316 жол: BNO055_ACC_HG_DURATION - оқиға қанша уақытқа созылуы керек
  • № 317 жол: BNO055_ACC_HG_THRESH - әсер қаншалықты қиын болуы керек
  • No 319 жол: BNO055_GYR_HR_Z_SET - айналу жылдамдығының табалдырығы
  • No 320 жол: BNO055_GYR_DUR_Z - айналу қанша уақытқа созылуы керек

Екі мән де 8 биттік екілік болып табылады, қазіргі уақытта әсер B11000000 -ге орнатылды, бұл 255 -тен 192 -ге тең.

Соққы немесе айналу анықталған кезде, BNO055 циклдің басында код іздейтін мәнді орнатады:

// Іске қосылған кез келген үзілістерді анықтаңыз, яғни жоғары байтқа байланысты intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS); if (intStatus> 8) {әсер (); } else if (intStatus> 0) {spin (); }

Соққыдағы әрекетті өзгерту үшін кодтан жоғарыдағы void effect () жолын немесе айналдыру әрекетін өзгерту үшін void spin () жолын іздеңіз.

Көмекшілер

Мен барлық жарықдиодты бір түске жылдам орнату үшін қарапайым көмекші функциясын (void setAllLeds ()) құрдым. Олардың барлығын өшіру үшін оны пайдаланыңыз:

setAllLeds (CRGB:: Қара);

Немесе FastLED кітапханасы таныған кез келген түсті таңдай аласыз:

setAllLeds (CRGB:: Қызыл);

FadeAllLeds () функциясы бар, ол барлық светодиодтарды 25%төмендетеді.

Бөлшектер класы

Электр сымдарын айтарлықтай жеңілдету үшін мен светодиодтардың бір жолын қолданғым келді, бірақ оларды бірнеше жіп тәрізді ұстауды жөн көрдім. Бұл менің бірінші әрекетім болғандықтан, мен оны мүмкіндігінше қарапайым етіп сақтағым келді, сондықтан мен бір жолды екіге бөлемін, ал ортаңғы жарық диодтары (с) сол жерде болады. Бізде жұп сан немесе тақ сан болуы мүмкін болғандықтан, біз мұны ескеруіміз керек. Мен бірнеше жаһандық айнымалылардан бастаймын:

/ * * Айнымалы және жарықдиодты контейнерлер */ CRGB светодиодтары [NUM_LEDS]; stat unsigned int curLedDelay = MAX_LED_DELAY; static int centerLed = NUM_LEDS / 2; static int maxLedPos = NUM_LEDS / 2; static bool oddLeds = 0; статикалық бол бөлшегіDir = 1; static bool speedDir = 1; белгісіз ұзын dirCount; қол қойылмаған ұзын реңк;

Және setup () ішіндегі кейбір код:

егер (NUM_LEDS % 2 == 1) {oddLeds = 1; maxLedPos = NUM_LEDS/2; } басқа {oddLeds = 0; maxLedPos = NUM_LEDS/2 - 1; }

Егер бізде тақ сандар болса, біз 1/2 нүктені ортасы ретінде қолданғымыз келеді, әйтпесе 1/2 нүктені алғымыз келеді - 1. Оны 10 немесе 11 жарықдиодты жарық диодты шамдар арқылы көруге болады:

  • 11 жарық диоды: бүтін сандары бар 11/2 5 -ке дейін бағалануы керек, ал компьютерлер 0 -ден санауға болады. Демек, 0 - 4 - жартысы, 6 - 10 - екінші жартысы, ал 5 - олардың арасында. Біз бұл жағдайда №5 -ті екеуінің бір бөлігі сияқты қарастырамыз, яғни жарық диодтардың екі виртуалды жолдары үшін №1.
  • 10 жарық диоды: 10/2 - 5. Бірақ компьютерлер 0 -ден санағандықтан, біз оны алып тастауымыз керек. Содан кейін бізде жартысы үшін 0 - 4, ал екіншісінде 5 - 9 болады. Бірінші виртуалды жол үшін #1 4 болады, ал екінші виртуалды жол үшін #1 #5 болады.

Содан кейін біздің бөлшек кодында біз жалпы позициядан жарықдиодты жолдағы нақты позицияға дейін санауымыз керек:

if (oddLeds) {Pos1 = centerLed + CurrPos; Pos2 = centerLed - CurrPos; } else {Pos1 = centerLed + CurrPos; Pos2 = (centerLed -1) - CurrPos; }

Сондай -ақ, кодта бөлшек бағытын өзгерте алатын шарттар бар, сондықтан біз мұны да ескеруіміз керек:

if (particleDir) {if ((CurrPos == NUM_LEDS/2) && oddLeds) {CurrPos = 0; } else if ((CurrPos == NUM_LEDS/2 - 1) && (! oddLeds)) {CurrPos = 0; } басқа {CurrPos ++; }} басқа {егер ((CurrPos == 0) && oddLeds) {CurrPos = centerLed; } else if ((CurrPos == 0) && (! oddLeds)) {CurrPos = centerLed - 1; } басқа {CurrPos--; }}

Сондықтан біз келесі бағытта қандай жарық диоды жануы керектігін есептеу үшін белгіленген бағытты (particleDir) қолданамыз, бірақ сонымен қатар біз жарық диодты жолақтың нақты ұшына немесе орталық нүктеге жеткенімізді де ескеруіміз керек. виртуалды жолдардың әрқайсысы.

Біз бәрін анықтағаннан кейін, келесі шамды қажет болған жағдайда жағамыз:

if (particleDir) {if (oddLeds) {Pos1 = centerLed + CurrPos; Pos2 = centerLed - CurrPos; } else {Pos1 = centerLed + CurrPos; Pos2 = (centerLed -1) - CurrPos; }} басқа {егер (oddLeds) {Pos1 = centerLed - CurrPos; Pos2 = centerLed + CurrPos; } else {Pos1 = centerLed - CurrPos; Pos2 = (centerLed -1) + CurrPos; }} leds [Pos1] = CHSV (CurrHue, 255, 255); leds [Pos2] = CHSV (CurrHue, 255, 255); FastLED.show ();}

Неге бұл сыныпты мүлдем жасау керек? Қалай болғанда да, бұл өте қарапайым және сыныпта болудың қажеті жоқ. Дегенмен, мен болашақта кодты жаңартуды жоспарлап отырмын, ол бір уақытта бірнеше бөлшектердің пайда болуына мүмкіндік береді, ал кейбіреулері кері бағытта жұмыс істейді, ал басқалары алға қарай жүреді. Менің ойымша, бірнеше бөлшектердің көмегімен спинді анықтаудың керемет мүмкіндіктері бар.

Ұсынылған: