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

NeoMatrix Arduino Pong

Componentes e suprimentos

NeoPixel strip
× 1
Fios de jumpers (genérico)
× 1
Arduino Nano R3
× 1
Cabeçalho feminino 8 posição 1 linha (0,1 ")
× 1
Perma-Proto breadboard meio tamanho
× 1
Joystick analógico (genérico)
× 1
Potenciômetro rotativo (genérico)
× 1

Ferramentas e máquinas necessárias

Ferro de soldar (genérico)

Aplicativos e serviços online

Arduino IDE

Sobre este projeto





The Matrix


Não, não é o filme, a matriz NeoPixel! Para fazer uma matriz, basta comprar uma tira de LEDs NeoPixel endereçáveis ​​individualmente. Desenrole a tira e observe as setas nela. Você só pode anexá-los em UMA DIREÇÃO, você pode arruiná-los se a orientação estiver errada.

Usei uma tira de 30 led / m 5m e cortei-as em tiras de dez LEDs cada. Comecei então a colocar as tiras em um pedaço de cartolina, alternando as orientações. Em seguida, cortei os fios nos comprimentos corretos e os soldei nos terminais NeoPixel. Depois de fazer isso 14 vezes, minha matriz finalmente estava pronta! Em seguida, verifiquei com um multímetro para garantir que não havia nenhum curto-circuito, pois um curto-circuito vai fritar o Nano, a matriz e talvez sua porta USB (eu sei por experiência própria). Carregue o esboço de teste do neomatrix com os parâmetros "NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG". Se ele rolar "olá" pela tela, a parte da tela está pronta!





A lógica


Um jogo de pong tem vários objetos:a raquete, as paredes e a bola. O código tem as variáveis ​​bola X e bola Y, que controlam a posição da bola. A direção da bola é controlada por 1 ou -1 sendo atribuídos às variáveis ​​de direção. A raquete é um retângulo controlado por meio de um potenciômetro mapeado de 0 a 15. O Y da raquete não muda, portanto, não é necessária uma variável para mapeamento. No início do jogo, a bola começa em 1,1 e o jogador deve permitir que a bola quique uma vez para começar. A física leva em consideração a direção da bola e onde ela bate na raquete.





Tempo divertido!


Agora, basta conectar a matriz NeoPixel ao seu Arduino Nano, o + 5V no joystick para 5v, o GND para o Arduino GND e, finalmente, o eixo X para A0. Divirta-se com seu novo jogo de pong! Experimente adicionar mais jogadores e melhor física para um desafio!


Código

  • O código do Arduino
  • Código Arduino
O código do Arduino C / C ++
 #include  #include  #include  #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix (15, 10, NEOGRATRIX_EZOATRIX + NEZ_MHATRIX_BONO_MHATRIX + NEZ_MHATRIX + NEZAT_MATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEO_MHATRIX + NEZ_MHATRIX_BON_MHATRIX + NEO_MH800.; // variáveis ​​para a posição da bola e paddleint paddleX =0; int paddleY =0; int oldPaddleX, oldPaddleY; int ballDirectionX =1; int ballDirectionY =1; int score =0; int ballSpeed ​​=10; // números mais baixos são mais rápidosint ballX, ballY, oldBallX, oldBallY; void setup () {Serial.begin (9600); // inicializa a matriz de exibição.begin (); // fundo preto matrix.fillScreen (0); matrix.setTextColor (matrix.Color (0,255,0)); matrix.print ("GO"); matrix.show (); atraso (2000); matrix.fillScreen (0); matrix.show ();} void loop () {// salvar a largura e altura da tela int myWidth =matrix.width (); int minhaAltura =matriz.altura (); // mapeia a localização da raquete para a posição dos potenciômetros paddleX =map (analogRead (A0), 0, 1023, 0, 12); remo Y =8; // defina a cor de preenchimento para preto e apague a // posição anterior da pá se diferente do presente if (oldPaddleX! =paddleX || oldPaddleY! =paddleY) {matrix.fillRect (oldPaddleX, oldPaddleY, 4, 1, matrix. Cor (0,0,0)); } // desenhe a raquete na tela, salve a posição atual // como anterior.//if(paddleX> =0 &&paddleX <=11) {matrix.fillRect (paddleX, paddleY, 4, 1, matrix.Color ( 0,0,255)); //} // else if (paddleX <0) {// paddleX =0; //matrix.fillRect(paddleX, paddleY, 3, 1, matrix.Color (0,0,255)); //} // else if (paddleX> =13) {//} oldPaddleX =paddleX; oldPaddleY =paddleY; matrix.show (); // atualiza a posição da bola e desenha-a na tela if (millis ()% ballSpeed ​​<2) {moveBall (); } matrix.show (); if (ballY> 8 &&(millis ()> 10000)) {score + =1; matrix.fillScreen (0); matrix.setTextColor (matrix.Color (255,0,0)); matrix.setCursor (0,2); matrix.print (String (pontuação)); matrix.show (); atraso (4000); ballX =aleatório (3,11); ballY =aleatório (1,1); matrix.fillScreen (0); matrix.show (); atraso (1000); } delay (5);} // esta função determina a posição da bola na tela para evitar moveBall () {// se a bola sair da tela, inverta a direção:if (ballX> matrix.width () - 1 || ballX <0) {ballDirectionX =-ballDirectionX; } if (ballY> matrix.height () || ballY <0) {ballDirectionY =-ballDirectionY; } // verifique se a bola e a raquete ocupam o mesmo espaço na tela if (inPaddle (ballX, ballY, paddleX, remoY, 4, 1)) {if (ballX ==paddleX &&ballY ==paddleY) {ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; } else if (ballX ==paddleX + 3 &&ballY ==paddleY) {ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } else if (ballX ==paddleX + 1 &&ballY ==paddleY) {ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; } else if (ballX ==paddleX + 2 &&ballY ==paddleY) {ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; }} // atualiza a posição da bola ballX + =ballDirectionX; ballY + =ballDirectionY; // apaga a posição anterior da bola if (oldBallX! =ballX || oldBallY! =ballY) {matrix.drawPixel (oldBallX, oldBallY, matrix.Color (0,0,0)); } // desenha a posição atual da bola matrix.drawPixel (ballX, ballY, matrix.Color (150,150,0)); oldBallX =ballX; oldBallY =ballY;} // esta função verifica a posição da bola // para ver se ela cruza com o paddleboolean inPaddle (int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) {boolean result =false; if ((x> =rectX &&x <=(rectX + rectWidth)) &&(y> =rectY &&y <=(rectY + rectHeight))) {resultado =verdadeiro; } resultado de retorno;} 
Código Arduino C / C ++
 #include  #include  #include  #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix (15, 10, NEOGRATRIX_EZOATRIX + NEZ_MHATRIX_BONO_MHATRIX + NEZ_MHATRIX + NEZAT_MATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEZ_MHATRIX + NEO_MHATRIX + NEZ_MHATRIX_BON_MHATRIX + NEO_MH800.; // variáveis ​​para a posição da bola e paddleint paddleX =0; int paddleY =0; int oldPaddleX, oldPaddleY; int ballDirectionX =1; int ballDirectionY =1; int score =0; int ballSpeed ​​=10; // números mais baixos são mais rápidosint ballX, ballY, oldBallX, oldBallY; void setup () {Serial.begin (9600); // inicializa a matriz de exibição.begin (); // fundo preto matrix.fillScreen (0); matrix.setTextColor (matrix.Color (0,255,0)); matrix.print ("GO"); matrix.show (); atraso (2000); matrix.fillScreen (0); matrix.show ();} void loop () {// salvar a largura e altura da tela int myWidth =matrix.width (); int minhaAltura =matriz.altura (); // mapeia a localização da raquete para a posição dos potenciômetros paddleX =map (analogRead (A0), 0, 1023, 0, 12); remo Y =8; // defina a cor de preenchimento para preto e apague a // posição anterior da pá se diferente do presente if (oldPaddleX! =paddleX || oldPaddleY! =paddleY) {matrix.fillRect (oldPaddleX, oldPaddleY, 4, 1, matrix. Cor (0,0,0)); } // desenhe a raquete na tela, salve a posição atual // como anterior.//if(paddleX> =0 &&paddleX <=11) {matrix.fillRect (paddleX, paddleY, 4, 1, matrix.Color ( 0,0,255)); //} // else if (paddleX <0) {// paddleX =0; //matrix.fillRect(paddleX, paddleY, 3, 1, matrix.Color (0,0,255)); //} // else if (paddleX> =13) {//} oldPaddleX =paddleX; oldPaddleY =paddleY; matrix.show (); // atualiza a posição da bola e desenha-a na tela if (millis ()% ballSpeed ​​<2) {moveBall (); } matrix.show (); if (ballY> 8 &&(millis ()> 10000)) {score + =1; matrix.fillScreen (0); matrix.setTextColor (matrix.Color (255,0,0)); matrix.setCursor (0,2); matrix.print (String (pontuação)); matrix.show (); atraso (4000); ballX =aleatório (3,11); ballY =aleatório (1,1); matrix.fillScreen (0); matrix.show (); atraso (1000); } delay (5);} // esta função determina a posição da bola na tela para evitar moveBall () {// se a bola sair da tela, inverta a direção:if (ballX> matrix.width () - 1 || ballX <0) {ballDirectionX =-ballDirectionX; } if (ballY> matrix.height () || ballY <0) {ballDirectionY =-ballDirectionY; } // verifique se a bola e a raquete ocupam o mesmo espaço na tela if (inPaddle (ballX, ballY, paddleX, remoY, 4, 1)) {if (ballX ==paddleX &&ballY ==paddleY) {ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; } else if (ballX ==paddleX + 3 &&ballY ==paddleY) {ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; } else if (ballX ==paddleX + 1 &&ballY ==paddleY) {ballDirectionX =-ballDirectionX; ballDirectionY =-ballDirectionY; } else if (ballX ==paddleX + 2 &&ballY ==paddleY) {ballDirectionX =ballDirectionX; ballDirectionY =-ballDirectionY; }} // atualiza a posição da bola ballX + =ballDirectionX; ballY + =ballDirectionY; // apaga a posição anterior da bola if (oldBallX! =ballX || oldBallY! =ballY) {matrix.drawPixel (oldBallX, oldBallY, matrix.Color (0,0,0)); } // desenha a posição atual da bola matrix.drawPixel (ballX, ballY, matrix.Color (150,150,0)); oldBallX =ballX; oldBallY =ballY;} // esta função verifica a posição da bola // para ver se ela cruza com o paddleboolean inPaddle (int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) {boolean result =false; if ((x> =rectX &&x <=(rectX + rectWidth)) &&(y> =rectY &&y <=(rectY + rectHeight))) {resultado =verdadeiro; } resultado de retorno;} 

Esquemas


Processo de manufatura

  1. Detector de linguagem TinyML baseado em Edge Impulse e Arduino
  2. Jogo Arduino Gyroscope com MPU-6050
  3. Dados digitais Arduino
  4. Homem de Ferro
  5. Encontre-me
  6. Controle do umidificador Arduino
  7. Sonar usando arduino e exibição no IDE de processamento
  8. MobBob:DIY Arduino Robot Controlado por Smartphone Android
  9. Arduino Audio Reactive Desk Light
  10. Joystick Arduino