Joy Robot: Robô Inteligente com Arduino e ESP8266
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Arduino UNO | 1 |
| Módulo ESP8266 ESP-01 | 1 |
| Micro Servomotor SG90 | 6 |
| Motor DC com Redução e Rodas de Borracha | 2 |
| Driver Ponte H L298N | 1 |
| Driver PWM/Servo 16 Canais PCA9685 (Adafruit) | 1 |
| Display LED 8x8 MAX7219 | 4 |
| Driver Dual H-Bridge L298 (SparkFun) | 1 |
| Bateria 18650 | 2 |
| Suporte para Bateria 18650 | 2 |
| Shield Proto para Arduino | 1 |
| Diodo 1N4001 | 1 |
| Resistor 10k ohm | 3 |
Ferramentas Necessárias
- Impressora 3D
Aplicativos e Serviços Online
- Autodesk Fusion 360
- Arduino IDE
- Android SDK
Sobre o Projeto
Primeiro lugar no Instructables Wheel Contest, segundo lugar no Arduino Contest e finalista no Design for Kids Challenge. Obrigado a todos que votaram!
Página do projeto no Instructables
Robôs estão em toda parte – da indústria à exploração espacial e subaquática. Mas meus favoritos são os usados para diversão e entretenimento! Neste projeto, um robô DIY foi projetado para entreter crianças em hospitais, levando um pouco de alegria a elas. O foco está no compartilhamento de conhecimento e na promoção de inovação tecnológica para auxiliar ONGs que realizam trabalho voluntário em hospitais infantis.
Este tutorial mostra como projetar um robô humanoide operado remotamente, controlado via rede Wi-Fi, usando um Arduino Uno conectado a um módulo Wi-Fi ESP8266. Utiliza servomotores para movimentos da cabeça e braços, motores DC para pequenos deslocamentos e uma face feita de matrizes de LED. O robô pode ser controlado a partir de um navegador comum, usando uma interface HTML. Um smartphone Android transmite vídeo e áudio do robô para a interface de controle.
O tutorial abrange a impressão 3D e montagem da estrutura, circuitos eletrônicos e código do Arduino, permitindo que qualquer pessoa replique o robô.
Tutoriais Relacionados
- WiDC: Robô FPV Controlado por Wi-Fi com Arduino e ESP8266
- Controlando Array de Matrizes LED com Arduino Uno
- Wi-Servo: Servomotores Controlados por Navegador via Wi-Fi
Equipe
- Thiago Farauche
- Diego Augustus
- Yhan Christian
- Helam Moreira
- Paulo de Azevedo Jr.
- Guilherme Pupo
- Ricardo Caspirro
- ASEBS
Mais Informações
Como Você Pode Ajudar
Este projeto é financiado pelos membros da equipe e pequenas doações de empresas. Se gostou, pode ajudar de várias formas:
- Vote: O projeto concorre nos concursos Wheels, Design for Kids e Arduino do Instructables. Vote em nós! :D
- Doação: Envie contribuições para apoiar a construção e melhorias futuras. Os fundos são usados para comprar componentes (eletrônica, impressão 3D, filamentos) e promover nossas intervenções em hospitais infantis. Seu nome será adicionado aos créditos! Thingiverse
- Curta: Mostre seu apreço curtindo nas plataformas onde documentamos o projeto (Facebook, Hackster, Hackaday, Maker Share, Thingiverse...).
- Compartilhe: Divulgue nas redes sociais para alcançar mais pessoas e inspirar makers pelo mundo.
Passo 1: Um Pouco de História...
O projeto 'Robô da Alegria' nasceu em 2016, na região da Baixada Santista (Brasil), com o objetivo de desenvolver tecnologia e atrair a comunidade para o movimento maker. Inspirado por projetos voluntários de ONGs em hospitais infantis, busca desenvolver um robô usando hardware e software abertos, capaz de levar diversão ao ambiente hospitalar infantil e contribuir com o trabalho de outras organizações.
A semente foi plantada no final de 2015, após uma palestra sobre criação e desenvolvimento de tecnologia promovida pela Associação de Startups da Baixada Santista (ASEBS). Idealizou-se um projeto sem prêmio em dinheiro, mas com um tema que envolvesse as pessoas de forma altruísta, com o objetivo de ajudar outras pessoas.
O robô passou por diversas transformações desde sua concepção inicial até o estado atual. De uma simples cabeça com olhos e sobrancelhas mecânicas, até sua forma humanoide atual, várias iterações foram realizadas, testando diferentes materiais construtivos e dispositivos eletrônicos. De um protótipo em acrílico e MDF cortado a laser, migrou-se para um corpo impresso em 3D. De uma interface simples com dois servos controlados por Bluetooth, para um corpo com 6 servomotores e 2 motores DC comandados por interface web via Wi-Fi.
A estrutura foi inteiramente produzida com impressão 3D usando Fusion 360. Para permitir a produção de réplicas em makerspaces ou fab labs, onde o tempo máximo de uso das impressoras é crucial, o design foi dividido em peças menores que três horas de impressão cada. O conjunto de peças é colado ou parafusado para montagem do corpo.
A face, composta por arrays de LED, dá ao robô a capacidade de expressar emoções. Braços e pescoço acionados por servomotores dão ao pequeno autômato a mobilidade necessária para interação com usuários. No centro de controle, um Arduino Uno interfaceia com todos os periféricos, incluindo comunicação com o módulo ESP8266, permitindo ao usuário comandar expressões e movimentos através de qualquer dispositivo na mesma rede Wi-Fi.
O robô também possui um smartphone instalado no peito, usado para transmissão de áudio e vídeo entre o operador e as crianças. A tela do dispositivo ainda pode ser usada para interação com jogos e outros aplicativos projetados para interagir com o corpo do robô.
Passo 2: Ferramentas e Materiais
Ferramentas
- Impressora 3D – Todo o corpo do robô é impresso em 3D. Foram necessárias várias horas de impressão;
- Filamento PLA – Filamentos PLA branco e preto foram usados;
- Chave de fenda – A maioria das peças é conectada com parafusos;
- Super cola – Algumas peças foram fixadas com super cola;
- Alicates e cortadores
- Ferro de solda e fio
Eletrônica
- Arduino Uno – Controlador principal. Envia sinais aos motores e comunica com o módulo WiFi;
- ESP8266-01 – Funciona como 'modem WiFi'. Recebe sinais da interface de controle para serem executados pelo Arduino;
- Servomotores SG90 (x6) – Quatro para os braços, dois para movimentos da cabeça;
- Motores DC com redução e rodas de borracha (x2) – Permitem pequenos deslocamentos;
- Ponte H Dual L298N (x1) – Converte saídas digitais do Arduino em tensões de potência para os motores;
- Controlador de Servo 16 Canais – Permite controlar vários servomotores usando apenas duas saídas do Arduino (I2C);
- Display LED 8x8 MAX7219 (x4) – Formam a face do robô;
- Cabo Micro USB – Para upload do código;
- Jumpers fêmea-fêmea (vários);
- Jumpers macho-fêmea (vários);
- Smartphone – Usado um Motorola Moto E 4.3". Outros de tamanho similar funcionam;
- Baterias 18650 (x2) – Alimentam o Arduino e periféricos;
- Suporte para baterias 18650 (x1);
- Diodos 1N4001 (x2);
- Resistores 10 kohm (x3);
- Chave liga/desliga 20mm (x1);
- ProtoShield – Facilita a fiação do circuito.
Mecânica
- Rodas livres (x2)
- Parafusos M2x6.0mm (~70)
- Parafusos M2x10mm (~20)
- Porcas M2x1.5mm (x10)
- Parafusos M3x40mm (x4)
- Porcas M3x1.5mm (x4)
Os links acima são sugestões de onde encontrar os itens. Sinta-se livre para buscar em outras lojas.
Passo 3: Impressão 3D
A estrutura foi inteiramente impressa em 3D usando Autodesk Fusion 360. Para permitir a produção em makerspaces/fab labs, o design foi dividido em peças com menos de 3 horas de impressão cada. O modelo é composto por 36 partes diferentes, a maioria impressa sem suportes, com 10% de preenchimento.
Lista de Peças
- Topo da cabeça (direito/esquerdo)
- Base da cabeça (direito/esquerdo)
- Tampas laterais da cabeça (direito/esquerdo)
- Placa traseira da face
- Placa frontal da face
- Eixo do pescoço 1, 2, 3
- Centro do pescoço
- Braço (direito/esquerdo)
- Ombro (direito/esquerdo)
- Copo do ombro (direito/esquerdo)
- Tampa do ombro (direito/esquerdo)
- Eixo do braço (direito/esquerdo)
- Busto (direito/esquerdo)
- Peito (direito/esquerdo/frontal)
- Rodas (direito/esquerdo)
- Base
- Suporte do celular
- Traseira (direito/esquerdo)
- Botões (direito/esquerdo)
- Travas (direito/esquerdo)
Arquivos STL disponíveis em:
Problemas Conhecidos (Protótipo Experimental)
- Interferência entre fiação de alguns servos e o ombro;
- Atrito entre a cabeça e o busto;
- Atrito entre as rodas e a estrutura;
- Furos de alguns parafusos muito apertados, precisam ser alargados.
Não Tem Impressora 3D?
- Peça a um amigo para imprimir;
- Encontre um hackerspace/makerspace próximo;
- Compre sua própria impressora (ex: Anet A8 ~$165);
- Interessado em kit DIY? Se houver demanda, posso oferecer kits no Tindie.com.
Passo 4: Visão Geral dos Circuitos
O robô é controlado por um Arduino Uno no núcleo. O Arduino interfaceia um módulo ESP8266-01 para controle remoto via Wi-Fi.
Um controlador de servo de 16 canais conecta-se ao Arduino via I2C e controla 6 servomotores (dois para o pescoço e dois para cada braço). Um array de quatro matrizes LED 8x8 é alimentado e controlado pelo Arduino. Quatro saídas digitais do Arduino controlam dois motores DC usando uma ponte H.
Os circuitos são alimentados por dois power banks USB: um para os motores e outro para o Arduino. Tentei alimentar tudo com uma única fonte, mas o ESP8266 perdia conexão devido a picos quando os motores DC ligavam/desligavam.
O peito do robô abriga um smartphone para transmissão de áudio/vídeo entre operador e crianças. Também pode enviar comandos ao ESP8266, controlando o corpo do robô.
Nota: Os componentes podem não ser os ideais. Um NodeMCU substituiria o Arduino + ESP8266. Um Raspberry Pi com câmera substituiria o smartphone e controlaria os motores. Até um smartphone Android poderia ser o "cérebro". Escolhemos o Arduino Uno por ser acessível e fácil para todos. Na época, placas ESP e Raspberry Pi eram relativamente caras onde moramos.
Passo 5: Montagem da Face
Quatro matrizes LED 8x8 MAX7219 foram usadas na face do robô. A estrutura foi dividida em duas partes (placa traseira e frontal) impressas em PLA preto. Tempo de impressão: ~2,5 horas com 10% de preenchimento e sem suportes.
Devido a limitações de espaço, os conectores das matrizes LED tiveram que ser dessoldados e reposicionados:
- Remova a matriz LED;
- Dessolde conectores de entrada e saída;
- Resolde no outro lado da placa, com pinos apontando para o centro.
As quatro matrizes foram fixadas na placa traseira com 16 parafusos M2x6mm. Os pinos foram conectados conforme o esquemático. A primeira matriz conecta-se ao Arduino via jumper macho-fêmea de 5 fios. A saída de cada matriz conecta-se à entrada da próxima via jumper fêmea-fêmea. Após a conexão, a placa frontal é instalada com quatro parafusos M2. Os jumpers são enrolados entre as placas para evitar fios soltos. O módulo da face é instalado dentro da cabeça do robô.
Passo 6: Montagem da Cabeça
A cabeça foi dividida em oito peças impressas em PLA branco (resolução 0.2mm, 10% preenchimento, sem suportes): topo (direito/esquerdo), base (direito/esquerdo), tampas laterais (direito/esquerdo), eixos do pescoço 1 e 2. Tempo total: ~18 horas para estrutura de 130mm de diâmetro.
Topo e base são divididos em duas partes, coladas com super cola. As tampas laterais são fixadas com parafusos nas laterais do topo e base, permitindo desmontagem para reparos. Antes de fechar a cabeça, monta-se a face (passo anterior) e o busto (próximos passos).
Servomotor #5 fixado no Eixo do Pescoço 1. Posicionei o servo no meio do eixo, fixei o braço e usei parafuso para travar. Dois parafusos M2x6mm montam o Eixo do Pescoço 2 nesse servo. Servomotor #6 fixado no Eixo do Pescoço 2 da mesma forma. O Eixo do Pescoço 2 conecta-se ao Centro do Pescoço (próximo passo). O módulo da face é instalado dentro da cabeça.
Passo 7: Montagem do Busto e Ombros
Busto e ombros levaram ~12h para impressão. Cinco partes: Busto (direito/esquerdo), Ombros (direito/esquerdo), Centro do Pescoço, Eixo do Pescoço 3.
Partes do busto coladas com super cola. Ombros fixados nas laterais com parafusos M2x10mm. Servomotores #2 e #4 instalados em cada lado – passam por furo retangular no ombro e são fixados com parafusos M2x10mm e porcas.
Centro do pescoço tem furo retangular onde o Eixo do Pescoço 3 é inserido. Quatro parafusos M2x6mm conectam as duas partes. Centro do pescoço fixado aos ombros usando os mesmos parafusos dos ombros no busto. Quatro porcas M2x1.5mm travam a posição.
Servomotor #6 conectado ao Eixo do Pescoço 3 com dois parafusos. Eixo do Pescoço 3 inserido no furo retangular do Centro do Pescoço e travado com quatro parafusos M2x6mm.
Passo 8: Montagem dos Braços
Cada braço levou ~5h para impressão. Quatro peças: Copo do ombro, Tampa do ombro, Eixo do braço, Braço.
Eixo do braço centralizado e fixado no braço com três parafusos M2x6mm. Braço do servo na outra extremidade do eixo. Servomotor (#1 e #3) instalado dentro do Copo do ombro com parafusos, com seu braço (conectado ao eixo do braço) instalado. Há furo no copo para instalação de outro braço, conectado ao servo (#2 e #4) já montado nos ombros. Outro furo no copo e no ombro para passagem dos cabos dos servos. Tampa fecha o ombro com dois parafusos M2x6mm.
Passo 9: Montagem do Peito
O peito liga o busto à base (rodas e base). Duas partes (direita/esquerda), impressas em 4h. Ombros encaixam na parte superior do peito. Furo para parafuso auxilia alinhamento e fixação (recomenda-se colar). Base tem seis furos para conexão às rodas. Etiquetei os servomotores com adesivos para facilitar a fiação.
Passo 10: Montagem das Rodas
Rodas usam três peças impressas: Rodas (esquerda/direita), Frontal. Tempo: ~10h.
- Soldei fios nos conectores dos motores DC para alimentação via ponte H;
- Motores fixados à estrutura com dois parafusos M3x40mm e porcas cada (parafuso menor funcionaria);
- Colei o painel frontal, que liga as outras partes da estrutura;
- Painel frontal tem furos no topo para fixação ao peito (seis parafusos M2x6mm).
Passo 11: Suporte do Celular
Peça única impressa em ~1h. Projetado para Motorola Moto E (4.3"). Smartphones de tamanho similar servem. O celular é posicionado e pressionado contra o corpo usando o suporte e quatro parafusos M2x6mm. Importante: Conecte o cabo USB ao celular antes de apertar os parafusos. O espaço é limitado, tive que cortar parte do conector USB.
Passo 12: Montagem da Base
Base: uma peça impressa em ~4h. Vários furos para componentes: rodas livres, placas de circuito. Procedimento:
- Instalar controlador de servo 16 canais (4 parafusos M2x6mm);
- Instalar ponte H L298N (4 parafusos M2x6mm);
- Instalar Arduino Uno (4 parafusos M2x6mm);
- Instalar ProtoShield no topo;
- Fazer a fiação (descrito adiante);
- Instalar rodas livres (2 parafusos cada). Fios ficam presos entre base e parafusos;
- Fixar base à seção das rodas com parafusos.
Passo 13: Traseira e Bateria
Tampa traseira projetada para fácil acesso a circuitos, recarga de baterias e liga/desliga do smartphone. Seis peças: Traseira (esquerda/direita), Botões (x2), Travas (esquerda/direita). Tempo: ~5h30. Partes esquerda/direita coladas com super cola (espere secar completamente).
Bateria: duas 18650 + suporte. Soldei fios entre polo negativo da bateria 1 e positivo da bateria 2. Negativo do pack → GND do Arduino. Chave liga/desliga entre positivo do pack e Vin do Arduino. Chave fixada na traseira com parafuso M2x6mm e porca M2x1.5mm. Suporte da bateria fixado com quatro parafusos M2x6mm. Parte cilíndrica das travas lixada para melhor encaixe. Passam pelos furos da tampa; botões conectados e colados do outro lado. Tampa encaixa na traseira do robô; botões giram para travar.
Passo 14: Fiação dos Circuitos
Arduino
- D2 → L298N IN4
- D3 → L298N IN3
- D6 → L298N IN2
- D7 → L298N IN1
- D9 → MAX7219 DIN
- D10 → MAX7219 CS
- D11 → MAX7219 CLK
- D4 → ESP8266 RXD
- D5 → ESP8266 TXD
- A4 → SDA
- A5 → SCL
- Vin → Bateria V+ (antes dos diodos)
- GND → Bateria V-
ESP8266-01
- RXD → Arduino D4
- TXD → Arduino D5
- GND → Arduino GND
- VCC → Arduino 3V3
- CH_PD → Arduino 3V3
L298N Ponte H
- IN1 → Arduino D7
- IN2 → Arduino D6
- IN3 → Arduino D3
- IN4 → Arduino D2
- +12V → Bateria V+ (após diodos)
- GND → Arduino GND
- OUT1 → Motor 1
- OUT2 → Motor 2
MAX7219 (Primeira Matriz)
- DIN → Arduino D9
- CS → Arduino D10
- CLK → Arduino D11
- VCC → Arduino 5V
- GND → Arduino GND
MAX7219 (Demais Matrizes)
- DIN → DOUT (matriz anterior)
- CS → CS (matriz anterior)
- CLK → CLK (matriz anterior)
- VCC → VCC (matriz anterior)
- GND → GND (matriz anterior)
Controlador de Servo 16 Canais
- SCL → Arduino A5
- SDA → Arduino A4
- VCC → Arduino 5V
- GND → Arduino GND
- V+ → Bateria V+ (após diodos)
- GND → Arduino GND
Dois diodos em série após as baterias reduzem a tensão para ~6.0V (2×3.7V - 2×0.7V) para servos e motores DC. Não é o mais eficiente, mas funcionou.
Passo 15: Código do Arduino
Instale a IDE do Arduino mais recente. Nenhuma biblioteca necessária para comunicação com ESP-8266 ou controle de motores DC.
Bibliotecas Necessárias
- LedControl.h: controle das matrizes LED;
- Adafruit_PWMServoDriver.h: controle dos servomotores.
Estrutura do Código (9 Arquivos)
- RobodaAlegria.ino: sketch principal, importa bibliotecas, define/inicializa variáveis globais;
- _05_Def_Olhos.ino: define matrizes para cada olho (8x8). 9 expressões: neutro, aberto, fechado cima, fechado baixo, bravo, entediado, triste, apaixonado, morto. Matrizes diferentes para olho direito/esquerdo;
- _06_Def_Boca.ino: define matrizes para a boca (16x8). 9 expressões: feliz, triste, muito feliz, muito triste, neutro, língua para fora, aberta, bem aberta, nojo;
- _10_Bracos.ino: movimentos pré-definidos para braços e pescoço. 9 movimentos: mov1() a mov9();
- _12_Rosto.ino: funções para atualizar a face, combinando matrizes dos olhos e boca;
- _13_Motores_DC.ino: funções para motores DC;
- _20_Comunicacao.ino: função para envio de dados ao ESP8266;
- _80_Setup.ino: executa na inicialização. Define face inicial e posição dos motores. Envia comandos para conexão Wi-Fi;
- _90_Loop.ino: loop principal. Aguarda comandos do ESP8266 e chama funções específicas.
Baixe o código Arduino. Substitua XXXXX pelo SSID do seu roteador e YYYYY pela senha no arquivo '_80_Setup.ino'. Verifique o baudrate do seu ESP8266 e ajuste no código. Conecte o Arduino via USB e faça o upload.
Passo 16: Apps Android
Um smartphone Android transmite vídeo e áudio do robô para a interface de controle. Apps usados:
- IP Webcam – transmissão de vídeo/áudio;
- Screen Mirror – espelhamento de tela.
Um jogo Android também foi projetado para interagir com o robô, mas ainda não está estável para download.
Passo 17: Interface de Controle
Interface HTML para controle do robô. Baixe interface.rar, extraia e abra no Firefox. Dividida em dois blocos: à esquerda, displays de câmera e espelhamento de tela; à direita, botões de comando.
Caixas de texto para inserir: IP do ESP8266 ('Endereço IP Arduino:'), IP do servidor de vídeo/áudio do app IP Webcam ('IP Webcam (IP):'), IP do Screen Mirror ('Screen Mirror (IP):').
Na aba 'Ações predefinidas': 9 movimentos corporais e 13 faces pré-definidas. Na aba 'Ações personalizadas': ângulos individuais para cada um dos 6 servos, 9 opções de olhos e 8 variações de boca. Função JavaScript envia mensagem para o IP do ESP8266 a cada clique.
Setas do teclado movem o robô: frente/trás, girar esquerda/direita.
Ao iniciar, aviso pergunta se deseja compartilhar microfone. Se aceito, intensidade do som envia comando pré-configurado ao robô, disparando animação de fala na face. Botão de configurações (canto superior direito) ajusta sensibilidade do microfone e velocidade dos movimentos de braços/pescoço.
Passo 18: Divirta-se!
Ligue e divirta-se! Se gostou, compartilhe com amigos e vote nos Concursos do Instructables! :D
Código
- Código Arduino (download apenas)
- Interface HTML (download apenas)
Bibliotecas GitHub:
Peças Personalizadas e Enclosures
Processo de manufatura
- Raspoulette: Protótipo de Sistema Autônomo de Porta de Galinheiro Alimentado por Energia Solar
- Robô DIY Inspirado no Wall‑E com Caixa de CD e Raspberry Pi
- Robô Alarme Rolante: Sistema Móvel Inteligente de Despertar com Raspberry Pi e Google Calendar
- Construa um Robô Creeper Motorizado do Minecraft com Arduino
- Arquimedes: O Robô Coruja Sensor de Emoções com IA
- Construa Robô de Visão Computacional Controlado por Fala no Windows 10 IoT Core
- Robô ROS: Navegação Controlada por Terminal no Raspberry Pi
- Simple Pi Robot – Construa Rover Autônomo 2-WD com Raspberry Pi
- Kit de Robô de Navegação Interna Inteligente para Projetos Arduino
- Entendendo Motores Lineares: Da Energia Elétrica ao Movimento Linear Preciso