Witam!
Chciałbym przedstawić kierunkowskazy, które miały się wyróżniać wśród tłumu :)) do mojego projektu Trabanta 601s. Założeniem było wykorzystanie starych kloszy od lamp wewnętrznych autobusy Ikarus modyfikacja na diodowe i montaż w trabancie.
Jako źródła światła wykorzystałem diody led programowalne ws2812b, które przykleiłem do płytki uniwersalnej dociętej na wymiar kloszy. Podłączyłem 3 paski led równolegle w każdej po 5 diod w szeregu.
Jako mózg układu wykorzystałem chińską wersje Arduino promini.
Wybór sekwencji odbywa się binarne za pomocą przełączników.
1 2
ON ON Seryjne kierunkowskazy
ON OFF Płynące kierunkowskazy (Flow) + lekkie podświetlenie
OFF OFF Seryjne kierunkowskazy + DRL
OFF ON Płynące kierunkowskazy (Flow)
Zasilane jest 12V z instalacji samochodowej, które obniżam za pomocą układu 7805. Chwilowo wykorzystując regulator na pewno zamienię na przetwornice, na która oczekuje od naszym małych żółtych przyjaciół.
Odczyt włączonego zapłony, bądź włączonych kierunkowskazów odbywa się za pomocą dzielnika napięcia.
KOD:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 |
#include <Adafruit_NeoPixel.h> #include <Timers.h> int j =0; int d =0; // Koniec projektu 02,01,2017R. int r = 0; int w = 0; int q =0; #define PINLED1 8 #define PINLED2 7 const int ZP = 11; const int KL = 12; const int KP = 13; int a = 2; const int prog1 = A2; const int prog2 = A3; #define CCC strip.Color(255, 79, 1) // Kolor kierunku << 255 125 12 #define BBB strip1.Color(255, 79, 1) // Kolor kierunku << 255 125 12 int KLewy = 0; int KPrawy = 0; int ZAP = 0; Timers <2> przerw; Adafruit_NeoPixel strip = Adafruit_NeoPixel(6, PINLED1, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(6, PINLED2, NEO_GRB + NEO_KHZ800); void setup() { // put your setup code here, to run once: przerw.attach(1, 121, czas); przerw.attach(2, 3106, odczyt); strip.begin(); strip1.begin(); pinMode(KL, INPUT); pinMode(KP, INPUT); pinMode(ZP, INPUT); pinMode(prog1, INPUT_PULLUP); pinMode(prog2, INPUT_PULLUP); // Random test LED long R,G,B; for (int n = 0; n < 6; n++){ R = random(380); G = random(300); B = random(300); strip.setPixelColor(n, strip.Color(R, G, B)); strip1.setPixelColor(n, strip1.Color(R, G, B)); strip.show();strip1.show(); } delay(2500); strip.clear();strip1.clear(); strip.show();strip1.show(); } void loop() { przerw.process(); } void odczyt() { if (digitalRead(prog1)==0 && digitalRead(prog2)== 0){ a=2;} else if(digitalRead(prog1)==1 && digitalRead(prog2)== 0){ a=1; } //flow led + Amber else if (digitalRead(prog1)==0 && digitalRead(prog2)== 1){ a=0;}//flow led else if (digitalRead(prog1)==1 && digitalRead(prog2)== 1){ a=3;} } void czas() { // flow led KLewy = digitalRead(KL); KPrawy = digitalRead(KP); ZAP = digitalRead(ZP); if (a == 0){ if (KLewy == 1 && KPrawy == 0) { Serial.println(j); if (j <=6){ strip.setPixelColor(j, CCC); strip.show(); j = j+1; } else if (j > 6 ){ j = 0; strip.clear(); strip.show(); delay(700); } } /* if (KLewy == 1) { strip.clear(); strip.show(); j= 0; }*/ if (KPrawy == 1 && KLewy == 0) { if (d <=6){ strip1.setPixelColor(d, BBB); strip1.show(); d = d+1; } else if (d > 6 ){ d = 0; strip1.clear(); strip1.show(); delay(700); } } /* if (KPrawy == 1) { strip1.clear(); strip1.show(); d= 0; }*/ if (KPrawy == 1 && KLewy == 1) { if (r <=6){ strip1.setPixelColor(r, BBB); strip.setPixelColor(r, CCC); strip1.show(); strip.show(); r = r+1; } else if (r > 6 ){ r = 0; strip1.clear(); strip.clear(); strip.show(); strip1.show(); delay(700); } } if (KPrawy == 0 && KLewy == 0) { strip1.clear(); strip1.show(); strip.clear(); strip.show(); r=0; d=0; j=0; } } else if (a == 1) { // flow led + Amber if (KLewy == 1 && KPrawy ==0) { if (j <=6){ strip.setPixelColor(j, CCC); strip.show(); j = j+1; } else if (j > 6 ){ j = 0; if (ZAP == 1){ for (int n = 0; n < 6; n++){ strip.setPixelColor(n, strip.Color(20, 3, 0)); }} else if (ZAP==0) strip.clear(); strip.show(); delay(700); } } if (KPrawy == 1 && KLewy == 0) { if (w <=6){ strip1.setPixelColor(w, BBB); strip1.show(); w = w+1; } else if (w > 6 ){ w = 0; if (ZAP==1){ for (int v = 0; v < 6; v++){ strip1.setPixelColor(v, strip1.Color(20, 3, 0)); } strip1.show();} else if (ZAP==0) { strip1.clear(); strip1.show(); } delay(700); } } if (KPrawy == 1 && KLewy == 1) { if (q <=6){ strip1.setPixelColor(q, BBB); strip1.show(); strip.setPixelColor(q, CCC); strip.show(); q = q+1; } else if (q > 6 ){ q = 0; if (ZAP == 1){ for (int v = 0; v < 6; v++){ strip1.setPixelColor(v, strip1.Color(20, 3, 0)); strip1.show(); strip.setPixelColor(v, strip.Color(20, 3, 0)); strip.show(); }} else if (ZAP == 0) { strip1.clear(); strip.clear(); strip1.show(); strip.show(); } delay(700); }} if (KPrawy == 0 && KLewy == 0 && ZAP == 1) { for (int s = 0; s < 6; s++){ strip1.setPixelColor(s, strip1.Color(20, 3, 0)); strip.setPixelColor(s, strip.Color(20, 3, 0)); } strip1.show(); strip.show(); w= 0; j=0; q=0; } if (KPrawy == 0 && KLewy == 0 && ZAP == 0) { strip1.clear(); strip.clear(); strip1.show(); strip.show(); w= 0; j=0; q=0; } } else if (a == 2){ // Ori if (KLewy == 1 && KPrawy == 0) { for (int n= 0; n<= 6; n++ ){ strip.setPixelColor(n, CCC); strip.show(); } Serial.print("Clear"); delay(700); strip.clear(); strip.show(); delay(600); } else if (KLewy == 0 && KPrawy == 1) { for (int m= 0; m<= 6; m++ ){ strip1.setPixelColor(m, BBB); strip1.show(); } delay(700); strip1.clear(); strip1.show(); delay(600); } else if (KLewy == 1 && KPrawy == 1) { for (int n= 0; n<= 6; n++ ){ strip.setPixelColor(n, CCC); strip.show(); strip1.setPixelColor(n, BBB); strip1.show(); } delay(700); strip.clear(); strip.show(); strip1.clear(); strip1.show(); delay(600); } else if (KLewy == 0 && KPrawy == 0) { strip.clear(); strip.show(); strip1.clear(); strip1.show(); } } else if (a == 3){ // Ori kierunki + DRL if (KLewy == 1 && KPrawy == 0) { for (int n= 0; n<= 6; n++ ){ strip.setPixelColor(n, CCC); strip.show(); } Serial.print("Clear"); delay(700); strip.clear(); strip.show(); delay(600); } else if (KLewy == 0 && KPrawy == 1) { for (int m= 0; m<= 6; m++ ){ strip1.setPixelColor(m, BBB); strip1.show(); } delay(700); strip1.clear(); strip1.show(); delay(600); } else if (KLewy == 1 && KPrawy == 1) { for (int n= 0; n<= 6; n++ ){ strip.setPixelColor(n, CCC); strip.show(); strip1.setPixelColor(n, BBB); strip1.show(); } delay(700); strip.clear(); strip.show(); strip1.clear(); strip1.show(); delay(600); } else if (KLewy == 0 && KPrawy == 0 && ZAP == 1) { delay(600); for (int s = 0; s < 6; s++){ strip1.setPixelColor(s, strip1.Color(255, 245, 200)); strip.setPixelColor(s, strip.Color(255, 245, 200)); } strip1.show(); strip.show(); } else if (KLewy == 0 && KPrawy == 0 && ZAP == 0) { strip.clear(); strip.show(); strip1.clear(); strip1.show(); } } } |
Schemat: schemat.pdf
Za prezentowanym Filmiku jest przedstawiona praca układu. Na czerwonej płytce jest symulowana stacyjka (niebieski przełącznik) oraz włączanie kierunkowskazów poprzez przyciski. No module czerwonymi przełącznikami wybieramy sekwencje.
* Projekt był wykonywany z ograniczonym dostępem do narzędzi :)
Światła nie mogą być używane w ruchu ulicznym, ponieważ nie posiadają homologacji :)
Projekt fajny, ale gdzie jakieś schematy i kod do Arduino? Bez tego projekt jest bezwartościowy :(
dokładnie :)
dokładnie, przydałby się kod i schematy :)
Artykuł ciekawy, ale trochę brakuje kodu i jakiegoś schematu. Projekt i pomysł super.
Wrzucam Kod :
http://pastebin.com/HJWnDBW9
I schemat ale tylko w Eagle :)
Należy pamiętać, że niektóre piny z płytki nie są połączone z arduino!!! ponieważ zostały wykorzystane do poprowadzenia ścieżek
https://ufile.io/0f5d9
Znaj moje dobre serce ;) Dodałem kod i plik ze schematem bezpośrednio do artykułu ;)
Dziękuje :) Uczę się tutaj jeszcze :) ale myślę, że przy następnych artykułach już będzie bezproblemowo :)
Fajna sprawa, podoba mi się połączenie świateł DRL z kierunkowskazami. Zastanawiam się czy przepisy dopuszczają takie pływające kierunkowskazy, kiedyś widziałem takie w jakieś wypasionej furze – więc chyba tak. Osobiście nie znalazłem nic na ten temat w przepisach, więc to co nie jest zabronione , jest dozwolone…
Na drogach widuję od czasu do czasu auta z takimi kierunkowskazami. Jeżeli mnie pamięć nie myli, to w którymś modelu Audi są takie montowane.
Tak dopuszczają płynące jeżeli producent je wyprodukuje :) z homologacją :)
Możesz podać mi swojego maila?
Super projekt, sam niedawno myślałem nad zrobieniem kierunku pływającego. Ale brak schematu mocno utrudnia skopiowanie. Poza tym jesli projekt miałby wylądować w innych autach niz trabant to musiałby byc bardziej autonomiczny. Wiekszosc współczesnych aut i tych 10 -15letnich ma komputer sterujący światłami + monitorowanie żarówek + manetka najczęściej uniemożliwiająca podpięcie jak do zwykłych przełączników. Zeby to ominac, Twój projekt mógłby działać na zasadzie – dostaje napiecie to świecii(plywa), ale sam nie miga. Drl mógłby sie włączać po wykryciu napięcia np13,5V, wtedy zapalałby po uruchomieniu silnika a nie stacyjki. Arduino minipro jest na tyle tani ze mozna sobie pozwolić na kupno oddzielnego ukladu do kazdego kierunku, a tym samym gdyby dzialao gdy dostanie napięcie wyeliminujesz tym problem synchronizacji przodu i tylu jesli projekt wyladuje np tylko w przednich kierunkach. Poza tym wsadzając układu w kierunek nie trzeba bedzie ciagnąc kabli od płytki do kierunkow, co tez ułatwi montaż
Jeszcze raz gratuluje projektu i czekam na zamieszczenie schematu