Cartão de Visita PCB 4×4 Jogo da Velha Personalizado – Guia de Design, Montagem e Código
Visão Geral
Este tutorial ensina a criar um PCB no tamanho de um cartão de visita que funciona como um jogo da velha 4×4. A frente exibe o logotipo da EDISON SCIENCE CORNER, ícones de redes sociais e um QR code que leva ao canal do YouTube. No verso, revela-se um circuito de jogo totalmente funcional alimentado por um ATmega328, LEDs NeoPixel e chaves táteis.
Componentes e Materiais
| Item | Qtd |
|---|---|
| Microchip ATmega328P‑AU | 1 |
| Fita de LED RGB NeoPixel (WS2812B) | 16 (4×4) |
| Chaves Táteis, Acionamento Superior | 16 |
| PCB Personalizado (JLCPCB) | 1 |
| Arduino UNO (para programação) | 1 |
| Conector USB Micro‑Fêmea | 1 |
| Capacitores 22 pF (0805) | 2 |
| Capacitores 100 nF (0805) | 2 |
| Resistores 1 kΩ (0805) | 3 |
| Resistor 10 kΩ (0805) | 1 |
| Cristal 16 MHz | 1 |
| LEDs (SMD 0805) | 2 |
Ferramentas e Máquinas Necessárias
- Ferro de solda (genérico)
- Fio de solda sem chumbo
- Fluxo de solda
- Kit de jumpers (5 cm, 10 unidades)
Aplicativos e Serviços Online
- Arduino IDE
- EasyEDA – Plataforma de design de PCB
- JLCPCB – Fabricação de PCB de baixo custo (a partir de $2 por 5 placas)
Passo 1: Projetar e Imprimir o PCB
Usando o EasyEDA, projetei uma placa de 89 mm × 50 mm (tamanho padrão de cartão de visita) e roteei uma matriz 4×4 para o jogo da velha. O esquemático usa o ATmega328 como microcontrolador principal e integra 16 LEDs WS2812B e 16 chaves táteis. Após finalizar o layout, exportei os arquivos Gerber e enviei para a JLCPCB. Com espessura de 0,8 mm e cor preta, os PCBs chegaram em duas semanas, com qualidade esperada para projetos de hobby.
Passo 2: Reunir os Componentes
Consulte a lista de componentes acima. Todas as peças são comuns, baratas e podem ser adquiridas em distribuidores como Digi‑Key, Mouser ou AliExpress.
Passo 3: Soldagem
Comece soldando o conector USB micro‑fêmea, depois posicione o ATmega328 e os componentes passivos de suporte. Em seguida, solde a fita de LED NeoPixel e alinhe cada LED com sua chave tátil correspondente. Solde cuidadosamente todas as 16 chaves, garantindo a orientação correta. A montagem completa leva cerca de uma hora para um hobbyista experiente.
Passo 4: Programação
Conecte a placa ao PC via USB. Carregue o sketch abaixo usando a Arduino IDE:
O sketch inicializa o array de 16 LEDs, gerencia pressionamentos das teclas da matriz 4×4 e implementa um detector de vitória simples. O jogador 1 usa LEDs verdes, o jogador 2 usa LEDs azuis. Em caso de vitória, a placa pisca na cor do vencedor; se o tabuleiro encher sem vencedor, pisca em vermelho.
Passo 5: Jogar e Divertir-se
Vire o cartão para revelar o lado do jogo. Cada pressionamento de botão acende o LED correspondente. O jogo segue as regras clássicas do jogo da velha, mas com grade 4×4 e indicadores de cor. Desfrute de um jogo portátil e único que também serve como quebra-gelo em conferências e eventos de networking.
Código
Abaixo está o sketch completo do Arduino (C/C++) usado neste projeto. Inclui manipulação do teclado, controle dos LEDs e lógica de vitória.
#include <Keypad.h>
#include <FastLED.h>
#define LED_PIN 5
#define NUM_LEDS 16
#define LED_TYPE WS2812B
#define COLOR_ORDER GBR
#define BRIGHTNESS 30
CRGB leds[NUM_LEDS];
int player = 1;
char board[16] = {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'};
char key;
int moveCount = 0;
const byte ROWS = 4;
const byte COLS = 4;
char hexaKeys[ROWS][COLS] = {{'1','2','3','A'},{'4','5','6','B'},{'7','8','9','C'},{'*','0','#','D'}};
byte rowPins[ROWS] = {A0,A1,A2,A3};
byte colPins[COLS] = {A4,A5,2,3};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS);
void setup(){
Serial.begin(9600);
LEDS.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(BRIGHTNESS);
// Acende todos os LEDs em verde, depois azul, para confirmar funcionamento
for(int i=0;i<3;i++){
for(int j=0;j<NUM_LEDS;j++) leds[j] = (i%2==0) ? CRGB::Green : CRGB::Blue;
FastLED.show();
delay(500);
}
FastLED.clear();
}
void loop(){
key = customKeypad.getKey();
if(key && player==1){
int idx = keyToIndex(key);
leds[idx] = CRGB::Green;
FastLED.show();
board[idx] = 'X';
if(checkWinner('X')){
announceWinner(1);
}
player = 2;
delay(1000);
}
if(key && player==2){
int idx = keyToIndex(key);
leds[idx] = CRGB::Blue;
FastLED.show();
board[idx] = 'O';
if(checkWinner('O')){
announceWinner(2);
}
player = 1;
moveCount++;
delay(1000);
}
if(moveCount==8){
announceDraw();
}
}
int keyToIndex(char k){
switch(k){
case '1': return 0;
case '2': return 1;
case '3': return 2;
case 'A': return 3;
case '4': return 4;
case '5': return 5;
case '6': return 6;
case 'B': return 7;
case '7': return 8;
case '8': return 9;
case '9': return 10;
case 'C': return 11;
case '*': return 12;
case '0': return 13;
case '#': return 14;
case 'D': return 15;
}
return -1;
}
bool checkWinner(char mark){
const int lines[10][4] = {{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15},
{0,4,8,12},{1,5,9,13},{2,6,10,14},{3,7,11,15},
{0,5,10,15},{3,6,9,12}};
for(auto &line: lines){
if(board[line[0]]==mark && board[line[1]]==mark && board[line[2]]==mark && board[line[3]]==mark){
return true;
}
}
return false;
}
void announceWinner(int p){
CRGB color = (p==1) ? CRGB::Green : CRGB::Blue;
while(true){
for(int i=0;i<NUM_LEDS;i++) leds[i] = color;
FastLED.show();
delay(500);
FastLED.clear();
FastLED.show();
delay(500);
}
}
void announceDraw(){
while(true){
for(int i=0;i<NUM_LEDS;i++) leds[i] = CRGB::Red;
FastLED.show();
delay(1000);
FastLED.clear();
FastLED.show();
delay(500);
}
}
Esquemáticos
Todos os arquivos de design, BOM e código estão disponíveis para download.
Processo de manufatura
- Construa um Jogo em Tempo Real com Giroscópio: Arduino Nano + Sensor MPU-6050
- Sistema Multi-Posição de Sensores de Temperatura para Integração em Casa Inteligente
- Construa Seu Próprio Jogo de Roleta com 37 LEDs e Arduino Nano
- Controle USB para Jogos DIY com Arduino – Construa Seu Próprio Gamepad de Alto Desempenho
- Construa um Jogo da Velha Touchscreen no Arduino Due
- MotionSense: Detecção Inteligente de Intrusão com Arduino e ESP8266
- Prevenção de Incêndio em Impressoras 3D: Sistema de Segurança com Sensor Inteligente
- Pixel Chaser: Jogo LED Interativo de Um Toque com Arduino Nano
- Levitação Magnética Repulsiva com Arduino: Circuito Simples e Guia DIY
- CoroFence Detector Térmico: Sensor PIR Avançado & Integração IoT