Съдържание:

Интерактивна LED масичка за кафе Arduino: 6 стъпки (със снимки)
Интерактивна LED масичка за кафе Arduino: 6 стъпки (със снимки)

Видео: Интерактивна LED масичка за кафе Arduino: 6 стъпки (със снимки)

Видео: Интерактивна LED масичка за кафе Arduino: 6 стъпки (със снимки)
Видео: Привез девушку на море, а ей не понравилось. #shorts #море 2024, Юли
Anonim
Image
Image
Arduino Интерактивна LED масичка за кафе
Arduino Интерактивна LED масичка за кафе

Направих интерактивна масичка за кафе, която включва LED светлини под обект, когато обектът е поставен над масата. Само светодиодите, които са под този обект, ще светнат. Той прави това чрез ефективно използване на сензори за близост и когато сензорът за близост усети, че даден обект е достатъчно близо, той ще светне възел под този обект. Той също така използва Arduino за поставяне на анимации, които не се нуждаят от сензори за близост, но добавят наистина страхотен ефект, който просто обичам.

Сензорите за близост са изградени от фотодиоди и IR излъчватели. Излъчвателите използват инфрачервена светлина (която човешкото око не може да види), за да излъчи светлина от масата, а фотодиодите приемат инфрачервената светлина, отразена от обект. Колкото повече светлина се отразява (колкото по -близо е обектът), толкова повече се колебае напрежението, идващо от фотодиодите. Това се използва като индикатор за определяне на кой възел да светне. Възлите са колекция от светодиоди ws2812b и сензор за близост.

Прикаченото видео обхваща целия процес на изграждане, докато аз очертавам повече от подробностите по -долу.

Консумативи

  1. ws2812b LED крушки -
  2. 5V захранване -
  3. Всеки Arduino, който използвах 2560 -
  4. Фотодиоди
  5. IR излъчватели
  6. 10 ома резистори
  7. 1 MOhms резистори
  8. 47 pF кондензатори
  9. CD4051B Мултиплексори
  10. SN74HC595 Регистри за смяна
  11. ULN2803A Дарлингтън масиви
  12. Всеки субстрат, който да използвам като голяма дъска за светодиодите, използвах хартиена композитна дъска от домашно депо

Стъпка 1: Създайте платката и поставете светодиодите

Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите
Създайте платката и поставете светодиодите

Първото нещо, което направих, беше да създам дъската, която да съдържа светодиодите, които ще поставим в масичката за кафе. Използвах парче хартиен композитен картон от домашно депо и го нарязах до подходящите размери за масичката за кафе, която имах. След като изрязах дъската по размер, пробих всички дупки за мястото, където отиваха светодиодите. Самата дъска имаше 8 реда и 12 колони от светодиоди ws2812b, разделени на 3 инча един от друг, и те бяха прикрепени по серпентинен модел. Използвах горещо лепило, за да ги закрепя на място.

Трябваше също да пробия дупки в центъра на това, което ще стане възел: 4 светодиода ws2812b, които съставят квадрат, 2 фотодиода и 2 IR излъчвателя в по -малък квадрат в центъра на това. Тези 4 дупки в центъра на възела биха били петна за фотодиодите и ir излъчвателите (по 2 от всеки). Редувах ги, за да осигуря максимална експозиция, и ги поставих на около 1 инч един от друг в центъра на всеки възел. Нямаше нужда да ги залепвам горещо на място, просто огънах проводниците от другата страна, за да се уверя, че няма да излязат от другата страна. Също така се погрижих да огъна положителните и отрицателните краища в определени посоки, така че да са ориентирани правилно във веригата. Всички положителни проводници бяха от лявата страна на гърба на дъската, докато всички отрицателни проводници бяха от дясната страна на дъската.

Стъпка 2: Разберете схемата

Разберете схемата
Разберете схемата
Разберете схемата
Разберете схемата
Разберете схемата
Разберете схемата

Забележка: Всички анимирани рисунки не са точни за изпълнението (някои щифтове за arduino са различни и аз маргаритка свързвам няколко, повече за това по -късно). Крайният резултат беше малко по -различен поради сложността на веригата, но всички анимирани схеми служат като чудесна база за разбиране как да прототипирате всяка част. Редовната схема и електрическата схема са такива, каквито са на печатната платка, използвана в проекта.

ПХБ кодът, който съдържа проекта KiCad и гербер файловете, може да бъде намерен тук: https://github.com/tmckay1/interactive_coffee_tabl…, в случай че искате сами да поръчате печатни платки и да създадете подобен проект. Използвах NextPCB за създаване на дъски.

По принцип има три различни вериги, които съставят тази таблица. Първото, което няма да разгледаме подробно, е проста схема, която захранва светодиодите ws2812b. PWM сигнал за данни се изпраща от Arduino към светодиодните крушки ws2812b и контролира кои цветове къде се показват. Използваме светодиоди ws2812b, тъй като те са индивидуално адресируеми, така че ще можем да контролираме кой от светодиодите да включваме и кои да изключваме. Светодиодите ws2812b се захранват от 5V външен източник на захранване, тъй като само arduino няма достатъчно мощност, за да включи всички светлини. В приложената анимирана диаграма те използват издърпващ резистор от 330 ома, но аз не го използвам в моята конструкция.

Втората верига включва IR излъчвателите. Тази схема използва регистър за смяна за управление на масив от Дарлингтън, който изпраща захранване към IR излъчвателите. Регистърът за смяна е интегрална схема, която е в състояние да изпраща ВИСОКИ и НИСКИ сигнали към множество пинове само от малко количество щифтове. В нашия случай използваме регистър на смяна SN74HC595, който може да се управлява от 3 входа, но контролира до 8 изхода. Ползата от използването на това с arduino е, че можете да свържете последователно до 8 регистъра за смяна подред (arduino може да обработва само до 8 от тях). Това означава, че имате нужда само от 3 пина от arduino, за да включите и изключите 64 IR излъчвателя. Масивът Darlington ви позволява да захранвате устройство от външен източник, ако входният сигнал е HIGH, или да изключите захранването за това устройство, ако входният сигнал е LOW. Така че в нашия пример използваме масив от дарлингтън ULN2803A, който позволява на 5V външен източник на захранване да включва и изключва до 8 от инфрачервените излъчватели. Използваме 10 ома резистор с инфрачервени излъчватели последователно, за да получим максимален ампераж от инфрачервените излъчватели.

Третата схема използва мултиплексор за приемане на множество входове от фотодиодите и изпраща изхода в сигнал за данни. Мултиплексорът е устройство, което се използва за приемане на множество входове, от които искате да четете, и се нуждае само от няколко пина за четене от тези входове. Той може да направи и обратното (демултиплекс), но тук не го използваме за това приложение. Така че в нашия случай използваме CD4051B мултиплексор, за да приемаме до 8 сигнала от фотодиодите и имаме нужда само от 3 входа за четене от тези сигнали. Плюс това можем да свържем до 8 мултиплексора (arduino може да обработва само до 8 от тях). Това означава, че arduino може да чете от 64 от фотодиодните сигнали само от 3 цифрови пина. Фотодиодите са ориентирани с обратен отклонение, което означава, че вместо да са ориентирани в нормална посока с положителния проводник, прикрепен към източника на положително напрежение, ние определяме отрицателния проводник към източника на положително напрежение. Това ефективно превръща фотодиодите във фоторезистори, които се променят в съпротивлението в зависимост от количеството светлина, което получава. След това създаваме делител на напрежение, за да отчете напрежение, зависещо от променящото се съпротивление на фотодиодите, като добавим силно устойчив резистор от 1 MOhms към земята. Това ни позволява да получаваме по -високи и по -ниски напрежения към arduino в зависимост от това колко инфрачервена светлина получават фотодиодите.

Следвах по-голямата част от този дизайн от друг човек, който направи това тук: https://www.instructables.com/Infrared-Proximity-S… В този дизайн те също добавиха 47pF кондензатор, както правим, срещу резистора от 1 MOhm използва се за създаване на делител на напрежение с фотодиодите. Причината, поради която той го добави, е, че той пускаше и изключваше IR излъчвателите с PWM сигнал и правеше това, намалявайки малко спадане на напрежението от фотодиодите, когато IR излъчвателите бяха незабавно включени. Това накара фотодиодите да променят съпротивлението дори когато не получават повече инфрачервена светлина от обект, тъй като инфрачервените излъчватели споделят същия източник на захранване от 5V като фотодиодите. Кондензаторът беше използван, за да се увери, че няма спад на напрежението при включване и изключване на IR излъчвателите. Първоначално планирах да направя същата стратегия, но ми изтече време да я тествам, затова вместо това оставих IR излъчвателите винаги включени. Бих искал да променя това в бъдеще, но докато не препроектирам кода и схемата, в момента печатната платка е проектирана така, че инфрачервените светлини да са включени по всяко време и въпреки това запазих кондензаторите. Не трябва да имате нужда от кондензатор, ако използвате този дизайн на печатни платки, но ще въведа друга версия на печатната платка, която приема допълнителен вход към регистъра за смяна, който ще ви позволи да модулирате и изключвате IR излъчвателите. Това ще спести много от консумацията на енергия.

Можете да проверите приложените анимирани диаграми за настройка на прототип за тестване на вашия arduino. Има и по -подробна цветна схема за всяка схема, която очертава настройката и ориентацията на електронните устройства. В приложената схема на печатни платки имаме 4 общи схеми, 2 схеми, използвани за включване на инфрачервените излъчватели, и 2 вериги за отчитане от фотодиодите. Те са ориентирани върху печатни платки 2 групи една до друга с група, състояща се от 1 схема на IR излъчвател и 1 фотодиодна верига, така че 2 колони от 8 възли могат да бъдат поставени в една печатна платка. Ние също така свързваме двете вериги заедно, така че три пина от arduino могат да контролират двата регистъра на смяна, а 3 допълнителни щифта могат да контролират двата мултиплекса на платката. Има допълнителен изходен заглавие, за да можете да свързвате последователно към допълнителни печатни платки.

Ето няколко ресурса, които следвах за прототипиране:

  • https://lastminuteengineers.com/74hc595-shift-regi…
  • https://techtutorialsx.com/2016/02/08/using-a-uln2…
  • https://tok.hakynda.com/article/detail/144/cd4051be…

Стъпка 3: Запоявайте проводници към възела

Запояване на проводници към възела
Запояване на проводници към възела
Запояване на проводници към възела
Запояване на проводници към възела
Запояване на проводници към възела
Запояване на проводници към възела
Запояване на проводници към възела
Запояване на проводници към възела

Сега, когато разбирате как е направена веригата, продължете и запоявайте проводниците към всеки възел. Запоявах фотодиодите паралелно (жълти и сиви проводници) и ir излъчвателите последователно (оранжев проводник). След това запоех по -дълъг жълт проводник към фотодиодите паралелно, който ще бъде прикрепен към 5V източника на захранване, и син проводник, който ще бъде прикрепен към фотодиодния вход на печатната платка. Запоях дълъг червен проводник към веригата на IR излъчвателя, който ще се използва за свързване към 5V източника на захранване и черен проводник, който ще се свърже към входа на IR излъчвателя на печатната платка. Всъщност направих кабелите малко или къси, за да изтече времето, така че в крайна сметка можех да свържа само 5 от възлите във всяка колона (вместо 7). Смятам да поправя това по -късно.

Стъпка 4: Запоявайте компонентите на печатната платка и ги прикрепете към дъската

Запояйте компонентите на печатната платка и ги прикрепете към дъската
Запояйте компонентите на печатната платка и ги прикрепете към дъската
Запояйте компонентите на печатната платка и ги прикрепете към дъската
Запояйте компонентите на печатната платка и ги прикрепете към дъската
Запояйте компонентите на печатната платка и ги прикрепете към дъската
Запояйте компонентите на печатната платка и ги прикрепете към дъската

Забележка: Печатната платка на приложената снимка е първата версия, която направих, че нямаше входове и изходи за захранване, а също и маргаритка за всяка вътрешна верига. Новият дизайн на печатни платки коригира тази грешка.

Тук просто трябва да следвате схемата на печатната платка, за да запоявате компонентите към печатната платка и след това, след като направите това, да запоявате печатната платка към платката. Използвах външни платки, за да прикрепя 5V захранващия сигнал, който разпределих по всички жълти и червени проводници. Като се върна назад, нямах нужда от толкова дълги червени и жълти проводници и можех да свържа възлите помежду си (вместо да ги свързвам към обща външна платка). Това наистина ще намали обема на задръстванията в дъската.

Тъй като имах 8 реда с ws2812b светодиоди и 12 колони, завърших със 7 реда и 11 колони от възли (общо 77 възли). Идеята е да се използва едната страна на печатната платка за една колона от възли, а другата страна за другата колона. Тъй като имах 11 колони, имах нужда от 6 печатни платки (последната се нуждаеше само от една група компоненти). Тъй като направих проводниците твърде къси, можех да свържа само 55 възли, 11 колони и 5 реда. Можете да видите на снимката, направих грешка и запоявах суровите проводници към дъската, което би било добре, ако проводниците бяха достатъчно тънки, но в моя случай те бяха твърде дебели. Това означаваше, че имам краища на износване на жици много близо един до друг за всеки вход на IR излъчвател и вход за фотодиод, така че се получи много отстраняване на грешки от всички къси проводници. В бъдеще ще използвам конектори за свързване на печатната платка към проводниците на платката, за да избегна къси панталони и да почистя нещата.

Тъй като Arduino може да свързва само 8 манипулаторни регистъра и мултиплексори, създадох две отделни вериги, едната заема първите 8 колони, а другата заема останалите 3 колони. След това прикачих всяка верига към друга платка, която имаше само 2 мултиплексора, за да мога да чета всяка верига от сигнали за данни от мултиплексори от тези два мултиплексора в arduino. Тези два мултиплексора също бяха свързани с маргаритка. Това означава, че в arduino са били използвани общо 16 изходни сигнала и 2 аналогови входа: 1 изходен сигнал за управление на светодиодите ws2812b, 3 изходни сигнала за първата верига от регистри за смяна, 3 изходни сигнала за първата верига от мултиплексори, 3 изходни сигнала за втората верига от регистри за смяна, 3 изходни сигнала за втората верига от мултиплексори, 3 изходни сигнала за 2 -те мултиплексора, които агрегират всеки сигнал от печатни платки, и накрая 2 аналогови входа за всеки сигнал от 2 агрегирани мултиплексора.

Стъпка 5: Прегледайте кода

Забележка: В допълнение към интерактивния код по -долу използвах библиотека на трета страна за създаване на анимации за светодиодите ws2812b. Можете да намерите това тук:

Можете да намерите кода, който използвах тук:

Най -отгоре определям ардуиновите щифтове, които ще се свързват към всяка част от печатната платка. В метода за настройка задавам изходните щифтове за мултиплексорите, включвам IR излъчвателите, задавам масив baseVal, който следи отчитането на околната светлина за всеки фотодиод и инициализира FastLED, който ще записва на светодиодите ws2812b. В метода на цикъла ние нулираме списъка с светодиоди, които са назначени да бъдат включени в лентата ws2812b. След това четем стойности от фотодиодите във веригите на мултиплексора и настройваме светодиодите ws2812b, които би трябвало да са включени, ако отчитането от фотодиода в възела е над определен дефиниран праг от базовата стойност на показанията на околната светлина. След това изобразяваме светодиодите, ако има някаква промяна в възела, която трябва да бъде включена. В противен случай той продължава да се върти, докато нещо се промени, за да ускори нещата.

Кодът вероятно би могъл да бъде подобрен и се опитвам да направя това, но има около 1-2 секунди закъснение от включването на светлините, след като обект е поставен на масата. Вярвам, че основният проблем е, че FastLED отнема известно време за изобразяване на 96 -те светодиода на масата и кодът трябва да премине и да прочете 77 входа от таблицата. Опитах този код с 8 светодиода и установих, че е почти незабавен, но търся сладкото място на светодиодите, които ще работят с този код и ще бъдат почти незабавни, както и ще подобрят кода.

Стъпка 6: Включете Arduino

Включете Arduino!
Включете Arduino!
Включете Arduino!
Включете Arduino!
Включете Arduino!
Включете Arduino!

Сега всичко, което трябва да направите, е да включите arduino и да видите функцията на таблицата! Използвайки по -горе споменатата библиотека с анимации, можете да поставите някои готини анимации с ws2812b, или да поставите кода на масичката за кафе и да го видите да свети във всеки раздел. Чувствайте се свободни да коментирате всякакви въпроси или мнения и аз ще се опитам да се свържа с вас своевременно. Наздраве!

Препоръчано: