Que tal fazer a sua própria árvore de natal para enfeitar a sua casa para o mês de Dezembro? E não vai ser qualquer árvore de natal, ela será feita com componentes eletrônicos e Arduino Uno, dando aquela "cara" maker ao ambiente, além disso você pode usar a criatividade e fazer do seu jeito. A ideia eu tirei do blog filipeflop, onde achei bastante interessante, porém personalizei a árvore e o código do Arduino para combinar com meus outros enfeites de natal.
Para iniciar separe a seguinte lista de materiais necessários para montar a sua árvore de natal com Arduino.
- 1 Arduino Uno com cabo USB
- 1 Placa de fenolite ou fibra de vidro ilhada/perfurada de 10x15cm
- 8 LEDs vermelhos
- 5 LEDs verdes
- 1 Barra de pinos macho 1x6 90°
- 8 Resistores de 220Ω ou 2KΩ
- Fios jumpers
- Bateria (Opcional)
O primeiro passo é realizar o contorno da árvore de natal na placa ilhada utilizando uma caneta de retroprojetor fina (1mm), aquelas canetas para fazer placa de circuito impresso. Faça o desenho conforme a imagem abaixo.
Eu utilizei uma placa de fibra de vidro perfurada. No desenho implementei o tronco da árvore para ficar completa e mais fácil de conectar no Arduino. Se você errar o desenho, utilize um pano com álcool para apagar a tinta da caneta de retroprojetor.
Depois de completar o desenho, precisamos recortar esta placa seguindo o contorno. É um procedimento um pouco chato, principalmente se a placa é de fibra de vidro, no artigo do filipeflop eles utilizaram uma placa de fenolite e cortaram com uma tesoura, sendo uma ótima opção. Para a minha placa, eu utilizei uma esmerilhadeira ou "Makita" para alguns, é um equipamento bruto e muito perigoso, mas o resultado foi muito bom. É claro que você pode tentar cortar com uma serrinha com muita paciência.
Com a árvore recortada, vamos dar um fundo de tinta verde para ficar bonito. Eu utilizei um pincel fino e tinta de tecido, que é mais resistente que guache. Você pode utilizar tinta spray. Se manchar o outro lado da placa com a tinta de tecido, limpe com um pano e álcool os excessos, sem molhar muito.
Com tudo pronto, podemos colocar os LEDs em suas respectivas posições para representar as bolinhas de natal e suas luzes, onde temos o LED vermelho da estrela, os LEDs superiores e inferiores vermelhos e os centrais verdes. Podemos observar que alguns LEDs são ligados em série, e utilizamos as portas digitais 9, 10, 11, 12 e o GND do Arduino Uno.
Utilizando um ferro de solda e estanho, solde primeiramente a barra de pino 1x6 90° no tronco da árvore, depois os LEDs em suas posições, os resistores e os fios jumpers conforme a imagem abaixo.
O resultado é esta árvore de natal! Mas faltando alguns caprichos adicionais de minha parte...
Você pode utilizar lantejoulas verdes e cola branca, aquelas escolares, para dar mais brilho à sua árvore de natal. Só cuidado para não colar lantejoulas nas partes eletrônicas, como terminais dos LEDs ou solda. Use sua criatividade!
Código da árvore de natal
Agora é a hora de fazer a árvore de natal piscar, para isso abra a IDE oficial do Arduino, e cole este código, compile e envie ao Arduino Uno.
Lembrando que você também pode modificar o código para personalizar os efeitos dos LEDs com PWM, que dá um efeito bacana.
/**
* Firmware para árvore de natal com Arduino Uno
*
* Autor: Filipeflop
* Modificações: tecdicas
*
* 24/11/2019
*
* Feliz Natal :)
*
*/
#define LED_RED_INF 9
#define LED_VERDE 10
#define LED_RED_SUP 11
#define LED_ESTRELA 12
void setup()
{
pinMode(LED_RED_INF, OUTPUT);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_RED_SUP, OUTPUT);
pinMode(LED_ESTRELA, OUTPUT);
}
void loop()
{
for (int x=0;x<=6;x++)
{
int valor = random(1, 5);
switch (valor)
{
case 1:
digitalWrite(LED_ESTRELA, HIGH);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
break;
case 2:
digitalWrite(LED_ESTRELA, HIGH);
ControlePWM(LED_RED_SUP, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_INF, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_SUP, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_INF, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_SUP, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_INF, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_SUP, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_INF, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_SUP, 50, 30);
ControlePWM(LED_VERDE, 50, 30);
ControlePWM(LED_RED_INF, 50, 30);
ControlePWM(LED_RED_INF, 50, 30);
break;
case 3:
digitalWrite(LED_ESTRELA, HIGH);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
ControlePWM(LED_RED_INF, 80, 50);
ControlePWM(LED_VERDE, 80, 50);
ControlePWM(LED_RED_SUP, 80, 50);
break;
case 4:
for(int x=0;x<=6;x++)
{
digitalWrite(LED_ESTRELA, HIGH);
delay(50);
digitalWrite(LED_ESTRELA, LOW);
delay(50);
}
ControlePWM(LED_RED_SUP, 100, 50);
ControlePWM(LED_RED_SUP, 100, 50);
ControlePWM(LED_RED_SUP, 100, 50);
ControlePWM(LED_VERDE, 100, 50);
ControlePWM(LED_VERDE, 100, 50);
ControlePWM(LED_VERDE, 100, 50);
ControlePWM(LED_RED_INF, 100, 50);
ControlePWM(LED_RED_INF, 100, 50);
ControlePWM(LED_RED_INF, 100, 50);
break;
}
}
for (int x=0;x<=35;x++)
{
int valor = random(1, 5);
int tempo = 300;
switch (valor)
{
case 1:
analogWrite(LED_RED_INF, 254);
delay(tempo);
analogWrite(LED_RED_INF, 0);
break;
case 2:
analogWrite(LED_RED_SUP, 254);
delay(tempo);
analogWrite(LED_RED_SUP, 0);
break;
case 3:
analogWrite(LED_VERDE, 254);
delay(tempo);
analogWrite(LED_VERDE, 0);
break;
case 4:
digitalWrite(LED_ESTRELA, 1);
delay(tempo);
digitalWrite(LED_ESTRELA, 0);
break;
}
}
int tempo = 20;
for (int x=0;x<=20;x++)
{
delay(tempo);
analogWrite(LED_RED_INF, 254);
delay(tempo);
analogWrite(LED_RED_SUP, 254);
delay(tempo);
analogWrite(LED_VERDE, 254);
delay(tempo);
digitalWrite(LED_ESTRELA, HIGH);
delay(tempo);
analogWrite(LED_RED_INF, 0);
analogWrite(LED_RED_SUP, 0);
analogWrite(LED_VERDE, 0);
digitalWrite(LED_ESTRELA, LOW);
}
}
void ControlePWM(int led, int time_up, int time_down)
{
for (int x=0; x<=254;x+=time_up)
{
analogWrite(led, x);
delay(20);
}
for (int x=254;x>=0;x-=time_down)
{
analogWrite(led, x);
delay(20);
}
analogWrite(led, 0);
}
Nossa árvore de natal está pronta, e você pode utiliza-la para decorar seu ambiente para a família e convidados neste dia tão especial!
Boas festas e feliz natal!