Impressão 3D

Árvore de Natal 3D com LEDs Endereçáveis

Eletrogate 23 de dezembro de 2022

Introdução

Dezembro chegou e com ele o clima natalino também! Como você deve ter notado, as casas já estão decoradas para o natal e aqui na Eletrogate não seria diferente. Hoje vamos te ensinar a projetar e programar uma árvore de natal impressa em 3D que utiliza LEDs endereçáveis, para que você possa personalizar da maneira como quiser e decorar sua casa para o natal ao melhor estilo maker!


O Projeto

Nossa árvore de natal foi baseada no projeto desenvolvido pelo usuário makeTVee, cujo modelo original está disponível na comunidade do Printables.

Também fizemos algumas modificações nos arquivos 3D para facilitar a impressão e a montagem do circuito, além de personalizar o projeto com uma referência nerd sugerida pela nossa equipe 🙂 .

Ah, e ela não utilizará pilhas ou baterias. Projetamos o circuito de alimentação para que você possa usar qualquer conexão USB como fonte de energia, seja no computador ou mesmo num carregador de celular!


Materiais Necessários para o Projeto da Árvore de Natal 3D com LEDs Endereçáveis

Para esse projeto você precisará dos seguintes itens:

cta_cart

Outros itens:

  • Impressora 3D
  • Filamento nas cores desejadas
  • Cola quente
  • Cola super bond
  • Ferro de solda e estanho
  • Soprador térmico
  • Estilete
  • Chave Phillips
  • Alicate de corte

Antes de iniciarmos, precisamos informar que é de suma importância que imprima todo o corpo da árvore antes de montar a eletrônica, pois algumas partes serão usadas como gabarito para os LEDs. Nesse link você pode baixar os arquivos .stl já na posição e tamanho corretos para a impressão, beleza?

Abaixo você pode conferir o resultado da impressão:

As peças foram impressas em PETG, nas cores verde, vinho e transparente, mas você pode optar por outros filamentos como PLA ou ABS e até mesmo outras cores, desde que mantenha o filamento transparente (o filamento branco não permite a passagem da luz dos LEDs com tanta eficiência como o transparente).

Agora que você já tem todas as partes impressas, vamos montar a parte eletrônica do projeto.


Montando os Circuitos

Para facilitar o entendimento, vamos dividir a eletrônica da árvore em 3 circuitos: LEDs, controle e programação. Acompanhe:

Circuito 1 – LEDs

O primeiro é composto unicamente pelos LEDs endereçáveis. Antes de iniciar a montagem do circuito, precisamos removê-los da matriz que adicionamos na lista de materiais.

Para esse processo, você precisará de um soprador térmico, um suporte para segurar a placa e uma pinça, para ajudar na remoção dos componentes. No vídeo abaixo você confere todo o processo de remoção:

Importante: Sempre aponte o soprador para a parte de trás da placa, pois a alta temperatura (cerca de 300 °C) danifica facilmente os LEDs se tiverem contato direto com o calor do equipamento. O ideal é que também vá movimentando o soprador para aquecer a placa por igual, acelerando o processo de remoção. Deixar o soprador parado por muito tempo em um único ponto também pode danificar os LEDs! 

Com os LEDs removidos, você pode partir para a montagem do circuito. Abaixo você tem o diagrama com as ligações e precisará repetir esse processo para todas as 4 bases de 6 pontas impressas com filamento transparente, usando-as como gabarito para o posicionamento e organização dos fios. Lembre-se de deixar uma sobra de fio suficiente para emendar com os demais módulos, beleza?

Aqui está o resultado esperado para essa etapa. Você deve repetir o mesmo processo para as outras 3 bases restantes, deixando sempre fio suficiente para as emendas.

Para o LED da estrela, o processo é um pouquinho diferente. Você vai precisa soldar apenas 3 fios de maneira vertical, sendo nos pinos VCC, GND e IN. Veja abaixo esse LED será posicionado:

Circuito 2 – Controlador

O circuito de controle será composto pelo ESP-01 e os componentes de alimentação. Eles serão responsáveis por efetuar toda a parte de controle e energização dos LEDs. Observe a seguir o diagrama dessa etapa e a indicação de onde cada pino vai conectado:

Circuito 3 – Interface de programação

A última etapa do circuito conta com uma novidade: utilizando um adaptador FTDI, podemos programar o ESP-01s sem precisarmos tirar o componente da placa ou ficar pressionando botões (como optei por soldar o ESP direto na plaquinha de circuito para economizar espaço, seria inviável carregar outros sketch’s usando qualquer outra forma de programar essa placa, seja montando um circuitinho manual ou utilizando os adaptadores USB próprios para ESP-01). Graças aos dois transistores BC337 e os dois resistores de 4,7K, o reset da placa após o upload do código será feito de maneira automática, assim como nas placas NodeMCU, ESP32, Arduino, etc.

Abaixo você pode observar a ligação exata dos componentes. Não vou aprofundar no funcionamento dessa etapa do circuito nesse post, mas se você achar que a proposta é interessante e que vale a pena abordar em um post futuro, deixe a sugestão nos comentários e avaliaremos a possibilidade, beleza? ah, e a nomenclatura dos pinos estão fazendo referência já ao pinos de conexão com o ESP!

Para ser possível programar o ESP-01 dessa forma, você precisa soldar dois pinos nas saídas DTR e RST do adaptador FTDI, conforme mostrado na imagem a seguir:

Aqui está o diagrama completo, para que você possa usar como referência nas conexões e avançar para o próximo nível. Observe que aqui o nome dos pinos são referentes às conexões com o FTDI, beleza?

Ah, e aqui está uma fotinho de como ficou a montagem do circuito na placa ilhada. Simples e compacto, não é mesmo?

Se você chegou até aqui, já está pronto para testar cada uma das seções da árvore e, claro, trabalhar na parte mais legal de todo o projeto: a programação! Veja a seguir:


Configurando os ambientes de programação

Para iniciarmos a programação dos LEDs, precisamos verificar se tudo o que precisamos já está instalado no ambiente de desenvolvimento que vamos utilizar, seja ele a Arduino IDE ou o VS Code, com PlatformIO.

Preparando a Arduino IDE:

A configuração da Arduino IDE é extremamente simples. Você precisará apenas:

1- Instalar as placas da Espressif (caso ainda não tenha);

Referência: Módulos WiFi na IDE Arduino

2- Instalar a biblioteca Adafruit NeoPixel, para programarmos os LEDs.

Referência: LEDs Endereçáveis: Conhecendo o WS2812B

Se você tiver alguma dúvida em qualquer um desses processos, consulte os posts que deixei como referência em cada etapa, ok?

Preparando o VS Code + PlatformIO

Já para aqueles que, assim como eu, preferem programar no VS Code, segue o passo a passo, que é um pouco mais chatinho:

1- Antes de mais nada, precisamos instalar o PlatformIO (caso você não tenha). Para entender esse processo, consulte o post “Como Programar o Arduino com VS Code e PlatformIO“.

2- Com o PlatformIO instalado, vamos primeiramente criar um novo projeto. Para isso, vá em Home > Create new project, conforme o print abaixo:

3- Na janela que abrir, dê um nome para seu projeto e, em seguida, selecione a placa. Nesse ponto, tenha um pouco mais de atenção, pois, pesquisando por “esp-01”, duas versões nos são retornadas: uma com 1MB de memória, e outra com 512KB. Se estiver utilizando o ESP-01s, assim como eu, a placa correta é a com 1MB. Para o ESP-01 antigo, selecione a versão de 512KB.

4- Selecionada a placa, confira se, em “Framework” a opção “Arduino” está selecionada. Você também pode modificar a pasta de destino do projeto se assim desejar, desmarcando a opção “Use default location”. Feito isso, clique em “Finish”, aguarde o carregamento e confirme a mensagem que será mostrada na sequência.

5- O próximo passo é instalar a biblioteca Adafruit NeoPixel. Como estamos no VS Code, o processo é um pouco diferente. Com o projeto aberto, vá para a home do PlatformIO novamente e clique em “Libraries”. Em seguida pesquise pela biblioteca que vamos instalar e abra a versão da própria Adafruit.

6- Para instalar, clique no botão “Add to project” e, no campo “Select a project”, selecione o projeto que acabamos de criar e clique em “Add”.

7- Por último, mas não menos importante, vamos fazer o PlatformIO aceitar o reset automático do ESP. Para isso, na árvore de projetos, do lado esquerdo da tela, localize e abra o arquivo “platformio.ini”. Para informar à IDE como será feito o upload do código para o ESP, insira a linha a seguir e tecle CTRL + S para salvar.

upload_resetmethod = nodemcu
Feito isso, acesse a pasta “src”, também na árvore de projetos e abra o arquivo “main.cpp”. É nele onde você desenvolverá toda a lógica do seu código.
Após esses passos, o VS Code estará configurado para a programação do nosso projeto.

