Fiz o circuito baseado na plataforma Arduino. Com os 18 canais consigo controlar 6 Leds RGB individualmente, e dessa forma liguei os outros 6 Leds em paralelo.
A montagem final fiz em duas placas, sendo uma para os Leds e outra para o circuito do microcontrolador.
Não programei muitas sequencias, mas o efeito já ficou bem bacana!
Segue o esquema elétrico e o código fonte.
Abraços!
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 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 | /*--------------------------------------------------------- Programa : DISCO RGB Autor : Fellipe Couto [ http://www.efeitonerd.com.br ] Data : 06/10/2012 ---------------------------------------------------------*/ int total = 6; int r[6] = {0,3,6,9,12,15}; int g[6] = {1,4,7,10,13,16}; int b[6] = {2,5,8,11,14,17}; /*----- SETUP -----*/ void setup(){ for (int i=0; i<total; i++){ pinMode(r[i], OUTPUT); pinMode(g[i], OUTPUT); pinMode(b[i], OUTPUT); } randomSeed(analogRead(5)); //Para o random ficar aleatorio, sem repetir a sequencia. startRGB(); } /*----- LOOP PRINCIPAL -----*/ void loop(){ int disco = random(9); switch (disco){ case 0: blinkRGB(40); flashRGB(6); blinkRGB(7); flashRGBdouble(2); break; case 1: discoSwapColor(6, 80); discoSwapColor(7, 50); discoSwapColor(10, 30); break; case 2: discoRGB(7, 100); discoRGB(6, 200); discoRGB(11, 70); break; case 3: discoSwapColor(4, 100); discoSwapColor(3, 50); break; case 4: flashRGBall(6); break; case 5: flashRGBdouble(5); break; case 6: police(); break; case 7: runDiscoRGBrandom(7); break; case 8: running(12); break; } } /*----- APAGA TODOS OS LEDS -----*/ void turnOff(){ for (int i=0; i<total; i++){ digitalWrite(r[i], LOW); digitalWrite(g[i], LOW); digitalWrite(b[i], LOW); } } /*----- TODOS ACESSOS -----*/ void turnOn(){ for (int i=0; i<total; i++){ digitalWrite(r[i], HIGH); digitalWrite(g[i], HIGH); digitalWrite(b[i], HIGH); } } /*----- VERMELHO -----*/ void red(){ turnOff(); for (int i=0; i<total; i++){ digitalWrite(r[i], HIGH); } } /*----- VERDE -----*/ void green(){ turnOff(); for (int i=0; i<total; i++){ digitalWrite(g[i], HIGH); } } /*----- AZUL -----*/ void blue(){ turnOff(); for (int i=0; i<total; i++){ digitalWrite(b[i], HIGH); } } /*----- START -----*/ void startRGB(){ turnOff(); delay(1000); turnOn(); delay(3000); for (int k=0; k<50; k++){ turnOff(); delay(20); turnOn(); delay(20); } turnOff(); delay(1000); } /*----- CORRIDA VERMELHO -----*/ void runRed(int qtd, int s, boolean clockwise){ //qtd = Quantidade de voltas. //s = Velocidade. //clockwise = Sentido da volta. for (int x=0; x<qtd; x++){ turnOff(); if (clockwise == true){ for (int i=0; i<total; i++){ digitalWrite(r[i], HIGH); delay(s); digitalWrite(r[i], LOW); } } else{ for (int i=total-1; i>=0; i--){ digitalWrite(r[i], HIGH); delay(s); digitalWrite(r[i], LOW); } } } } /*----- CORRIDA VERDE -----*/ void runGreen(int qtd, int s, boolean clockwise){ //qtd = Quantidade de voltas. //s = Velocidade. //clockwise = Sentido da volta. for (int x=0; x<qtd; x++){ turnOff(); if (clockwise == true){ for (int i=0; i<total; i++){ digitalWrite(g[i], HIGH); delay(s); digitalWrite(g[i], LOW); } } else{ for (int i=total-1; i>=0; i--){ digitalWrite(g[i], HIGH); delay(s); digitalWrite(g[i], LOW); } } } } /*----- CORRIDA AZUL -----*/ void runBlue(int qtd, int s, boolean clockwise){ //qtd = Quantidade de voltas. //s = Velocidade. //clockwise = Sentido da volta. for (int x=0; x<qtd; x++){ turnOff(); if (clockwise == true){ for (int i=0; i<total; i++){ digitalWrite(b[i], HIGH); delay(s); digitalWrite(b[i], LOW); } } else{ for (int i=total-1; i>=0; i--){ digitalWrite(b[i], HIGH); delay(s); digitalWrite(b[i], LOW); } } } } /*----- SEQUENCIAL CORRIDA RANDOM -----*/ void runDiscoRGBrandom(int qtd){ for (int z=0; z<qtd; z++){ int qtdRun = random(1,6); int s = random(30, 70); int rgb = random(3); boolean clockwise = random(2); switch (rgb){ case 0: runRed(qtdRun, s, clockwise); break; case 1: runGreen(qtdRun, s, clockwise); break; case 2: runBlue(qtdRun, s, clockwise); break; } } } /*----- CORRIDA COM COR DE FUNDO -----*/ void run(int qtd, int s, boolean clockwise, int color, int bgcolor){ //qtd = Quantidade de voltas. //s = Velocidade. //clockwise = Sentido da volta. //color = Cor da volta. (0 = RED / 1 = GREEN / 2 = BLUE); //bgcolor = Cor de fundo. if (clockwise == true){ for (int j=0; j<qtd; j++){ for (int i=0; i<6; i++){ //BACKGROUND COLOR if (bgcolor == 0){ red(); digitalWrite(r[i], LOW); } else if (bgcolor == 1){ green(); digitalWrite(g[i], LOW); } else if (bgcolor == 2){ blue(); digitalWrite(b[i], LOW); } //COLOR if (color == 0){ digitalWrite(r[i], HIGH); } else if (color == 1){ digitalWrite(g[i], HIGH); } else if (color == 2){ digitalWrite(b[i], HIGH); } delay(s); } } } else{ for (int j=0; j<qtd; j++){ for (int i=5; i>=0; i--){ //BACKGROUND COLOR if (bgcolor == 0){ red(); digitalWrite(r[i], LOW); } else if (bgcolor == 1){ green(); digitalWrite(g[i], LOW); } else if (bgcolor == 2){ blue(); digitalWrite(b[i], LOW); } //COLOR if (color == 0){ digitalWrite(r[i], HIGH); } else if (color == 1){ digitalWrite(g[i], HIGH); } else if (color == 2){ digitalWrite(b[i], HIGH); } delay(s); } } } } /*----- CORRIDA COM CORES RANDOMICAS -----*/ void running(int qtd){ for (int i=0; i<qtd; i++){ int qtdRun = random(1,8); int s = random(30, 80); int rgbColor = random(3); int rgbBgColor = random(3); boolean clockwise = random(2); while (rgbColor == rgbBgColor){ rgbBgColor = random(3); } run(qtdRun, s, clockwise, rgbColor, rgbBgColor); } } /*----- PISCA CORES -----*/ void blinkRGB(int qtd){ for (int i=0; i<qtd; i++){ int rgb = random(4); int s = random(30, 150); switch (rgb){ case 0: red(); break; case 1: green(); break; case 2: blue(); break; case 3: turnOn(); break; } delay(s); } } /*----- FLASHS RANDOMICOS -----*/ void flashRGB(int qtd){ int t1 = 15; int t2 = 100; int rgb = random(3); int led = random(total); turnOff(); for (int i=0; i<qtd*10; i++){ int rgb = random(3); int led = random(total); switch (rgb){ case 0: digitalWrite(r[led],HIGH); delay(t1); digitalWrite(r[led],LOW); delay(t2); break; case 1: digitalWrite(g[led],HIGH); delay(t1); digitalWrite(g[led],LOW); delay(t2); break; case 2: digitalWrite(b[led],HIGH); delay(t1); digitalWrite(b[led],LOW); delay(t2); break; } } } /*----- FLASHS RANDOMICOS DUPLO -----*/ void flashRGBdouble(int qtd){ int t1 = 15; int t2 = 100; int rgb = random(3); int led = random(total); turnOff(); for (int i=0; i<qtd*10; i++){ int rgb = random(3); int led = random(total); switch (rgb){ case 0: digitalWrite(r[led],HIGH); digitalWrite(r[led+1],HIGH); delay(t1); digitalWrite(r[led],LOW); digitalWrite(r[led+1],LOW); delay(t2); break; case 1: digitalWrite(g[led],HIGH); digitalWrite(g[led+1],HIGH); delay(t1); digitalWrite(g[led],LOW); digitalWrite(g[led+1],LOW); delay(t2); break; case 2: digitalWrite(b[led],HIGH); digitalWrite(b[led+1],HIGH); delay(t1); digitalWrite(b[led],LOW); digitalWrite(b[led+1],LOW); delay(t2); break; } } } /*----- FLASHS TODOS LEDS-----*/ void flashRGBall(int qtd){ int t1 = 40; int t2 = 100; for (int w=0; w<qtd; w++){ int rgb = random(3); for (int i=0; i<7; i++){ if (rgb == 0){ red(); } else if (rgb == 1){ green(); } else{ blue(); } delay(t1); turnOff(); delay(t1); } delay(t2); } } /*----- TROCA DE CORES -----*/ void discoSwapColor(int qtd, int s){ int t = s*3; for (int z=0; z<qtd; z++){ int clockwise = random(2); int rgb = random(3); switch (rgb){ case 0: //Acende Vermelho if (clockwise == 0){ for (int i=0; i<total; i++){ digitalWrite(r[i], HIGH); digitalWrite(g[i], LOW); digitalWrite(b[i], LOW); delay(s); } } else{ for (int i=total-1; i>=0; i--){ digitalWrite(r[i], HIGH); digitalWrite(g[i], LOW); digitalWrite(b[i], LOW); delay(s); } } delay(t); break; case 1: //Acende Verde if (clockwise == 0){ for (int i=0; i<total; i++){ digitalWrite(r[i], LOW); digitalWrite(g[i], HIGH); digitalWrite(b[i], LOW); delay(s); } } else{ for (int i=total-1; i>=0; i--){ digitalWrite(r[i], LOW); digitalWrite(g[i], HIGH); digitalWrite(b[i], LOW); delay(s); } } delay(t); break; case 2: //Acende Azul if (clockwise == 0){ for (int i=0; i<total; i++){ digitalWrite(r[i], LOW); digitalWrite(g[i], LOW); digitalWrite(b[i], HIGH); delay(s); } } else{ for (int i=total-1; i>=0; i--){ digitalWrite(r[i], LOW); digitalWrite(g[i], LOW); digitalWrite(b[i], HIGH); delay(s); } } delay(t); break; } } } /*----- RODA COM UM LED EM CADA COR -----*/ void discoRGB(int qtd, int s){ int clockwise = random(2); turnOff(); for (int x=0; x<qtd; x++){ if (clockwise == 0){ for (int i=0; i<4; i++){ digitalWrite(r[i], HIGH); digitalWrite(g[i+1], HIGH); digitalWrite(b[i+2], HIGH); delay(s); digitalWrite(r[i], LOW); digitalWrite(g[i+1], LOW); digitalWrite(b[i+2], LOW); } } else{ for (int i=3; i>=0; i--){ digitalWrite(r[i], HIGH); digitalWrite(g[i+1], HIGH); digitalWrite(b[i+2], HIGH); delay(s); digitalWrite(r[i], LOW); digitalWrite(g[i+1], LOW); digitalWrite(b[i+2], LOW); } } } } /*----- EFEITO POLICIA -----*/ void police(){ int t = 30; //Metade vermelho e metade azul. for (int i=0; i<3; i++){ for (int k=0; k<15; k++){ digitalWrite(r[0], HIGH); digitalWrite(r[1], HIGH); digitalWrite(r[2], HIGH); delay(t); turnOff(); delay(t); } for (int k=0; k<15; k++){ digitalWrite(b[3], HIGH); digitalWrite(b[4], HIGH); digitalWrite(b[5], HIGH); delay(t); turnOff(); delay(t); } } delay(100); //Todos juntos. for (int i=0; i<3; i++){ for (int k=0; k<15; k++){ red(); delay(t); turnOff(); delay(t); } for (int k=0; k<15; k++){ blue(); delay(t); turnOff(); delay(t); } } } |
VOCE É UM EXPERT MUITO BOM TRABALHO VOCE NAO TEM UM VIDEO COMO FAZER UM ARDUINO STANDALONE SE TIVER POSTA AI. EU FIZ UM MAS NAO FUNCIONOU.
ResponderExcluirObrigado pelo elogio! Sobre montar um standalone, já vi alguns posts bem feitos sobre isso, mas posso sim fazer um post tbm. Abraços!
ExcluirAdoro seus projetos e os videos que vc coloca para vermos os resultados so que hj fui entrar nos videos para mostrar para um amigo esta bloqueado.
ResponderExcluirQue maldade libera ai
Opa! Valeu pelo elogio! E obrigado por alertar sobre os videos bloqueados. Youtube bloqueou devido uma restrição na minha conta, mas já reconfigurei e ta liberado novamente. Abraços!
ExcluirOla Fellipe,
ResponderExcluirComo eu sou novo nessa area,queria saber como eu faço para fazer o meu projeto sem o arduino,so montando um circuito
Olá Marco Túlio!
ExcluirProcure sobre Arduino StandAlone. É bem tranquilo de montar! E bem barato!
Abraços!!
Amigo qual seria a diferença de colocar um so resistor no negativo ou 3 um em cada fase dos leds? eu contrui um disco e ficou muito bom, parabens mas nao esta acendendo igual ao seu, se puder me ajudar agradeço...
ResponderExcluirBom dia, Dornellas!
ExcluirLegal saber que você construiu um disco!
Sobre os resistores acho que você entenderia melhor através desse link: http://www.py2bbs.qsl.br/led.php
Qual erro/problema está havendo? Qualquer coisa, pode me passar um e-mail também.
Abraços!
Olá Fellipe,
ResponderExcluirVocê tem alguma versão desde projeto que inclua um microfone e faça os movimentos de acordo com as batidas da música?
Abraços,
Eduardo
Olá Eduardo!
ExcluirQuando fiz esse projeto, a minha ideia seria montar num próximo passo a versão com microfone. Mas acabei não fazendo.
Mas não seria complicado pra vc conseguir adaptar pra esse projeto. Se for fazer e precisar de alguma ajuda, só entrar em contato.
Abraços!!
Ola Felipe ... vejo que no seu projeto vc usa leds RGB catodo comum ...seu projeto cai como uma luva para uns leds que comprei por engano e nao tinha onde usa-los ...graças a vc , eles terão utilidade. obrigado e siga em frente com seu blog...seus fãs agradecem !!! Aproveitando que sou um entusiasta de arduino ....leds e audio , peço que pense na ipótese de criar um projeto de VU de leds , existem muitos no youtube , mas a grande maioria sao sem PCB e Código...so servem mesmo pra ficarmos babando..rsrsrsrsrs um grade abraço... Eduardo.
ResponderExcluirOpa!!! Obrigado pelo elogio!! Fico feliz!!!
ExcluirAh sim, um VU de leds já ta na lista das brincadeiras pra fazer! :D
Abraços!!
Cara !!!! Estou pasmo !!! Fiz um curso básico de eletrônica há uns 16 anos atrás e não consegui estudar mais por causa do trabalho no comércio e pela cidade não oferecer algo no campo da eletrônica. Se for possível gostaria que vc me indicasse alguns cursos sobre arduíno. Sou interessado em montar esses equipamentos para festas e fiquei arrepiado de ver o que tem no seu blog. Mas meu nível em eletrônica é básico e arduíno é chinês pra mim..kkkk. Compro componentes direto da china pois mesmo com o dólar em alta, ainda compensa qdo são em grandes quantidades e este circuito é o que procurava há anos.. Parabéns, vc ganhou mais um fã e divulgador do seu blog. Continue assim.
ResponderExcluirBom dia, Rogerio! Obrigado pelo elogio ao blog!!!
ExcluirUm curso gratuito e bem interessante para iniciar com arduino, é do LabdeGaragem: http://www.youtube.com/watch?v=q4FoNuzkPX8
Abraços!!
Rapaz sensacional!! Que lógica foda!! Parabéns ficou muito bom!!
ResponderExcluirObrigado!
ExcluirBoa noite amigo. Show de bola cara. Será que vc poderia postar o esquema que vc usou e o arquivo HEX já pronto?? Vi que vc já postou todo código da compilação, mas nunca consigo compilar. Se puder me passar o hex para eu fazer a gravação e o esquema de componentes (cristal, capacitores, etc) Forte Abraço.
ResponderExcluirBom dia! O esquema é o que está na imagem postada mesmo. O Arduino foi montado de forma standalone. Microcontrolador ATmega328, um cristal 16Mhz,... Circuito bastante simples. Procure Arduino standalone. Qual erro está tendo ao compilar? O código fonte postado está correto, e não necessita de nenhuma biblioteca. Abraços!
ExcluirFallipe Parabens pelo seu trabalho, estou presissando de um sistema assim, se puder entrar em contato para negociarmos. whats 41 91561075 ou pelo face Julio Reis
ResponderExcluirBom dia seu video esta bloqueado pq??
ResponderExcluirBrother, ficou maneiro. Vou fazer um desses para mim... só fiquei um pouco preocupado com 2 leds na saída do Arduíno, acho que a corrente deve ficar maior que 40ma. Parabéns
ResponderExcluirBoa tarde!
ExcluirLEDs normais de 5mm podem ligar dois sem problemas.
Abraços!
Boa noite
ResponderExcluiro video do disco foi retirado gostaria de pode ver os efeitos
Grato
Boa tarde!
ExcluirVerifiquei agora e o vídeo está normal.
ola bom dia montei este projeto mas não funcionou aprece uma mensagem que diz que o código fonte é muito grande como posso resolver, estou usando uma arduino uno, obrigado (Manoel)
ResponderExcluirBom dia!
ExcluirSe possível, me envie a mensagem completa do erro. Várias pessoas utilizaram com modelo UNO e funciona normal. O projeto foi feito utilizando o ATMEGA328 com bootloader do UNO mesmo.
Abraços!
olá boa noite, aparece esta mensagem. binary sketch size: 6.686 bytes (of a 258.048 byte maximum)
ResponderExcluirobrigado: (Manoel)
Essa mensagem não é um erro, é a mensagem de retorno do compilador. Seu código fonte tem 6686 bytes, e o limite máximo permitido é 258048.
ExcluirAbraços!
obrigado por me ajudar, não sei o que tem de errado a compilação é feita mas fica so nisso, acende so o primeiro led e fica aceso o tempo todo. vou comprar outro arduino e ver se funciona. (Manoel)
ResponderExcluirolá boa noite comprei outro arduino, não resolveu ficou do mesmo jeito (Manoel)
ResponderExcluirOlá, tem como controlar 6 leds rgb usando
ResponderExcluir3 potenciômetros para regular cor, 1 velocidade e 1 seq de efeito ? Eu acho que teria de ser a mesma cor dos pots rgb e controlar o acionamento pelo gnd.
Acho que não entendi perfeitamente todo o questionamento, mas, sim, possível. A cor controlada por um potenciômetro seria para todos os leds de forma simultânea. O pot para velocidade e seq de efeito também estariam ok. Tem como sim seguir com os 3 potenciômetros.
Excluir