Neste tutorial entramos de cabeça na Internet das Coisas (IOT)! Vamos ensinar a passar parâmetros para o Arduino através de sua rede local e ainda aprender como criar duas luminárias de cabeceira, modeladas e impressas em 3D, controladas por Arduino + Ethernet Shield via aplicativo Android.

Claro que os arquivos estão no final do tutorial para download! Então vamos lá!

Escopo geral do projeto

Este é um projeto de Internet das Coisas (IOT) que reúne diversas tecnologias, tais como modelagem e impressão 3D, eletrônica, design, programação Arduino e  AppInventor.

Basicamente vamos controlar duas luminárias de cabeceira. Cada luminária contendo 15 leds RGB, podendo assim fazer a luz das luminárias assumir qualquer cor que desejarmos.

Passaremos os parâmetros das cores para o Arduino através de um aplicativo Android, para o mesmo “converter” estes parâmetros em cores no formato RGB de 8 bits.

Tudo isso em tempo real e dentro de nossa rede WiFi!

Abaixo temos a ideia simplificada do nosso projeto:

 

Vamos precisar de:

1 Arduino (Uno, Mega, Duemilanove) 1 Placa drive (ver texto)
1 Ethernet Shield (W5100) 1 Roteador wifi
1 Fonte de 5V x 2A 1 SmartPhone (Android)
30 Leds RGB de Catodo comum 90 Resistores de 150 Ohms 1/8W

 Modelagem e Impressão

O projeto foi iniciado pela modelagem das cúpulas das luminárias.

Para fazer toda a modelagem utilizamos o site TINKERCAD , que é gratuito e muito fácil para modelar peças simples. Por ter uma interface intuitiva, em poucos minutos já podemos criar peças de pequeno e médio porte.

Basta “arrastar” uma forma básica para a área de trabalho e ir modificando conforme as medidas desejadas. Também é possível agrupar formas básicas para formar uma peça composta.

Além das partes impressas, usamos:

  • Tubos de alumínio de 13mm de diâmetro para fazer o corpo das luminárias
  • 4 Tubos de alumínio de 13x300mm
  • 2 Tubos de alumínio de 13x100mm
  • 6 Parafusos M3 X 40mm

As características da impressão podem ser conferidas na tabela abaixo:

Impressora Anet A8
Preenchimento 20%
Filamento PLA
Cor Branco opaco
Temperatura de impressão 210°C
Tempo de impressão 9 horas cada luminária

Eletrônica

Além do Arduino e do Ethernet Shield, responsáveis pela comunicação e controle de nossas luminárias, fabricamos uma pequena placa de circuito para servir de drive de potência para os 30 leds (15 de cada luminária).

A placa drive é a responsável por receber o sinal do Arduino e amplificar a potência para poder alimentar os 30 leds.

Lembrando que os leds RGB tem 3 núcleos cada. Um núcleo vermelho (Red), um verde (Green) e um azul (Blue). Logo, o nosso circuito é um drive de potência X 3.

Os leds são de Catodo comum e cada núcleo do led necessita de 1 resistor de 150 Ohms. E no Catodo não vai resistor.

Na imagem, veja o projeto da placa drive de potência na protoboard, o layout para circuito impresso e o protótipo feito em placa de fibra de vidro padrão (perfurada). E na sequência a lista dos componentes eletrônicos utilizados.

Lista de componentes:

1 Placa de circuito 3 Transistores TIP32
1 Barra de pinos fêmea com 4 pinos 3 Transistores BC548
3 Resistores de 220 Ohms 1 Conector KRE  com 2 pinos
3 Resistores de 1 Kohms 1 Conector KRE  com 3 pinos

Programação Arduino:

O código para o Arduino é basicamente uma passagem de parâmetros via URL, o Arduino recebe uma “String” com uma série de dados concatenados e extrai os três valores PWM. Esses valores variam de 0 a 255, sendo 0 a cor apagada e 255 cor no brilho máximo.

Exemplo de URL

Para cada cor um valor (um valor para o vermelho, outro para o verde e outro para o azul) e com a combinação das cores básicas é possível fazermos outras cores, por exemplo, laranja, roxo, rosa, amarelo, branco, etc.