Programando

Há algum tempo, apresentamos aqui no blog os LEDs endereçáveis e ensinamos a como programá-los utilizando o Arduino. Com o ESP-01, a programação será a mesma, portanto não abordarei os comandos da biblioteca, ok? Utilize o link acima para visitar a postagem de referência, caso tenha alguma dúvida.

Dito isso, cole o código abaixo na IDE que estiver utilizando e carregue para o ESP, não se esquecendo de conectar o FTDI aos pinos de programação conforme mostrado.

//#include <Arduino.h>          //Para a Arduino IDE, comente essa linha. Para o VS Code, descomente-a
#include <Adafruit_NeoPixel.h>

//Definição dos pinos
#define LED_PIN 2
#define QTDE_CORES 13

//Quantidades de LEDs a serem manipulados
#define LEDs 25
#define LEDs_CORPO 24

//Objeto
Adafruit_NeoPixel led_tree (LEDs, LED_PIN, NEO_GRB + NEO_KHZ800);

//Variáveis 
uint8_t led_sorteado,
        cor_anterior,
        led_anterior,
        count = 0;

//Mapeamento de cores
uint32_t vermelho        =   led_tree.Color(255, 0, 0),
         rosa            =   led_tree.Color(255, 0, 128),
         magenta         =   led_tree.Color(255, 0, 255),
         violeta         =   led_tree.Color(128, 0, 255),
         azul            =   led_tree.Color(0, 0, 255),
         azure           =   led_tree.Color(0, 128, 255),
         ciano           =   led_tree.Color(0, 255, 255),
         verde_primavera =   led_tree.Color(0, 255, 128),
         verde           =   led_tree.Color(0, 255, 0),
         verde_limao     =   led_tree.Color(128, 255, 0),
         amarelo         =   led_tree.Color(255, 255, 0),
         laranja         =   led_tree.Color(255, 128, 0),
         branco          =   led_tree.Color(255, 255, 255),
         cor_sorteada;


//Função para sortear valores de posição e cor
void sorteador(unsigned char num_leds){

  //Sorteia os valores
  uint8_t sorteio_cor = random(QTDE_CORES),
          sorteio_led = random(num_leds);

  led_sorteado = sorteio_led;       //variável que recebe a posição do led sorteado

  //Atribui cores às posições sorteadas
  switch (sorteio_cor){
    case 0:
      cor_sorteada = vermelho;
      break;
    case 1:
      cor_sorteada = rosa;
      break;
    case 2:
      cor_sorteada = magenta;
      break;
    case 3:
      cor_sorteada = violeta;
      break;
    case 4:
      cor_sorteada = azul;
      break;
    case 5:
      cor_sorteada = azure;
      break;
    case 6:
      cor_sorteada = ciano;
      break;
    case 7:
      cor_sorteada = verde_primavera;
      break;
    case 8:
      cor_sorteada = verde;
      break;
    case 9:
      cor_sorteada = verde_limao;
      break;
    case 10:
      cor_sorteada = amarelo;
      break;
    case 11:
      cor_sorteada = laranja;
      break;
    case 12:
      cor_sorteada = branco;
      break;
    }
  }

// Efeito árvore colorida estática
void cor(){
    led_tree.setPixelColor(0, vermelho);
    led_tree.setPixelColor(1, rosa);
    led_tree.setPixelColor(2, magenta);
    led_tree.setPixelColor(3, violeta);
    led_tree.show();
    led_tree.setPixelColor(4, azul);
    led_tree.show();
    led_tree.setPixelColor(5, azure);
    led_tree.show();
    led_tree.setPixelColor(6, ciano);
    led_tree.show();
    led_tree.setPixelColor(7, verde_primavera);
    led_tree.show();
    led_tree.setPixelColor(8, verde);
    led_tree.show();
    led_tree.setPixelColor(9, verde_limao);
    led_tree.show();
    led_tree.setPixelColor(10, amarelo);
    led_tree.show();
    led_tree.setPixelColor(11, laranja);
    led_tree.show();
    led_tree.setPixelColor(12, branco);
    led_tree.show();
    led_tree.setPixelColor(13, vermelho);
    led_tree.show();
    led_tree.setPixelColor(14, rosa);
    led_tree.show();
    led_tree.setPixelColor(15, magenta);
    led_tree.show();
    led_tree.setPixelColor(16, violeta);
    led_tree.show();
    led_tree.setPixelColor(17, azul);
    led_tree.show();
    led_tree.setPixelColor(18, azure);
    led_tree.show();
    led_tree.setPixelColor(19, ciano);
    led_tree.show();
    led_tree.setPixelColor(20, verde_primavera);
    led_tree.show();
    led_tree.setPixelColor(21, verde);
    led_tree.show();
    led_tree.setPixelColor(22, verde_limao);
    led_tree.show();
    led_tree.setPixelColor(23, amarelo);
    led_tree.show();
    delay(10000);

    //Desliga todos os leds de uma só vez
    for(int a = 0; a < LEDs_CORPO; a++){
    if(a < LEDs_CORPO){
      led_tree.setPixelColor(a, 0);
      led_tree.show();
    }
  }
  delay(20);
    count = 1;        //Atualiza a variável de controle
}

