Stairlights: Um Projeto de Iluminação LED em Escada Baseado em Arduino

O conceito é bastante simples, tudo se baseia nos poderes dos dois transmissores IR de 38kHz. Um na parte inferior da escada e outro no topo. Imediatamente em frente dos transmissores...

O conceito é bastante simples, tudo se baseia nos poderes dos dois transmissores IR de 38kHz. Um na parte inferior da escada e outro no topo. Imediatamente em frente dos transmissores são dois receptores de infravermelhos. Novamente, uma na parte superior e um na parte inferior. Quando o receptor detecta uma pausa no feixe por alguém caminhando entre o transmissor eo receptor, o receptor envia um sinal para o Arduino que chama uma função para fazer os LEDs acenderem.

As peças usadas:

  • Arduino Uno R3 
  • LEDs 36 milímetros 12V 
  • Fonte de alimentação de 12V 5A para os LEDs 
  • Adaptador de tomada barallel 2,1 milímetros 
  • Dois transmissores de IR 
  • Dois receptores IR

46

 

Deve haver os dois fios da fonte de alimentação externa para correr para a corrente de LED.Obviamente, os transmissores e receptores IR deve estar distantes uns dos outros, mas essa é a idéia geral. Recomendamos a construção de tudo isso em uma placa de ensaio. A não ser que queira passar tempo demais tentando descobrir por que as coisas não estejam funcionando (mas claro que é só uma dica).

O hardware é apenas metade da história. O código é ainda mais confuso que o circuito acima. Em primeiro lugar, a fim de fazer o transmissor IR modular a 38kHz, devem ser utilizados os temporizadores do Arduino. Felizmente, existe uma biblioteca de IR excelente para Arduino. Com a sua ajuda, é capaz de criarmos uma única função que permita que os transmissores de IR modulem a 38kHz.

Conheça a biblioteca

 

 

 

 

 

 

 

 

 

 

 

 

 

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
#define TIMER_PWM_PIN 3
#define TIMER_ENABLE_PWM (TCCR2A |= _BV(COM2B1))
#define TIMER_DISABLE_INTR (TIMSK2 = 0)
void enableIrTransmitters(int khz)
{
          // Desativar o timer 2 de interrupção (que é usado para receber IR)
         TIMER_DISABLE_INTR;
         pinMode(TIMER_PWM_PIN, OUTPUT);
         // Quando não enviar PWM, queremos que baixo
        digitalWrite(TIMER_PWM_PIN, LOW);
        // A freqüência de modulação é F_CPU / 2 / OCR2A (saída comparar registar 2A)
        const uint8_t pwm_val = F_CPU / 2000 / IR_KHZ;
        TCCR2A = _BV(WGM20);
        TCCR2B = _BV(WGM22) | _BV(CS20);
        OCR2A = pwm_val;
        OCR2B = pwm_val / 3;
         // Ativar saída PWM no pino 3
        TIMER_ENABLE_PWM; 
}

 

Por último, o setup () função que define o modo de pinos para os receptores, chama os enableIrTransmitters (), e sem relação com o IR, é o gerador de números aleatórios, e inicia o objeto de LED.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void setup()
{
          pinMode(IR_DETECT_UPSTAIRS_PIN, INPUT);
          pinMode(IR_DETECT_DOWNSTAIRS_PIN, INPUT);
          enableIrTransmitters(IR_KHZ);
          lights.begin();
          randomSeed(analogRead(0));
          // Espere um segundo para evitar sinais de "fantasmas" dos receptores de IR sobre o arranque 
          delay(1000);
}

 

Para controlar os LEDs, Adafruit tem uma biblioteca maravilhosa para o Arduino para controlar LEDs WS2801. Isso permite que o seu código apenas se preocupe com a geração dos valores próprios RGB. Um exemplo simples de usar a biblioteca é a função que se desvanece abaixo de uma cor para outra. As luzes `objeto` são uma instância da classe Adafruit_WS2801.

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
void fade_color(unsigned char old_red, unsigned char new_red, unsigned char old_green, unsigned char new_green,unsigned char old_blue, unsigned char new_blue, int steps, int delay_time)
{
          float red_step = (float)(new_red - old_red) / steps;
          float green_step = (float)(new_green - old_green) / steps;
          float blue_step = (float)(new_blue - old_blue) / steps;
          float cur_red = old_red;
          float cur_green = old_green;
          float cur_blue = old_blue;
          for(int i=0; i<steps; i++)
          {
                   cur_red += red_step;
                   cur_green += green_step;
                   cur_blue += blue_step;
                   for(int j=0; j<lights.numPixels(); j++)
                   {
                               lights.setPixelColor(j, (unsigned char)cur_red, (unsigned char)cur_green, (unsigned char)cur_blue);
                   }
                   lights.show();
                   delay(delay_time);
          }
}

 

Existem mais alguns padrões de luz no código e um aleatório que é selecionado cada vez que uma pausa no feixe do IR é detectado, mas eles são um tanto quanto complicados, então não vamos entrar em detalhes. O loop () é o que desencadeia isto, simplesmente verificando um sinal dos receptores de infravermelho.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
void loop()
{
          if(!digitalRead(IR_DETECT_UPSTAIRS_PIN))
          {
                    show_stair_lights(DOWN);
          } else if(!digitalRead(IR_DETECT_DOWNSTAIRS_PIN))
          {
                    show_stair_lights(UP);
          }
}

 

Ao verificar que o receptor foi acionado, podemos adaptar o efeito de iluminação para uma pessoa que anda para cima ou descendo as escadas.

 

Algumas possíveis expansões futuras para este projeto poderão adicionar uma outra corrente de LEDs para o outro lado das escadas. Como você pode ver no vídeo acima, o efeito pode ser bastante reforçado por ter uma outra corrente de LEDs. Tendo em conta que o fornecimento de energia para os LEDs tem poder suficiente para executar duas correntes, seria uma modificação relativamente menor. Temos certeza de que também vão continuar a adicionar novos efeitos de luz ao projeto.

Listagem de código completo está no GitHub .

Projeto Original de Shane Tully

StairLights: An Arduino-based LED stair lighting project

Categorias
Novidades
Sem Comentários

Enviar Resposta

*

*

Responda o cálculo abaixo: *

Sobre nós

Hoje a Usinainfo é um dos maiores ecommerces de Ferramentas, Peças para Eletrônica, Componentes Eletrônicos, Sensores e Arduino do Brasil, contando com uma grande diversidade de produtos na linha de eletrônica.

Sugestões

Artigos Relacionados