Σκεφτείτε τη δημιουργία ενός φλας όπως σε ένα Audi, χρησιμοποιώντας το παράδειγμα ενός προβολέα από ένα αυτοκίνητο Renault Clio. Ας φτιάξουμε φλας και DRL σε μία συσκευή.

Τι χρειάζεστε για αυτό: Λωρίδα LED που αποτελείται από LED ws2812b Ελεγκτής Arduino nano (μπορεί να χρησιμοποιηθεί σε οποιαδήποτε άλλη μορφή) Αυτοκίνητο ΦορτιστήςΓια κινητά τηλέφωναμε έξοδο USB. Δεδομένου ότι ο ελεγκτής Arduino χρειάζεται τάση 5V, θα χρησιμοποιήσουμε αυτόν τον φορτιστή ως μετατροπέα τάσης από 12V σε 5V. Σταθεροποιητής τάσης για 5V KR142EN5V (KREN5V) ή οποιοδήποτε άλλο εισαγόμενο ανάλογο. 3 αντιστάσεις 10 kΩ ως αντίσταση έλξης.

Διάγραμμα σύνδεσης

Ο ελεγκτής arduino πρέπει να συνδεθεί στο δίκτυο του αυτοκινήτου μέσω μετατροπέα 12V -> 5V ώστε η τάση στο κύκλωμα να προέρχεται από το άναμμα της «ανάφλεξης». Στον σταθεροποιητή τάσης KREN5V πρέπει να συνδέσετε το θετικό καλώδιο από το τρέχον φλας. Αυτό το άρθρο εξετάζει τη σύνδεση και το υλικολογισμικό ενός μόνο φλας, για να κάνετε το δεύτερο φλας, πρέπει να συνδέσετε το δεύτερο με τον ίδιο τρόπο λωρίδα ledσε οποιαδήποτε δωρεάν ψηφιακή έξοδο Arduino (για παράδειγμα, 7), καθώς και προσθέστε τον κωδικό για αυτό στο υλικολογισμικό σύμφωνα με το παράδειγμά μας.

υλικολογισμικό ελεγκτή

Για να εργαστείτε με pixel LED, θα χρειαστείτε μια βιβλιοθήκη . Μπορείτε να το εγκαταστήσετε ως εξής: Σκίτσο -> Συμπερίληψη βιβλιοθήκης -> Διαχείριση βιβλιοθηκών. Στη συνέχεια, στο μενού αναζήτησης, πληκτρολογήστε το όνομα της βιβλιοθήκης Adafruit_NeoPixel.h και κάντε κλικ στο κουμπί εγκατάστασης. Μετά από αυτό, εισάγετε το σκίτσο στο πρόγραμμα και αντικαταστήστε τον αριθμό των LED στον κωδικό (χρησιμοποιούμε 22 διόδους):

#περιλαμβάνω // περιλαμβάνει τη βιβλιοθήκη
Λωρίδα Adafruit_NeoPixel = Adafruit_NeoPixel(22, 8, NEO_GRB + NEO_KHZ800);
int t,t1,t2,t3,t4,p2,p1 = 0;// μεταβλητή χρόνου
void setup()(
pinMode(2, INPUT);
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) ( //Εάν το φλας είναι σβηστό
for(int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(255,255,255)); // R=255, G=255, B=255 - λευκό χρώμα του LED, ανάψτε τα φώτα πορείας όταν είναι αναμμένα
}
strip.show();
}

if ((digitalRead(2) == HIGH) & (t == 1)) ( // ελέγξτε αν το φλας είναι αναμμένο
for(int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // σβήστε όλες τις διόδους
}
strip.show();
for(int k = 0; k< 3; k++){ // цикл до трех - сигнал «перестроения» , при кратковременном включении мигает 3 раза,

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

if (digitalRead(2) == HIGH) (k = 0;) // εάν λάβουμε άλλο θετικό σήμα ενώ το φλας αναβοσβήνει, τότε επαναφέρετε τον μετρητή έτσι ώστε το φλας να αναβοσβήνει τουλάχιστον 3 ακόμη φορές
strip.setPixelColor(i, strip.Color(255, 69, 0)); // R=255, G=69, B=0 - Χρώμα LED

καθυστέρηση((t4)/22);
strip.show();

}
εάν (digitalRead(2) == HIGH) (t4=t4+20;) // εάν όλες οι δίοδοι είναι αναμμένες κίτρινες, αλλά το σήμα από το ρελέ είναι ακόμα αναμμένο, τότε αυξάνουμε το χρόνο καύσης
εάν (digitalRead(2) == LOW) (t4=t4-20;) // εάν όλες οι δίοδοι είναι αναμμένες κίτρινες, αλλά το σήμα από το ρελέ είναι ακόμα αναμμένο, τότε αυξάνουμε το χρόνο καύσης

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

strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - Χρώμα LED

καθυστέρηση((t3)/22);
strip.show();

}
εάν ((ψηφιακή ανάγνωση(2) == LOW)) (t3=t3+20;)
if ((digitalRead(2) == HIGH)) (t3=t3-20;)
}

