Retroproyecto: Sega Mega Drive Reconvertida II

Hace unos días, os escribiamos sobre reconvertir una vieja Sega Mega Drive, con hardware actual usando una Raspberry Pi y Retropie para poder emular distintos sitemas. En el anterior artículo, presentabamos los distintos materiales necesarios y además configurabamos el software de la Raspberry Pi; instalando Retropie.

En este artículo, vamos a pasar a utilizar los botones e interruptores de la Mega Drive para darle funcionalidades distintas dentro de la Raspberry pi. En nuestro caso, vamos a utilizar el interruptor y el botón de reset. El primero de ellos para dar o quitar la corriente a la raspberry Pi, y el segundo muchos pensaran que se pueden usar los pines de la Raspberry Pi que traen para resetear el sistema completamente; pero no es lo que buscamos. Lo que buscamos es cerrar el proceso de emulación, para poder volver al menú. Esto lo veremos en este artículo.

En primer lugar, vamos a mostrar una imagen de los controles que queremos utilizar en la Mega Drive (En nuestro caso es la Mega Drive I; si tienes la mega Drive II puede que cambie). Por ahora solo usaremos el interruptor, y el botón de reset.

botonesmegapi

Además de estos controles también utilizaremos el led que viene en la mega drive, para poder saber cuando esta encendida y cuando no y por último, uno de los aspectos importantes a la hora de cualquier sistema de computación (ordenador, raspberry, móvil) es que el calor que se genera a la hora de su funcionamiento es poder disiparlo. Para ello, utilizaremos un pequeño ventilador.

Tras ver todo lo que vamos a hacer en este artículo, vamos a pasar a la acción. Aunque ya en el primer artículo pusimos los materiales necesarios, en este caso vamos a mostrar la lista más concretamente de lo que utilizaremos en este apartado:

Una vez vistos los componentes necesarios, vamos a pasar al montaje. En primer lugar, es importante saber como conectar todo esto a la Raspberry Pi; que utilizaremos los pines que trae esta; sin embargo, tenemos que tener mucho cuidado a la hora de utilizarlos ya que si no colocamos los cables correctamente ni respetamos el voltaje, podemos dejar la Raspberry Pi inutilizada. Por lo que recomendamos siempre seguir las instrucciones del fabricante (raspberry PI).

Vamos a mostrar descripción de los pines de la Rasperry Pi Modelos B (Rasberry Pi B+, 2,3 y 3B+); si tienes otro modelo, es mejor comprobarlo.

rpipinoutRasperry Pi A+/B+,2,3,3B+ Pinout; Fuente:Rasperrypi.org

En la imagen anterior, vemos los pines de la rasperrry Pi y vemos que algunos pines dan 5V y otros 3.3V. Es muy importante saber que los pines GPIO de la Raspberry Pi funcionan a 3.3V por lo que hay que utilizar dicho voltaje para no dañar la placa. Los pines que dan 5V, los utilizaremos la alimentar el ventilador que funciona a dicho voltaje. Tras ver esto, vamos a pasar a ver el montaje que vamos a realizar.

Como vemos en la anterior imagen, tenemos una serie de componentes conectados a la Raspberry PI. En primer lugar, es importante conectar los pines que hemos indicado y que podemos comprobar en la anterior figura. Ahora vamos a comenzar a explicar cada uno de los componentes que hemos usado. Podemos comprobar que hemos conectado al pin de 5V y a la tierra el ventilador (hemos obviado la parte de conexión al ventilador por simplicidad en el dibujo); es importante que el cable rojo corresponda al rojo del ventilador (+) y el negro a la tierra (-).

Una vez colocado el ventilador, vamos a pasar al led de la mega drive. Como podemos comprobar en el dibujo, hemos conectado del Pin de 3.3v a una resistencia de 220Ohmios (necesaria para proteger el led). Tras esto, conectamos al led junto a la correspondiente tierra. Es importante que conectemos el positivo con positivo y negativo con negativo ya que sino el led no funcionaria. En este caso hemos usado 3.3V y es importante que sea dicho voltaje para no quemar el led.

Por último, y no por ello menos importante, vamos a conectar el pulsador que hara de reset. Como veis la posición en la breadboard es importante ya que deberá quedar justo debajo del botón de reset para que pueda ser pulsado. Vemos como en esta parte conectamos el pin de 3.3V a un pulsador y seguidamente una resistencia de 1KOhmio (necesario para evitar falsos positivos y para proteger la placa); además, de conectar esta resistencia al pin GPIO18 (es importante de que este conectado a 3.3V y no a 5 ya que de lo contrario podemos romper la raspberry Pi).

Una vez hecho el montaje, vamos a pasar a la programación del botón. Ya que tenemos que enseñar a la Raspberry Pi, que hacer cuando se pulse dicho botón. Para ello, tenemos que ser capaces de conectarnos a través de una consola a la Raspberry Pi. Lo cual puede hacerse de dos formas. La primera, quitando emulation station desde el menú; O también conectandonos por ssh (hay que activarlo a través de Raspi-config).

Una vez conectado en una consola, vamos a pasar a instalar una serie de dependencias necesarias para poder programar dicho botón; entre ellas el interprete python y las correspondientes librerías. Seguidamente ponemos las ordenes bash para instalarlas:

sudo apt-get install python-dev python-rpi.gpio

Esto instalara el interprete python y las dependencias para poder utilizar las librerías necesarias para usar las GPIO desde python. Aunque normalmente ya vienen preinstaladas en Retropie ya que se basa en Raspbian y suele venir ya instaladas dichas dependencias. Una vez instaladas estas dependencias, vamos a crear 2 archivos. El primero, será un script bash que buscará los procesos del emulador (retroarch y/o mame4all) y los cerrará; y el segundo fichero sera un script python que creará una interrupción que ejecutará el anterior script cada vez que se pulse el botón.

Comenzaremos por el script bash; este script simplemente buscara los procesos de retroarch (los que ejecutan la emulación) y los del emulador mame (mame4all) y los cerrará. Es importante saber, que este botón no debería ser pulsado cuando se esta guardando el estado o cargando ya que podría dejar los datos corruptos. Seguidamente mostramos el script bash.

#!/bin/bash
# Terminate any emulatorcall!
# This works just for RetroPie!
ps -ef | grep 'retroarch' | grep -v grep | awk '{print $2}' | xargs -r kill -9
ps -ef | grep 'mame4all' | grep -v grep | awk '{print $2}' | xargs -r kill -9

Guardaremos el anterior script con el nombre de fichero exitgame.sh y le daremos permisos de lectura y ejecución.

 chmod +x exitgame.sh

Una vez tenemos este fichero, vamos a crear el script python que nos permitirá llamar al anterior script cada vez que se pulse el botón de reset. Seguidamente dejamos el script Python:

import RPi.GPIO as GPIO
import os
import time
 
resetbtn=23
 
GPIO.setmode(GPIO.BOARD)
GPIO.setup(resetbtn,GPIO.IN,pull_up_down=GPIO.PUD_DOWN)
 
 
def exit_emulator(channel):
        os.system('/home/pi/exitgame.sh')
 
GPIO.add_event_detect(resetbtn,GPIO.FALLING,callback = exit_emulator, bouncetime=1000)
print('Initiated Button Python GPIO Controller')
while True:
        time.sleep(5)

Como vemos el el código cada vez que se pulsa el botón conectado al pin 23 (GPIO23) nos llamará a la función que llamará al script bash. Este código lo almacenaremos con el nombre de buttonpython.py y lo almacenaremos el el directorio home del usuario pi ( /home/pi). Podemos probar ahora ejecutar este script con la orden python.

python buttonpython.py

Tras ejecutarlo y poner cualquier juego emulado, pulsando el botón reset, se saldrá de la emulación y saldrá del juego. Sin embargo, la ejecución del script continua hasta que pulsemos ctrl+c para apagarlo. Es por esto, que necesitamos que ejecutar este script en segundo plano y al arrancar el sistema. Por lo que vamos a automatizar su ejecución añadiendo la orden al fichero /etc/rc.local es importante guardar este fichero y poner correctamente la orden ya que si no la raspberry Pi no arrancará correctamente. El contenido que tenemos que añadir es:

# Python GPIO Reset Button
 
python /home/pi/buttonpython.py &;
 
exit 0

En este caso se ejecuta el script python en segundo plano (de ahí el &) para que se este ejecutando todo el rato y nos permita resetear los juegos cuando se esten ejecutando.

Con esto ya hemos terminado este primer montaje de la Mega Drive reconvertida. Seguiremos proximamente con el montaje del interruptor y con el montaje del resto de componentes. Esperemos que os este gustando esta serie de artículos y cualquier duda, podeis escribir un comentario.

Be the first to comment on "Retroproyecto: Sega Mega Drive Reconvertida II"

Deja un comentario.

Tu dirección de correo no será publicada.


*


Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.