DIY kelluva suuntavilkku valmistettu Arduinosta. Tee itse laiska (kohtelias) suuntavilkku Arduinossa (video). Mihin sähköpiireihin Arduinon kohtelias suuntavilkku sopii?

Sanoin "Gop" viime vuonna - on aika hypätä :)
Tai pikemminkin, tee luvattu tarkistus käynnissä olevista suuntavilkuista.
Tilasin 1 metrin mustaa WS2812B-teippiä (144 lediä) silikoniputkessa, tilauksen yhteydessä valitsin ”Musta 1m 144led IP67” (ehkä joku pitää alustan valkoisesta väristä, on sellainen valinta).

Varoituksen sana

Sain kahdesta puolimetrisestä kappaleesta juotetun teipin. Tämän haittapuolena on herkkä juotoskohta (koskettimet voivat katketa ​​ajan myötä) ja lisääntynyt rako LEDien välillä.
Ennen kuin ostat, tarkista tämä asia myyjältä.

Nauhaan juotettiin kosketusjohdot molemmilta puolilta useiden kappaleiden kytkemiseksi sarjaan, koska En tarvinnut tätä, joten irrotin johdot toiselta puolelta, tiivistin kaiken neutraalilla tiivisteaineella ja kääriin vielä hieman mustaa sähköteippiä.



Kiinnitetään lasiin esim. kaksipuolisella läpinäkyvällä teipillä.

Asennustiedot

Rasvasoin pinnat, liimasin ensin teippiä putkeen (kutsutaan niin, vaikka poikkileikkaus on suorakaiteen muotoinen), leikkasin leveämmistä teipeistä esiin työntyvän ylimäärän, työnsin putken reunat välissä oleviin halkeamiin. katto ja takapilarien koristepaneelien yläosat (johtimet liittimellä olivat piilossa yhden paneelin takana), keskittivät sen ja alkoivat painaa sitä lasia vasten vetämällä teipin suojakerroksen hitaasti ulos.
Valitettavasti videota ei ole - kuvaamiseen ei ollut vapaita käsiä, ja jokaisen auto on erilainen.
Jos jokin on epäselvää, kysy kommenteissa.
Kesäkuumeen testi onnistui - mikään ei irronnut eikä kellunut.
Ainoa miinus on, että lasin kulma on lempeä, LEDit loistavat enemmän ylöspäin. Aurinkoisena päivänä sitä on vaikea nähdä, mutta koska nämä ovat päällekkäisiä signaaleja,

Siirrytään nyt sähköiseen täyttöön.
Käytin sitä, mutta löysin sen vasta vähän aikaa sitten

Noin samalla hinnalla saamme lisää herkkuja

Luonnos ilman erityisiä muutoksia toimii Wemosissa ohjelmoitaessa Arduino IDE:ssä, ja jos otat käyttöön pienen verkkopalvelimen, voit muuttaa siihen Wi-Fi-yhteyden kautta kytkettyjen muuttujien arvoja, kuten vilkkujen välinen viive, hidastuvuus hätäjarrutuksen aikana jne.
Täällä tulevaisuudessa, jos joku on kiinnostunut toteuttamaan projektin ESP8266:lla, voin lähettää esimerkin asetusten muuttamisesta web-rajapinnan kautta, tallentamisesta EEPROMiin ja sitten lukemiseen.
Web-palvelin voidaan käynnistää esimerkiksi kytkemällä suuntavilkku päälle ja painamalla jarrupoljinta sytytysvirran ollessa kytkettynä (asennusmenettelyssä kyselee vastaavien tulojen tila).

Ostin vilkkuvan tilan toteuttamiseksi voimakkaan jarrutuksen aikana
Luonnos tarkkailee hidastuvuustasoa, kun jarrupoljinta painetaan, jos se ylittää 0,5 G (jyrkkä hidastuminen, mutta ilman vinkuvaa jarrua), vilkkuva tila kytkeytyy päälle muutaman sekunnin ajan.
Ohjaussignaalit Arduino-tuloihin pysäytysten, suuntavilkkujen ja peruutuksen "plussista" syötetään galvaanisen eristyksen kautta - optoerottimet, joissa on virtaa rajoittavat vastukset, jotka lopulta muodostavat LOW-tason Arduino-tuloissa (vedetään jatkuvasti positiiviseksi 10 kOhmin vastusten kautta) .
Virtalähde - 5 volttia DC-DC-asennusmuuntimen kautta.
Kokonaisuus taitetaan voileipäksi ja pakataan sopivaan laatikkoon, johon asennussuunta on merkitty nuolella painovoimaanturin oikeaa suuntausta varten

Kaavio ja valokuva



Vetovastusten (positiivisiin) nimellisarvo on vakio - 10 kOhm, rajoittaen optoerottimen vastusten virtaa - 1 kOhm. Poistin optoerottimet vanhoista levyistä, kaksi oli PC123, kaksi PC817.


Ensimmäisessä kuvassa näet kaksi lisäliitintä, jotka tein suuntavilkkuja varten. Koska autossani on oikosulku maadoitukseen, kun ohjauspylvään vipu on päällä, liitin johdot vipulohkoon ja Arduino-tuloihin. Jos ohjauspylvään vipu vaihtaa plus-asentoon tai otat signaalin vasemman/oikean suuntavilkun "+"-merkistä, yhdistä ne sitten galvaanisen eristyksen kautta.



No, nyt itse luonnos (Arduino IDE)

#sisältää #sisältää //muutama yleiskommentti // Sammutin yhden uloimmista LED-valoista, koska... ne heijastuivat telineiden koristepaneeleihin //näkyvät tämän syklin esimerkissä for (int i=1; i<143; i++) //если отключать не нужно, заменяем на for (int i=0; i<144; i++) //задний ход и аварийка у меня не используются, т.к. в первом случае яркость никакая, во втором надо подключать входы к лампам поворотников //поворотники и стоп-сигнал одновременно не включаются, чтобы это реализовать, нужно переписывать соответствующий код скетча (делить ленту на три секции, подбирать тайминги миганий, менять диапазон переменных циклов). //Дерзайте - все в ваших руках // Пин для подключения управляющего сигнала светодной ленты const int PinLS = 2; //Пины для подключения датчиков //если более удобно будет подключать контакты в другом порядке - просто поменяйте значения переменных const int buttonPinL = 3; const int buttonPinR = 4; const int buttonPinS = 6; const int buttonPinD = 5; //начальные статусы входов (подтянуты к плюсу) int buttonStateS = HIGH; int buttonStateD = HIGH; int buttonStateL = HIGH; int buttonStateR = HIGH; // пауза pause_pov1 (в миллисекундах) нужна, чтобы синхронизировать циклы "пробегания" полоски и включения лампочки поворотника // такое может быть, если используется меньше половины светодиодов // в моем случае паузы нет (pause_pov1 = 0) int pause_pov1 = 1; // этой паузой регулируем длительность состояния, когда все светодиоды выключены //я определял опытным путем - включал поворотник, засекал по отдельности время ста мыргов лампочкой и ста беганий полоски, разницу делил на 100, на полученное время увеличивал или уменьшал значение переменной (в зависимости от того, отставали или убегали вперед лампочки) int pause_pov2 = 62; // переменная для получения значения ускорения int ix; Adafruit_NeoPixel strip = Adafruit_NeoPixel(144, PinLS, NEO_GRB + NEO_KHZ800); Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); void setup() { pinMode(buttonPinS, INPUT); pinMode(buttonPinD, INPUT); pinMode(buttonPinL, INPUT); pinMode(buttonPinR, INPUT); strip.begin(); // гасим ленту for (int i=0; i<144; i++) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); accel.begin(); // ограничиваем измеряемый диапазон четырьмя G (этого хватит с большим запасом) accel.setRange(ADXL345_RANGE_4_G); accel.setDataRate(ADXL345_DATARATE_100_HZ); } void loop() { // СТОПЫ: если включены - высший приоритет //Чтобы сделать меняющуюся по ширине полоску в зависимости от интенсивности торможения //(уточнение - никакой светомузыки, ширина полосы после нажатия на тормоз не меняется!) //от плавного торможения до тапки в пол. //Добавляем еще одну переменную, например, ix2, //присваиваем ей значение ix с коэффициентом умножения, //заодно инвертируем и округляем до целого //ix = event.acceleration.x; //ix2 = -round(ix*10); //ограничиваем для плавного торможения в пробках //(чтобы не менялась при каждом продвижении на 5 метров) //if (ix2<10) ix2 = 0; //и для резкого торможения. //Реальный диапазон изменения переменной ix - от 0 до -5 //для максимальной ширины полосы при G равном или большем 0.5 //if (ix2 >50) ix2 = 50; //muuta sitten jaksoja STOP-lohkossa (int i=1; i<143; i++) на for (int i=51-ix2; i<93+ix2; i++) //Получаем минимальную ширину полоски ~30 см (для стояния в пробке) и максимальную для резкого торможения //конец комментария buttonStateS = digitalRead(buttonPinS); if (buttonStateS == LOW) { sensors_event_t event; accel.getEvent(&event); ix = event.acceleration.x; // проверка резкого торможения - мигающий режим // значение 5 - это 0,5G, минус - торможение if (ix < -5) { for (int is=0; is<15; is++) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(240,0,0)); strip.show(); delay(10 + is*10); for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); delay(10 + is*3); buttonStateS = digitalRead(buttonPinS); if (buttonStateS == HIGH) return; } } // помигали - и хватит, включаем постоянный режим, если педаль тормоза еще нажата // или если не было резкого торможения и предыдущее условие не сработало if (buttonStateS == LOW) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(200,0,0)); strip.show(); while(buttonStateS == LOW){ buttonStateS = digitalRead(buttonPinS); delay(50); } // плавно гасим for (int is=0; is<20; is++) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(190 - is*10,0,0)); strip.show(); delay(10); } // СТОПЫ конец } } else // если СТОПЫ выключены { // ЗАДНИЙ ХОД: если включен - средний приоритет buttonStateD = digitalRead(buttonPinD); if (buttonStateD == LOW) { for (int i=1; i<37; i++) strip.setPixelColor(i, strip.Color(63,63,63)); for (int i=107; i<143; i++) strip.setPixelColor(i, strip.Color(63,63,63)); strip.show(); while(buttonStateD == LOW){ buttonStateD = digitalRead(buttonPinD); delay(50); } //плавно гасим for (int is=0; is<16; is++) { for (int i=1; i<37; i++) strip.setPixelColor(i, strip.Color(60 - is*4,60 - is*4,60 - is*4)); for (int i=107; i<143; i++) strip.setPixelColor(i, strip.Color(60 - is*4,60 - is*4,60 - is*4)); strip.show(); delay(10); } } buttonStateL = digitalRead(buttonPinL); buttonStateR = digitalRead(buttonPinR); // если включена аварийка if (buttonStateL == LOW && buttonStateR == LOW) { for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(63,31,0)); strip.setPixelColor(il+72, strip.Color(63,31,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(0,0,0)); strip.setPixelColor(il+72, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } // если включен ЛЕВЫЙ ПОВОРОТНИК if (buttonStateL == LOW && buttonStateR == HIGH) { for (int il=0; il<71; il++) { strip.setPixelColor(il+72, strip.Color(220,120,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(il+72, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } // если включен ПРАВЫЙ ПОВОРОТНИК if (buttonStateL == HIGH && buttonStateR == LOW) { for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(220,120,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //правый поворотник конец } //конец условия else Стоп // задержка для следующего опроса датчиков delay(10); }

Yritin kommentoida sitä mahdollisimman paljon, mutta jos on kysymyksiä, yritän lisätä kommentteja (siksi sijoitan sen arvostelun tekstiin, en liitetiedostona). Tämä muuten pätee myös katsauksen muihin kohtiin - täydentän sitä myös, jos kommenteissa on merkittäviä kysymyksiä.

Ja lopuksi esittely työstä (videossa käytin luonnosta demotilassa).

Upd. Tein luonnoksen demotilassa, jotta kaikki mahtuisi yhteen lyhyeen videoon.
Jarruvalo vilkkuu vain kovan jarrutuksen aikana (tätä käsiteltiin yllä hitaan jarrutuksen aikana ja ruuhkassa seistessä se yksinkertaisesti syttyy ärsyttämättä takana olevia kuljettajia).
Kirkkaus yöllä ei ole liiallinen, koska Lasin kallistuksen ansiosta valot suuntautuvat enemmän ylöspäin kuin taaksepäin.
Vakiovalot toimivat normaalisti, tämä nauha kopioi ne.

Aion ostaa +97 Lisää suosikkeihin Pidin arvostelusta +89 +191

Sanoin "Gop" viime vuonna - on aika hypätä :)
Tai pikemminkin, tee luvattu tarkistus käynnissä olevista suuntavilkuista.
Tilasin 1 metrin mustaa WS2812B-teippiä (144 LEDiä) silikoniputkessa, tilauksen yhteydessä valitsin ”Musta 1m 144led IP67” (ehkä joku pitää substraatin valkoisesta väristä, on sellainen valinta).

Varoituksen sana

Sain kahdesta puolimetrisestä kappaleesta juotetun teipin. Tämän haittapuolena on herkkä juotoskohta (koskettimet voivat katketa ​​ajan myötä) ja lisääntynyt rako LEDien välillä.
Ennen kuin ostat, tarkista tämä asia myyjältä.

Nauhaan juotettiin kosketusjohdot molemmilta puolilta useiden kappaleiden kytkemiseksi sarjaan, koska En tarvinnut tätä, joten irrotin johdot toiselta puolelta, tiivistin kaiken neutraalilla tiivisteaineella ja kääriin vielä hieman mustaa sähköteippiä.



Kiinnitetään lasiin esim. kaksipuolisella läpinäkyvällä teipillä.

Asennustiedot

Rasvasoin pinnat, liimasin ensin teippiä putkeen (kutsutaan niin, vaikka poikkileikkaus on suorakaiteen muotoinen), leikkasin leveämmistä teipeistä esiin työntyvän ylimäärän, työnsin putken reunat välissä oleviin halkeamiin. katto ja takapilarien koristepaneelien yläosat (johtimet liittimellä olivat piilossa yhden paneelin takana), keskittivät sen ja alkoivat painaa sitä lasia vasten vetämällä teipin suojakerroksen hitaasti ulos.
Valitettavasti videota ei ole - kuvaamiseen ei ollut vapaita käsiä, ja jokaisen auto on erilainen.
Jos jokin on epäselvää, kysy kommenteissa.
Kesäkuumeen testi onnistui - mikään ei irronnut eikä kellunut.
Ainoa miinus on, että lasin kulma on lempeä, LEDit loistavat enemmän ylöspäin. Aurinkoisena päivänä sitä on vaikea nähdä, mutta koska nämä ovat päällekkäisiä signaaleja,

Siirrytään nyt sähköiseen täyttöön.
Käytin sitä, mutta löysin sen vasta vähän aikaa sitten

Noin samalla hinnalla saamme lisää herkkuja

Luonnos ilman erityisiä muutoksia toimii Wemosissa ohjelmoitaessa Arduino IDE:ssä, ja jos otat käyttöön pienen verkkopalvelimen, voit muuttaa siihen Wi-Fi-yhteyden kautta kytkettyjen muuttujien arvoja, kuten vilkkujen välinen viive, hidastuvuus hätäjarrutuksen aikana jne.
Täällä tulevaisuudessa, jos joku on kiinnostunut toteuttamaan projektin ESP8266:lla, voin lähettää esimerkin asetusten muuttamisesta web-rajapinnan kautta, tallentamisesta EEPROMiin ja sitten lukemiseen.
Web-palvelin voidaan käynnistää esimerkiksi kytkemällä suuntavilkku päälle ja painamalla jarrupoljinta sytytysvirran ollessa kytkettynä (asennusmenettelyssä kyselee vastaavien tulojen tila).

Ostin vilkkuvan tilan toteuttamiseksi voimakkaan jarrutuksen aikana
Luonnos tarkkailee hidastuvuustasoa, kun jarrupoljinta painetaan, jos se ylittää 0,5 G (jyrkkä hidastuminen, mutta ilman vinkuvaa jarrua), vilkkuva tila kytkeytyy päälle muutaman sekunnin ajan.
Ohjaussignaalit Arduino-tuloihin pysäytysten, suuntavilkkujen ja peruutuksen "plussista" syötetään galvaanisen eristyksen kautta - optoerottimet, joissa on virtaa rajoittavat vastukset, jotka lopulta muodostavat LOW-tason Arduino-tuloissa (vedetään jatkuvasti positiiviseksi 10 kOhmin vastusten kautta) .
Virtalähde - 5 volttia DC-DC-asennusmuuntimen kautta.
Kokonaisuus taitetaan voileipäksi ja pakataan sopivaan laatikkoon, johon asennussuunta on merkitty nuolella painovoimaanturin oikeaa suuntausta varten

Kaavio ja valokuva



Vetovastusten (positiivisiin) nimellisarvo on vakio - 10 kOhm, rajoittaen optoerottimen vastusten virtaa - 1 kOhm. Poistin optoerottimet vanhoista levyistä, kaksi oli PC123, kaksi PC817.


Ensimmäisessä kuvassa näet kaksi lisäliitintä, jotka tein suuntavilkkuja varten. Koska autossani on oikosulku maadoitukseen, kun ohjauspylvään vipu on päällä, liitin johdot vipulohkoon ja Arduino-tuloihin. Jos ohjauspylvään vipu vaihtaa plus-asentoon tai otat signaalin vasemman/oikean suuntavilkun "+"-merkistä, yhdistä ne sitten galvaanisen eristyksen kautta.



No, nyt itse luonnos (Arduino IDE)

#sisältää #sisältää //muutama yleiskommentti // Sammutin yhden uloimmista LED-valoista, koska... ne heijastuivat telineiden koristepaneeleihin //näkyvät tämän syklin esimerkissä for (int i=1; i<143; i++) //если отключать не нужно, заменяем на for (int i=0; i<144; i++) //задний ход и аварийка у меня не используются, т.к. в первом случае яркость никакая, во втором надо подключать входы к лампам поворотников //поворотники и стоп-сигнал одновременно не включаются, чтобы это реализовать, нужно переписывать соответствующий код скетча (делить ленту на три секции, подбирать тайминги миганий, менять диапазон переменных циклов). //Дерзайте - все в ваших руках // Пин для подключения управляющего сигнала светодной ленты const int PinLS = 2; //Пины для подключения датчиков //если более удобно будет подключать контакты в другом порядке - просто поменяйте значения переменных const int buttonPinL = 3; const int buttonPinR = 4; const int buttonPinS = 6; const int buttonPinD = 5; //начальные статусы входов (подтянуты к плюсу) int buttonStateS = HIGH; int buttonStateD = HIGH; int buttonStateL = HIGH; int buttonStateR = HIGH; // пауза pause_pov1 (в миллисекундах) нужна, чтобы синхронизировать циклы "пробегания" полоски и включения лампочки поворотника // такое может быть, если используется меньше половины светодиодов // в моем случае паузы нет (pause_pov1 = 0) int pause_pov1 = 1; // этой паузой регулируем длительность состояния, когда все светодиоды выключены //я определял опытным путем - включал поворотник, засекал по отдельности время ста мыргов лампочкой и ста беганий полоски, разницу делил на 100, на полученное время увеличивал или уменьшал значение переменной (в зависимости от того, отставали или убегали вперед лампочки) int pause_pov2 = 62; // переменная для получения значения ускорения int ix; Adafruit_NeoPixel strip = Adafruit_NeoPixel(144, PinLS, NEO_GRB + NEO_KHZ800); Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); void setup() { pinMode(buttonPinS, INPUT); pinMode(buttonPinD, INPUT); pinMode(buttonPinL, INPUT); pinMode(buttonPinR, INPUT); strip.begin(); // гасим ленту for (int i=0; i<144; i++) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); accel.begin(); // ограничиваем измеряемый диапазон четырьмя G (этого хватит с большим запасом) accel.setRange(ADXL345_RANGE_4_G); accel.setDataRate(ADXL345_DATARATE_100_HZ); } void loop() { // СТОПЫ: если включены - высший приоритет //Чтобы сделать меняющуюся по ширине полоску в зависимости от интенсивности торможения //(уточнение - никакой светомузыки, ширина полосы после нажатия на тормоз не меняется!) //от плавного торможения до тапки в пол. //Добавляем еще одну переменную, например, ix2, //присваиваем ей значение ix с коэффициентом умножения, //заодно инвертируем и округляем до целого //ix = event.acceleration.x; //ix2 = -round(ix*10); //ограничиваем для плавного торможения в пробках //(чтобы не менялась при каждом продвижении на 5 метров) //if (ix2<10) ix2 = 0; //и для резкого торможения. //Реальный диапазон изменения переменной ix - от 0 до -5 //для максимальной ширины полосы при G равном или большем 0.5 //if (ix2 >50) ix2 = 50; //muuta sitten jaksoja STOP-lohkossa (int i=1; i<143; i++) на for (int i=51-ix2; i<93+ix2; i++) //Получаем минимальную ширину полоски ~30 см (для стояния в пробке) и максимальную для резкого торможения //конец комментария buttonStateS = digitalRead(buttonPinS); if (buttonStateS == LOW) { sensors_event_t event; accel.getEvent(&event); ix = event.acceleration.x; // проверка резкого торможения - мигающий режим // значение 5 - это 0,5G, минус - торможение if (ix < -5) { for (int is=0; is<15; is++) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(240,0,0)); strip.show(); delay(10 + is*10); for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); delay(10 + is*3); buttonStateS = digitalRead(buttonPinS); if (buttonStateS == HIGH) return; } } // помигали - и хватит, включаем постоянный режим, если педаль тормоза еще нажата // или если не было резкого торможения и предыдущее условие не сработало if (buttonStateS == LOW) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(200,0,0)); strip.show(); while(buttonStateS == LOW){ buttonStateS = digitalRead(buttonPinS); delay(50); } // плавно гасим for (int is=0; is<20; is++) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(190 - is*10,0,0)); strip.show(); delay(10); } // СТОПЫ конец } } else // если СТОПЫ выключены { // ЗАДНИЙ ХОД: если включен - средний приоритет buttonStateD = digitalRead(buttonPinD); if (buttonStateD == LOW) { for (int i=1; i<37; i++) strip.setPixelColor(i, strip.Color(63,63,63)); for (int i=107; i<143; i++) strip.setPixelColor(i, strip.Color(63,63,63)); strip.show(); while(buttonStateD == LOW){ buttonStateD = digitalRead(buttonPinD); delay(50); } //плавно гасим for (int is=0; is<16; is++) { for (int i=1; i<37; i++) strip.setPixelColor(i, strip.Color(60 - is*4,60 - is*4,60 - is*4)); for (int i=107; i<143; i++) strip.setPixelColor(i, strip.Color(60 - is*4,60 - is*4,60 - is*4)); strip.show(); delay(10); } } buttonStateL = digitalRead(buttonPinL); buttonStateR = digitalRead(buttonPinR); // если включена аварийка if (buttonStateL == LOW && buttonStateR == LOW) { for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(63,31,0)); strip.setPixelColor(il+72, strip.Color(63,31,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(0,0,0)); strip.setPixelColor(il+72, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } // если включен ЛЕВЫЙ ПОВОРОТНИК if (buttonStateL == LOW && buttonStateR == HIGH) { for (int il=0; il<71; il++) { strip.setPixelColor(il+72, strip.Color(220,120,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(il+72, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } // если включен ПРАВЫЙ ПОВОРОТНИК if (buttonStateL == HIGH && buttonStateR == LOW) { for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(220,120,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //правый поворотник конец } //конец условия else Стоп // задержка для следующего опроса датчиков delay(10); }

Yritin kommentoida sitä mahdollisimman paljon, mutta jos on kysymyksiä, yritän lisätä kommentteja (siksi sijoitan sen arvostelun tekstiin, en liitetiedostona). Tämä muuten pätee myös katsauksen muihin kohtiin - täydentän sitä myös, jos kommenteissa on merkittäviä kysymyksiä.

Ja lopuksi esittely työstä (videossa käytin luonnosta demotilassa).

Upd. Tein luonnoksen demotilassa, jotta kaikki mahtuisi yhteen lyhyeen videoon.
Jarruvalo vilkkuu vain kovan jarrutuksen aikana (tätä käsiteltiin yllä hitaan jarrutuksen aikana ja ruuhkassa seistessä se yksinkertaisesti syttyy ärsyttämättä takana olevia kuljettajia).
Kirkkaus yöllä ei ole liiallinen, koska Lasin kallistuksen ansiosta valot suuntautuvat enemmän ylöspäin kuin taaksepäin.
Vakiovalot toimivat normaalisti, tämä nauha kopioi ne.

Kaikki ne, jotka ovat nähneet enemmän tai vähemmän modernia autoa ei toista kertaa, ja vaikka se olisi ollut ajokysymys, ovat jo pitkään huomanneet yhden hyödyllisistä vaihtoehdoista... Ihmiset kutsuvat sitä laiskaksi suuntavilkuksi tai kohteliaaksi suuntavilkku. Sen koko olemus tiivistyy siihen tosiasiaan, että kääntyessään oikealle tai vasemmalle kuljettaja koskettaa suuntavilkkuvipua vain kerran, korjaamatta sitä. Eli se yksinkertaisesti saa suuntavilkkupiirit toimimaan, mutta ei kytke tätä kytkintä päälle. Seurauksena on, että vivun vapauttamisen jälkeen suuntavilkut aktivoituvat vielä 3-4 kertaa, ja tällä hetkellä kuljettaja voi jo hoitaa "oman asiansa", eli omistautua täysin tielle. Vaihtoehto on erittäin hyödyllinen, kun joudut vaihtamaan kaistaa. Loppujen lopuksi, kun suuntavilkkuvipu on täysin päällä, automaattista sammutusta ei tapahdu ohjauspyörän merkityksettömän kiertokulman vuoksi, mikä tarkoittaa, että sinun on tönäistävä edestakaisin osoittimella tai tuettava sitä jatkuvasti kätesi käynnistymisen partaalla jäljittelemään suuntavilkun toimintaa. Ja jos sellainen vaihtoehto on, kosketin vain hieman vipua ja unohdin. Yleisesti ottaen uskomme, että työn ydin on täysin paljastettu, mutta nyt on syytä mainita mahdollisuus toteuttaa tällainen vaihtoehto koneellesi.

Mihin sähköpiireihin Arduinon kohtelias suuntavilkku sopii?

Ennen kuin menet kaikkiin vakaviin ongelmiin kohteliaan suuntavilkun tuotantoon, sinun on ymmärrettävä, mihin sähkökytkentäkaavioihin se sopii muuttamatta auton sähköpiiriä.
Tässä esitetään kaksi päävaihtoehtoa, jotka eroavat periaatteessa. Ensimmäinen on, kun suuntavilkut syttyvät, kun ne on kytketty kuormana. Toisin sanoen kytkentä tapahtuu suuntavilkun valopiirin kytkemisen vuoksi, jossa suuntavilkkuvipu itse sijaitsee, tämä sulkee piirin, jonka jälkeen toiminta tapahtuu. Tässä tapauksessa ei ole mahdollista käyttää vaihtoehtoamme, koska kun vipu avaa piirin lampuilla, poistamme heti valon ilmaisemisen mahdollisuuden, vaikka signaali saapuisi itse vipuun, se ei yksinkertaisesti mene. edelleen.
Toinen vaihtoehto on meidän, kun on ohjaussignaaleja ja on lähtötehosignaaleja. Tässä tapauksessa voit asentaa tavallisen releen sijaan tarkalleen sen piirin, johon haluamme kiinnittää huomiosi.

Internetistä ostettavissa oleva reletehomoduuli tehokuormituksen ohjaamiseksi

Laiskan (kohteliaan) suuntavilkun luonnos ja piiri Arduinossa

Joten voidaan kiistellä Arduinon käyttämisestä pääyksikkönä laiskaille suuntavilkkuille, koska tämä ei myöskään ole täysin ihanteellinen ratkaisu, jolla on haittapuolensa. Esimerkiksi sytytysvirran kytkemisen jälkeen on oltava jatkuvaa tehoa, jotta virtapiirit on kytkettävä. Samaan aikaan itse valjaat ylimääräisistä radiokomponenteista on tässä periaatteessa hyödytöntä, koska tässä tapauksessa voit yksinkertaisesti ohjelmoida mikro-ohjaimen ja käyttää vain sitä. Mutta tämä miinus on myös plus, koska jokainen, jolla on sellainen, voi ohjelmoida Arduinon, ja mikro-ohjaimiin tarvitset myös ohjelmoijan.
Ohjelman kirjoittaminen on yksi vaikeimmista tehtävistä. Täällä aloittelija joutuu viettämään yli tunnin vapaa-ajastaan ​​ja tutkimaan algoritmien työtä, mutta onneksi on Internet ja siellä on me. Joten tässä on sketsi.

Int switchPinR=8; int switchPinL=7; int ledPinR=11; int ledPinL=12; boolean ledOn = false; int i = 0; int z = 0; void setup() ( // laita asennuskoodi tähän, jotta se suoritetaan kerran: pinMode(switchPinR, INPUT); pinMode(switchPinL, INPUT); pinMode(ledPinR, OUTPUT); pinMode(ledPinL, OUTPUT); Serial.begin(9600) ) void loop() ( // laita pääkoodisi tähän toistuvaksi: //2 label: if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == HIGH) ( digitalWrite(ledPinR, HIGH) ; digitalWrite(ledPinL, HIGH);<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && digitalRead(switchPinR) == LOW && z>=7) ( tauko; ) ) ) else ( digitalWrite(ledPinR, LOW); digitalWrite(ledPinL, LOW); z=0; ) //hätäsignaalin kierto if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == KORKEA) (goto label;) //Oikea suuntavilkku. if (digitalRead(kytkinPinR) == HIGH) ( digitalWrite(ledPinR, HIGH); i=0; while (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); delay(400); i++; z++; if (digitalRead(switchPinR) == LOW && z>=7) ( tauko; ) ) ) else ( digitalWrite(ledPinR, LOW); z=0; ) //Vasen suuntavilkku. if (digitalRead(kytkinPinL) == HIGH) ( digitalWrite(ledPinL, HIGH); i=0; while (i<7) { ledOn = !ledOn; digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && z>=7) ( tauko; ) ) ) else ( digitalWrite(ledPinL, LOW); z=0; ) ) )

Lyhyesti sanottuna luonnoksessa on 2 tuloa ja 2 lähtöä. Tässä tapauksessa, kun positiivinen eli korkean tason signaali syötetään sisääntuloon (8,7), saamme tietyn määrän välähdyksiä (z tai i) vastaavaan lähtöön (11,12). Lyhyesti sanottuna jotain tällaista. Eli jos haluat muuttaa jotain luonnoksessa koskien vilkkujen määrää ja tulotuloja, kiinnitä huomiota näihin muuttujiin. Jos sinun on muutettava silmänräpäysten pituutta, sinun tulee keskittyä viivetoimintoon.
Toinen ohjelman ominaisuus on hieman epätavallinen hälytyslähtö. Ensin vasen ja oikea merkkivalo käsitellään, sitten varoitusvalot syttyvät. Tämä johtuu siitä, että se voi käynnistyä vain, jos tulo on samaan aikaan korkea tuloissa 8 ja 7. Ja tämä ehto täyttyy vasta toisessa jaksossa, koska kahden painikkeen painaminen kerralla on fyysisesti mahdotonta. Mikro-ohjaimen nopeuden avulla voit lukea painikkeen korkean lähdön nopeammin ja päättää, että tämä on loppujen lopuksi suuntavilkun laukaisemisen ehto, ei hälytys. Vaikka sinun ei pitäisi huolehtia siitä, ellei kiitoksen sanominen tiellä ole ongelmallista.

Laiskan (kohteliaan) suuntavilkun kytkemisen ominaisuudet autoon Arduinon avulla

Älä käytä nastaa 13 lähtönä, koska joka kerta kun kytket virran päälle ja pois, tähän lähtöön kytkettävät merkkivalot voivat välkkyä.
Kun siirryt ohjaussignaaleista tehosignaaleihin, käytä asianmukaisia ​​Internetistä ostettuja tai itse kokoamiasi lohkoja. Olemme jo puhuneet sellaisista lohkoista - moduuleista.
Kun vastaanotat signaalin 1 12 voltin jännitteestä, aseta 10 Kom vastus tulon eteen.

Siinä kaikki ohjeet laiskan suuntavilkun tekemiseen autoon Arduino-mikrokontrollerilla, ja nyt samasta asiasta videolla...

Monet autoharrastajat parantavat autonsa ulkonäköä virittääkseen "nielensä" LED-valoilla. Yksi viritysvaihtoehdoista on käynnissä oleva suuntavilkku, joka kiinnittää muiden tielläliikkujien huomion. Artikkeli sisältää ohjeet ajovalojen suuntavilkkujen asentamiseen ja määrittämiseen.

[Piilottaa]

Kokoamisohjeet

LED-lamput ovat puolijohdeelementtejä, jotka hehkuvat joutuessaan alttiiksi sähkövirralle. Niiden pääelementti on pii. Käytetyistä epäpuhtauksista riippuen lamppujen väri muuttuu.

Kuvagalleria "Dynaamisten suuntavilkkujen mahdollisia vaihtoehtoja"

Työkalut ja materiaalit

Jos haluat tehdä käynnissä olevan suuntavilkun omin käsin, tarvitset seuraavat työkalut:

  • juotin;
  • sivuleikkurit tai pihdit;
  • juotosrauta ja juotosmateriaalit;
  • testaaja.

Sinun on valmistettava lasikuitulaminaatti kulutustarvikkeista. Sitä tarvitaan painetun piirilevyn valmistukseen, jolle puolijohdeelementti sijoitetaan. Tarvittavat LEDit valitaan. Suojavastusten ominaisuudet lasketaan LEDien ominaisuuksista ja junaverkon virta- ja jännitearvoista riippuen. Verkon muut komponentit valitaan laskelmien avulla (videon kirjoittaja on Evgeny Zadvornov).

Työjärjestys

Ennen suuntavilkkujen tekemistä sinun on valittava sopiva järjestelmä.

Tee sitten kaavion perusteella piirilevy ja laita siihen merkinnät tulevien elementtien sijoittamiseksi.

Kokoonpano koostuu toimintosarjasta:

  1. Ensin sinun tulee sammuttaa auton virta irrottamalla negatiivinen napa akusta.
  2. Seuraavaksi sinun on poistettava vanhat suuntavilkut ja purettava ne varovasti.
  3. Vanhat hehkulamput tulee ruuvata irti.
  4. Saumat tulee puhdistaa liimasta, poistaa rasvasta, pestä ja antaa kuivua.
  5. Jokaisen vanhan elementin tilalle asennetaan uusi ajovalon suuntavilkku.
  6. Seuraavaksi valojen kokoaminen ja asennus tehdään päinvastaisessa järjestyksessä.
  7. Asennuksen jälkeen johdot on kytketty.

Seuraavassa vaiheessa verkkoon liitetään ylimääräinen stabiloitu virtalähde. Sen tulo saa virran välireleestä ja lähtö on kytketty diodiin. On parempi sijoittaa se kojetauluun.

Kun kytket LEDit, sinun on varmistettava, että anodi on kytketty virtalähteen plus-liittimeen ja katodi miinukseen. Jos liitäntää ei tehdä oikein, puolijohdeelementit eivät syty ja voivat jopa palaa.


Ajosuuntavilkkujen asennuksen ja konfiguroinnin ominaisuudet

Voit asentaa dynaamiset suuntavilkut perinteisten LEDien sijasta. Tätä varten levy, jossa on LEDit ja virtaa rajoittavat vastukset, poistetaan ja puretaan. Toistimessa sinun on repäistävä lasi irti kehosta. Sitten sinun tulee leikata heijastin varovasti irti ja poistaa se.

Kaukosäätimen heijastimen tilalle on asennettu SMD 5730 -kortti, jolla on keltaiset LEDit. Koska toistin on muodoltaan kaareva, levyä on irrotettava ja taivutettava hieman. Sinun on leikattava liittimellä varustettu osa vanhasta levystä ja juotettava se ohjaimen kytkemiseksi. Sitten kaikki komponentit palautetaan paikoilleen.

Käynnissä olevien LED-valojen ajoituksen säätämiseksi mikro-ohjaimeen juotetaan kytkin. Kun sopiva nopeus löytyy, kytkimen tilalle juotetaan hyppyjohtimet. Kun kaksi nastaa kytketään maahan, LED-vilkkujen välinen vähimmäisaika on 20 ms. Kun koskettimet ovat kiinni, tämä aika on 30 ms.


Hinta kysymys

Voit tehdä ajovalojen suuntavilkun päiväajovaloista. Niiden hinta on 600 ruplaa. Tässä tapauksessa voit käyttää "pikseliä" RGB-LEDiä valonlähteinä 7 kappaletta jokaista käynnissä olevaa suuntavilkkua kohden. Yhden elementin hinta on 19 ruplaa. LEDien ohjaamiseksi sinun on ostettava Arduino UNO, joka maksaa 250 ruplaa. Siten kokonaiskustannukset ovat 1060 ruplaa.


Tervehdys kaikille tee-se-itse-tekijöille! Tänään tarkastelemme yhtä monista vaihtoehdoista WS2812B-tyypin LED-nauhan käyttämiseksi osoitteellisissa RGB-LED-valoissa. Tällaisia ​​nauhoja (sekä erikseen asennettuja WS2812B LED-valoja) voidaan käyttää valaisemaan tietokonenäyttöjen ja televisioiden "Ambilight"-taustaa, dynaamista valaistusta autossa, maalausta, valokuvakehystä, akvaariota ja niin edelleen. Niitä käytetään laajalti minkä tahansa tilan suunnittelussa uudenvuoden valaistuksen tai valoesityksen muodossa. WS2812B-LED-nauhan käyttö mahdollistaa suuren määrän mielenkiintoisia projekteja.

WS2812B LED on RGB-LED, joka on sijoitettu samaan koteloon WS2801-sirun kanssa.


WS2812B LED itsessään on pinta-asennukseen suunniteltu SMD-elementti. Sisällä LED koostuu punaisista valokiteistä, vihreistä valokiteistä ja sinisistä valokiteistä, jotka sijaitsevat samassa kotelossa. Tällä LEDillä voit saada laajan valikoiman valosäteilyn värisävyjä.

RGB-LED-valoa ohjataan Arduino-mikroohjainkortin kautta.
Sain kiinalaiselta WS2812B LED-nauhan. Se on 1 metrin pituinen segmentti, jossa on 144 LEDiä. Olen pitkään halunnut kokeilla sitä erilaisiin kokeisiin. Käyttämällä Arduino-kirjastoja - Adafruit Neopixel ja Fast led - voit saada paljon erittäin epätavallisia valotehosteita. Mutta sitten päätin yrittää tehdä dynaamisia suuntavilkkuja autoon niin sanotulla "Audi-tyylillä", en ole vielä alkanut käyttää tätä järjestelmää käytännössä (miten liikennepoliisit hyväksyvät sen?), mutta vaikutus oli varmasti erittäin houkutteleva.

Arduino Uno -levy toimii ohjaimena LED-nauhan ohjaamiseen, voit käyttää myös muita levyjä - Arduino Nano, Arduino Pro mini.
Katso koko prosessi videolta:


Luettelo työkaluista ja materiaaleista.
-Arduino Uno -levy;
- alennuskortti 12V\5V - 3A;
- vastukset 100Kom-4kpl;
-vastukset 47Kom-4kpl;
- 500 ohmin vastukset - 1 kpl;
-painikkeet (signaalien päällekytkemisen simulointiin) -4 kpl;
-leipälauta
-ruuvimeisseli;
laboratorion virtalähde
- juotosrauta;
-batisti;
-testaaja.
- liitäntäjohdot.

Ensimmäinen askel. Piirin kokoaminen.


Kokosin piirin leipälevyllä. Arduinon digitaalisiin tuloihin kytkettyjä vastuksia tarvitaan muuttamaan auton tulosignaalit 12 voltista 5 volttiin. 500 ohmin vastus WS2812B LED-nauhan ohjauslinjan suojaamiseksi.
Kuva taulusta


Muuntimena 12V:sta 5V:iin käytin Aliexpressin valmista levyä. Mitä tahansa muuntajaa, jolla on sopivat parametrit, voidaan käyttää. Muuntajaa tarvitaan vakaaseen virransyöttöön Arduinoon ja WS2812B LED-nauhaan.


Vaihe kaksi. Arduino ohjelmointi.

Arduino-kortin nro 3, 4 digitaalisia tuloja käytetään kääntämään vasemmalle ja oikealle. Tappi nro 5 – kytke jarruvalo päälle, tappi nro 6 – kytke peruutusvaihde päälle. Pin nro 8 on WS2812B-nauhan ohjaussignaali.

Lataa luonnos Arduino IDE:ssä (linkki yllä). Kaksi luonnosvaihtoehtoa - yksi auton etuosaan, toinen takaosaan. Käytä mitä tahansa tarvitset. Luonnoksen alussa voit asettaa tarvitsemasi LED-valojen määrän. Voit myös säätää suuntavilkkujen nopeutta autosi mukaan. Voit myös muuttaa LEDien kirkkautta käyttämällä nauhaa. Color(103,31,0) -parametri – muuta kaksi ensimmäistä numeroa 0:sta 255:een. Eli voit kokeilla vähän.

Kun painat haluttua painiketta, lähetämme signaalin halutun parametrin kytkemiseksi päälle. Kun piiri on koottu oikein, se alkaa yleensä toimia heti.

Valokuva töissä.






Tämän viikonlopun suunnittelusta tuli hyvä kokeilu. Se oli mielenkiintoista