if ((digitalRead(2) == HIGH) & (t == 0)) ( // ελέγξτε αν το φλας είναι αναμμένο

t1 = millis(); // θυμηθείτε τι ώρα ενεργοποιήθηκε
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 69, 0)); // την πρώτη φορά που ανάβετε το φλας, ανάβουμε όλες τις διόδους κίτρινες
}
strip.show();
ενώ (digitalRead(2) == HIGH) ()
t2 = millis(); // θυμηθείτε τι ώρα έκλεισε το φλας
t4=t2-t1;

for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // σβήστε τις διόδους όταν χαθεί το σήμα από το ρελέ στροφής
}
strip.show();
ενώ (digitalRead(2) == LOW) (
εάν ((millis()-t2)>2000)(διάλειμμα;)
}
αν ((millis()-t2)<2000) {
t3 = millis()-t2; // ο χρόνος για τον οποίο σβήνουν τα φλας
t = 1; // σημαία, γνωρίζουμε ότι η τιμή χρόνου έχει αποθηκευτεί.
}
}

if (digitalRead(4) == HIGH) ( //ειδικά σήματα
for(int j = 0; j< 16; j++) {
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 0, 0)); // R=255, G=0, B=0 - Χρώμα LED
}
strip.show();
καθυστέρηση(20);
for(int i = 0; i< 22; i++){

}
strip.show();
καθυστέρηση(20);
}

for(int j = 0; j< 16; j++) {
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 255)); // R=0, G=0, B=255 - Χρώμα LED
}
strip.show();
καθυστέρηση(20);
for(int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - Χρώμα LED
}
strip.show();
καθυστέρηση(20);
}
}

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

καθυστέρηση(15);
for(int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - Χρώμα LED
}
strip.show();
καθυστέρηση(15);
}
καθυστέρηση (500);

Κάντε το ίδιο για το δεύτερο φλας.

Βίντεο πώς λειτουργεί ο προβολέας μας

Είπε πέρυσι "Gop" - ήρθε η ώρα να πηδήξουμε :)
Ή μάλλον, να κάνουμε την υποσχεμένη αναθεώρηση των φλας σε λειτουργία.
Παρήγγειλα 1 μέτρο μαύρης ταινίας WS2812B (144 LED) σε σωλήνα σιλικόνης, κατά την παραγγελία επέλεξα "Black 1m 144led IP67" (ίσως σε κάποιον αρέσει το λευκό χρώμα του υποστρώματος, υπάρχει τέτοια επιλογή).

Μια μικρή επιφύλαξη

Έλαβα μια ταινία κολλημένη από δύο κομμάτια μισού μέτρου. Το μειονέκτημα αυτού είναι το αδύναμο σημείο της συγκόλλησης (οι επαφές μπορεί να σπάσουν με την πάροδο του χρόνου) και το αυξημένο κενό μεταξύ των LED.
Ελέγξτε με τον πωλητή πριν αγοράσετε

Τα καλώδια επαφής συγκολλήθηκαν στην ταινία και στις δύο πλευρές για σειριακή σύνδεση πολλών τεμαχίων, επειδή Δεν το χρειαζόμουν, μετά το κόλλησα στη μία πλευρά του σύρματος, σφράγισα τα πάντα με ένα ουδέτερο σφραγιστικό και τύλιξα λίγη ακόμα μαύρη ηλεκτρική ταινία.



Προσαρμόζεται σε γυαλί με διαφανή κολλητική ταινία διπλής όψης, για παράδειγμα,.

Λεπτομέρειες εγκατάστασης

Απολίπανσα τις επιφάνειες, πρώτα κόλλησα την κολλητική ταινία στον σωλήνα (θα το ονομάσω έτσι, παρόλο που η διατομή είναι ορθογώνια), έκοψα την προεξέχουσα περίσσεια μιας ευρύτερης ταινίας, έβαλα τις άκρες του σωλήνα στο κενό μεταξύ η οροφή και τα πάνω μέρη των διακοσμητικών πλαισίων των πίσω κολόνων (έκρυψα τα καλώδια επαφής με τον σύνδεσμο πίσω από το ένα πάνελ), κεντρίστηκαν και άρχισαν να πιέζουν το γυαλί, τραβώντας αργά το προστατευτικό στρώμα της ταινίας.
Δυστυχώς, δεν υπάρχει βίντεο - δεν υπήρχαν ελεύθερα χέρια για γυρίσματα και τα αυτοκίνητα του καθενός είναι διαφορετικά.
Εάν κάτι δεν είναι ξεκάθαρο - ρωτήστε στα σχόλια.
Η δοκιμή θερμότητας του καλοκαιριού ήταν επιτυχής - τίποτα δεν ξεφλούδισε ή επέπλεε.
Το μόνο αρνητικό είναι ότι η γωνία κλίσης του γυαλιού είναι ήπια, τα LED λάμπουν περισσότερο προς τα πάνω. Σε μια ηλιόλουστη μέρα είναι δύσκολο να το δεις, αλλά επειδή αυτά είναι διπλά σήματα, τότε

Ας περάσουμε τώρα στην ηλεκτρονική γέμιση.
Χρησιμοποίησα αλλά ανακάλυψα πρόσφατα

Με το ίδιο περίπου κόστος, παίρνουμε περισσότερα τσουρέκια

Το σκίτσο χωρίς καμία τροποποίηση θα λειτουργήσει επίσης στο Wemos κατά τον προγραμματισμό στο Arduino IDE και εάν εφαρμόσετε έναν μικρό διακομιστή ιστού, τότε όταν συνδεθείτε σε αυτόν μέσω Wi-Fi, μπορείτε να αλλάξετε τις τιμές των μεταβλητών όπως π.χ. ο χρόνος καθυστέρησης μεταξύ των αναβοσβήσεών του, το μέγεθος της επιβράδυνσης κατά το φρενάρισμα έκτακτης ανάγκης κ.λπ.
Εδώ στο μέλλον, εάν κάποιος ενδιαφέρεται να υλοποιήσει ένα έργο στο ESP8266, μπορώ να δημοσιεύσω ένα παράδειγμα για την αλλαγή ρυθμίσεων μέσω της διεπαφής ιστού, την αποθήκευση τους στο EEPROM και μετά την ανάγνωση.
Η εκκίνηση του διακομιστή web μπορεί να πραγματοποιηθεί, για παράδειγμα, ενεργοποιώντας το φλας και πατώντας το πεντάλ του φρένου όταν η ανάφλεξη είναι ανοιχτή (στη διαδικασία εγκατάστασης, μετρήστε την κατάσταση των αντίστοιχων εισόδων).

Για την εφαρμογή της λειτουργίας αναβοσβήνει κατά το δυνατό φρενάρισμα αγοράστηκε
Το σκίτσο παρακολουθεί το επίπεδο επιβράδυνσης όταν πατηθεί το πεντάλ του φρένου, εάν ξεπεράσει το 0,5G (σκληρή επιβράδυνση, αλλά όχι τρίξιμο φρένου), τότε ενεργοποιείται μια λειτουργία που αναβοσβήνει για λίγα δευτερόλεπτα για να προσελκύσει επιπλέον προσοχή.
Τα σήματα ελέγχου στις εισόδους Arduino από το "συν" των στοπ, τα φλας και την όπισθεν τροφοδοτούνται μέσω γαλβανικής απομόνωσης - οπτοζεύκτες με αντιστάσεις περιορισμού ρεύματος, που τελικά σχηματίζουν το επίπεδο LOW στις εισόδους Arduino (συνεχώς έλκονται στο συν μέσω αντιστάσεων 10kΩ ).
Ισχύς - 5 βολτ μέσω μετατροπέα DC-DC buck.
Όλο το πράγμα είναι διπλωμένο σαν σάντουιτς και συσκευασμένο σε κατάλληλο κουτί, στο οποίο σημείωσα την κατεύθυνση εγκατάστασης με ένα βέλος για τον σωστό προσανατολισμό του αισθητήρα βαρύτητας

Σχέδιο και φωτογραφία



Η τιμή των αντιστάσεων έλξης (σε συν) είναι τυπική - 10 kOhm, αντιστάσεις περιορισμού ρεύματος οπτοζεύκτη - 1 kOhm. Οι Optocouplers έπεσαν από τις παλιές πλακέτες, δύο πήραν PC123, δύο - PC817.


Στην πρώτη φωτογραφία βλέπετε δύο επιπλέον καρφίτσες, τις έφτιαξα για τα φλας. Επειδή στο αυτοκίνητό μου, όταν ο μοχλός της κολόνας του τιμονιού είναι ενεργοποιημένος, εμφανίζεται βραχυκύκλωμα στη γείωση, συνέδεσα τα καλώδια στο μπλοκ μοχλού και στις εισόδους Arduino. Εάν ο διακόπτης της κολόνας τιμονιού αλλάξει συν ή λάβει σήμα από τους λαμπτήρες "+" του αριστερού / δεξιού φλας, συνδέστε τους μέσω μιας γαλβανικής απομόνωσης.



