WS2812 va Arduino tasmasida ishlaydigan burilish signallari. O'z qo'lingiz bilan Arduino -da dangasa (muloyim) burilish signali (video) Arduino -ning ishlaydigan burilish signali uchun ulanish diagrammasi

Renault Clio avtomobilining farasi misolida, Audi kabi ishlaydigan burilish signalini yaratishni ko'rib chiqing. Keling, bitta qurilmada burilish signallari va DRLni yarataylik.

Buning uchun sizga nima kerak: ws2812b LEDlardan tashkil topgan LED tasmasi Arduino nano -boshqaruvchi(har qanday boshqa shakl faktorida ishlatilishi mumkin) USB chiqishi bilan mobil telefonlar uchun avtomobil zaryadlovchi. Arduino tekshirgichi 5V kuchlanishga muhtoj bo'lgani uchun biz bu zaryadlovchini 12V dan 5V gacha kuchlanish konvertori sifatida ishlatamiz. 5V KR142EN5V (KREN5V) yoki boshqa import qilingan analog uchun kuchlanish stabilizatori. 3 qarshilik 10 kOm, tortishish qarshiligi sifatida.

Ulanish diagrammasi

Arduino tekshirgichi avtomobil tarmog'iga 12V -> 5V konvertor orqali ulangan bo'lishi kerak, shunda kuchlanish "kontaktni" yoqishdan kontaktlarning zanglashiga olib keladi. Hozirgi burilish signalining ijobiy simini KREN5V voltaj regulyatoriga ulash lozim. Ushbu maqolada faqat bitta burilish signalining ulanishi va dasturiy ta'minoti muhokama qilinadi, ikkinchi burilish signalini berish uchun siz ham xuddi shunday ikkinchi LED tasmasini Arduino -ning istalgan bepul raqamli chiqishiga ulashingiz kerak (masalan 7). bizning misolimizga ko'ra, uni dasturiy ta'minotda kodlang.

Boshqaruvchi dasturiy ta'minot

Pikselli LEDlar bilan ishlash uchun sizga kutubxona kerak bo'ladi ... Siz uni quyidagicha o'rnatishingiz mumkin: Sketch -> Kutubxonani ulash -> Kutubxonalarni boshqarish. Keyin, qidirish menyusiga Adafruit_NeoPixel.h kutubxonasining nomini kiriting va o'rnatish tugmasini bosing. Shundan so'ng, eskizni dasturga joylashtiring va koddagi LEDlar sonini o'zgartiring (biz 22 dioddan foydalanamiz):