#include <SPI.h>
#include <Ethernet.h>

String leString;
char c;
String acao;

EthernetServer server(80);

int redPin   = 3; //PWM
int greenPin = 5; //PWM
int bluePin  = 6; //PWM

int R,G,B; 


void setup() {

  byte mac[] = { 0xDE, 0xAD, 0xBE, 0xDA, 0xFE, 0xEE };
  byte ip[] = { 192, 168, 0, 100 };
  Ethernet.begin(mac, ip);
  server.begin();

  pinMode(redPin,   OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin,  OUTPUT);
  
  Serial.begin(9600);
  Serial.println("RED    GREEN    BLUE");
}


void loop() {

  //  exemplo de parâmetros  http://192.168.0.100/?R200G50B40f
  EthernetClient client = server.available();
  if (client) {
    while (client.connected()){
      if (client.available()){
        char c = client.read();
        if (leString.length() < 100) {
          leString += c;
        }
        
        if (c == '\n') {
                 
          if (leString.indexOf("?") > 0) {

            int inicioR = leString.indexOf("r") + 1;
            int fimR    = leString.indexOf("g");
            acao = leString.substring(inicioR, fimR);
            R = acao.toInt();
            Serial.print(R);
            Serial.print("   ");

            int inicioG = leString.indexOf("g") + 1;
            int fimG    = leString.indexOf("b");
            acao = leString.substring(inicioG, fimG);
            G = acao.toInt();
            Serial.print(G);
            Serial.print("   ");

            int inicioB = leString.indexOf("b") + 1;
            int fimB    = leString.indexOf("f");
            acao = leString.substring(inicioB, fimB);
            B = acao.toInt();
            Serial.println(B);      

            client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println();
            client.println("<HTML>");
            client.println("<HEAD>");
            client.println("</head>");
            client.println("<body>");

            client.println("RED = ");
            client.println(R);
            client.println("<p>");

            client.println("GREEN = ");
            client.println(G);
            client.println("<p>");

            client.println("BLUE = ");
            client.println(B);
            client.println("<p>");

            analogWrite(redPin  , R);
            analogWrite(greenPin, G);
            analogWrite(bluePin , B);

            client.println("</font><br>");
            client.println("</body>");
            client.println("</html>");
            client.flush();
            client.stop();
            leString = "";
          }
        }
      }
    }
  }
}  //fim do loop

Programação AppInventor:

A programação do aplicativo Android foi feita no site AppInventor 2.

Uma ferramenta criada pelo MIT (Massachusetts Institute of Technology) que permite programar de forma visual (arrastar, soltar, conectar blocos de código) aplicativos para dispositivos com sistema operacional Android.

A usabilidade do App é extremamente simples, basta tocar na “roda de cores” a cor desejada e a luminária “magicamente” irá copiar está cor! Woooohhhhooouuuwww!!!

Existem ainda botões com cores pré definidas para facilitar a interação.

Na versão final do App, foi adicionado um botão extra para configuração de um IP diferente do padrão (192.168.0.100).

Então se este IP estiver sendo usado na sua rede local, você poderá trocar por outro e este ficará armazenado em um pequeno “banco de dados” local, para que não necessite de reconfiguração do IP a cada uso do App. Você ainda pode configurar um serviço de DDNS e ter o controle de suas luminárias através da Internet de qualquer lugar do mundo.

Abaixo, confira o vídeo da impressão, pintura, montagem, testes e instalação de nossas luminárias.

Caso queira se aventurar na Internet das Coisas (IOT) comece a fazer a sua própria luminária, no link do Thingiverse Luminária de Parede preparamos os arquivos utilizados no projeto, e neste link estão todos os arquivos Arduino + APK + Drive + Imagens para download. Boa aventura!

Até a próxima pessoal!

Author

Analista e desenvolvedor de software, apaixonado por eletrônica e robótica, maker por natureza e um entusiasta do movimento DIY. Trabalha com eletrônica há 19 anos, ministra cursos em Escolas e Universidades de Arduino, Robótica, Eletrônica, Impressão 3D e Internet das Coisas.

Write A Comment