
Съдържание:
2025 Автор: John Day | [email protected]. Последно модифициран: 2025-01-23 14:36




Като мотоциклетист съм твърде запознат с това, че с мен се държат все едно съм невидим на пътя. Едно нещо, което винаги добавям към моторите си, е топ кутия, която обикновено има вградена светлина. Наскоро надстроих до нов мотор и купих кутията Givi V56 Monokey, тъй като имаше много място за предмети. Тази кутия има място за фабричен комплект светлина, който се състои от две ленти от светодиоди за всяка страна. Проблемът е, че този комплект е около 70 долара и прави само спирачки. Има комплект за следпродажбено обслужване, който вероятно прави подобни неща и може да е малко по -лесен за инсталиране, но цената ви достига до 150 долара. Като изобретателен човек и търсейки извинение да изпробвам адресируемите LED ленти, реших да направя интегрирана система, която не само да има стоп светлини, но и светлини (включени при всяко движение), мигачи и аварийни светлини. По дяволите, дори добавих стартираща последователност…. защото можех. Обърнете внимание, че това отне много работа, въпреки че трябваше да разбера много неща. Въпреки работата, аз съм доста доволен от това как се получи. Да се надяваме, че това ще бъде полезно за някой друг.
Основната операция на това как работи тази система е, че модулът Arduino търси сигнали на щифтовете: стоп светлина, ляв завой и десен завой. За да прочета 12 -волтовия сигнал от мотоциклета, използвах оптоизолатори, за да преобразувам 12V сигнала в 5V сигнал, който Arduino може да прочете. След това кодът изчаква един от тези сигнали, след което извежда командите към LED лентата, използвайки библиотеката FastLED. Това са основите, сега за да влезем в детайлите.
Консумативи
Това са нещата, които използвах, защото в по -голямата си част вече ги бях лежал. Очевидно те могат да се разменят при необходимост:
- Arduino - Използвах nano за съображения за размер, но можете да използвате каквото ви се иска, стига да имате пет щифта за използване.
- 5V регулатор - Използвах L7805CV, който можеше да работи с 1,5 ампера. Този проект ще използва 0,72 ампера за светодиодите плюс мощността за нано, така че 1,5 работи чудесно за този проект.
- Кондензатори - ще ви трябват един 0,33 uF и един 0,1 uF, за да може регулаторът на напрежението да работи правилно.
- 3x оптоизолатори - за преобразуване на сигнала от 12V в 5V. Използвах тип PC817X, който има само четири пина, което е всичко, от което се нуждаем.
- Резистори - ще ви трябват два типа, по три от всеки тип. Първият трябва да е достатъчен, за да намали тока през оптоизолатора IR LED. Ще ви трябват поне 600 ома, но 700 би било по -добра идея да се справите с променящите се напрежения на мотоциклета. Другият трябва да е някъде между 10k и 20k за бърз сигнал от другата страна на оптоизолатора.
- Прототипна дъска - Имах някои, които бяха достатъчно малки, за да се поберат в малка кутия за проектиране с малко количество подрязване.
- Проектна кутия - достатъчно голяма, за да побере компонентите, но достатъчно малка, за да се монтира лесно.
- Wire - Използвах Ethernet кабел Cat 6, защото имах много от него. Това има осем проводника, всички цветно кодирани, което помогна с всички различни връзки и беше достатъчно голям габарит, за да се справи с текущите тегления.
- Щепсели - навсякъде, където искате системата да бъде лесно сваляема. Използвах водоустойчив щепсел, за да позволя да се премахне горната кутия и да се справя с всеки дъжд или вода, които попаднат върху него. Имах нужда и от по -малки тапи за светодиодните ленти, така че не трябваше да пробивам големи дупки.
- Връзки с цип и адхезивни стойки за цип, които държат всичко на място.
- Свийте обвивката, за да подредите връзките.
Стъпка 1: Изграждане на веригата



Очевидно, ако следвате моята компилация, няма да се налага да преминавате през количеството тестове, които направих. Първото нещо, което направих, беше да се уверя, че кодът ми работи и мога правилно да получа сигнал от оптоизолаторите, както и да контролирам правилно LED лентите. Отне малко време, за да разбера как най -добре да прикрепя сигналните щифтове към изолаторите, но чрез опити и грешки открих правилната ориентация. Току -що използвах стандартна прототипна платка, тъй като само изграждах такава и измислянето на модел за проследяване би отнело повече време, отколкото си струваше. Горната част на печатната платка изглежда страхотно, но долната част изглежда малко объркана, но поне е функционална.
Основният дизайн започва с въвеждане на 12V захранване от включен източник (проводник, който е включен само когато мотоциклетът е включен). Електрическа схема наистина може да помогне за намирането на този проводник. Това се подава в едната страна на регулатора на напрежението. 0,33 uF кондензатор свързва този вход към земята на регулатора на напрежението, който след това се връща обратно към земята на мотоциклета. Изходът на регулатора на напрежението ще има 0,1uF кондензатор, свързан към земята. Тези кондензатори помагат за изглаждане на напрежението от регулатора. Ако не можете да ги намерите на снимката на платката, те са под регулатора на напрежението. Оттам 5V линията отива към Vin на Arduino, към захранващия щифт, който ще захранва LED лентите, и две към източната страна на оптоизолатора, който ще се подава към щифтовете на Arduino, осигурявайки необходимия 5V сигнал.
Що се отнася до оптоизолаторите, има две страни: едната с IR LED, а другата с транзистор с и IR детектор. Искаме да използваме IR LED страната за измерване на 12V сигнала. Тъй като светодиодът има напрежение напред 1.2V, имаме нужда от резистор за ограничаване на тока последователно. 12V - 1.2V = 10.8V и за да пуснете светодиода при 18 mA (винаги обичам да работя по -малко от 20 mA по причини за целия живот), ще ви е необходим резистор R = 10.8V/0.018A = 600 ома. Напреженията на превозните средства също са склонни да работят по -високи, потенциално до 14V, така че е по -добре да планирате това, което е около 710 ома, въпреки че 700 би било повече от разумно. След това изходът за LED страната се връща към земята. За изходната страна на оптоизолатора входът ще използва 5V сигнал от регулатора, след което изходът ще се свърже с друг резистор, преди да заземи. Този резистор просто трябва да бъде около 10k - 20k ohm, поне това показа моят лист с данни. Това ще даде бързо измерване на сигнала, тъй като нямаме работа с шумна среда. Изходът към щифта на Arduino ще излезе между резистора и изхода на оптоизолатора, така че когато сигналът е изключен, щифтът е нисък и когато сигналът е на щифта е висок.
Светодиодните ленти имат три свързани проводника: Захранване, заземяване и данни. Захранването трябва да бъде 5V. Този проект използва общо 12 светодиода (въпреки че имам повече светодиоди на лентите, но използвам само всеки трети светодиод) и всеки отнема 60mA, когато се използва бяла светлина при пълна яркост. Това дава общо 720 mA. Ние сме в рамките на изходната мощност за регулатора на напрежението, така че сме добри. Просто се уверете, че проводникът е с достатъчно голям габарит, за да се справи с захранването, използвах Ethernet проводник Cat 6 с калибър 24. Ethernet проводникът беше нещо, което седях наоколо и има 8 цветно кодирани проводника, така че работи добре за този проект. Единствените проводници, които след това трябва да преминат към самия топбокс, са захранването и земята (и двете се разделят между лентите) и две линии за данни (по една за всяка лента).
Останалата част от окабеляването се свързва към щифтовете на arduino и го захранва. Щифтовете, използвани за този проект, бяха следните:
- Vin - свързан към 5V
- Gnd - свързан към земята
- Pin2 - свързан към лявата линия за данни
- Pin3 - свързан към линия за данни от дясната лента
- Pin4 - свързан със спирачен сигнал от оптоизолатора
- Pin5 - свързан с ляв мигач от оптоизолатора
- Pin6 - свързан с десен мигач от оптоизолатора
Стъпка 2: Окабеляване и инсталиране



