Você é fã da Marvel e também curte colocar a mão na massa com eletrônica? Neste projeto, vamos unir esses dois mundos e montar um Orbe das Joias do Infinito com Arduino. A ideia é criar um dispositivo interativo que acende LEDs coloridos, exibe mensagens em um display OLED e toca sons temáticos sempre que for movimentado, como se você estivesse manipulando as poderosas Joias do Infinito!

Neste tutorial, você aprenderá a soldar componentes, montar o circuito com sensores, programar a placa Arduino Leonardo e montar tudo em um case personalizado com impressão 3D. É um projeto ideal para quem quer se aprofundar em eletrônica, programação e ainda criar algo visualmente incrível.
Prepare seu ferro de solda e seus superpoderes, o universo maker está chamando!
Materiais necessários
Para montar seu Orbe das Joias do Infinito com Arduino, você vai precisar de alguns componentes:
- Placa Leonardo Pro Micro 5V
- Fita de LED RGB WS2812 (8 LEDs 5050)
- Sensor de vibração SW-420
- Buzzer ativo 5V
- Resistor de 220Ω
- Display OLED 0.91″ 128×32 I2C
- Fonte DC chaveada 5V
- Cabo micro USB
- Tubo termo-retrátil
- Jumpers fêmea-fêmea
- Impressão 3D da case do orbe das joias do infinito
- Esfera acrílica transparente
Impressão 3D do Orbe da Joias do Infinito com Arduino
As peças da case do Orbe das Joias do Infinito estão disponíveis gratuitamente para download no Thingiverse. O modelo é composto por quatro partes principais: base, corpo, garras e joia.

- Base: parte inferior do projeto, responsável por dar estabilidade ao conjunto e permitir a fixação da placa Arduino e demais componentes.
- Corpo (meio): estrutura central que acomoda a fiação interna, o sensor de vibração, o buzzer e a fita de LED. Esta peça pode exigir a geração de suportes durante a impressão, dependendo da orientação utilizada.
- Garras: elementos que simulam o mecanismo de contenção das joias e são fixados nas laterais do corpo. São puramente decorativos, mas contribuem significativamente para a estética do projeto.
- Joia: peça translúcida colocada no topo do modelo, que se ilumina com os LEDs internos durante o funcionamento.
Todas as peças foram impressas em PLA com altura de camada de 0,2 mm, garantindo um bom equilíbrio entre qualidade e tempo de impressão. A joia, por sua vez, foi impressa em resina, para maior definição de detalhes, mas também pode ser impressa em PLA, utilizando altura de camada de 0,1 mm para alcançar um bom acabamento visual.
Solda com componentes do Orbe da Joias do Infinito com Arduino
Agora que você já tem todos os materiais em mãos, é hora de preparar os componentes para a montagem eletrônica. Nesta etapa, vamos fazer as soldas essenciais, separar os fios, preparar a fita de LED e montar os jumpers que conectam tudo. Aqui é onde o seu projeto começa a ganhar forma!
Comece pela placa Arduino Leonardo Pro Micro. Solde as barras de pinos na placa com os pinos voltados para cima, ou seja, do mesmo lado onde ficam os nomes dos pinos. Essas conexões serão utilizadas para ligar os demais componentes com jumpers fêmea-fêmea.
Em seguida, prepare o buzzer ativo:
- Solde um resistor de 220Ω no terminal negativo do buzzer (geralmente o menor).
- Essa etapa ajuda a suavizar o som e melhorar a qualidade do sinal sonoro emitido.
Para facilitar a organização dos fios e evitar erros na montagem, separe os seguintes jumpers:
- 4 pretos
- 3 vermelhos
- 1 laranja
- 1 azul
- 1 verde
- 1 amarelo
- 1 branco
- 1 roxo
Dica: use cores consistentes para funções (preto para GND, vermelho para VCC etc.). Isso ajuda muito na hora da montagem.
Este projeto utiliza uma fita de LED RGB WS2812 com 8 LEDs no total. Para criar um efeito visual mais interessante, divida essa fita em dois trechos:
- 1 trecho com 3 LEDs
- 1 trecho com 5 LEDs
Cada parte terá entradas e saídas padrão: 5V, GND, e DIN/DO (entrada e saída de dados). Conecte as duas partes da fita da seguinte forma:
- Solde o DO da fita menor (3 LEDs) no DIN da fita maior (5 LEDs) usando um jumper roxo.
- Solde um jumper vermelho nos pinos de 5V das duas fitas.
- Solde um jumper preto nos pinos de GND.
Para a entrada de dados do Arduino:
- Pegue um jumper laranja, corte uma das pontas, desencape, e solde no DIN da fita de 3 LEDs.
Depois, prepare o conjunto de jumpers para o GND:
- Corte 3 jumpers pretos ao meio, totalizando 6 pontas.
- Solde duas metades lado a lado.
- Pegue uma terceira metade, passe um pedaço de tubo termo-retrátil, e solde às duas anteriores.
- Aqueça o tubo para fixá-lo.
Repita esse processo para montar um segundo conjunto de GND. Esses fios vão alimentar o GND de vários componentes ao mesmo tempo.
Para o conjunto de jumpers VCC:
- Corte 2 jumpers vermelhos ao meio, formando 4 pedaços.
- Solde 3 pedaços lado a lado.
- Pegue o quarto pedaço, passe um tubo termo-retrátil, e solde aos anteriores.
- Finalize aquecendo o tubo para proteger a solda.
Esses conjuntos facilitam a distribuição de alimentação entre o display OLED, sensor de vibração, buzzer e LEDs.
Outras conexões:
- O jumper amarelo será usado para ligar o pino positivo do buzzer ao Arduino.
- Os jumpers verde e azul serão conectados ao display OLED (SCL e SDA, respectivamente).
- O jumper branco será conectado ao sensor de vibração.
Circuito do Orbe da Joias do Infinito com Arduino
Agora que os componentes estão soldados e os jumpers prontos, é hora de montar o circuito. Vamos conectar tudo à placa Arduino Leonardo Pro Micro, seguindo uma lógica simples: alimentação (VCC e GND), comunicação (I2C), sinal de controle dos LEDs e leitura do sensor de vibração:

As conexões realizadas são as seguintes:
| Arduino Leonardo | Componente | Pino/Entrada |
| GND | Buzzer | GND (via resistor) |
| GND | Sensor de Vibração | GND |
| GND | Display OLED | GND |
| VCC (5V) | Sensor, Display, LEDs | VCC |
| Pino 2 | Display OLED | SCL |
| Pino 3 | Display OLED | SDA |
| Pino 4 | Buzzer | Terminal positivo |
| Pino 5 | Sensor de Vibração | DO |
| Pino 6 | Fita de LED menor (3LEDs) | DIN |
Com todas as conexões feitas, seu circuito está pronto para ser programado. Na próxima etapa, vamos configurar a IDE Arduino, instalar as bibliotecas necessárias e carregar o código que dará vida ao seu projeto inspirado nas Joias do Infinito com Arduino.
Código do Orbe da Joias do Infinito com Arduino
Com o circuito eletrônico montado, é hora de passar para a programação. Nesta etapa, vamos configurar a IDE Arduino, instalar as bibliotecas necessárias e carregar o código que vai controlar os LEDs, o display, o sensor de vibração e o buzzer. Assim, seu Orbe das Joias do Infinito finalmente ganha vida!
Configurando a IDE Arduino
Se você ainda não instalou a IDE Arduino, baixe a versão mais recente no site oficial (arduino.cc).
Com a IDE instalada, siga os passos abaixo:
- Abra a IDE Arduino.
- Vá até o menu Ferramentas > Placa > Arduino AVR Boards.
- Selecione a placa Arduino Leonardo.
- Conecte sua placa ao computador via cabo USB (micro USB).
Importante: Se o nome da porta serial ainda não aparecer, vá em Ferramentas > Porta e selecione a que corresponde à sua placa Leonardo. Pode ser necessário aguardar alguns segundos após conectar.
Instalando as Bibliotecas
O código deste projeto utiliza bibliotecas específicas para controlar o display OLED e a fita de LEDs WS2812. Para instalá-las, siga os passos:
Na IDE, vá em Ferramentas > Gerenciador de Bibliotecas.
Na barra de busca, digite e instale as seguintes bibliotecas:
- Adafruit NeoPixel (para os LEDs RGB WS2812)
- Adafruit GFX (biblioteca gráfica base)
- Adafruit SSD1306 (para o display OLED)
Código
Com a IDE configurada e as bibliotecas instaladas, você já pode copiar o código do projeto.
|
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 |
// =================================================== // Projeto: Orbe das Joias do Infinito com Arduino // Autor: MakerHero // =================================================== // === BIBLIOTECAS === // Bibliotecas nativas da IDE do Arduino #include <SPI.h> #include <Wire.h> // Bibliotecas externas (devem estar instaladas) #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_NeoPixel.h> // Notas musicais definidas em "pitches.h" #include "pitches.h" // === CONFIGURAÇÕES DO DISPLAY OLED === const byte TELA_LARGURA = 128; const byte TELA_ALTURA = 32; const int OLED_RESET = -1; // Nenhum pino utilizado para reset Adafruit_SSD1306 display(TELA_LARGURA, TELA_ALTURA, &Wire, OLED_RESET); // === PINOS E LED RGB === const int pinoSensor = 5; const int pinoBuzzer = 4; const int pinoLed = 6; const int numLEDs = 8; Adafruit_NeoPixel fitaLED(numLEDs, pinoLed, NEO_GRB + NEO_KHZ800); // === DEFINIÇÃO DE CORES RGB === uint32_t azul = fitaLED.Color(0, 0, 255); uint32_t verde = fitaLED.Color(0, 128, 0); uint32_t amarelo = fitaLED.Color(218, 165, 32); uint32_t branco = fitaLED.Color(255, 255, 255); uint32_t vermelho= fitaLED.Color(218, 0, 0); uint32_t roxo = fitaLED.Color(138, 43, 226); // === VARIÁVEIS DE CONTROLE === bool vibrou = false; volatile byte musica = 1; volatile byte musicaTotal = 3; volatile byte mensagem = 1; volatile byte mensagemTotal = 3; volatile byte cor = 1; volatile byte corTotal = 6; // === MÚSICAS === // "Come Get Your Love" int come_get[] = { NOTE_E1, NOTE_B0, NOTE_A1, NOTE_E1, NOTE_B0, NOTE_A1, NOTE_E1, NOTE_E1, NOTE_B0, NOTE_A1, NOTE_E1, NOTE_B0, NOTE_A1 }; int duracao_come_get[] = { 4, 8, 8, 4, 8, 4, 8, 8, 8, 8, 8, 8, 8 }; // "Iron Man" int iron_man[] = { NOTE_B5, NOTE_D5, NOTE_D5, NOTE_E5, NOTE_E5, NOTE_G5, NOTE_F5, NOTE_G5, NOTE_F5, NOTE_G5, NOTE_F5, NOTE_G5, NOTE_D5, NOTE_E5 }; int duracao_iron_man[] = { 4, 4, 8, 8, 4, 8, 16, 16, 16, 16, 8, 8, 8, 4 }; // "Pina Colada Song" int pina_colada[] = { NOTE_F1, NOTE_A2, NOTE_G1, NOTE_F1, NOTE_D2, NOTE_C1, NOTE_G1, NOTE_D2, NOTE_G2, NOTE_F1, NOTE_A2, NOTE_G1, NOTE_F1, NOTE_D2, NOTE_C1, NOTE_G1, NOTE_D2, NOTE_G2 }; int duracao_pina_colada[] = { 4, 4, 6, 2, 4, 4, 6, 4, 2, 4, 4, 6, 2, 4, 4, 6, 4, 2 }; // === FUNÇÃO SETUP === void setup() { Serial.begin(9600); pinMode(pinoSensor, INPUT); pinMode(pinoBuzzer, OUTPUT); // Inicializa display OLED display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.clearDisplay(); display.setTextSize(1); display.setTextColor(WHITE); // Inicializa fita de LED fitaLED.begin(); fitaLED.show(); // Desliga todos os LEDs Serial.println("Unidade iniciando..."); } // === FUNÇÃO LOOP === void loop() { // Detecta vibração if (digitalRead(pinoSensor) == HIGH) { Serial.println("Vibração detectada."); vibrou = true; } while (vibrou) { // === Mensagem no display OLED === display.clearDisplay(); display.setCursor(0, 20); if (mensagem == 1) { Serial.println("Mensagem 1: Quanto poder!"); display.println("Quanto poder!"); } else if (mensagem == 2) { Serial.println("Mensagem 2: Eson..."); display.println("Eson..."); } else { Serial.println("Mensagem 3: Que universo!"); display.println("Que universo!"); } display.display(); display.startscrollleft(0x00, 0x07); // Scroll da mensagem // === Cor da fita LED === fitaLED.clear(); switch (cor) { case 1: Serial.println("LED: Branco"); fitaLED.fill(branco); break; case 2: Serial.println("LED: Verde"); fitaLED.fill(verde); break; case 3: Serial.println("LED: Vermelho");fitaLED.fill(vermelho); break; case 4: Serial.println("LED: Azul"); fitaLED.fill(azul); break; case 5: Serial.println("LED: Amarelo"); fitaLED.fill(amarelo); break; default:Serial.println("LED: Roxo"); fitaLED.fill(roxo); break; } fitaLED.show(); // === Execução da música === switch (musica) { case 1: Serial.println("Tocando: Come Get Your Love"); tocarMusica(come_get, duracao_come_get, 13); break; case 2: Serial.println("Tocando: Iron Man"); tocarMusica(iron_man, duracao_iron_man, 14); break; default: Serial.println("Tocando: Pina Colada Song"); tocarMusica(pina_colada, duracao_pina_colada, 18); break; } // === Atualiza seletores para próxima interação === musica = (musica % musicaTotal) + 1; mensagem = (mensagem % mensagemTotal) + 1; cor = (cor % corTotal) + 1; // Aguarda nova vibração vibrou = false; } } // === FUNÇÃO PARA TOCAR MÚSICAS === void tocarMusica(int* notas, int* duracoes, int tamanho) { for (int i = 0; i < tamanho; i++) { int duracaoNota = 1000 / duracoes[i] * 2; tone(pinoBuzzer, notas[i], duracaoNota); delay(duracaoNota * 1.30); // Pequena pausa entre notas noTone(pinoBuzzer); } } |
Arquivo pitches.h:
|
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
/************************************************* * Constantes públicas de frequências das notas musicais * Usadas para gerar tons no buzzer com a função tone() * Cada constante representa a frequência (em Hz) de uma nota específica *************************************************/ // Notas da oitava 0 e 1 #define NOTE_B0 31 // Si0 #define NOTE_C1 33 // Dó1 #define NOTE_CS1 35 // Dó#1 / Ré♭1 #define NOTE_D1 37 // Ré1 #define NOTE_DS1 39 // Ré#1 / Mi♭1 #define NOTE_E1 41 // Mi1 #define NOTE_F1 44 // Fá1 #define NOTE_FS1 46 // Fá#1 / Sol♭1 #define NOTE_G1 49 // Sol1 #define NOTE_GS1 52 // Sol#1 / Lá♭1 #define NOTE_A1 55 // Lá1 #define NOTE_AS1 58 // Lá#1 / Si♭1 #define NOTE_B1 62 // Si1 // Notas da oitava 2 #define NOTE_C2 65 // Dó2 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 // Notas da oitava 3 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 // Notas da oitava 4 (oitava central) #define NOTE_C4 262 // Dó4 (Middle C) #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 // Notas da oitava 5 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 // Notas da oitava 6 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 // Notas da oitava 7 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 // Notas da oitava 8 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978 |
Para carregar o código:
- Abra o arquivo .ino na IDE Arduino.
- Confirme novamente se a placa está correta: Arduino Leonardo.
- Vá em Ferramentas > Porta e selecione a porta USB correta.
- Clique no botão “Carregar” (ícone de seta para a direita).
Aguarde o processo de upload. Quando finalizado, o código estará gravado na placa e pronto para ser executado.
Montagem do Orbe da Joias do Infinito com Arduino
Com o circuito montado e o código carregado, chegou a hora de unir tudo em uma estrutura visualmente impactante. Nesta etapa, você vai montar o Orbe das Joias do Infinito com Arduino utilizando as peças impressas em 3D, a esfera acrílica e os componentes já conectados.
O objetivo é garantir que o projeto fique organizado, funcional e com visual temático, respeitando as posições dos LEDs, do display, do buzzer e do sensor.
Fixando a placa Arduino:
- Posicione a placa Arduino Leonardo na base impressa em 3D, alinhando o conector micro USB voltado para a saída do case.
- Utilize parafusos ou cola quente para fixá-la, garantindo que fique estável.
Montando o display OLED:
- Na parte cilíndrica da estrutura, localize o ressalto retangular interno, que foi projetado para acomodar o display OLED.
- Posicione o display com os pinos voltados para o lado esquerdo (atrás do símbolo de parafuso duplo, se houver).
- Fixe com cola quente ou fita dupla face resistente.
Instalando o buzzer:
- O buzzer deve ser posicionado no ressalto circular da estrutura (geralmente na lateral interna do cilindro).
- Fixe com cola quente para garantir boa sustentação.
Posicionando as fitas de LED:
- A fita maior (5 LEDs) deve ser fixada na base do cilindro, com os LEDs alinhados aos furos de iluminação.
- A fita menor (3 LEDs) deve ser colada na parte superior, no furo onde será encaixado o orbe.
- Use o próprio adesivo da fita ou cole com cuidado usando cola quente.
Importante: certifique-se de que os LEDs não obstruam a porta USB da placa. Dobre as pontas da fita, se necessário.
Instalando o sensor de vibração:
- Posicione o sensor de vibração SW-420 no espaço reservado da base — geralmente com um pequeno furo para parafuso.
- Parafuse com cuidado ou fixe com cola quente.
Montando o Orbe com a Joia
- Pegue a esfera acrílica transparente e cole uma joia decorativa ou cristal pequeno em uma das metades.
- Posicione a joia na metade da esfera que contém a argola, de forma que a argola fique voltada para baixo e escondida dentro do case.
- Una as duas metades da esfera para formar o orbe.
Fixando as garras:
- Parafuse duas garras superiores nos encaixes do cilindro.
- Posicione o orbe com a joia no centro da base, no espaço circular reservado para ele.
- Encaixe e parafuse a última garra, prendendo o orbe no lugar.
Conectando a alimentação:
- Utilize um carregador USB 5V/2A conectado ao cabo micro USB.
- A entrada de alimentação fica acessível através do furo na estrutura, alinhado com o conector da placa.
Funcionamento do Orbe da Joias do Infinito com Arduino
Com todos os componentes conectados, a estrutura montada e o código carregado, seu Orbe das Joias do Infinito com Arduino está pronta para entrar em ação!
Assim que a alimentação for ligada (via cabo micro USB conectado a uma fonte 5V/2A), o projeto começa a rodar. Veja o que acontece:

O projeto utiliza um sensor de vibração para detectar movimentos. Sempre que o dispositivo for levemente balançado ou sofrer um impacto suave, ele dispara uma sequência interativa, composta por:
- Uma nova frase temática no display OLED
- Um efeito sonoro emitido pelo buzzer
- Uma cor diferente nas fitas de LEDs RGB
Cada nova vibração gera uma combinação aleatória desses três elementos, criando um efeito de “despertar de poder” sempre que a unidade é ativada. Essa dinâmica remete ao comportamento das Joias do Infinito quando tocadas ou acionadas no universo Marvel.
Conclusão
Agora você tem em mãos um incrível Orbe das Joias do Infinito com Arduino, um projeto interativo que combina eletrônica, programação e criatividade em uma experiência única. Ao trabalhar com LEDs, sensores, display OLED e um case personalizado em 3D, você explorou diversos conceitos fundamentais do universo maker de forma prática e divertida.
Além de ser uma homenagem ao universo Marvel, esse projeto é uma excelente porta de entrada para quem deseja aprender mais sobre:
- Montagens eletrônicas com Arduino
- Soldagem e prototipagem
- Comunicação I2C e controle de LEDs WS2812
- Interação com sensores físicos
Deixe seu comentário aqui embaixo, vamos adorar ajudar e conhecer sua opinião! Se você montou seu orbe, compartilhe também a sua experiência e mostre como ficou o resultado final.
E não se esqueça de nos seguir no Instagram da MakerHero para acompanhar mais conteúdos como este e se inspirar em novas ideias de eletrônica, automação e projetos criativos com Arduino.