Λοιπόν, τώρα το ίδιο το σκίτσο (Arduino IDE)

#περιλαμβάνω #περιλαμβάνω //μερικά γενικά σχόλια // Απενεργοποίησα ένα από τα εξωτερικά LED, επειδή έλαμπαν στα διακοσμητικά πάνελ των ραφιών //φαίνεται στο παράδειγμα αυτού για βρόχο (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

Όλοι όσοι είδαν ένα λίγο πολύ μοντέρνο και όχι τη δεύτερη φορά το αυτοκίνητο, και αν ήταν ακόμα θέμα οδήγησης, έχουν σημειώσει από καιρό μια από τις χρήσιμες επιλογές... Ο κόσμος το αποκαλεί τεμπέλικο φλας ή ευγενικό φλας. Η όλη του ουσία συνοψίζεται στο γεγονός ότι όταν στρίβει δεξιά ή αριστερά, ο οδηγός αγγίζει μόνο μία φορά τον μοχλό των φλας, ενώ δεν τον στερεώνει. Δηλαδή, απλώς αφήνει τα κυκλώματα των φλας να λειτουργούν, αλλά δεν ανάβει τον ίδιο διακόπτη. Ως αποτέλεσμα, μετά την απελευθέρωση του μοχλού, οι δείκτες κατεύθυνσης λειτουργούν 3-4 ακόμη φορές και ο οδηγός αυτή τη στιγμή μπορεί ήδη να κάνει τη δική του επιχείρηση, δηλαδή να παραδοθεί εντελώς στο δρόμο. Η επιλογή είναι πολύ χρήσιμη όταν πρέπει να αλλάξετε λωρίδα. Εξάλλου, όταν ο μοχλός του δείκτη κατεύθυνσης είναι πλήρως ενεργοποιημένος, δεν θα συμβεί αυτόματο κλείσιμο, λόγω της ασήμαντης γωνίας περιστροφής του τιμονιού, πράγμα που σημαίνει ότι θα χρειαστεί να σπρώχνετε εμπρός και πίσω με την ίδια την ένδειξη ή να υποστηρίζετε συνεχώς με το χέρι σας στα πρόθυρα της ενεργοποίησης για να προσομοιώσετε τη λειτουργία του δείκτη κατεύθυνσης. Και αν υπάρχει μια τέτοια επιλογή, τότε απλώς άγγιξε λίγο το μοχλό και ξέχασε. Γενικά, πιστεύουμε ότι η ουσία της εργασίας έχει αποκαλυφθεί πλήρως, αλλά τώρα αξίζει να αναφέρουμε την πιθανή εφαρμογή μιας τέτοιας επιλογής στο μηχάνημά σας.

Ποια ηλεκτρικά κυκλώματα είναι κατάλληλα για ένα ευγενικό φλας στο Arduino

Πριν αντιμετωπίσετε σοβαρά προβλήματα σχετικά με την παραγωγή ενός ευγενικού φλας, πρέπει να καταλάβετε για ποια συστήματα ηλεκτρικής σύνδεσης είναι κατάλληλο χωρίς να τροποποιήσετε το ηλεκτρικό κύκλωμα στο αυτοκίνητο.
Εδώ μας παρουσιάζονται δύο βασικές επιλογές, διαφορετικές κατ' αρχήν. Το πρώτο είναι όταν ανάβουν τα φλας όταν συνδέονται ως φορτίο. Δηλαδή, η συμπερίληψη συμβαίνει λόγω της μεταγωγής του κυκλώματος των λαμπτήρων δεικτών κατεύθυνσης, στον οποίο βρίσκεται ο ίδιος ο μοχλός δείκτη κατεύθυνσης, είναι αυτός που κλείνει το κύκλωμα, μετά την οποία πραγματοποιείται η λειτουργία. Σε αυτή την περίπτωση, δεν θα λειτουργήσει η χρήση της επιλογής μας, γιατί όταν ο μοχλός ανοίγει το κύκλωμα με λαμπτήρες, απενεργοποιούμε αμέσως τη δυνατότητα ένδειξης φωτός, ακόμα κι αν έρθει ένα σήμα στον ίδιο τον μοχλό, απλά δεν θα προχωρήσει περαιτέρω.
Η δεύτερη επιλογή είναι δική μας, όταν υπάρχουν σήματα ελέγχου και υπάρχουν σήματα ισχύος εξόδου. Σε αυτήν την περίπτωση, αντί για ένα κανονικό ρελέ, μπορείτε να βάλετε μόνο το κύκλωμα που θα θέλαμε να επιστήσουμε την προσοχή σας.

Μονάδα ισχύος ρελέ που μπορεί να αγοραστεί στο Διαδίκτυο για τον έλεγχο του φορτίου ισχύος

Σκίτσο και διάγραμμα ενός τεμπέλικου (ευγενικού) φλας στο Arduino

Έτσι, μπορεί να υποστηριχθεί η χρήση του Arduino ως κεντρικής μονάδας ως τεμπέλης φλας, καθώς και αυτή δεν είναι ιδανική λύση, η οποία έχει τα μειονεκτήματά της. Ας πούμε ότι θα είναι απαραίτητο να υπάρχει σταθερή ισχύς αφού ανοίξει η ανάφλεξη, για να διασφαλιστεί η ταχύτητα, θα χρειαστεί να συνδέσετε κυκλώματα ισχύος. Ταυτόχρονα, ο ίδιος ο ιμάντας από περιττά εξαρτήματα ραδιοφώνου είναι, καταρχήν, άχρηστος εδώ, γιατί σε αυτήν την περίπτωση μπορείτε απλά να προγραμματίσετε τον μικροελεγκτή και να τον χρησιμοποιήσετε μόνο. Αλλά αυτό το μείον είναι επίσης ένα πλεονέκτημα, γιατί όλοι όσοι το έχουν μπορούν να αντέξουν οικονομικά να προγραμματίσουν το Arduino και για μικροελεγκτές θα χρειαστείτε επίσης έναν προγραμματιστή.
Απλά η σύνταξη ενός προγράμματος θα είναι μια από τις πιο δύσκολες εργασίες. Εδώ, ένας αρχάριος θα πρέπει να αφιερώσει πάνω από μία ώρα από τον ελεύθερο χρόνο του και να μελετήσει τη λειτουργία των αλγορίθμων, αλλά ευτυχώς υπάρχει το Διαδίκτυο και είμαστε. Ορίστε λοιπόν το σκίτσο.

int switchPinR=8; int switchPinL=7; intledPinR=11; intledPinL=12; boolean 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; ) // Loop the alarm if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) = = HIGH) (goto label;) //Δεξί φλας. if (digitalRead(switchPinR) == HIGH) ( digitalWrite(ledPinR, HIGH); i=0; ενώ (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; ενώ (i<7) { ledOn = !ledOn; digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && z>=7) ( break; ) ) ) other ( digitalWrite(ledPinL, LOW); z=0; ) ) )

Εν ολίγοις, μπορούμε να συνοψίσουμε ότι το σκίτσο έχει 2 εισόδους και 2 εξόδους. Ταυτόχρονα, στην είσοδο ενός θετικού, δηλαδή υψηλού επιπέδου σήματος στην είσοδο (8.7), παίρνουμε έναν ορισμένο αριθμό αναβοσβήνεις (z ή i) στην αντίστοιχη έξοδο (11.12). Με λίγα λόγια, κάτι τέτοιο. Δηλαδή, εάν θέλετε να αλλάξετε κάτι στο σκίτσο σχετικά με τον αριθμό των αναβοσβήνει και τις εξόδους των εισόδων, τότε δώστε προσοχή σε αυτές τις μεταβλητές. Εάν είναι απαραίτητο να αλλάξετε τη διάρκεια των αναβοσβήσεών σας, τότε η προσοχή σας πρέπει να είναι στραμμένη στη λειτουργία καθυστέρησης.
Ένα άλλο χαρακτηριστικό του προγράμματος είναι μια κάπως ασυνήθιστη έξοδος συναγερμού. Αρχικά, γίνεται επεξεργασία του αριστερού και του δεξιού δείκτη και, στη συνέχεια, ενεργοποιείται ο συναγερμός του φωτός έκτακτης ανάγκης. Αυτό οφείλεται στο γεγονός ότι μπορεί να ενεργοποιηθεί μόνο εάν η είσοδος είναι υψηλή ταυτόχρονα στις εισόδους 8 και 7. Και αυτή η προϋπόθεση θα εκπληρωθεί μόνο για τον δεύτερο κύκλο, επειδή το πάτημα δύο κουμπιών ταυτόχρονα δεν θα λειτουργήσει μόνο σωματικά. Η ταχύτητα του μικροελεγκτή θα σας επιτρέψει να διαβάσετε την υψηλή έξοδο από κάποιο κουμπί πιο γρήγορα και να αποφασίσετε ότι αυτό εξακολουθεί να αποτελεί προϋπόθεση για να λειτουργήσει το φλας και όχι συναγερμός. Αν και δεν πρέπει να ασχολείστε με αυτό, εκτός από το ότι το να λέτε ευχαριστώ στο δρόμο θα είναι προβληματικό.

Χαρακτηριστικά σύνδεσης ενός τεμπέλης (ευγενικού) φλας στο Arduino σε ένα αυτοκίνητο

Δεν πρέπει να χρησιμοποιείτε τον ακροδέκτη 13 ως έξοδο, καθώς κάθε φορά που ανοίγετε και απενεργοποιείτε την τροφοδοσία, οι ενδείξεις που θα συνδεθούν σε αυτήν την έξοδο ενδέχεται να τρεμοπαίζουν.
Κατά τη μετάβαση από σήματα ελέγχου σε σήματα ισχύος, χρησιμοποιήστε τα κατάλληλα μπλοκ που αγοράσατε στο Διαδίκτυο ή συναρμολογήσατε εσείς. Έχουμε ήδη μιλήσει για τέτοια μπλοκ - ενότητες.
Όταν λαμβάνετε σήμα 1 από τάση 12 βολτ, τοποθετήστε μια αντίσταση 10 kΩ μπροστά από την είσοδο.

Αυτά είναι στην πραγματικότητα όλα τα λόγια χωρισμού όταν κάνετε ένα νωχελικό φλας για ένα αυτοκίνητο σε έναν μικροελεγκτή Arduino, και τώρα περίπου το ίδιο στο βίντεο ...


Γεια σε όλους όσους κάνουν μόνοι σας! Σήμερα θα εξετάσουμε μία από τις πολλές επιλογές για τη χρήση μιας λωρίδας LED WS2812B σε διευθυνσιοδοτούμενα LED RGB. Τέτοιες ταινίες (καθώς και ξεχωριστά τοποθετημένες λυχνίες LED WS2812B) μπορούν να χρησιμοποιηθούν για να φωτίσουν το φόντο "Ambilight" οθονών και τηλεοράσεων υπολογιστών, δυναμικού φωτισμού σε αυτοκίνητο, εικόνας, κορνίζας, ενυδρείου κ.λπ. Χρησιμοποιούνται ευρέως στο σχεδιασμό οποιωνδήποτε χώρων, με τη μορφή φωτισμών της Πρωτοχρονιάς ή φωτιστικών. Η χρήση της λωρίδας LED τύπου WS2812B καθιστά δυνατή την απόκτηση μεγάλου αριθμού ενδιαφέροντων έργων.

Το LED WS2812B είναι ένα LED RGB ενσωματωμένο στο ίδιο περίβλημα με το τσιπ WS2801.


Το ίδιο το LED WS2812B είναι ένα στοιχείο SMD σχεδιασμένο για επιφανειακή τοποθέτηση. Στο εσωτερικό, το LED αποτελείται από κόκκινο φως (κόκκινο), πράσινο φως (πράσινο) και μπλε φως (μπλε) κρύσταλλα σε μία συσκευασία. Με αυτό το LED, μπορείτε να πάρετε μια μεγάλη ποικιλία χρωματικών αποχρώσεων της ακτινοβολίας φωτός.

Το RGB LED ελέγχεται μέσω της πλακέτας μικροελεγκτή Arduino.
Παρέλαβα μια λωρίδα LED WS2812B από τους Κινέζους.Είναι ένα τμήμα μήκους 1 μέτρο με 144 LED. Ήθελα από καιρό να δοκιμάσω διαφορετικά πειράματα. Με τη βοήθεια βιβλιοθηκών για Arduino - Adafruit Neopixel και Fast led, μπορείτε να έχετε πολλά πολύ ασυνήθιστα εφέ φωτισμού. Αλλά μετά αποφάσισα να προσπαθήσω να φτιάξω δυναμικά φλας για ένα αυτοκίνητο στο λεγόμενο «στυλ Audi». να είναι πολύ ελκυστική.

Η πλακέτα Arduino Uno χρησιμεύει ως ελεγκτής για τον έλεγχο της λωρίδας LED, μπορούν να χρησιμοποιηθούν και άλλες πλακέτες - Arduino Nano, Arduino Pro mini).
Δείτε όλη τη διαδικασία στο βίντεο:


Κατάλογος εργαλείων και υλικών.
-Πλακέτα Arduino Uno.
- Πίνακας υποβάθμισης 12V \ 5V στα 3Α.
- αντιστάσεις 100Kom-4τμχ.
-αντιστάσεις 47Kom-4τμχ.
- αντιστάσεις 500 Ohm-1pc;
-κουμπιά (για προσομοίωση της συμπερίληψης σημάτων) -4 τεμ.
- σανίδα ψωμιού
-κατσαβίδι;
εργαστηριακή παροχή ρεύματος
- κολλητήρι?
- cambric;
-δοκιμαστής.
- καλώδια σύνδεσης.

Βήμα πρώτο. Συναρμολόγηση σχήματος.


Συναρμολόγησα το κύκλωμα χρησιμοποιώντας ένα breadboard (bradboard). Απαιτούνται αντιστάσεις συνδεδεμένες στις ψηφιακές εισόδους Arduino για τη μετατροπή των σημάτων εισόδου του αυτοκινήτου από 12 σε 5 βολτ. Αντίσταση 500 ohm για προστασία της γραμμής ελέγχου της λωρίδας LED WS2812B.
Φωτογραφία πίνακα


Ως μετατροπέας από 12V σε 5V, χρησιμοποίησα μια έτοιμη πλακέτα της Aliexpress. Μπορεί να χρησιμοποιηθεί οποιοσδήποτε μετατροπέας με κατάλληλες παραμέτρους. Ο μετατροπέας χρειάζεται για σταθερή τροφοδοσία του Arduino και της λωρίδας LED WS2812B.


Βήμα δυο. Προγραμματισμός Arduino.

Οι ψηφιακές είσοδοι της πλακέτας Arduino No. 3,4 χρησιμοποιούνται για την περιστροφή στις αριστερές και δεξιές στροφές. Καρφίτσα αριθμός 5 - ανάψτε το φως του φρένου, πείρο νούμερο 6 - ανάψτε την όπισθεν. Καρφίτσα αριθμός 8 - ταινία σήματος ελέγχου WS2812B.

Στο Arduino IDE, ανεβάστε το σκίτσο (σύνδεσμος παραπάνω). Δύο επιλογές σκίτσου - ένα για το μπροστινό μέρος του αυτοκινήτου, το άλλο για το πίσω μέρος. Χρησιμοποιήστε ό,τι χρειάζεστε. Στην αρχή του σκίτσου, μπορείτε να ορίσετε τον αριθμό των LED που χρειάζεστε. Μπορείτε επίσης να ρυθμίσετε την ταχύτητα των φλας ανάλογα με το αυτοκίνητό σας. Μπορείτε επίσης να αλλάξετε τη φωτεινότητα των LED με την παράμετρο strip.Color(103,31,0) - αλλάξτε τα δύο πρώτα ψηφία από 0 σε 255. Δηλαδή, μπορείτε να πειραματιστείτε λίγο.

Όταν πατάτε το επιθυμητό κουμπί, δίνουμε ένα σήμα για να ενεργοποιήσετε την επιθυμητή παράμετρο. Με τη σωστή συναρμολόγηση του κυκλώματος, συνήθως αρχίζει να λειτουργεί αμέσως.

Φωτογραφία σε εξέλιξη.






Ένα καλό πείραμα αποδείχθηκε με αυτό το σχέδιο του Σαββατοκύριακου. Ήταν ενδιαφέρον

Πολλοί αυτοκινητιστές, προκειμένου να βελτιώσουν την εμφάνιση του αυτοκινήτου τους, συντονίζουν το Swallow τους με φώτα LED. Μία από τις επιλογές συντονισμού είναι ένα φλας σε λειτουργία, το οποίο εφιστά την προσοχή των άλλων χρηστών του δρόμου πάνω του. Το άρθρο παρέχει οδηγίες για την εγκατάσταση και τη διαμόρφωση φλας με φώτα πορείας.

[ Κρύβω ]

οδηγίες συναρμολόγησης

Οι λαμπτήρες LED είναι στοιχεία ημιαγωγών που λάμπουν υπό την επίδραση ηλεκτρικού ρεύματος.Το κύριο στοιχείο σε αυτά είναι το πυρίτιο. Ανάλογα με τις ακαθαρσίες που χρησιμοποιούνται, το χρώμα των βολβών αλλάζει.

Συλλογή φωτογραφιών "Πιθανές επιλογές για δυναμικούς δείκτες κατεύθυνσης"

Εργαλεία και υλικά

Για να φτιάξετε ένα φλας με τα χέρια σας, θα χρειαστείτε τα ακόλουθα εργαλεία:

  • Συγκολλητικό σίδερο?
  • πλαϊνοί κόφτες ή πένσες.
  • συγκολλητικό σίδερο και υλικό συγκόλλησης.
  • δοκιμαστής.

Από αναλώσιμα πρέπει να προετοιμάσετε fiberglass. Χρειάζεται για την κατασκευή μιας πλακέτας τυπωμένου κυκλώματος στην οποία θα τοποθετηθεί ένα στοιχείο ημιαγωγού. Επιλέγονται τα απαιτούμενα LED. Ανάλογα με τα χαρακτηριστικά των LED και τις τιμές ρεύματος και τάσης του ενσωματωμένου δικτύου, υπολογίζονται τα χαρακτηριστικά των προστατευτικών αντιστάσεων. Χρησιμοποιώντας υπολογισμούς, επιλέγονται τα υπόλοιπα στοιχεία του δικτύου (ο συγγραφέας του βίντεο είναι ο Evgeny Zadvornov).

Ακολουθία εργασίας

Πριν κάνετε φλας, πρέπει να επιλέξετε το σωστό σχέδιο.

Στη συνέχεια, με βάση το σχήμα, φτιάξτε μια πλακέτα τυπωμένου κυκλώματος και εφαρμόστε σημάνσεις σε αυτήν για να χωρέσουν μελλοντικά στοιχεία.

Η συναρμολόγηση αποτελείται από μια σειρά ενεργειών:

  1. Αρχικά, απενεργοποιήστε το αυτοκίνητο αποσυνδέοντας τον αρνητικό πόλο από την μπαταρία.
  2. Στη συνέχεια, πρέπει να αφαιρέσετε τους παλιούς δείκτες κατεύθυνσης και να τους αποσυναρμολογήσετε προσεκτικά.
  3. Οι παλιοί λαμπτήρες πρέπει να ξεβιδωθούν.
  4. Οι αρμοί πρέπει να καθαριστούν από κόλλα, να απολιπανθούν, να πλυθούν και να αφεθούν να στεγνώσουν.
  5. Στη θέση κάθε παλιού στοιχείου, εγκαθίσταται ένα νέο φλας.
  6. Η περαιτέρω συναρμολόγηση και εγκατάσταση των λαμπτήρων πραγματοποιείται με την αντίστροφη σειρά.
  7. Μετά την εγκατάσταση, τα καλώδια συνδέονται.

Στο επόμενο στάδιο, μια πρόσθετη σταθεροποιημένη πηγή ισχύος περιλαμβάνεται στο δίκτυο. Η ισχύς παρέχεται στην είσοδό του από ένα ενδιάμεσο ρελέ και η έξοδος συνδέεται με μια δίοδο. Είναι καλύτερα να το τοποθετήσετε στο ταμπλό.

Κατά τη σύνδεση των LED, είναι απαραίτητο να βεβαιωθείτε ότι η άνοδος είναι συνδεδεμένη στο συν της πηγής ισχύος και η κάθοδος στο μείον. Εάν η σύνδεση δεν γίνει σωστά, τα στοιχεία ημιαγωγών δεν θα λάμπουν και μπορεί ακόμη και να καούν.


Χαρακτηριστικά εγκατάστασης και ρύθμισης δεικτών κατεύθυνσης λειτουργίας

Μπορείτε να εγκαταστήσετε δυναμικά φλας αντί για συμβατικά LED. Για να γίνει αυτό, αφαιρούν, αποσυναρμολογούν την πλακέτα με LED και αντιστάσεις περιορισμού ρεύματος. Στον επαναλήπτη, πρέπει να σκίσετε το γυαλί από το σώμα. Στη συνέχεια, ο ανακλαστήρας πρέπει να αποκοπεί και να αφαιρεθεί προσεκτικά.

Στη θέση του απομακρυσμένου ανακλαστήρα, τοποθετείται μια πλακέτα SMD 5730, στην οποία βρίσκονται κίτρινα LED. Δεδομένου ότι ο επαναλήπτης έχει καμπύλο σχήμα, η σανίδα θα πρέπει να είναι στρωματοποιημένη και ελαφρώς λυγισμένη. Από την παλιά πλακέτα, πρέπει να κόψετε το εξάρτημα με τον σύνδεσμο και να το κολλήσετε για να συνδέσετε τον ελεγκτή. Στη συνέχεια όλα τα εξαρτήματα επιστρέφουν στη θέση τους.

Για να ρυθμίσετε τον χρόνο λειτουργίας των φώτων LED, ένας διακόπτης είναι κολλημένος στον μικροελεγκτή. Όταν βρεθεί μια κατάλληλη ταχύτητα, οι βραχυκυκλωτήρες συγκολλούνται στη θέση του διακόπτη. Όταν συνδέετε δύο ακροδέκτες στη γείωση, ο ελάχιστος χρόνος μεταξύ των αναβοσβήσεών του LED θα είναι 20 ms. Όταν οι επαφές είναι κλειστές, αυτός ο χρόνος θα είναι 30 ms.


Τιμή έκδοσης

Μπορείτε να ενεργοποιήσετε ένα φλας από τα φώτα ημέρας. Το κόστος τους είναι 600 ρούβλια. Ως πηγές φωτός σε αυτήν την περίπτωση, μπορείτε να πάρετε "pixel" RGB LED σε ποσότητα 7 τεμαχίων για κάθε φλας που τρέχει. Το κόστος ενός στοιχείου είναι 19 ρούβλια. Για να ελέγξετε τα LED, πρέπει να αγοράσετε ένα Arduino UNO αξίας 250 ρούβλια. Έτσι, το συνολικό κόστος θα είναι 1060 ρούβλια.