След като веригата е изградена, идва моментът действително да я свържете на място. Използвайки схемата на окабеляване за вашия мотор, ще трябва да намерите следното:
- Превключено захранване
- Земя
- Спирачен сигнал вход
- Ляв мигач
- Десен мигач
За моята имаше един единствен щепсел, на който имаше всички тези, така че просто използвах това. С достатъчно време може би щях да намеря същия стил на включване и просто да направя модул за включване, но не го направих, така че просто премахнах изолацията на места и запоявах новия проводник към него. Използвах щепсели на тези снадени връзки, за да мога да премахна останалите, ако някога ми се наложи в бъдеще. Оттам поставих Arduino, който сега е в запечатана кутия за проекти, под седалката, където го прикрепих. След това изходният кабел минава по рамката на багажника до водоустойчив щепсел, след това влиза в кутията и минава по гърба към капака, където се разделя за всяка страна. Проводниците преминават по вътрешната страна на капака до точката, където са връзките за светодиодите. Телта е помощна на място с помощта на ципове, прикрепени към външни стойки с цип с лепилна основа. Можете да ги намерите в раздела за кабелни инсталации в магазин за подобряване на дома
Използвах два мини JST щекера на LED лентите, защото имах нужда от щепсел, достатъчно малък, за да мине през отвор с минимален диаметър и защото исках да се уверя, че има достатъчно проводник, който да се справи с настоящите изисквания. Отново може да е било прекалено много и нямах никакви малки щепсели с три жици под ръка. Дупката в кутията, през която могат да преминат проводниците на светлинната лента, беше запечатана, за да се предотврати навлизането на вода. Що се отнася до позиционирането на LED лентите, тъй като има леко несъответствие в разстоянието (имаше около 1 - 1,5 мм разлика в разстоянието между отворите в рефлектора и светодиодите) ги позиционирах така, че да разделят разликата между LED и дупката колкото е възможно повече. След това използвах горещо лепило, за да ги залепя на място и уплътнител, за да запечата напълно зоната. Самите LED ленти са водоустойчиви, така че няма проблем, ако се намокрят. Въпреки че изглежда много за инсталиране, това улеснява премахването на системата в бъдеще или са необходими подмяна на части, защото това може да се случи.
Стъпка 3: Кодът
Моят изходен код трябва да е в началото на тази инструкция. Винаги коментирам кода си силно, за да е по -лесно да се разбере по -късно. Отказ от отговорност: Аз не съм професионален писател на кодове. Кодът беше написан по метод, който беше по -лесен за стартиране и бяха направени някои подобрения, но знам, че може да бъде по -усъвършенстван. Аз също използвам голямо количество функция delay () за време, което не е толкова идеално. Въпреки това, сигналите, които устройството получава, не са бързи сигнали в сравнение, така че все още се чувствах оправдано да ги държа да използват нещо като millis (). Аз също съм много зает баща и съпруг, така че отделянето на време за подобряване на нещо, което в крайна сметка няма да промени функцията, не е високо в списъка.
За този проект е необходима само една библиотека, която е библиотеката FastLED. Това съдържа целия код за управление на LED ленти от тип WS2811/WS2812B. Оттам ще разгледам основните функции, които ще се използват.
Първата, различна от стандартните дефиниции, е да декларирате двете си ленти. Ще използвате следния код за всяка лента:
FastLED.addLeds (светодиоди [0], NUM_LEDS);
Този ред код настройва Pin 2 определя тази лента като лента 0 с броя на светодиодите, дефинирани от константата NUM_LEDS, която в моя случай е зададена на 16. За да определите втората лента, 2 ще стане 3 (за pin3) и лентата ще бъде обозначена като лента 1.
Следващият ред, който ще бъде важен, е дефиницията на цвета.
светодиоди [0] [1] = Цвят_висок CRGB (r, g, b);
Този ред код се използва, макар и в различен вид (повечето от мен използват константа). По принцип този код изпраща стойност към всеки от LED каналите (червен, зелен, син), която определя всяка яркост. Стойността на яркостта може да бъде определена с число 0 - 255. Чрез промяна на нивото на яркост за всеки канал можете да определите различни цветове. За този проект искам бял цвят, за да запази светлината възможно най -ярка. Така че единствените промени, които правя, е да задам еднакво ниво на яркост за трите канала.
Следващият набор от кодове се използва за индивидуално осветяване на всяка светлина. Имайте предвид, че за всяка лента всеки светодиод има адрес, който започва от 0 за най -близкия до връзката на линията за данни чак до най -големия светодиод, който имате минус 1. Например, това са 16 LED ленти, така че най -високата е 16 - 1 = 15. Причината за това е, че първият светодиод е означен с 0.
for (int i = NUM_LEDS -1; i> -1; i = i -3) {// Това ще промени светлината за всеки трети светодиод, преминаващ от последния към първия. светодиоди [0] = Color_low; // Задайте лентата 0 LED цвят към избрания цвят. светодиоди [1] = Color_low; // Задайте цвета на LED 1 на избрания цвят. FastLED.show (); // Показване на зададените цветове. светодиоди [0] = CRGB:: Черен; // Изключете зададения цвят при подготовката за следващия цвят. светодиоди [1] = CRGB:: Черен; забавяне (150); } FastLED.show (); // Показване на зададените цветове.
Начинът, по който работи този код, е, че променлива (i) се използва в рамките на цикъл for като LED адрес, който след това се препраща към пълния брой светодиоди (NUM_LEDS). Причината за това е, че искам светлините да стартират в края на лентата, а не в началото. Настройката се извежда и на двете ленти (светодиоди [0] и светодиоди [1]), след което се издава команда за показване на промяната. След това светлината се изключва (CRGB:: Черен) и следващата лампа светва. Черната справка е специфичен цвят в библиотеката FastLED, така че не е нужно да издавам 0, 0, 0 за всеки канал, въпреки че те биха направили същото. Цикълът For напредва 3 светодиода наведнъж (i = i-3), тъй като използвам само всеки друг светодиод. В края на този цикъл светлинната последователност ще премине от един светодиод към следващия само с един светещ на лента, нещо като ефект на Knight Rider. Ако искате да запалите всяка светлина осветена, така че лентата да се изгражда, просто ще премахнете линиите, които изключват светодиодите, което се случва в следващия набор от код в програмата.
for (int i = 0; i <dim; i ++) {// Бързо избледняване на светлините до ниво на светлината. rt = rt + 1; gt = gt + 1; bt = bt + 1; for (int i = 9; i <NUM_LEDS; i = i +3) {// Това ще светне последните три светлини за габаритната светлина. светодиоди [0] = CRGB (rt, gt, bt); // Задайте лентата 0 LED цвят към избрания цвят. светодиоди [1] = CRGB (rt, gt, bt); // Задайте цвета на LED 1 на избрания цвят. } FastLED.show (); забавяне (3); }
Последният пример за код, който използвам за светодиодите, е цикъл на избледняване. Тук използвам временни слотове за яркостта за всеки канал (rt, gt, bt) и ги увеличавам с 1 със закъснение между всяко показване, за да постигна желания вид. Също така имайте предвид, че този код променя само последните три светодиода, тъй като той избледнява в ходовите светлини, така че започвам от 9, а не от 0.
Останалата част от LED кода са итерации от тях. Всичко останало е фокусирано около търсене на сигнал по трите различни проводника. Областта Loop () на кода търси спирачни светлини, които ще мига веднъж, преди да остане включена (това може да се регулира при желание) или да търси мигачи. За този код, тъй като не можех да предположа, че светлините за завой наляво и надясно ще светнат точно по едно и също време за опасности, аз имам кода първо да потърся един от тях, след което след малко забавяне проверявам дали и двете са включени аварийните светлини светят. Единствената сложна част, която имах, бяха мигачите, защото светлината ще изгасне за известно време, така че как да различа разликата между сигнала, който все още е включен, но в периода на изключване, и отменен сигнал? Това, което измислих, беше внедряване на цикъл на забавяне, който е настроен да продължи по -дълго от забавянето между сигналните мигания. Ако мигачът все още е включен, сигналната верига ще продължи. Ако сигналът не се върне, когато забавянето приключи, той се връща към началото на цикъла (). За да регулирате дължината на закъснението, променете броя на постоянната светлина Забавяне на запомнянето за всеки 1 в светлината Закъснението се променя със 100ms.
while (digitalRead (leftTurn) == LOW) {for (int i = 0; i <lightDelay; i ++) {leftTurnCheck (); if (digitalRead (leftTurn) == HIGH) {leftTurnLight (); } забавяне (100); } for (int i = 0; i <NUM_LEDS; i = i +3) {// Това ще промени светлината за всеки трети светодиод, преминаващ от последния към първия. светодиоди [0] = CRGB (0, 0, 0); // Задайте лента 0 LED цвят към избрания цвят. } for (int i = 9; i <NUM_LEDS; i = i +3) {// Това ще настрои ходовите светлини, които използват само последните три. светодиоди [0] = Color_low; // Задайте лентата 0 LED цвят към избрания цвят. } FastLED.show (); // Изходните настройки се връщат; // След като мигачът вече не е включен, върнете се към цикъла. }
Надяваме се, че останалата част от кода е ясна. Това е просто повтарящ се набор от проверки и действия по сигнали.
Стъпка 4: Резултати

Удивителната част беше, че тази система заработи първия път, когато я свързах с мотора. Сега, за да бъда честен, преди това го тествах силно на пейката, но все пак очаквах да има проблем или корекция. Оказа се, че не е нужно да правя никакви корекции в кода, както и във връзките. Както можете да видите във видеото, системата преминава през стартовата последователност (която не е задължително да имате), след което по подразбиране преминава към светлини. След това търси спирачките, в който случай ще светне всички светодиоди до пълна яркост и ще ги премигне веднъж, преди да остане включен, докато спирачките не се освободят. Когато се използва мигач, направих ефект на превъртане за страната, в която е посочен завойът, а другата страна ще бъде или светлини, или стоп светлина, ако е включена. Светлините за опасност просто ще мигат във времето с другите светлини.
Надявам се с тези допълнителни светлини да бъда по -видим за другите хора. Най -малкото, това е хубаво допълнение, за да направи кутията ми да се откроява малко повече от другите, като същевременно предоставя помощни средства. Надявам се, че този проект е полезен и за някой друг, дори и да не работи с осветление на мотоциклет. Благодаря!
Препоръчано:
Визуализатор на джобни сигнали (джобен осцилоскоп): 10 стъпки (със снимки)

Визуализатор на джобни сигнали (джобен осцилоскоп): Здравейте, всички правим толкова много неща всеки ден. За всяка работа има нужда от някои инструменти. Това е за изработка, измерване, довършване и т.н. Така че за електронните работници се нуждаят от инструменти като поялник, многометър, осцилоскоп и др
ИНТЕГРИРАНИ GOOGLE КАРТИ: 4 стъпки

ИНТЕГРИРАНИ КАРТИ НА GOOGLE: В този проект ще внедрим устройство, което превръща индикацията от Google Maps в сензорен изход, за да очертае кога бихме могли да използваме интегрирана навигационна система на нашето тяло. Ще реализираме това чрез свързване нашият Ardui
Интегрирани интелигентни щори, контролирани от Alexa: 8 стъпки (със снимки)

Интегрирани интелигентни щори, контролирани от Alexa: Има много проекти за Smart Blind и инструкции, които понастоящем са достъпни онлайн. Исках обаче да донеса собствено докосване до настоящите проекти с цел да имам всичко вътрешно в сляпото, включително всички схеми. Това би означавало
Евтина DIY DDS функция/генератор на сигнали: 4 стъпки (със снимки)

Евтина DIY DDS функция/генератор на сигнали: Тези DDS модули за генератор на сигнали могат да бъдат закупени само за $ 15, ако се огледате. Те ще генерират синусоидални, квадратни, триъгълни, триъгълни (и обратни) форми на вълната (и няколко други) доста точно. Те също имат сензорни контроли, амплитуда
IoT Cat Feeder Използване на частици Photon интегрирани с Alexa, SmartThings, IFTTT, Google Sheets: 7 стъпки (със снимки)

IoT Cat Feeder Използване на частици Photon интегрирани с Alexa, SmartThings, IFTTT, Google Sheets: Необходимостта от автоматична хранилка за котки е обяснима. Котките (името на нашата котка е Бела) могат да бъдат отвратителни, когато са гладни и ако вашата котка е като моята, ще яде купата на сухо всеки път. Имах нужда от начин да разпределя автоматично контролирано количество храна