Índice:

Arduino: Pinball Machine: 8 etapas (com imagens)
Arduino: Pinball Machine: 8 etapas (com imagens)

Vídeo: Arduino: Pinball Machine: 8 etapas (com imagens)

Vídeo: Arduino: Pinball Machine: 8 etapas (com imagens)
Vídeo: Building Custom Pinball Machines (33c3) 2024, Junho
Anonim
Image
Image

Como sempre amei máquinas de pinball e eletrônicos, decidi construir minha própria máquina de pinball. Escolhi o Arduino para a programação e a eletrônica, porque é uma plataforma altamente acessível, compacta e fácil de usar.

Neste guia, explicarei meu processo de desenvolvimento, então talvez um de vocês entusiastas possa criar algo parecido.

Etapa 1: Construindo o Caso

Construindo o Caso
Construindo o Caso

Vamos começar com o caso da máquina de pinball. Fiz uma construção bastante simples. Cortei uma placa de fundo e usei 4 pequenos pilares de madeira nos cantos para conectar as peças da parede. O tamanho da sua capa é de sua escolha, eu escolhi torná-la um pouco menor do que uma máquina de pinball original, pois não estava planejando adicionar nenhum extra espetacular para preencher o espaço. Usei parafusos e cola para deixar o case o mais firme possível. Na parte de trás, fiz dois furos na peça do piso para as duas pernas que darão à máquina de pinball a inclinação icônica. Mais uma vez, a altura das pernas depende de você. Quanto mais altas forem as pernas, mais rápido a bola rolará (para baixo).

Etapa 2: Construindo o Mecânico Flipper

Construindo o Mecânico Flipper
Construindo o Mecânico Flipper

Como queria limitar o custo deste projeto, decidi fazer nadadeiras totalmente mecânicas em vez de eletrônicas. Se você estiver interessado em palhetas eletrônicas, pode usar uma construção que é mais ou menos a mesma, mas com um chamado 'solenóide' conectado a ela (solenóides com potência suficiente para controlar as palhetas eram muito caros para mim).

Comecei fazendo dois furos na parte inferior para o ponto de articulação de ambas as nadadeiras. Eu perfurei os buracos (na minha opinião) um pouco perto um do outro, e isso fez com que o jogo ficasse um pouco mais fácil no final. Portanto, tome cuidado para não colocar os flippers muito próximos uns dos outros, a menos que você queira um estilo de jogo fácil.

Também fiz dois furos em ambas as paredes laterais paralelos aos furos do flipper. Esses orifícios devem ser usados para os dois botões de palheta.

Usei molas para puxar as nadadeiras de volta à posição original e fiz uma construção giratória entre as nadadeiras e os botões para fazê-los girar quando os botões estão sendo pressionados. Para impedir que as molas puxassem demais as nadadeiras, coloquei dois parafusos para prendê-las em sua posição original.

Etapa 3: Colocando as paredes

Colocando as paredes
Colocando as paredes

Coloquei algumas paredes para redirecionar o pinball para os flippers. Eles são muito simples de fazer. Basta fazer 3 furos na parte inferior da caixa e inserir três pinos de madeira. Enrole um elástico em volta dos alfinetes e pronto.

Etapa 4: Adicionando os Blocos de Pontuação

Adicionando os Blocos de Pontuação
Adicionando os Blocos de Pontuação
Adicionando os Blocos de Pontuação
Adicionando os Blocos de Pontuação

Os blocos de pontuação são uma das partes mais importantes da máquina de pinball, então certifique-se de fazer essa parte corretamente. Fiz três blocos de pontuação para minha máquina de pinball, mas, novamente, tudo depende de você.

Cortei um pequeno pedaço de cabo de vassoura e enrolei fio de cobre em torno dele. O arduino alimentará este fio de cobre constantemente com 5V. Soldei quatro molas de caneta ao lado para melhor contato com a bola.

A maneira como os blocos de pontuação funcionam é que a bola completa um circuito que leva a um pino de entrada no Arduino. Então, o que eu fiz foi prender uma folha de alumínio na parte inferior da caixa (NÃO TOCAR NO COBRE) e prender a folha a um pino no Arduino. Sempre que a bola atingir o cobre e o alumínio, o circuito estará completo e o Arduino receberá um sinal.

Conectei todos os blocos de pontuação usando a folha de alumínio, mas lembre-se de que o lado adesivo NÃO conduz eletricidade.

Etapa 5: Adicionar o contato Game Over

Adicionando o contato Game Over
Adicionando o contato Game Over

Na parte inferior da máquina de pinball, entre os flippers, adicionei um contato game over. Sempre que a bola atingir esse contato, o jogador perderá uma bola. A construção que fiz é muito semelhante aos blocos de pontuação. Só aqui usei dois parafusos, e novamente um pedaço de papel alumínio no fundo.

Etapa 6: Perfuração dos orifícios do cabo

Perfurando os orifícios do cabo
Perfurando os orifícios do cabo
Perfurando os orifícios do cabo
Perfurando os orifícios do cabo
Perfurando os orifícios do cabo
Perfurando os orifícios do cabo

Antes de começarmos a conectar tudo ao Arduino, precisamos primeiro fazer alguns furos para os cabos. Fiz um furo em ambas as folhas de alumínio, portanto, um furo na folha de alumínio perto dos blocos de pontuação e um furo na folha de alumínio perto do jogo por contato.

Além disso, também fiz um furo no canto inferior esquerdo, entre as paredes, para o cabo que levava ao portão de bola extra Servo.

Também deve haver um orifício para o cabo conectado ao LCD na parte inferior.

Etapa 7: conectando tudo

Conectando tudo
Conectando tudo
Conectando tudo
Conectando tudo

Fiz este esquema para ter uma melhor visão geral de onde todos os cabos devem ir. As cruzes são os pontos onde os cabos se conectam. Tentei soldar o máximo possível para tornar tudo um pouco mais estável e confiável. A fiação vai demorar um pouco, mas depois de feita você está quase lá!

Etapa 8: Carregando o código

Faça upload do seguinte código para seu Arduino para fazer sua máquina de pinball funcionar!

// Inclui a biblioteca para o lcd

#include #include

// Inicialize os pinos de dados LCD

LiquidCrystal lcd (7, 8, 9, 10, 11, 12);

// Crie um servo

Servo ballGateServo;

// Crie variáveis para os pinos que estamos usando

int gameoverPin = 6; scorePin int = 5; int speakerPin = 4; int ballGateServoPin = 3;

// Inicializar variáveis de jogabilidade para a máquina de pinball

pontuação int = 0; recorde int = 500; bool highscoreReached = false; bolas internas = 3; int gameoverTimer = 0; int gameoverTimerDuration = 100; bool gameoverTriggered = false;

// execute este código uma vez no primeiro quadro

void setup () {// Define o pinMode para os pinos que estamos usando pinMode (gameoverPin, INPUT); pinMode (scorePin, INPUT);

// Inicialize o lcd fornecendo a largura e a altura

lcd.begin (16, 2);

// Anexe o servo do portão de esfera ao pino apropriado

ballGateServo.attach (ballGateServoPin);

// Redefina o servo do portão para a posição inicial

ballGateServo.write (0); }

// Execute este código a cada quadro

void loop () {// Captura as entradas dos pinos int gameoverState = digitalRead (gameoverPin); int scoreState = digitalRead (scorePin);

// Adicione à pontuação se a entrada for recebida

if (scoreState) {tone (speakerPin, 1000); pontuação + = 10; } else {noTone (4); }

// Subtraia das bolas se o pit gameover for acionado

if (gameoverState e! gameoverTriggered) {balls - = 1; gameoverTriggered = true; gameoverTimer = gameoverTimerDuration; }

// Inicie o cronômetro de gameover assim que a bola não tocar no contato de gameover

if (! gameoverState) {if (gameoverTimer> = 1) {gameoverTimer - = 1; } else {gameoverTriggered = false; }}

// Pisca o texto gameover para o lcd e zera a pontuação e as bolas

if (bolas <= 0) {lcd.setCursor (0, 0); para (int i = 5; i> = 1; i--) {lcd.clear (); atraso (250); lcd.print ("GAME OVER"); lcd.setCursor (0, 1); lcd.print ("Tentar novamente?"); atraso (250); } lcd.clear (); pontuação = 0; ballGateServo.write (0); highscoreReached = false; bolas = 3; }

if (score> highscore e! highscoreReached) {

lcd.setCursor (0, 0); para (int i = 5; i> = 1; i--) {lcd.clear (); atraso (250); lcd.print ("NOVO HIGHSCORE"); lcd.setCursor (0, 1); lcd.print ("Morte Súbita!"); atraso (250); } lcd.clear (); bolas = 1; ballGateServo.write (120); recorde = pontuação; highscoreReached = true; }

// Atualize a pontuação máxima se a pontuação atual for maior

if (pontuação> pontuação máxima) {pontuação máxima = pontuação; }

// Coloque o cursor na linha 0

lcd.setCursor (0, 0); // Imprime a pontuação atual (alta) no lcd if (score <= 0) {lcd.print ("Highscore:" + String (highscore) + ""); } else {lcd.print ("Pontuação:" + String (pontuação) + ""); }

// Coloque o cursor na linha 1

lcd.setCursor (0, 1);

// Imprime a quantidade atual de bolas no LCD

lcd.print ("Bolas:" + String (bolas)); }

Recomendado: