Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

NeoMatrix Arduino Pong

Componentes y suministros

Tira de NeoPixel
× 1
Cables de puente (genéricos)
× 1
Arduino Nano R3
× 1
Encabezado femenino 8 Posición 1 Fila (0.1 ")
× 1
Perma-Proto Breadboard Half Size
× 1
Joystick analógico (genérico)
× 1
Potenciómetro giratorio (genérico)
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

La matriz

No, no la película, ¡la matriz NeoPixel! Para hacer una matriz, solo compre una tira de LED NeoPixel direccionables individualmente. Desenrolla la tira y fíjate en las flechas. Solo puede colocarlos en UNA DIRECCIÓN, podría arruinarlos si la orientación es incorrecta.

Usé una tira de 30 leds / m 5m y las corté en tiras de diez ledes cada una. Luego comencé a colocar las tiras en una cartulina, alternando orientaciones. Luego corté los cables a las longitudes correctas y los soldé a los terminales NeoPixel. Después de hacer eso 14 veces, ¡mi matriz finalmente estaba lista! Luego, verifiqué con un multímetro para asegurarme de que no hubiera cortocircuitos, ya que un cortocircuito freirá el Nano, la matriz y tal vez su puerto USB (lo sé por experiencia). Cargue el boceto de prueba de neomatriz con los parámetros "NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG". Si se desplaza "hola" por la pantalla, ¡habrá terminado con la parte de la pantalla!

La lógica

Un juego de pong tiene varios objetos:la paleta, las paredes y la pelota. El código tiene variables de bola X y bola Y, que mantienen un registro de la posición de la bola. La dirección de la pelota se maneja mediante la asignación de un 1 o un -1 a las variables de dirección. La paleta es un rectángulo que se controla mediante un potenciómetro que se asigna de 0 a 15. La Y de la paleta no cambiará, por lo que no se necesita una variable para mapearla. Al comienzo de un juego, la pelota comienza en 1,1 y el jugador debe permitir que la pelota rebote una vez para comenzar. La física tiene en cuenta la dirección de la pelota y dónde golpea en la paleta.

¡Momento divertido!

Ahora, simplemente conecte la matriz NeoPixel a su Arduino Nano, el + 5V en el joystick a 5v, el GND a Arduino GND y finalmente el eje X a A0. ¡Diviértete con tu nuevo juego de pong! ¡Intenta agregar más jugadores y mejores físicas para un desafío!

Código

  • El código Arduino
  • Código Arduino
El código Arduino C / C ++
 #include  #include  #include  #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix (15, 10, PIN, NEOFT_MATRIX_BOTROIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGROMA_BOT + NEOGRAMA; // variables para la posición de la pelota y la paletaint paddleX =0; int paddleY =0; int oldPaddleX, oldPaddleY; int ballDirectionX =1; int ballDirectionY =1; int score =0; int ballSpeed ​​=10; // los números más bajos son más rápidos en ballX, ballY, oldBallX, oldBallY; void setup () {Serial.begin (9600); // inicializa la matriz de visualización.begin (); // fondo negro matrix.fillScreen (0); matrix.setTextColor (matrix.Color (0,255,0)); matrix.print ("IR"); matrix.show (); retraso (2000); matrix.fillScreen (0); matrix.show ();} void loop () {// guarda el ancho y alto de la pantalla int myWidth =matrix.width (); int myHeight =matrix.height (); // mapea la ubicación de la paleta a la posición de los potenciómetros paddleX =map (analogRead (A0), 0, 1023, 0, 12); paletaY =8; // establece el color de relleno en negro y borra la // posición anterior de la paleta si es diferente de la presente if (oldPaddleX! =paddleX || oldPaddleY! =paddleY) {matrix.fillRect (oldPaddleX, oldPaddleY, 4, 1, matrix. Color (0,0,0)); } // dibuja la paleta en la pantalla, guarda la posición actual // como la 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 (); // actualizar la posición de la bola y dibujarla en la pantalla 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 (puntuación)); matrix.show (); retraso (4000); ballX =aleatorio (3,11); ballY =aleatorio (1,1); matrix.fillScreen (0); matrix.show (); retraso (1000); } delay (5);} // esta función determina la posición de la pelota en la pantallavoid moveBall () {// si la pelota sale de la pantalla, invierte la dirección:if (ballX> matrix.width () - 1 || ballX <0) {ballDirectionX =-ballDirectionX; } if (bolaY> matriz.altura () || bolaY <0) {bolaDirecciónY =-bolaDirecciónY; } // comprobar si la pelota y la paleta ocupan el mismo espacio en la pantalla if (inPaddle (ballX, ballY, paddleX, paddleY, 4, 1)) {if (ballX ==paddleX &&ballY ==paddleY) {ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; } más si (bolaX ==paletaX + 3 &&bolaY ==paletaY) {bolaDirecciónX =bolaDirecciónX; ballDirectionY =-ballDirectionY; } más si (bolaX ==paletaX + 1 &&bolaY ==paletaY) {bolaDirecciónX =-bolaDirecciónX; ballDirectionY =-ballDirectionY; } else if (bolaX ==paletaX + 2 &&bolaY ==paletaY) {bolaDirecciónX =bolaDirecciónX; ballDirectionY =-ballDirectionY; }} // actualiza la posición de la bola ballX + =ballDirectionX; ballY + =ballDirectionY; // borra la posición anterior de la bola if (oldBallX! =ballX || oldBallY! =ballY) {matrix.drawPixel (oldBallX, oldBallY, matrix.Color (0,0,0)); } // dibuja la posición actual de la bola matrix.drawPixel (ballX, ballY, matrix.Color (150,150,0)); oldBallX =ballX; oldBallY =ballY;} // esta función comprueba la posición de la bola // para ver si se cruza con el 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 =verdadero; } devolver resultado;} 
Código Arduino C / C ++
 #include  #include  #include  #define PIN 6Adafruit_NeoMatrix matrix =Adafruit_NeoMatrix (15, 10, PIN, NEOFT_MATRIX_BOTROIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGR_MATRIX_BOTRIX_MATROIX + NEOGROMA_BOT + NEOGRAMA; // variables para la posición de la pelota y la paletaint paddleX =0; int paddleY =0; int oldPaddleX, oldPaddleY; int ballDirectionX =1; int ballDirectionY =1; int score =0; int ballSpeed ​​=10; // los números más bajos son más rápidos en ballX, ballY, oldBallX, oldBallY; void setup () {Serial.begin (9600); // inicializa la matriz de visualización.begin (); // fondo negro matrix.fillScreen (0); matrix.setTextColor (matrix.Color (0,255,0)); matrix.print ("IR"); matrix.show (); retraso (2000); matrix.fillScreen (0); matrix.show ();} void loop () {// guarda el ancho y alto de la pantalla int myWidth =matrix.width (); int myHeight =matrix.height (); // mapea la ubicación de la paleta a la posición de los potenciómetros paddleX =map (analogRead (A0), 0, 1023, 0, 12); paletaY =8; // establece el color de relleno en negro y borra la // posición anterior de la paleta si es diferente de la presente if (oldPaddleX! =paddleX || oldPaddleY! =paddleY) {matrix.fillRect (oldPaddleX, oldPaddleY, 4, 1, matrix. Color (0,0,0)); } // dibuja la paleta en la pantalla, guarda la posición actual // como la 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 (); // actualizar la posición de la bola y dibujarla en la pantalla 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 (puntuación)); matrix.show (); retraso (4000); ballX =aleatorio (3,11); ballY =aleatorio (1,1); matrix.fillScreen (0); matrix.show (); retraso (1000); } delay (5);} // esta función determina la posición de la pelota en la pantallavoid moveBall () {// si la pelota sale de la pantalla, invierte la dirección:if (ballX> matrix.width () - 1 || ballX <0) {ballDirectionX =-ballDirectionX; } if (bolaY> matriz.altura () || bolaY <0) {bolaDirecciónY =-bolaDirecciónY; } // comprobar si la pelota y la paleta ocupan el mismo espacio en la pantalla if (inPaddle (ballX, ballY, paddleX, paddleY, 4, 1)) {if (ballX ==paddleX &&ballY ==paddleY) {ballDirectionX =- ballDirectionX; ballDirectionY =-ballDirectionY; } más si (bolaX ==paletaX + 3 &&bolaY ==paletaY) {bolaDirecciónX =bolaDirecciónX; ballDirectionY =-ballDirectionY; } más si (bolaX ==paletaX + 1 &&bolaY ==paletaY) {bolaDirecciónX =-bolaDirecciónX; ballDirectionY =-ballDirectionY; } else if (bolaX ==paletaX + 2 &&bolaY ==paletaY) {bolaDirecciónX =bolaDirecciónX; ballDirectionY =-ballDirectionY; }} // actualiza la posición de la bola ballX + =ballDirectionX; ballY + =ballDirectionY; // borra la posición anterior de la bola if (oldBallX! =ballX || oldBallY! =ballY) {matrix.drawPixel (oldBallX, oldBallY, matrix.Color (0,0,0)); } // dibuja la posición actual de la bola matrix.drawPixel (ballX, ballY, matrix.Color (150,150,0)); oldBallX =ballX; oldBallY =ballY;} // esta función comprueba la posición de la bola // para ver si se cruza con el 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 =verdadero; } devolver resultado;} 

Esquemas


Proceso de manufactura

  1. TinyML-Language Detector basado en Edge Impulse y Arduino
  2. Juego de giroscopio Arduino con MPU-6050
  3. Dados digitales Arduino
  4. Iron Man
  5. Encuéntrame
  6. Control del humidificador Arduino
  7. Sonda usando arduino y visualización en procesamiento IDE
  8. MobBob:Robot Arduino DIY controlado por un teléfono inteligente Android
  9. Luz de escritorio reactiva de audio Arduino
  10. Joystick de Arduino
  11. Podómetro (Arduino 101)