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

Máquina de pinball controlada por Arduino

Componentes y suministros

Arduino Mega 2560
× 1
Pantalla LCD Adafruit de 2 pines
× 1
Fuente de alimentación de 24 V
× 1
Sensor de fuerza Adafruit
× 1
Conjunto de parachoques pop
× 1
Pop Bumper Switch
× 1
Interruptor de destino
× 1
Rollover Switch
× 1
Ensamblaje del flipper
× 1
Lámparas LED
× 1

Acerca de este proyecto

Máquina de pinball controlada por Arduino

La construcción de una máquina de pinball controlada por Arduino requería una combinación de habilidades de carpintería, mecánicas, electrónicas y de programación. Me tomó alrededor de seis meses de esfuerzo a tiempo parcial crear y fue lo más complicado que jamás he construido. Esto se debe principalmente a que no pude encontrar mucha información sobre cómo construir una máquina de pinball.

Este documento proporcionará una descripción de cómo se construyó esta máquina. Trataré de proporcionar suficientes referencias para que, si decides crear la tuya propia, te resulte más fácil que yo. Al mismo tiempo, no puedo enfatizar lo suficiente la necesidad de probar todo. Usé una pieza de madera contrachapada de repuesto para crear un prototipo de cada componente antes de instalarlo en la máquina real. Esto le ahorrará mucho dolor a largo plazo.

Como puede ver en la imagen, la máquina tiene un gabinete de madera y utiliza repuestos de máquinas de pinball disponibles comercialmente. La máquina está controlada por una sola placa Arduino Mega 2560. Si desea ver la máquina en acción, vaya a este enlace o mire aquí:

El caso

El estuche está hecho de madera contrachapada con revestimiento de roble comprada en la tienda para el hogar. Todas las dimensiones de este documento están en pulgadas. Los paneles frontal y posterior son de 20 H x 23 W. Los paneles laterales son 20H x 47L. Las piezas se cortaron con bordes en inglete y se unieron con un ensamblador de galletas y pegamento para madera. Los tornillos de bolsillo y el pegamento también habrían funcionado. La máquina va a sufrir mucho abuso, por lo que debe ser fuerte. Antes de unirlos, también corté una ranura de ¾ ”1 pulgada hacia arriba desde la parte inferior. No pegue el estante. Necesita flotar para permitir la expansión y contracción. El estante se utilizó para contener la fuente de alimentación principal y la fuente de alimentación para la luz LED decorativa montada debajo de la tapa. La superficie de juego mide 22 W x 42 L. Tenga en cuenta que es significativamente más corto que el gabinete. Esto me da alrededor de 3 pulgadas al frente para pasar cables hasta los botones del flipper y las luces LED. También deja espacio para el mecanismo del émbolo de bola. La superficie de juego simplemente descansa sobre unos pequeños bloques de madera atornillados a los lados aproximadamente 4 pulgadas por debajo de la parte superior de la caja. Para llegar a las entrañas de la máquina, simplemente abro la tapa, quito el campo de juego y le doy la vuelta.

El estuche y la superficie de juego están construidos en ángulo recto. El campo del juego lo proporcionan las piernas, como se muestra en esta vista lateral. Las máquinas de pinball pueden tener ángulos desde 1 hasta 7 grados. Cuanto mayor sea el ángulo, más rápido será el juego. Como no estaba seguro de qué ángulo iba a necesitar, diseñé las patas para que fueran ajustables. Las patas en sí son de madera y están disponibles en la mayoría de las tiendas para el hogar. Luego perforé un agujero de 30 cm (30 cm) de profundidad en el extremo de cada pata con una broca. En el extremo inferior utilicé un epoxi de dos componentes para insertar una tuerca en T de 3/8 de pulgada. Tenga cuidado de no poner pegamento en las roscas o donde bloqueará el orificio que hizo. Luego inserté una varilla de rosca de 12 pulgadas y 3/8 de pulgada en la pierna y enrosqué una tuerca en la varilla. Luego coloqué un pie nivelador en el extremo. El pie nivelador y las tuercas en T que tengo en los enlaces de abajo.

http://www.mscdirect.com/product/details/40610032

http://www.mscdirect.com/product/details/67300962

Las placas de montaje de las patas de la mesa simplemente se atornillaron al estante inferior y las patas se atornillaron. Para ajustar la altura de la máquina, simplemente afloje la tuerca y luego atornille la varilla roscada hacia adentro o hacia afuera. Luego, vuelva a apretar la tuerca para asegurarse de que la mesa permanezca segura.

En la imagen, notarás un cable eléctrico y un cable USB. El cable eléctrico proviene de una regleta que conecté a la parte posterior de la máquina. Todo se conecta allí, de modo que un interruptor enciende o apaga todo. El cable USB está ahí, por lo que puedo reprogramar la placa Arduino sin tener que quitar el campo de juego.

La tapa

El marco de la tapa está hecho de roble y tiene las mismas dimensiones que el gabinete. La parte superior y los lados tienen 1,5 pulgadas de ancho, mientras que la parte inferior tiene 5 pulgadas de ancho. El ancho adicional en la parte inferior se usa para ocultar el espacio entre el campo de juego y el gabinete. Se pasó una ranura por el borde interior de las piezas del marco para sujetar la cubierta de plexiglás. Usé plexiglás en lugar de vidrio porque es más liviano, más seguro y más fácil de cortar. La tapa se ensambló con tornillos de bolsillo. Hice esto para poder desarmarlo en caso de que alguna vez fuera necesario reemplazar el plexiglás. También monté una tira de luces LED de colores debajo de la tapa con fines decorativos. Finalmente, monté la tapa en la caja usando una bisagra de piano que empotré tanto en la tapa como en la caja.

Arduino

El Arduino Mega 2560 básicamente hace cuatro cosas. Determina cuándo se activan los interruptores, enciende o apaga las luces en consecuencia, realiza un seguimiento de la puntuación y muestra la puntuación y el número de bola en una pequeña pantalla LCD. La mayor parte del cableado es bastante simple. Por ejemplo, los objetivos están conectados a una de las entradas digitales de Arduino y al suelo. La entrada se configura mediante una declaración como se muestra a continuación.

pinMode (Pin_Number, INPUT_PULLUP)

Cuando el código detecta que la entrada ha cambiado de alta a baja, sabe que el objetivo ha sido golpeado y luego enciende la luz LED de pinball correspondiente.

La única complicación en esto es de los Pop Bumpers. Los interruptores de rollover y los objetivos utilizados en este juego obtienen su poder del Arduino. Los Pop Bumpers obtienen los suyos de una fuente de alimentación separada de 25 voltios, ya que necesitan más energía de la que Arduino puede suministrar. Los Pop Bumpers tienen un interruptor que los activa, pero no puedo leerlo directamente debido al alto voltaje. En consecuencia, primero envío la salida del interruptor Pop Bumper a un divisor de voltaje. Puede encontrar un ejemplo de un divisor de voltaje en el enlace a continuación.

Divisor de voltaje

Una vez a través del divisor de voltaje, el voltaje se reduce a 5 voltios y el Arduino puede manejarlo. Descubrí que obtenía menos lecturas falsas con estos si usaba las entradas analógicas, ya que los divisores de voltaje siempre parecen perder algo de corriente. Con las entradas analógicas, pude verificar que se excediera un umbral para poder separar fácilmente una señal del ruido.

Durante el juego, si todo un cierto tipo de dispositivo (objetivo, parachoques pop o rollovers) se había activado, programé el Arduino para que hiciera parpadear todas las luces de esos dispositivos y luego aumenté la puntuación para ellos.

También utilicé un pequeño sensor de fuerza para saber cuándo se había perdido una pelota. Esto me permite realizar un seguimiento de la cantidad de bolas jugadas y determinar cuándo termina el juego. Cuando termina el juego, todas las luces parpadean en secuencia.

Finalmente, utilicé Arduino para mostrar la puntuación y el número de bola.

El diagrama de cableado adjunto muestra cómo se conectó uno de cada uno de los componentes principales. El diagrama sería demasiado confuso si se mostraran todos.

Fuente de alimentación

Para alimentar los componentes del pinball, utilicé una fuente de alimentación de 24 voltios. Esta unidad tenía mucha potencia para las aletas y los compinches. Es un poco débil para los parachoques pop. Es posible que desee utilizar una fuente de alimentación más fuerte para estos. Si lo hace, tendrá que hacer sus propios divisores de voltaje, ya que solo pude encontrar los que tuvieran un máximo de 25 voltios. Puede encontrar información sobre cómo hacer un divisor de voltaje aquí.

En lugar de conectar todo directamente a la fuente de alimentación, pasé cables desde allí hasta un par de barras colectoras que monté en la parte inferior del campo de juego. Esto hizo que fuera mucho más fácil conectar los diferentes componentes. Puede ver una de las barras de bus en la segunda imagen en la sección Slingshot. Están disponibles en la tienda para el hogar en el departamento de electricidad.

Lanzador de bolas o émbolo

El lanzador de bolas o el émbolo se compró en el siguiente enlace

http://www.marcospecialties.com/pinball-parts/B-12445

Es necesario perforar un orificio en la parte frontal de la caja para que pase el émbolo. Luego se atornilla en el interior de la caja. Se debe tener mucho cuidado para asegurarse de que el émbolo esté correctamente alineado con el campo de juego. Coloque una regla en el campo de juego y marque el punto donde golpea el interior de la caja. Luego suba lo suficiente para que la mitad del émbolo tenga la misma altura que la mitad de la altura del pinball. (Los pinball tienen un tamaño de 1 y 1/16 pulgadas y están disponibles en Pinball).

Campo de juego

El campo de juego está hecho de madera contrachapada de abedul de ¼ de pulgada. Para que el juego sea más decorativo, compré una imagen del enlace de la Nasa a continuación.

http://hubblesite.org/gallery/printshop/ps35/

Primero rocié la madera contrachapada con adhesivo de contacto y luego lamí el póster. Luego le di la vuelta y lo recorté a la medida.

Aletas

Las aletas se compraron en el siguiente enlace.

http://www.pinballlife.com/index.php?p=product&id=172

Cuando compra la mayoría de los componentes de pinball, no suelen tener instrucciones útiles. La forma de cablear las aletas se muestra en la siguiente imagen. Proviene de este enlace.

Además del mecanismo de flipper, necesitará un bate de flipper, un interruptor de flipper y un botón.

Tirachinas

Puede encontrar un ensamblaje completo de tirachinas aquí. También necesitará alfileres y bandas elásticas. Puedes encontrarlos en la misma ubicación. También se muestra una imagen de la honda cuando se monta debajo. Debo señalar que se usó cable de calibre 16 para todos los componentes conectados a la fuente de alimentación de 24 voltios y se usó cable de calibre 22 para las conexiones a la placa Arduino.

La primera imagen también muestra algunos rieles de metal junto a los murciélagos de aletas. No pude encontrar un lugar para comprar los rieles, así que los hice. Usé un alambre de acero cromado que encontré en la tienda de artículos para el hogar. Se usaba para marcar el césped cuando se rociaba con insecticida. Corté y doblé el alambre. Luego hice agujeros en el campo de juego y pegué con epoxi los rieles en su lugar.


Parachoques Pop

Los conjuntos de parachoques pop se pueden comprar aquí. También necesitará interruptores y tapas. Los parachoques se instalan perforando tres orificios, dos para las varillas de soporte de metal y uno para el eje que activa el interruptor. Cuando una bola rueda hacia el disco blanco que se ve en la vista superior, empuja el eje hacia abajo. Esto activa el interruptor de la hoja, que luego activa el solenoide. Luego, el solenoide tira de un anillo de metal hacia abajo que envía la bola en la dirección opuesta.

Objetivos, interruptores de volcadura y luces

Los objetivos están disponibles en el enlace siguiente.

http://www.marcospecialties.com/pinball-parts/A-14691-5

Los interruptores y montajes de rollover se pueden encontrar a continuación.

http://www.actionpinball.com/parts.php?item=A-12687

Las lámparas que usé ya no se fabrican, pero los equivalentes se muestran a continuación.

http://www.actionpinball.com/parts.php?item=LED4555

También necesitará los soportes de lámpara que se muestran a continuación.

http://www.actionpinball.com/parts.php?item=077-5030-00

El cableado de todos estos es básicamente el mismo y se mencionó en la sección Arduino.

Resumen

Una vez que comience, sin duda encontrará otras campanas y silbidos que querrá agregar, pero esto debería ayudarlo a comenzar.

Código

  • Código de máquina Arduino Pinball
Código de máquina Pinball Arduino Arduino
Permite que Arduino controle el juego de una máquina de pinball hecha en casa
 const int TxPin =17; Puntuación larga =0; Long OldScore =0; objetivo largo =1; pop largo =1; rollo largo =10; int Targets [8]; int Rollos [3]; int Pops [4]; int Milli =10; int Sum =0; int Flash =100; int Ball =0; int i =0; int Disparo =0; int Lost =0; int Presión =1024; #include ; SoftwareSerial mySerial =SoftwareSerial (255, TxPin); void setup () {/ * Las palabras sin s son el valor obtenido al interactuar con un dispositivo. * Funciona con un seguimiento de las personas con las que se interactuó. * Este último es necesario para determinar cuándo se han alcanzado todos y el valor debe actualizarse * y las luces deben apagarse. * / pinMode (TxPin, SALIDA); escritura digital (TxPin, ALTA); mySerial.begin (9600); mySerial.write (12); // Borrar mySerial.write (17); // Enciende la luz de fondo // entradas de destino pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); pinMode (4, INPUT_PULLUP); pinMode (5, INPUT_PULLUP); pinMode (6, INPUT_PULLUP); pinMode (7, INPUT_PULLUP); pinMode (8, INPUT_PULLUP); pinMode (9, INPUT_PULLUP); // entradas de rollover pinMode (10, INPUT_PULLUP); pinMode (11, INPUT_PULLUP); pinMode (12, INPUT_PULLUP); // interruptor de disparo de bola inferior pinMode (15, INPUT_PULLUP); // interruptor de disparo de bola superior pinMode (16, INPUT_PULLUP); // salida lcd pinMode (17, SALIDA); // luces de destino, pinMode respectivo (32, SALIDA); pinMode (33, SALIDA); pinMode (34, SALIDA); pinMode (35, SALIDA); pinMode (36, SALIDA); pinMode (37, SALIDA); pinMode (38, SALIDA); pinMode (39, SALIDA); // luces de vuelco, pinMode respectivo (40, SALIDA); pinMode (41, SALIDA); pinMode (42, SALIDA); // pop luces de parachoques pinMode (50, SALIDA); pinMode (51, SALIDA); pinMode (52, SALIDA); pinMode (53, OUTPUT);} void loop () {// ponga su código principal aquí, para que se ejecute repetidamente:// Si se usa una resistencia desplegable, el pin de entrada será BAJO cuando el interruptor esté abierto y ALTO cuando el interruptor está cerrado. // comprobar si se alcanzó un objetivo // ****** Objetivos ***** for (int i =0; i <8; i ++) {if (digitalRead (i + 2) ==LOW) {/ / Objetivos activados por objetivo [i] =1; Puntaje =Puntaje + Objetivo; // enciende Target light digitalWrite (i + 32, HIGH); // demora para no obtener múltiples puntos por un golpe demora (Milli); descanso; }} Suma =0; para (int i =0; i <8; i ++) {Suma =Suma + Objetivos [i]; } if (Sum ==8) {// todos los objetivos encendidos, entonces parpadear y luego apagar. para (int j =0; j <3; j ++) {para (int i =0; i <8; i ++) {digitalWrite (i + 32, LOW); } retraso (Flash); para (int i =0; i <8; i ++) {digitalWrite (i + 32, HIGH); } retraso (Flash); } para (int i =0; i <8; i ++) {digitalWrite (i + 32, LOW); Objetivos [i] =0; } retraso (Flash); // Multiplicar el valor objetivo por 10 Objetivo =Objetivo * 5; // ir a Saltar; } // *********** Rollovers ********* for (int i =0; i <3; i ++) {if (digitalRead (i + 10) ==LOW) {// rollover activado Rolls [i] =1; Puntaje =Puntaje + Tirar; // enciende la luz de vuelco digitalWrite (i + 40, HIGH); // demora para no obtener múltiples puntos por un golpe demora (Milli); descanso; }} Suma =0; para (int i =0; i <3; i ++) {Sum =Sum + Rolls [i]; } if (Sum ==3) {// todos los rollovers encendidos, entonces parpadear y luego apagar. para (int j =0; j <3; j ++) {para (int i =0; i <3; i ++) {digitalWrite (i + 40, LOW); } retraso (Flash); para (int i =0; i <3; i ++) {digitalWrite (i + 40, HIGH); } retraso (Flash); } para (int i =0; i <3; i ++) {digitalWrite (i + 40, LOW); Rollos [i] =0; } retraso (Flash); // Multiplica la puntuación por 2 Puntuación =Puntuación * 2; Roll =Roll * 10; // ir a Saltar; } // ********** Pop Bumpers ********** for (int i =0; i <4; i ++) {if (analogRead (i)> 500) {/ / pop activada Pops [i] =1; Puntaje =Puntaje + Pop; // enciende la luz del parachoques digitalWrite (i + 50, HIGH); // demora para no obtener múltiples puntos por un golpe //mySerial.print(analogRead(i)); //mySerial.print (""); retraso (Milli); descanso; }} Suma =0; para (int i =0; i <4; i ++) {Sum =Sum + Pops [i]; } if (Sum ==4) {// todos los parachoques pop encendidos, entonces parpadear y luego apagar. para (int j =0; j <3; j ++) {para (int i =0; i <4; i ++) {digitalWrite (i + 50, LOW); } retraso (Flash); para (int i =0; i <4; i ++) {digitalWrite (i + 50, HIGH); } retraso (Flash); } para (int i =0; i <4; i ++) {digitalWrite (i + 50, LOW); Pops [i] =0; } retraso (Flash); // Multiplica el valor objetivo por 10 Pop =Pop * 2; // ir a Saltar; } Saltar:// Determinar el número de la bola if (digitalRead (15) ==LOW) {// la bola golpea el interruptor del callejón inferior // si aún no lo ha hecho, aumentar la bola if (Shot ==0) {// Establecer perdida =0 ya que no en la almohadilla de presión Lost =0; Presión =analogRead (7) + 20; // establece OldScore para reimprimir el valor de la bola en la pantalla LCD OldScore =-1; Bola =Bola + 1; si (Bola ==6) {Bola =1; Puntuación =0; Objetivo =1; Rollo =1; Pop =1; } Disparo =1; }} if (digitalRead (16) ==LOW) {// la bola golpea el interruptor del callejón inferior // si aún no lo ha hecho, aumente la bola if (Shot ==0) {// Set Lost =0 ya que no está en la almohadilla de presión Lost =0; Presión =analogRead (7) + 15; // establece OldScore para reimprimir el valor de la bola en la pantalla LCD OldScore =-1; Bola =Bola + 1; si (Bola ==6) {Bola =1; Puntuación =0; Objetivo =1; Rollo =1; Pop =1; } Disparo =1; }} if (analogRead (7)> ​​Presión) {// bola en la almohadilla de presión Shot =0; if (Lost ==0) {//mySerial.print(analogRead(7)); // Puntaje =Puntaje + 100; Perdido =1; if (Ball ==5) {// Game Over // parpadea y apaga. para (int j =0; j <3; j ++) {para (int i =0; i <3; i ++) {digitalWrite (i + 40, LOW); } retraso (Flash); para (int i =0; i <3; i ++) {digitalWrite (i + 40, HIGH); } retraso (Flash); } para (int i =0; i <3; i ++) {digitalWrite (i + 40, LOW); Rollos [i] =0; } // flashear los parachoques pop y luego apagar for (int j =0; j <3; j ++) {for (int i =0; i <4; i ++) {digitalWrite (i + 50, LOW); } retraso (Flash); para (int i =0; i <4; i ++) {digitalWrite (i + 50, HIGH); } retraso (Flash); } para (int i =0; i <4; i ++) {digitalWrite (i + 50, LOW); Pops [i] =0; } // Flash Targets y luego apagar. para (int j =0; j <3; j ++) {para (int i =0; i <8; i ++) {digitalWrite (i + 32, LOW); } retraso (Flash); para (int i =0; i <8; i ++) {digitalWrite (i + 32, HIGH); } retraso (Flash); } para (int i =0; i <8; i ++) {digitalWrite (i + 32, LOW); Objetivos [i] =0; } mySerial.write (12); // Clear delay (5); // Retraso requerido mySerial.print (Score); // Primera línea mySerial.write (13); // Formulario de alimentación mySerial.print ("Game Over !!!"); // Segunda línea}}} // imprimir en LCD if (Score! =OldScore) {mySerial.write (12); // Clear delay (5); // Retraso requerido //mySerial.print(analogRead(7)); mySerial.print (Puntuación); // Primera línea mySerial.write (13); // Formulario de alimentación mySerial.print ("Ball ="); // Segunda línea mySerial.print (Ball); OldScore =Puntuación; }} 

Esquemas


Proceso de manufactura

  1. Interruptor de alimentación de CA controlado por SMS de Raspberry Pi / Hologram
  2. Robot Raspberry Pi controlado por Bluetooth
  3. Luz de mesa interactiva controlada por gestos
  4. Máquina de LEVITACIÓN ULTRASÓNICA usando ARDUINO
  5. LED controlados por Alexa a través de Raspberry Pi
  6. Coche RC controlado por joystick
  7. Brazo robótico controlado por Nunchuk (con Arduino)
  8. Manipulador de interruptor de luz inalámbrico
  9. Robot controlado por voz
  10. Arduino Apple Watch
  11. Robot de piano controlado por Arduino:PiBot