#qo'shing // kutubxonani ulang
Adafruit_NeoPixel tasmasi = Adafruit_NeoPixel (22, 8, NEO_GRB + NEO_KHZ800);
int t, t1, t2, t3, t4, p2, p1 = 0; // vaqt o'zgaruvchisi
bo'sh o'rnatish () (
pinMod (2, Kirish);
pinMode (3, INPUT);
pinMode (4, INPUT);
digitalWrite (2, LOW);
digitalWrite (3, LOW);
digitalWrite (4, LOW);

strip.begin ();
strip.show ();

}
void loop () (
if (digitalRead (2) == LOW) (// Agar burilish signali o'chirilgan bo'lsa
uchun (int i = 0; i< 23; i++) {
strip.setPixelColor (i, strip.Color (255,255,255)); // R = 255, G = 255, B = 255 - LEDning oq rangi, yoqilganda biz chiroqlar yonadi
}
strip.show ();
}

if ((digitalRead (2) == HIGH) & (t == 1)) (// burilish signali yoqilganligini tekshiring
uchun (int i = 0; i< 23; i++) {
strip.setPixelColor (i, strip.Color (0, 0, 0)); // barcha diodlarni o'chiring
}
strip.show ();
uchun (int k = 0; k< 3; k++){ // цикл до трех - сигнал «перестроения» , при кратковременном включении мигает 3 раза,

uchun (int i = 0; i< 23; i++){

agar (digitalRead (2) == YUQORI) (k = 0;) // agar burilish signali yonib turganda biz boshqa kalit signalini olsak, hisoblagichni qaytish signali yana kamida 3 marta miltillashi uchun qayta o'rnating.
strip.setPixelColor (i, strip.Color (255, 69, 0)); // R = 255, G = 69, B = 0 - LED rangi

kechikish ((t4) / 22);
strip.show ();

}
agar (digitalRead (2) == YUQORI) (t4 = t4 + 20;) // agar barcha diodlar sariq rangda yonsa, lekin o'rni signallari hali ham yoniq bo'lsa, biz yonish vaqtini oshiramiz
agar (digitalRead (2) == LOW) (t4 = t4-20;) // agar barcha diodlar sariq rangda yonsa, lekin o'rni signallari hali ham yoqilgan bo'lsa, biz yonish vaqtini oshiramiz

uchun (int i = 0; i< 23; i++){

strip.setPixelColor (i, strip.Color (0, 0, 0)); // R = 0, G = 0, B = 0 - LED rangi

kechikish ((t3) / 22);
strip.show ();

}
agar ((digitalRead (2) == LOW)) (t3 = t3 + 20;)
if ((digitalRead (2) == HIGH)) (t3 = t3-20;)
}

if ((digitalRead (2) == HIGH) & (t == 0)) (// burilish signali yoqilganligini tekshiring

t1 = millis (); // qachon yoqilganingizni eslang
uchun (int i = 0; i< 22; i++) {
strip.setPixelColor (i, strip.Color (255, 69, 0)); // burilish signalini birinchi marta yoqganingizda, barcha diodlarni sariq rangda yoqing
}
strip.show ();
while (digitalRead (2) == HIGH) ()
t2 = millis (); // burilish signali qachon o'chirilganligini eslang
t4 = t2-t1;

uchun (int i = 0; i< 22; i++) {
strip.setPixelColor (i, strip.Color (0, 0, 0)); // burilish rölesidan signal yo'qolganda diodlarni o'chiring
}
strip.show ();
while (digitalRead (2) == LOW) (
agar ((millis () - t2)> 2000) (tanaffus;)
}
agar ((millis () - t2)<2000) {
t3 = millis () - t2; // burilish signallari o'chadigan vaqt
t = 1; // bayroq, biz bilamizki, vaqt qiymati saqlangan.
}
}

if (digitalRead (4) == HIGH) (// maxsus signallar
uchun (int j = 0; j< 16; j++) {
uchun (int i = 0; i< 22; i++) {
strip.setPixelColor (i, strip.Color (255, 0, 0)); // R = 255, G = 0, B = 0 - LED rangi
}
strip.show ();
kechikish (20);
uchun (int i = 0; i< 22; i++){

}
strip.show ();
kechikish (20);
}

uchun (int j = 0; j< 16; j++) {
uchun (int i = 0; i< 22; i++) {
strip.setPixelColor (i, strip.Color (0, 0, 255)); // R = 0, G = 0, B = 255 - LED rangi
}
strip.show ();
kechikish (20);
uchun (int i = 0; i< 22; i++){
strip.setPixelColor (i, strip.Color (0, 0, 0)); // R = 0, G = 0, B = 0 - LED rangi
}
strip.show ();
kechikish (20);
}
}

if (digitalRead (3) == HIGH) (// strobe
uchun (int j = 0; j< 24; j++) {
uchun (int i = 0; i< 22; i++) {
strip.setPixelColor (i, strip.Color (255, 255, 255)); // R = 255, G = 255, B = 255 - LED rangi
}
strip.show ();

kechikish (15);
uchun (int i = 0; i< 22; i++){
strip.setPixelColor (i, strip.Color (0, 0, 0)); // R = 0, G = 0, B = 0 - LED rangi
}
strip.show ();
kechikish (15);
}
kechikish (500);

Kod yordamida ikkinchi burilish signali uchun ham xuddi shunday qiling.

Farimiz qanday ishlashi haqida video


Hamma DIYersga salom! Bugun biz manzilli RGB LED -laridagi WS2812B LED tasmasi uchun ko'plab ilovalardan birini ko'rib chiqamiz. Bunday chiziqlar (shuningdek, alohida o'rnatilgan WS2812B LEDlari) kompyuter monitorlari va televizorlarining Ambilight fonini, avtomobildagi dinamik LEDli yoritishni, rasmlarni, foto ramkalarni, akvariumni va boshqalarni yoritish uchun ishlatilishi mumkin. Ular har qanday xonaning dizaynini ishlab chiqishda, Yangi yil yoritgichlari yoki yorug'lik shoulari ko'rinishida keng qo'llaniladi. WS2812B tipidagi LED tasmasidan foydalanish ko'plab qiziqarli loyihalarni olish imkonini beradi.

WS2812B LED - bu WS2801 chipli bitta paketda joylashgan RGB LED.


WS2812B LEDining o'zi sirtni o'rnatish uchun mo'ljallangan SMD elementidir. LED ichki, qizil, yashil va ko'k kristallardan iborat. Ushbu LED yordamida turli xil yorug'lik ranglarini olish mumkin.

RGB LED Arduino mikrokontroller platasi orqali boshqariladi.
Men Xitoydan WS2812B LED tasmasini oldim. Bu uzunligi 1 metr bo'lgan LEDlar soni -144 dona. Men uzoq vaqtdan beri turli xil tajribalarni sinab ko'rishni xohlardim. Arduino - Adafruit Neopixel va Fast uchun kutubxonalar yordamida siz juda noan'anaviy yorug'lik effektlarini olishingiz mumkin. Ammo keyin men "Audi uslubi" deb nomlangan avtomobil uchun dinamik burilish signallarini yaratishga harakat qildim.

Arduino Uno taxtasi LED tasmasini boshqarish uchun nazoratchi vazifasini bajaradi, siz boshqa taxtalardan ham foydalanishingiz mumkin - Arduino Nano, Arduino Pro mini).
Videoda butun jarayonni ko'ring:


Materiallar va asboblar ro'yxati.
- Arduino Uno taxtasi;
- 3A da 12V \ 5V pastga tushadigan taxta;
- qarshilik 100KΩ-4pcs;
- qarshilik 47Kom-4pcs;
- 500 Ohm-1 rezistorlar;
-tugmalar (signallarni yoqishni taqlid qilish uchun) -4 dona;
-non taxtasi
-tornavida;
laboratoriya quvvat manbai
-payvandlash temir;
-kambriyali;
-sinovchi.
-simlarni ulash.

Birinchi qadam. Zanjirni yig'ish.


Men sxemani non paneli (bradboard) yordamida yig'dim. Arduino -ning raqamli kirishiga ulangan rezistorlar avtomobilning kirish signallarini 12 dan 5 voltgacha o'zgartirish uchun kerak. WS2812B LED tasmasini boshqarish chizig'ini himoya qilish uchun 500 ohmli qarshilik.
Kengashning fotosurati


12V dan 5V gacha konvertor sifatida men Aliexpress-dan tayyor taxtadan foydalandim. Tegishli parametrlarga ega bo'lgan har qanday transduserdan foydalanish mumkin. Konverter Arduino va WS2812B LED tasmasini barqaror quvvat bilan ta'minlash uchun kerak.


Ikkinchi qadam. Arduino dasturlash.

3,4 -sonli Arduino kartasining raqamli kirishlari chap va o'ng burilishni yoqish uchun ishlatiladi. Pin raqami 5 - to'xtash signalini yoqing, pin raqami 6 - teskari vitesni yoqing. Pin raqami 8 - WS2812B tasmasini boshqarish signali.

Arduino IDE -da eskizni yuklang (yuqoridagi havola). Eskiz uchun ikkita variant - biri mashinaning old qismi uchun, ikkinchisi orqa tomon uchun. Sizga kerak bo'lgan narsani ishlating. Eskizning boshida siz kerakli LEDlar sonini belgilashingiz mumkin. Shuningdek, siz mashinangizga qarab burilish signallarining tezligini sozlashingiz mumkin. Bundan tashqari, LEDning yorqinligini tasma yordamida o'zgartirishingiz mumkin.Color (103,31,0) parametri - dastlabki ikki raqamni 0 dan 255 gacha o'zgartiring. Ya'ni, siz ozgina tajriba o'tkazishingiz mumkin.

Kerakli tugmani bosganingizda, biz kerakli parametrni yoqish uchun signal beramiz. Tizimning to'g'ri yig'ilishi bilan u odatda darhol ishlay boshlaydi.

Ishda rasm.






Yaxshi tajriba shu hafta oxiri qurilishi bilan chiqdi. Bu qiziq edi

Men o'tgan yili "Gop" dedim - sakrash vaqti keldi :)
Aksincha, ishlayotgan burilish signallarini va'da qilingan ko'rib chiqish.
Men silikon naychaga 1 metr qora WS2812B tasmasini (144 LED) buyurtma qildim, buyurtma berishda men "Qora 1m 144led IP67" ni tanladim (balki kimdir substratning oq rangini yoqtirishi mumkin, bunday tanlov bor).

Bir oz ogohlantirish

Menga yarim metrli ikkita bo'lakdan payvandlangan tasma keldi. Buning kamchiliklari - lehimning zaif joyi (kontaktlar vaqt o'tishi bilan uzilishi mumkin) va LEDlar orasidagi bo'shliqning oshishi.
Sotib olishdan oldin, hozirda sotuvchiga murojaat qiling

Kontakt simlari bir necha bo'laklarni ketma -ket ulash uchun har ikki tomonning lentasiga lehimlangan, chunki Menga bu kerak emas edi, keyin men simlarni bir tomondan yopib qo'ydim, hamma narsani neytral plomba bilan yopdim va yana bir oz qora elektr lentani o'rab qo'ydim.



Masalan, ikki tomonlama shaffof yopishqoq lenta bilan oynaga biriktirilgan.

O'rnatish tafsilotlari

U sirtni yog'dan tozalab, avval naychaga yopishqoq lenta yopishtirdi (men aytaman, kesmasi to'rtburchaklar bo'lsa ham), kengroq lentaning chiqib ketadigan ortiqcha qismini kesib tashladi, trubaning chetlarini teshiklar orasidagi teshiklarga surdi. ship va orqa ustunlarning dekorativ panellarining yuqori qismlari (men aloqa panelini ulagich bilan bitta panel orqasida yashirdim), uni markazga qo'yib, asta -sekin lentaning himoya qatlamini tortib oynaga bosa boshladim.
Afsuski, video yo'q - tortishish uchun bo'sh qo'llar yo'q edi va har kimning mashinasi boshqacha.
Agar biror narsa aniq bo'lmasa - izohlarda so'rang.
Yozgi issiqlik sinovi muvaffaqiyatli o'tdi - hech narsa chiqmadi yoki suzmadi.
Faqatgina salbiy tomoni shundaki, oynaning burchagi sayoz, LEDlar yuqoriga qarab porlaydi. Quyoshli kunda ko'rish qiyin, lekin bu ikki nusxadagi signal bo'lgani uchun

Endi elektron to'ldirishga o'tamiz.
Men ishlatganman, lekin yaqinda kashf qilmaganman

Taxminan bir xil narxga biz ko'proq bulka olamiz

Скетч без особых переделок будет работать и на Wemos при программировании в среде Arduino IDE, а если реализовать небольшой web-сервер, то при подключении к нему по Wi-Fi можно изменять значения таких переменных, как время задержки между миганиями, величина замедления при экстренном торможении va hokazo.
Kelgusida, agar kimdir ESP8266 -da loyihani amalga oshirishni xohlasa, men veb -interfeys orqali sozlamalarni o'zgartirish, ularni EEPROM -ga saqlash va keyin o'qish uchun namuna yuborishim mumkin.
Veb -serverni ishga tushirish mumkin, masalan, burilish signalini yoqish va kontakt yoqilganda tormoz pedalini bosish (sozlash jarayonida tegishli kirishlar holatini so'roq qilish).

O'tkir tormoz bilan miltillovchi rejimni amalga oshirish uchun sotib olindi
Eskiz tormoz pedaliga bosilganda sekinlashuv darajasini nazorat qiladi, agar u 0,5G dan oshsa (keskin tormozlash, lekin tormozlar siqilmasdan), keyin qo'shimcha e'tiborni jalb qilish uchun miltillovchi rejim bir necha soniya yoqiladi.
To'xtashlar, burilish signallari va teskari "ortiqcha" dan Arduino kirishlaridagi boshqaruv signallari galvanik izolyatorlar - oqim cheklovli rezistorli optokupllar orqali uzatiladi, ular oxir -oqibat Arduino kirishlaridagi LOW darajasini hosil qiladi (ular doimo 10kΩ orqali ijobiy tomonga tortiladi). rezistorlar).
Quvvat manbai - DC -DC buk konvertori orqali 5 volt.
Hamma narsa sendvich shaklida o'ralgan va tegishli qutiga solingan, unda o'q tortish sensori to'g'ri yo'nalishi uchun o'rnatish yo'nalishini belgilab qo'ygan.

Sxema va fotosurat



Yuk ko'taruvchi (musbat) rezistorlar reytingi standart - 10 kOm, rezistorlarning optokupl oqimining chegaralanishi 1 kOm. Men optokupllarni eski taxtalardan tushirdim, ikkitasi PC123, ikkitasi - PC817.


Birinchi fotosuratda siz ikkita qo'shimcha xulosani ko'rishingiz mumkin, men ularni burilish signallari uchun qildim. Mening mashinamda, Rulda koloni qo'li yoqilganda, erga qisqa tutashuv sodir bo'ladi, men simlarni dastak blokiga va Arduino kirishiga uladim. Agar rulda ustunining dastasi plyusni o'zgartirsa yoki chapga / o'ngga burilish signallarining "+" lampalaridan signal olsa, ularni galvanik izolyatsiya orqali ulang.



Xo'sh, endi eskizning o'zi (Arduino IDE)

#qo'shing #qo'shing // ba'zi umumiy sharhlar // Men bir vaqtning o'zida bir chekkali LEDni o'chirib qo'ydim. ular tokchalarning dekorativ panellarida porlashdi // bu misolda loop uchun ko'rilgan (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; // keyin STOP blokidagi halqalarni o'zgartiring (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); }

Men iloji boricha sharh berishga harakat qildim, lekin agar savollarim bo'lsa, sharhlar qo'shishga harakat qilaman (shuning uchun men uni biriktirilgan faylga emas, balki sharh matniga joylashtiraman). Aytgancha, bu sharhning boshqa nuqtalariga ham tegishli - agar sharhlarda muhim savollar bo'lsa, men uni to'ldiraman.

Va nihoyat, ishning namoyishi (video uchun men demo rejimi bilan eskizdan foydalandim).

Yangilash. Demo rejimidagi eskiz hamma narsani bitta qisqa videoga joylashtirish uchun maxsus tayyorlangan.
Tormoz chirog'i faqat keskin tormozlashda (yuqorida ta'riflanganidek) yonib -o'chib turadi, tiqilinchda va silliq holatda turganida, u haydovchilarni bezovta qilmasdan yonadi.
Qorong'ida yorqinlik ortiqcha emas. shishaning egilishi tufayli chiroqlar orqaga qaraganda yuqoriga qarab yo'naltiriladi.
Standart chiroqlar odatdagidek ishlaydi, bu chiziq ularni takrorlaydi.

Aliexpress -dan ishlaydigan chiroqlar konstruktori - bu bosilgan elektron karta va radio komponentlar to'plami. Buning uchun komponentlarni taxtaga lehimlash kifoya.

Lekin undan siz ishlaydigan chiroqlarning yanada qiziqarli effektlarini olishingiz mumkin. Masalan, mashinaning burilish signallari yoki to'xtash signali uchun yoki faqat bayram uchun gulchambarlar uchun.


Ushbu sxema 3-15 voltli kuchlanish zo'riqishida ishlashi mumkin. Impuls generatori NE555 mikrosxemasida yig'iladi, so'ngra pulslar dekoderli o'nlik hisoblagichga - CD4017 mikrosxemasiga (yoki K561IE8) beriladi, uning chiqishlariga LEDlar oqim cheklovli rezistorlar orqali ulanadi.

Chiroqlarning o'tish tezligi kesish qarshiligi bilan tartibga solinadi. Triggerlar va chiqish tranzistorli kalitlari bo'lgan sxemani qo'shing. Hech narsa dasturlashning hojati yo'q va hokazo. Natijada, siz ishlaydigan chiroqlarning yanada qiziqarli yorug'lik effektlarini olishingiz mumkin. KT815 -da K561TM2 tetiklari va quvvat tugmachalari bo'lgan boshqa bosilgan elektron kartani yasashimiz kerak. Har bir K561IE8 chiqishidagi impuls "mandal" tamoyili bo'yicha tetikli kirishga beriladi, ya'ni tetik chiqishida CD4017 mikrosxemasining 11 -pinidan (K561IE8) qaytish zarbasi kelguncha signal o'zgarmaydi. Har bir tsiklda 9 ta kanal yoqiladi.

Maqola sizga yoqdimi? Do'stlar bilan bo'lishish uchun: