Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Breadboard para PCB Parte 1 - Fazendo o jogo Simon Says

Componentes e suprimentos

Arduino UNO
× 1
Placa de ensaio sem solda em tamanho real
× 1
LED (genérico)
× 4
SparkFun Botão de pressão 12 mm
× 4
Buzzer
× 1
Fios de jumpers (genérico)
× 12
Resistor 10k ohm
× 4
Resistor 330 ohm
× 4
Cabo USB-A para B
× 1

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





Introdução


Todos nós já vimos o antigo jogo Simon Says, em que você tenta copiar uma sequência de luzes pressionando o botão que corresponde à sequência de luzes correta. Para o Hackster Live, apresentamos uma ferramenta de design de PCB chamada Upverter. Este é um projeto divertido e simples de criar e transformar em um PCB. Abaixo está o projeto básico mostrando a criação do jogo completa com hardware e código.

Esta série de projetos tem três partes.
  • Parte 1: Fazendo o jogo Simon Says
  • Parte 2: Projete um PCB baseado no jogo Simon Says usando Upverter
  • Parte 3: Moa seu próprio PCB a partir do design que você criou no Upverter





O que você aprenderá nesta série

  • Como fazer o layout de um projeto básico em uma placa de ensaio
  • Como fazer o layout de um PCB no Upverter
  • Como fresar seu próprio PCB usando uma máquina CNC





Software


Se você não tiver o IDE do Arduino para escrever e enviar o código para o seu Arduino, baixe a versão mais recente para o seu sistema operacional aqui.





Configuração de hardware


Usei o exemplo do Inventor’s Kit da Sparkfun como inspiração para a configuração do meu hardware e ajustei-o ligeiramente. Confira o diagrama de Fritzing abaixo.






Código


A coisa divertida sobre este jogo é que você pode ter muitas variações. Como mencionei acima, usei o exemplo do Sparkfun como ponto de partida para minha configuração de hardware e escrevi o código do zero. Se escrever seu próprio código não é algo em que você está interessado, você pode usar o meu abaixo, usar o código do Sparkfun no exemplo mencionado acima com alguns ajustes, ou procurar outros jogos / códigos do Simon says que funcionarão com a configuração do seu hardware .

Incluí comentários detalhados e as linhas de impressão Serial de depuração em meu código, para que você possa ver o que está acontecendo no monitor Serial enquanto o jogo está rodando. Confira abaixo o vídeo do jogo Simon Says em ação!





Simon fala sobre o vídeo do jogo


* Nota:Neste vídeo eu defini o número de luzes em uma linha que eu precisava para ganhar para 5. Isso pode ser alterado para tornar o jogo mais difícil, mas eu queria manter meu vídeo relativamente curto :).

Agora você está pronto para transformar sua placa de ensaio em um PCB! Aprenda como em Breadboard to PCB Parte 2 - Projetando um PCB usando Upverter.

Código

  • Simon diz o código do Arduino
Simon diz código do Arduino Arduino
 int ledArray [] ={12, 9, 5, 2}; // ledArray [0] é verde, ledArray [1] é vermelho, ledArray [2] é amarelo e ledArray [3] é azul. int buttonArray [] ={13, 10, 6, 3}; // buttonArray [0] é verde, buttonArray [1] é vermelho, buttonArray [2] é amarelo e buttonArray [3] é azul. pinCount int =4; // tanto ledArray quanto buttonArray têm o mesmo pinCount -> use isso para botões e leds int buzzer =8; int ledState =0; int gameState =0; #define NUMBERTOWIN 5 // Número de luzes que você deve combinar para vencer -> Você pode alterar este número para tornar o jogo mais ou menos desafiador para ganhar int gameValues ​​[NUMBERTOWIN]; int roundNum =0; sem sinal long previousMillis =0; // precisa disso para o estado pré-jogo para luzes piscando sem atraso -> se você usar o atraso, seu botão para iniciar o jogo pode não ser notado unsigned long interval1 =500; // precisa disso para o tempo entre piscadas // declara functionsvoid setLed (int ledNum); void displayClue (int roundNum); boolean waitForInput (int buttonNum); void setup () {Serial.begin (9600); Serial.println ("configuração"); for (int Pin =0; Pin  a função setLed () afirma que se ledNum for <0, o led é BAIXO setLed (-1); // defina o número da rodada como zero para começar na primeira rodada roundNum =0; atraso (1000); // define gameState para 1 gameState =1; }} if (gameState ==1) {gamePlay (); } if (gameState ==2) {// Você ganhou !! - reproduza o som vencedor e percorra os leds (winDisplay) 3 vezes, seguido de uma exibição perdida uma vez para uma boa transição. // demora para dar ao jogador tempo para soltar o botão pressionado antes de vencer as reproduções de som delay (500); win_sound (); winDisplay (); winDisplay (); winDisplay (); perderDisplay (); Serial.println ("winDisplay"); // atrase um pouco antes de executar o pre_game delay (1000); // redefine gameState para zero para chamar pre_game gameState =0; } if (gameState ==3) {// Você perde :( - reproduza som perdendo e leds flash (LossDisplay) 3 vezes para uma boa transição. // retarde para dar ao jogador tempo para soltar o botão pressionado antes de perder o retardo de reprodução de som (500); lost_sound (); LossDisplay (); LossDisplay (); LossDisplay (); Serial.println ("LossDisplay"); // atrasar brevemente antes de executar o atraso pre_game (1000); // redefinir gameState para zero para chamar pre_game gameState =0;}} // pre_gamevoid pre_game () {// Verifique se passou tempo suficiente entre os leds acendendo long unsigned long currentMillis =millis (); if (currentMillis - previousMillis> interval1) {// se tempo suficiente passou atualização acende if ( ledState ==0) {Serial.println ("pre green"); setLed (0); ledState =1;} else if (ledState ==1) {Serial.println ("pre red"); setLed (1); ledState =2;} else if (ledState ==2) {Serial.println ("pre yellow"); setLed (2); ledState =3;} else if (ledState ==3) {Serial.println ("pre blue "); setLed (3); ledState =0;} // tempo redefinir previousMillis =currentMillis; }} // função enquanto o jogo está sendo reproduzidovoid gamePlay () {Serial.println ("gamePlay"); // pré-carrega a matriz com números aleatórios para o jogo para (int i =0; i  se algum botão for pressionado, vá para o resto do código if (! button0 ||! button1 ||! button2 ||! button3) {// Atrase brevemente para evitar a contagem dupla de atraso do pressionamento do botão ( 250); // acende o led correspondente quando um botão é pressionado if (buttonNum ==0) {digitalWrite (ledArray [0], HIGH); atraso (250); digitalWrite (ledArray [0], LOW); } else if (buttonNum ==1) {digitalWrite (ledArray [1], HIGH); atraso (250); digitalWrite (ledArray [1], LOW); } else if (buttonNum ==2) {digitalWrite (ledArray [2], HIGH); atraso (250); digitalWrite (ledArray [2], LOW); } else if (buttonNum ==3) {digitalWrite (ledArray [3], HIGH); atraso (250); digitalWrite (ledArray [3], LOW); } // verifique se o botão correto foi pressionado if (buttonNum ==0 &&button0 ==0) {Serial.println ("0 Pressed"); return true; } else if (buttonNum ==1 &&button1 ==0) {Serial.println ("1 Pressionado"); return true; } else if (buttonNum ==2 &&button2 ==0) {Serial.println ("2 pressionado"); return true; } else if (buttonNum ==3 &&button3 ==0) {Serial.println ("3 pressionado"); return true; } else {return false; }}}} // após a vitória - faça com que as luzes se movam rapidamente para evitar winDisplay () {digitalWrite (ledArray [0], HIGH); delay (75); digitalWrite (ledArray [0], LOW); delay (75); digitalWrite (ledArray [1], HIGH); atraso (75); digitalWrite (ledArray [1], LOW); atraso (75); digitalWrite (ledArray [2], HIGH); atraso (75); digitalWrite (ledArray [2], LOW ); atraso (75); digitalWrite (ledArray [3], HIGH); atraso (75); digitalWrite (ledArray [3], LOW); atraso (75); digitalWrite (ledArray [2], HIGH); atraso (75 ); digitalWrite (ledArray [2], LOW); atraso (75); digitalWrite (ledArray [1], HIGH); atraso (75); digitalWrite (ledArray [1], LOW); atraso (75); digitalWrite (ledArray [0], HIGH); delay (75); digitalWrite (ledArray [0], LOW); delay (75);} void win_sound (void) {// tom (número pin, frequência - pesquisei online para encontrar a frequência das notas que eu queria, duração da melodia) Serial.println ("buzzer1"); tom (campainha, 294, 250); atraso (200); tom (campainha, 294, 250); atraso (200); tom (campainha, 294, 250); atraso (200); tom (campainha, 392, 500); atraso (500); Serial.println ("segundo 392"); tom (campainha, 392, 250); atraso (200); tom (campainha, 440, 250); atraso (200); tom (campainha, 392, 250); atraso (200); tom (campainha, 440, 250); atraso (200); tom (campainha, 494, 500);} void percaDisplay () {digitalWrite (ledArray [0], HIGH); digitalWrite (ledArray [1], HIGH); digitalWrite (ledArray [2], HIGH); digitalWrite (ledArray [3], HIGH); atraso (200); digitalWrite (ledArray [0], LOW); digitalWrite (ledArray [1], LOW); digitalWrite (ledArray [2], LOW); digitalWrite (ledArray [3], LOW); atraso (200);} void lost_sound (void) {Serial.println ("lost_sound"); tom (campainha, 98, 250); atraso (250); tom (campainha, 93, 250); atraso (250); tom (campainha, 87, 250); atraso (250);} 

Esquemas

simon_says_fritzing_Yb8EdKPqD4.fzz

Processo de manufatura

  1. Jogo Arduino Gyroscope com MPU-6050
  2. Dados digitais Arduino
  3. DIY 37 LED Roulette Game
  4. Controlador de jogo Arduino
  5. Joystick Game
  6. Detector de alcance portátil
  7. Jogo Pixel Chaser
  8. Galvanoplastia com cobre
  9. Fabricação 101:tornando-se parte da indústria aeroespacial
  10. Processos envolvidos na fabricação de PCBs de 4 camadas - Parte 2