طراح چراغ های روشنایی از Aliexpress است تخته مدار چاپیو مجموعه ای از اجزای رادیویی. تنها کاری که باید انجام دهید این است که قطعات را به برد لحیم کنید.

اما از آن می توانید بیشتر به دست آورید جلوه های جالبچراغ های در حال اجرا به عنوان مثال، برای چراغ های راهنما اتومبیل یا در یک علامت توقف یا فقط روی گلدسته ها برای تعطیلات.


این مدار می تواند در محدوده ولتاژ تغذیه 3-15 ولت کار کند. مولد پالس روی یک تراشه NE555 مونتاژ می شود، سپس پالس ها با یک رمزگشا به یک شمارنده اعشاری - یک تراشه CD4017 (یا K561IE8) وارد می شوند، که LED ها از طریق مقاومت های محدود کننده جریان به خروجی های آن متصل می شوند.

سرعت سوئیچ لامپ ها توسط یک مقاومت تنظیم تنظیم می شود. یک مدار با فلیپ فلاپ و کلیدهای ترانزیستور خروجی اضافه کنید. بدون نیاز به برنامه نویسی و غیره در نتیجه جالب تر نورپردازیچراغ های در حال اجرا شما باید یک برد مدار چاپی دیگر با ماشه های K561TM2 و کلیدهای پاور روی KT815 بسازید. یک پالس از هر خروجی K561IE8 مطابق با اصل "لچ" به ورودی ماشه تغذیه می شود، یعنی سیگنال در خروجی ماشه ثابت می ماند تا زمانی که پالس تنظیم مجدد از پایه 11 تراشه CD4017 (K561IE8) برسد. 9 کانال در هر چرخه روشن می شود.


سلام به همه دست اندرکاران! امروز یکی از برنامه های کاربردی متعدد را بررسی خواهیم کرد نوار led WS2812B را در LED های RGB آدرس پذیر تایپ کنید. چنین نوارهایی (و همچنین LED های WS2812B که به طور جداگانه نصب شده اند) می توانند برای روشن کردن پس زمینه "Ambilight" مانیتورها و تلویزیون های رایانه، روشنایی پویا در ماشین، یک عکس، یک قاب عکس، یک آکواریوم و غیره استفاده شوند. آنها به طور گسترده ای در طراحی هر محل، به شکل نورپردازی های سال نو یا نمایش نور استفاده می شوند. استفاده از نوار LED نوع WS2812B امکان دستیابی به تعداد زیادی پروژه جالب را فراهم می کند.

LED WS2812B یک LED RGB است که در همان محفظه با تراشه WS2801 تعبیه شده است.


LED WS2812B خود یک عنصر SMD است که برای نصب روی سطح طراحی شده است. در داخل، LED از کریستال های نور قرمز (قرمز)، نور سبز (سبز) و نور آبی (آبی) در یک بسته تشکیل شده است. با استفاده از این LED، می توانید طیف گسترده ای از سایه های رنگی تابش نور را دریافت کنید.

LED RGB از طریق برد میکروکنترلر آردوینو کنترل می شود.
من یه نوار ال ای دی WS2812B از چینی ها گرفتم سگمنت 1 متری 144 ال ای دی هست. من مدتهاست که می خواستم برای آزمایش های مختلف تلاش کنم. با کمک کتابخانه‌های آردوینو - Adafruit Neopixel و Fast led، می‌توانید جلوه‌های نوری بسیار غیرعادی زیادی دریافت کنید. اما بعد تصمیم گرفتم تلاش کنم چراغ های راهنما پویابرای خودرویی به اصطلاح "سبک آئودی". من هنوز شروع به اجرای این طرح نکرده ام (گیبدشنیک های ما چگونه آن را می پذیرند؟) ، اما البته تأثیر آن بسیار جذاب بود.

این برد به عنوان یک کنترل کننده برای کنترل نوار LED عمل می کند. آردوینو اونومی توانید از بردهای دیگر - Arduino Nano، Arduino Pro mini استفاده کنید.
کل فرآیند را در ویدیو تماشا کنید:


لیست ابزار و مواد.
-برد آردوینو uno
- تخته کشویی 12 ولت / 5 ولت در 3 آمپر؛
- مقاومت 100Kom-4pcs؛
-مقاومت 47Kom-4pcs;
- مقاومت 500 اهم - 1 عدد.
-دکمه ها (برای شبیه سازی گنجاندن سیگنال ها) -4 عدد.
-تخته نان
-پیچ گوشتی؛
بلوک آزمایشگاهیغذا
- آهن لحیم کاری؛
- کامبریک؛
-آزمایشکننده.
- سیم های اتصال

گام یک. مونتاژ طرحواره.


من مدار را با استفاده از برد برد (برد برد) مونتاژ کردم. مقاومت های متصل به ورودی های دیجیتال آردوینو برای تبدیل سیگنال های ورودی خودرو از 12 به 5 ولت مورد نیاز است. مقاومت 500 اهم برای محافظت از خط کنترل نوار LED WS2812B.
عکس تخته


به عنوان مبدل از 12 ولت به 5 ولت، از یک برد آماده Aliexpress استفاده کردم. از هر مبدلی با پارامترهای مناسب می توان استفاده کرد. مبدل برای منبع تغذیه پایدار آردوینو و نوار LED WS2812B مورد نیاز است.


گام دوم. برنامه نویسی آردوینو

ورودی های دیجیتال برد آردوینو شماره 3،4 برای چرخاندن پیچ های چپ و راست استفاده می شود. پین شماره 5 - چراغ ترمز را روشن کنید، پین شماره 6 - عقب را روشن کنید. پین شماره 8 - نوار سیگنال کنترل WS2812B.

در Arduino IDE، طرح (لینک بالا) را آپلود کنید. دو گزینه طرح - یکی برای جلوی ماشین، دیگری برای عقب. از هر کدام که نیاز دارید استفاده کنید. در ابتدای طرح، می توانید تعداد LED های مورد نیاز خود را تنظیم کنید. همچنین می توانید سرعت چراغ های راهنما را با توجه به خودروی خود تنظیم کنید. همچنین می توانید روشنایی LED ها را با پارامتر strip.Color(103,31,0) تغییر دهید - دو رقم اول را از 0 به 255 تغییر دهید. یعنی می توانید کمی آزمایش کنید.

هنگامی که دکمه مورد نظر را فشار می دهید، سیگنالی برای فعال کردن پارامتر مورد نظر می دهیم. با مونتاژ صحیح مدار، معمولاً بلافاصله شروع به کار می کند.

عکس در حال انجام است.






یک آزمایش خوب با این طراحی آخر هفته انجام شد. جالب بود

او پارسال گفت "Gop" - وقت پریدن است :)
یا بهتر است بگوییم، بررسی وعده داده شده در مورد چراغ های راهنما در حال اجرا را انجام دهیم.
من 1 متر نوار سیاه WS2812B (144 LED) را در یک لوله سیلیکونی سفارش دادم، هنگام سفارش، "Black 1m 144led IP67" را انتخاب کردم (شاید کسی رنگ سفید بستر را دوست داشته باشد، چنین انتخابی وجود دارد).

یک هشدار کوچک

من یک نوار لحیم شده از دو قطعه نیم متری دریافت کردم. نقطه ضعف این نقطه ضعف لحیم کاری است (ممکن است با گذشت زمان تماس ها شکسته شود) و افزایش فاصله بین LED ها.
قبل از خرید با فروشنده چک کنید

سیم های تماس برای اتصال سریال چندین قطعه به نوار در دو طرف لحیم شدند، زیرا من به آن نیازی نداشتم، سپس آن را در یک طرف سیم لحیم کردم، همه چیز را با یک درزگیر خنثی مهر و موم کردم و مقداری نوار برق سیاه دیگر پیچیدم.



به عنوان مثال با نوار چسب شفاف دو طرفه به شیشه متصل می شود.

جزئیات نصب

سطوح را چربی زدایی کردم، ابتدا نوار چسب را به لوله چسباندم (به آن می گویم، حتی اگر مقطع مستطیل شکل باشد)، اضافی بیرون زده نوار پهن تر را قطع کردم، لبه های لوله را در شکاف بین قرار دادم. سقف و قسمت های بالایی پانل های تزئینی ستون های عقب (من سیم های تماس را با رابط پشت یک پانل پنهان کردم)، در مرکز قرار گرفت و شروع به فشار دادن به شیشه کرد و به آرامی لایه محافظ نوار را بیرون کشید.
متأسفانه هیچ ویدیویی وجود ندارد - هیچ دست آزاد برای تیراندازی وجود نداشت و ماشین های همه متفاوت است.
اگر چیزی واضح نیست - در نظرات بپرسید.
آزمایش گرمای تابستان موفقیت آمیز بود - هیچ چیزی جدا نشد یا شناور نشد.
تنها نکته منفی این است که زاویه شیب شیشه ملایم است، ال ای دی ها بیشتر به سمت بالا می درخشند. در یک روز آفتابی دیدن آن سخت است، اما از آنجایی که این سیگنال‌ها تکراری هستند، پس

حالا بیایید به سراغ پر کردن الکترونیکی برویم.
من استفاده کردم اما اخیرا کشف کردم

با همین هزینه، نان های بیشتری دریافت می کنیم

طرح بدون هیچ گونه تغییری هنگام برنامه نویسی در Arduino IDE روی Wemos نیز کار می کند و اگر یک وب سرور کوچک را پیاده سازی کنید، پس از اتصال به آن از طریق Wi-Fi، می توانید مقادیر متغیرهایی مانند تغییر دهید. زمان تاخیر بین پلک زدن، میزان کاهش سرعت در هنگام ترمز اضطراری و غیره
در اینجا در آینده، اگر کسی علاقه مند به اجرای پروژه ای در ESP8266 باشد، می توانم نمونه ای برای تغییر تنظیمات از طریق رابط وب، ذخیره آنها در EEPROM و سپس خواندن پست کنم.
راه اندازی وب سرور را می توان به عنوان مثال با روشن کردن چراغ راهنما و فشار دادن پدال ترمز هنگام روشن شدن احتراق اجرا کرد (در روش تنظیم، وضعیت ورودی های مربوطه را نظرسنجی کنید).

برای اجرای حالت چشمک زن در هنگام ترمز شدید خریداری شد
این طرح سطح کاهش سرعت را هنگام فشار دادن پدال ترمز بررسی می کند، اگر از 0.5G بیشتر شود (کاهش سرعت سخت، اما صدای ترمز وجود ندارد)، سپس یک حالت چشمک زن برای چند ثانیه فعال می شود تا توجه بیشتری را به خود جلب کند.
سیگنال‌های کنترلی ورودی‌های آردوینو از استاپ‌های "plus"، چراغ‌های راهنما و معکوس از طریق آن تغذیه می‌شوند. جداسازی گالوانیکی- کوپلرهای نوری با مقاومت های محدود کننده جریان، که در نهایت سطح LOW را در ورودی های آردوینو تشکیل می دهند (به طور دائم از طریق مقاومت های 10 کیلو اهم به سمت مثبت کشیده می شوند).
برق - 5 ولت از طریق مبدل باک DC-DC.
همه چیز مانند یک ساندویچ تا می شود و در یک جعبه مناسب بسته بندی می شود که برای جهت گیری صحیح سنسور گرانش جهت نصب را با فلش مشخص کردم.

طرح و عکس



مقدار مقاومت های pull-up (به پلاس) استاندارد است - 10 کیلو اهم، مقاومت های اپتوکوپلر محدود کننده جریان - 1 کیلو اهم. اپتوکوپلرها از بردهای قدیمی حذف شدند، دو تا PC123 دریافت کردند، دو - PC817.


در عکس اول دو پین اضافی را می بینید، من آنها را برای چراغ های راهنما درست کردم. از آنجایی که در ماشین من وقتی اهرم ستون فرمان روشن می شود، اتصال به زمین اتفاق می افتد، سیم ها را به بلوک اهرم و ورودی های آردوینو وصل کردم. اگر سوئیچ ستون فرمان به اضافه سوئیچ می شود یا از لامپ های "+" چراغ راهنما چپ / راست سیگنال می گیرد، سپس آنها را از طریق عایق گالوانیکی وصل کنید.



خوب، اکنون خود طرح (Arduino IDE)

#عبارتند از #عبارتند از //چند نظر کلی // یکی از ال ای دی های بیرونی را غیرفعال کردم، چون آنها بر روی پانل های تزئینی قفسه ها می درخشیدند // که در این مثال دیده می شود برای حلقه(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; //سپس چرخه های بلوک STOP را برای (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); }

من سعی کردم حداکثر در مورد آن نظر بدهم، اما در صورت وجود سؤال، سعی می کنم نظرات را اضافه کنم (بنابراین آن را در متن نقد قرار می دهم و نه به عنوان فایل پیوست). به هر حال، این در مورد سایر نکات بررسی نیز صدق می کند - اگر سؤالات مهمی در نظرات وجود داشته باشد، آن را نیز تکمیل خواهم کرد.

و در نهایت، نمایش کار (من از یک طرح با حالت نمایشی برای ویدیو استفاده کردم).

به روز رسانی من طرحی را با حالت نمایشی درست کردم تا همه چیز را در یک ویدیوی کوتاه قرار دهم.
چراغ ترمز فقط در هنگام ترمزگیری شدید چشمک می زند (این بالا نوشته شده است)، وقتی صاف است و در ترافیک ایستاده است، بدون اینکه راننده های پشت سر را آزار دهد می سوزد.
روشنایی در تاریکی بیش از حد نیست، زیرا. به دلیل شیب شیشه، نورها بیشتر به سمت بالا هدایت می شوند تا عقب.
چراغ های معمولی طبق معمول کار می کنند، این نوار آنها را کپی می کند.

من قصد خرید +97 را دارم افزودن به علاقه مندی ها نقد را پسندید +89 +191

او پارسال گفت "Gop" - وقت پریدن است :)
یا بهتر است بگوییم، بررسی وعده داده شده در مورد چراغ های راهنما در حال اجرا را انجام دهیم.
من 1 متر نوار سیاه WS2812B (144 LED) را در یک لوله سیلیکونی سفارش دادم، هنگام سفارش، "Black 1m 144led IP67" را انتخاب کردم (شاید کسی رنگ سفید بستر را دوست داشته باشد، چنین انتخابی وجود دارد).

یک هشدار کوچک

من یک نوار لحیم شده از دو قطعه نیم متری دریافت کردم. نقطه ضعف این نقطه ضعف لحیم کاری است (ممکن است با گذشت زمان تماس ها شکسته شود) و افزایش فاصله بین LED ها.
قبل از خرید با فروشنده چک کنید

سیم های تماس برای اتصال سریال چندین قطعه به نوار در دو طرف لحیم شدند، زیرا من به آن نیازی نداشتم، سپس آن را در یک طرف سیم لحیم کردم، همه چیز را با یک درزگیر خنثی مهر و موم کردم و مقداری نوار برق سیاه دیگر پیچیدم.



به عنوان مثال با نوار چسب شفاف دو طرفه به شیشه متصل می شود.

جزئیات نصب

سطوح را چربی زدایی کردم، ابتدا نوار چسب را به لوله چسباندم (به آن می گویم، حتی اگر مقطع مستطیل شکل باشد)، اضافی بیرون زده نوار پهن تر را قطع کردم، لبه های لوله را در شکاف بین قرار دادم. سقف و قسمت های بالایی پانل های تزئینی ستون های عقب (من سیم های تماس را با رابط پشت یک پانل پنهان کردم)، در مرکز قرار گرفت و شروع به فشار دادن به شیشه کرد و به آرامی لایه محافظ نوار را بیرون کشید.
متأسفانه هیچ ویدیویی وجود ندارد - هیچ دست آزاد برای تیراندازی وجود نداشت و ماشین های همه متفاوت است.
اگر چیزی واضح نیست - در نظرات بپرسید.
آزمایش گرمای تابستان موفقیت آمیز بود - هیچ چیزی جدا نشد یا شناور نشد.
تنها نکته منفی این است که زاویه شیب شیشه ملایم است، ال ای دی ها بیشتر به سمت بالا می درخشند. در یک روز آفتابی دیدن آن سخت است، اما از آنجایی که این سیگنال‌ها تکراری هستند، پس

حالا بیایید به سراغ پر کردن الکترونیکی برویم.
من استفاده کردم اما اخیرا کشف کردم

با همین هزینه، نان های بیشتری دریافت می کنیم

طرح بدون هیچ گونه تغییری هنگام برنامه نویسی در Arduino IDE روی Wemos نیز کار می کند و اگر یک وب سرور کوچک را پیاده سازی کنید، پس از اتصال به آن از طریق Wi-Fi، می توانید مقادیر متغیرهایی مانند تغییر دهید. زمان تاخیر بین پلک زدن، میزان کاهش سرعت در هنگام ترمز اضطراری و غیره
در اینجا در آینده، اگر کسی علاقه مند به اجرای پروژه ای در ESP8266 باشد، می توانم نمونه ای برای تغییر تنظیمات از طریق رابط وب، ذخیره آنها در EEPROM و سپس خواندن پست کنم.
راه اندازی وب سرور را می توان به عنوان مثال با روشن کردن چراغ راهنما و فشار دادن پدال ترمز هنگام روشن شدن احتراق اجرا کرد (در روش تنظیم، وضعیت ورودی های مربوطه را نظرسنجی کنید).

برای اجرای حالت چشمک زن در هنگام ترمز شدید خریداری شد
این طرح سطح کاهش سرعت را هنگام فشار دادن پدال ترمز بررسی می کند، اگر از 0.5G بیشتر شود (کاهش سرعت سخت، اما صدای ترمز وجود ندارد)، سپس یک حالت چشمک زن برای چند ثانیه فعال می شود تا توجه بیشتری را به خود جلب کند.
سیگنال‌های کنترلی به ورودی‌های آردوینو از «بعلاوه» استاپ‌ها، چراغ‌های راهنما و معکوس از طریق عایق گالوانیکی تغذیه می‌شوند - اپتوکوپلرهایی با مقاومت‌های محدودکننده جریان، که در نهایت سطح LOW را در ورودی‌های آردوینو تشکیل می‌دهند (مداوماً از طریق مقاومت‌های 10 کیلو اهم به مثبت کشیده می‌شوند. ).
برق - 5 ولت از طریق مبدل باک DC-DC.
همه چیز مانند یک ساندویچ تا می شود و در یک جعبه مناسب بسته بندی می شود که برای جهت گیری صحیح سنسور گرانش جهت نصب را با فلش مشخص کردم.

طرح و عکس



مقدار مقاومت های pull-up (به پلاس) استاندارد است - 10 کیلو اهم، مقاومت های اپتوکوپلر محدود کننده جریان - 1 کیلو اهم. اپتوکوپلرها از بردهای قدیمی حذف شدند، دو تا PC123 دریافت کردند، دو - PC817.


در عکس اول دو پین اضافی را می بینید، من آنها را برای چراغ های راهنما درست کردم. از آنجایی که در ماشین من وقتی اهرم ستون فرمان روشن می شود، اتصال به زمین اتفاق می افتد، سیم ها را به بلوک اهرم و ورودی های آردوینو وصل کردم. اگر سوئیچ ستون فرمان به اضافه سوئیچ می شود یا از لامپ های "+" چراغ راهنما چپ / راست سیگنال می گیرد، سپس آنها را از طریق عایق گالوانیکی وصل کنید.



خوب، اکنون خود طرح (Arduino IDE)

#عبارتند از #عبارتند از //چند نظر کلی // یکی از ال ای دی های بیرونی را غیرفعال کردم، چون آنها بر روی پانل های تزئینی قفسه ها می درخشیدند //در مثال این حلقه برای حلقه (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; //سپس چرخه های بلوک STOP را برای (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); }

من سعی کردم حداکثر در مورد آن نظر بدهم، اما در صورت وجود سؤال، سعی می کنم نظرات را اضافه کنم (بنابراین آن را در متن نقد قرار می دهم و نه به عنوان فایل پیوست). به هر حال، این در مورد سایر نکات بررسی نیز صدق می کند - اگر سؤالات مهمی در نظرات وجود داشته باشد، آن را نیز تکمیل خواهم کرد.

و در نهایت، نمایش کار (من از یک طرح با حالت نمایشی برای ویدیو استفاده کردم).

به روز رسانی من طرحی را با حالت نمایشی درست کردم تا همه چیز را در یک ویدیوی کوتاه قرار دهم.
چراغ ترمز فقط در هنگام ترمزگیری شدید چشمک می زند (این بالا نوشته شده است)، وقتی صاف است و در ترافیک ایستاده است، بدون اینکه راننده های پشت سر را آزار دهد می سوزد.
روشنایی در تاریکی بیش از حد نیست، زیرا. به دلیل شیب شیشه، نورها بیشتر به سمت بالا هدایت می شوند تا عقب.
چراغ های معمولی طبق معمول کار می کنند، این نوار آنها را کپی می کند.

همه کسانی که کم و بیش مدرن و نه بار دوم ماشین را دیدند، و اگر باز هم موضوع رانندگی بود، مدتهاست که یکی از گزینه های مفید را برای خود متذکر شده اند ... مردم به آن چراغ راهنما تنبل یا مودب می گویند. چراغ راهنما تمام ماهیت آن به این واقعیت خلاصه می شود که هنگام چرخش به راست یا چپ ، راننده فقط یک بار اهرم چراغ راهنما را لمس می کند ، در حالی که آن را تعمیر نمی کند. یعنی به سادگی اجازه می دهد مدارهای نشانگر راهنما کار کنند، اما همان سوئیچ را روشن نمی کند. در نتیجه ، پس از رها شدن اهرم ، نشانگرهای جهت 3-4 بار دیگر کار می کنند و راننده در این زمان می تواند تجارت خود را انجام دهد ، یعنی کاملاً تسلیم جاده شود. این گزینه زمانی که مجبور به تغییر مسیر هستید بسیار مفید است. در واقع، هنگامی که اهرم نشانگر جهت به طور کامل روشن می شود، به دلیل زاویه ناچیز چرخش فرمان، خاموش شدن خودکار رخ نمی دهد، به این معنی که لازم است با خود اشاره گر به جلو و عقب بچرخید یا دائماً از آن حمایت کنید. با دست خود در آستانه روشن شدن به منظور شبیه سازی عملکرد نشانگر جهت. و اگر چنین گزینه ای وجود دارد، فقط کمی اهرم را لمس کرده و فراموش کرده اید. به طور کلی، ما فکر می کنیم که اصل کار به طور کامل آشکار شده است، اما اکنون قابل ذکر است که امکان اجرای چنین گزینه ای در دستگاه شما وجود دارد.

کدام مدارهای الکتریکی برای یک چراغ راهنما در آردوینو مناسب هستند

قبل از اینکه در مورد تولید یک چراغ راهنما مودبانه دچار مشکل شوید، باید بدانید که بدون تغییر مدار الکتریکی در ماشین برای کدام طرح های اتصال الکتریکی مناسب است.
در اینجا با دو گزینه اصلی که در اصل متفاوت هستند، روبرو هستیم. اولین مورد زمانی است که چراغ های راهنما هنگامی که به عنوان بار متصل می شوند روشن می شوند. یعنی شمول به دلیل تعویض مدار لامپ های نشانگر جهت رخ می دهد که خود اهرم نشانگر جهت در آن قرار دارد ، این اوست که مدار را می بندد و پس از آن عملیات انجام می شود. در این مورد، استفاده از گزینه ما کار نخواهد کرد، زیرا وقتی اهرم مدار را با لامپ باز می کند، بلافاصله امکان نشان دادن نور را خاموش می کنیم، حتی اگر سیگنالی به خود اهرم برسد، به سادگی جلوتر نمی رود.
گزینه دوم مال ما است، زمانی که سیگنال های کنترلی وجود دارد و سیگنال های قدرت خروجی وجود دارد. در این صورت، به جای یک رله معمولی، می توانید مداری را که می خواهیم به شما معرفی کنیم، قرار دهید.

ماژول برق رله ای که می توان آن را در اینترنت برای کنترل بار قدرت خریداری کرد

طرح و نمودار یک چراغ راهنما تنبل (مودب) در آردوینو

بنابراین، استفاده از آردوینو به عنوان هد یونیت به عنوان چراغ راهنماهای تنبل قابل بحث است، زیرا این نیز راه حل ایده آلی نیست، که دارای معایبی است. بیایید بگوییم که پس از روشن شدن احتراق باید برق ثابتی داشت، برای اطمینان از سرعت، اتصال مدارهای برق ضروری است. در عین حال، تسمه خود را از اجزای رادیویی غیر ضروری، در اصل، در اینجا بی فایده است، زیرا در این حالت می توانید به سادگی میکروکنترلر را برنامه ریزی کنید و فقط از آن استفاده کنید. اما این منفی نیز یک مزیت است، زیرا همه کسانی که آن را دارند می توانند آردوینو را برنامه ریزی کنند و برای میکروکنترلرها نیز به یک برنامه نویس نیاز خواهید داشت.
فقط نوشتن یک برنامه یکی از سخت ترین کارها خواهد بود. در اینجا یک مبتدی باید بیش از یک ساعت از وقت آزاد خود را صرف کند و عملکرد الگوریتم ها را مطالعه کند، اما خوشبختانه اینترنت وجود دارد و ما هستیم. بنابراین در اینجا طرح است.

int switchPinR=8; int switchPinL=7; intledPinR=11; intledPinL=12; بولی ledOn = نادرست; int i=0; intz=0; void setup() (// کد راه اندازی خود را اینجا قرار دهید تا یک بار اجرا شود: pinMode(switchPinR, INPUT)؛ pinMode(switchPinL, INPUT)؛ pinMode(ledPinR, OUTPUT)؛ pinMode(ledPinL, OUTPUT)؛ Serial.begin(9600 ) ) void loop ( // کد اصلی خود را در اینجا قرار دهید تا به طور مکرر اجرا شود: //2 برچسب: if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == HIGH) (digitalWrite(ledPinR, HIGH) ؛ digitalWrite(ledPinL، HIGH)؛ i=0؛ در حالی که (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && digitalRead(switchPinR) == LOW && z>=7) ( break; ) ) else (digitalWrite(ledPinR, LOW); digitalWrite(ledPinL, LOW); z=0; ) // زنگ هشدار را حلقه کنید if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) = = HIGH) (goto label;) // چراغ راهنمای سمت راست. if (digitalRead(switchPinR) == HIGH) (digitalWrite(ledPinR, HIGH); i=0; while (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); delay(400); i++; z++; if (digitalRead(switchPinR) == LOW && z>=7) ( break; ) ) ) else (digitalWrite(ledPinR, LOW)؛ z=0; ) //سیگنال گردش چپ. if (digitalRead(switchPinL) == HIGH) (digitalWrite(ledPinL, HIGH)؛ i=0؛ while (i<7) { ledOn = !ledOn; digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && z>=7) ( break; ) ) ) else (digitalWrite(ledPinL, LOW); z=0; ) ))

به طور خلاصه، می توان خلاصه کرد که طرح دارای 2 ورودی و 2 خروجی است. در همان زمان، در ورودی یک مثبت، یعنی یک سطح سیگنال بالا در ورودی (8.7)، تعداد مشخصی چشمک زدن (z یا i) در خروجی مربوطه (11.12) دریافت می کنیم. خلاصه یه همچین چیزی یعنی اگر می خواهید چیزی در طرح در مورد تعداد چشمک زدن ها و خروجی های ورودی ها تغییر دهید، به این متغیرها توجه کنید. اگر نیاز به تغییر طول چشمک زدن است، توجه شما باید به عملکرد تاخیر معطوف شود.
یکی دیگر از ویژگی های این برنامه خروجی آلارم تا حدودی غیرعادی است. ابتدا نشانگرهای چپ و راست کار می شوند، سپس آلارم چراغ اضطراری روشن می شود. این به این دلیل است که فقط در صورتی می تواند روشن شود که ورودی در ورودی های 8 و 7 همزمان بالا باشد. و این شرط فقط برای چرخه دوم برآورده می شود، زیرا فشار دادن همزمان دو دکمه کار نمی کند. فقط از نظر فیزیکی سرعت میکروکنترلر به شما این امکان را می‌دهد که خروجی بالا را از روی دکمه‌ای سریع‌تر بخوانید و تصمیم بگیرید که این هنوز شرط کار کردن چراغ راهنما است و نه زنگ هشدار. اگر چه شما نباید در مورد آن زحمت بکشید، به جز اینکه تشکر کردن در راه مشکل ساز خواهد بود.

ویژگی های اتصال چراغ راهنما تنبل (مودب) به آردوینو در ماشین

شما نباید از پایه 13 به عنوان خروجی استفاده کنید، زیرا هر بار که برق وصل می شود و خاموش می شود، ممکن است نشانگرهایی که به این خروجی متصل می شوند سوسو بزنند.
هنگام تغییر سیگنال های کنترلی به سیگنال های قدرت، از بلوک های مناسب خریداری شده در اینترنت یا مونتاژ شده توسط شما استفاده کنید. ما قبلاً در مورد چنین بلوک ها - ماژول ها صحبت کرده ایم.
هنگام دریافت سیگنال 1 از ولتاژ 12 ولت، یک مقاومت 10 کیلو اهم در جلوی ورودی قرار دهید.

این در واقع تمام کلمات جدایی است که هنگام ساختن یک چراغ راهنما برای یک ماشین روی یک میکروکنترلر آردوینو، و اکنون تقریباً مشابه در ویدیو ...