//Efeito LEDs coloridos aleatórios
void LEDs_aleatorios(){
  int e = 0;        //variável que recebe o número de ciclos desejados

  //Sorteia 250 vezes um número qualquer entre 0 e 23 e liga o led referente a esse núemro, desligando-o na sequência 
  while(e < 250){
    sorteador(LEDs_CORPO);
    led_tree.setPixelColor(led_sorteado, cor_sorteada);
    led_tree.show();
    delay(75);
    e++;
  }
  if(e == 250){
    count = 2;      //Atualiza a variável de controle
  }

  //Desliga todos os leds de uma só vez
  for(int a = 0; a < LEDs_CORPO; a++){
    if(a < LEDs_CORPO){
      led_tree.setPixelColor(a, 0);
      led_tree.show();
    }
  }
  delay(20);
}

//Efeito de cores percorrendo todo o corpo da árvore
void passeio_cor(){
  int e = 0;        //variável que recebe o número de ciclos desejados

  //Faz com que uma cor seja sorteada e percorra toda a árvore, repetindo o ciclo por 10 vezes
  while(e < 10){
    sorteador(LEDs_CORPO);
    for(int h = 0; h < LEDs_CORPO; h++){
      led_tree.setPixelColor(h, cor_sorteada);
      led_tree.show();
      delay(40);
    }
    e++;
  }
  if(e == 10){
    count = 0;      //Atualiza a variável de controle
  }
}

void setup() {
  Serial.begin(9600);
  led_tree.begin();
}

void loop() {
  led_tree.setPixelColor(24, 255, 80, 0);     //Mantém o LED da estrela permanentemente ligado
  led_tree.show();

  //Controla os efeitos
  if(count == 0){
    cor();
  }
  if(count == 1){
    LEDs_aleatorios();
  }
  if(count == 2){
    passeio_cor();
  }
}

Montando a árvore

Após carregar o código no ESP, precisamos montar a árvore em definitivo. Começando pela base, alinhe a placa com o furo para o cabo USB e fixe-a utilizando cola quente. Abaixo está uma foto de como deverá ficar:

Com a placa fixa na base, cole as partes verdes nas transparentes utilizando super bonder, certificando-se de que os LEDs estarão virados para baixo (como citado anteriormente) e conecte todos os fios, lembrando-se de que os pinos VCC e GND são comuns entre si, enquanto os pinos IN de um conjunto de LEDs deve ir no OUT do conjunto anterior. Após essas ligações, conecte os 3 fios restantes na plaquinha e energize-a, conectando a árvore à qualquer porta USB. O resultado esperado você pode conferir no vídeo abaixo:


Conclusão

Chegamos ao fim da montagem desse que possivelmente será o último projeto de nossa equipe nesse ano de 2022. Esperamos que você tenha entendido todo o processo e que também sinta o desejo de incrementar sua decoração de natal com um enfeite desenvolvido e personalizado por você mesmo.

Ah, e ficou alguma dúvida em relação à montagem ou à programação, deixe nos comentários!

Desde já, desejamos um feliz natal e um próspero ano novo a todos vocês que acompanham nossos projetos e que o ano de 2023 seja repleto de novos projetos, novos aprendizados e muitas alegrias dentro e fora do mundo da eletrônica!


Sobre o Autor


Samuel Martins
@samuel.martins192

Cursando Eletroeletrônica no SENAI CETEL. Fanático por eletrônica, automação, impressão 3D e afins, dedico meu tempo livre a pesquisas e projetos ligados às principais áreas de interesse, pratico aeromodelismo e sou curioso por astrofotografia.


Eletrogate

23 de dezembro de 2022

A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.

Conheça a Metodologia Eletrogate e Lecione um Curso de Robótica nas Escolas da sua Região!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!