Desde que lo vi me enamoré de la idea de hacerme una PSX parecida para mí. Pero hay aspectos de éste montaje que me gustaría mejorar. Me gusta que mantenga la estructura de la carcasa de la PSX, por lo que es 100% reversible, la estética se mantiene perfecta y el acabado es elogiable. Lo que no me gusta y cambiaré será la gestión de la energía y del ventilador, e iré comentándolo a continuación.
GESTIÓN DE LA ENERGIA
Lo que no me gusta del proyecto del vídeo es la gestión de energía, ya que aunque controla mediante un pulsador en un circuito específico la entrada de corriente (además de la velocidad del ventilador y la intensidad de un led), el apagado debe realizarse primero por software y después mediante el pulsador de la PSX. Botón de encendido/apagado por software
Mi intención es que la PSX-pi (¿le dejamos este nombre?) se encienda con el pulsador, pero se apague correctamente también solo con el botón. Gracias al hilo "[TUTORIAL] CÓMO ENCENDER Y APAGAR TU RASPBERRY A TRAVÉS DE UN BOTÓN." de @MrBreaker, podemos implementar un botón de encendido y apagado desde el GPIO.
Adjunto el script funcionando para apagar con una pulsación corta, y resetear con pulsación de 3 segundos.
#!/usr/bin/python # shutdown/reboot(/power on) Raspberry Pi with pushbutton import RPi.GPIO as GPIO from subprocess import call from datetime import datetime import time # pushbutton connected to this GPIO pin, using pin 5 also has the benefit of # waking / powering up Raspberry Pi when button is pressed shutdownPin = 5 # if button pressed for at least this long then shut down. if less then reboot. rebootMinSeconds = 3 # button debounce time in seconds debounceSeconds = 0.01 GPIO.setmode(GPIO.BOARD) GPIO.setup(shutdownPin, GPIO.IN, pull_up_down=GPIO.PUD_UP) buttonPressedTime = None def buttonStateChanged(pin): global buttonPressedTime if not (GPIO.input(pin)): # button is down if buttonPressedTime is None: buttonPressedTime = datetime.now() else: # button is up if buttonPressedTime is not None: elapsed = (datetime.now() - buttonPressedTime).total_seconds() buttonPressedTime = None if elapsed >= rebootMinSeconds: # button pressed for more than specified time, reboot call(['shutdown', '-r', 'now'], shell=False) elif elapsed >= debounceSeconds: # button pressed for a shorter time, shutdown call(['shutdown', '-h', 'now'], shell=False) # subscribe to button presses GPIO.add_event_detect(shutdownPin, GPIO.BOTH, callback=buttonStateChanged) while True: # sleep to reduce unnecessary CPU usage time.sleep(5)La gestión del encendido y apagado mediante GPIO tiene la gran ventaja de que el apagado es correcto -no un corte de luz a la brava- y eso ayudará a mantener en forma nuestra rp3 y evitar que se corrompa nuestra SD. La única desventaja es que al darle energía –enchufarla a la corriente- se enciende sola, por lo que el botón ON solo funciona partiendo de la raspberry apagada por botón/software.
Botón de encendido por hardware
La alternativa por la que me he inclinado finalmente para solucionar este problema es por el switch Pololu #2808 https://www.pololu.com/product/2808. Este shitch -de pequeñísimas dimensiones- tienes la facultad de poder gestionarse tanto por switch como por señales halt. ¿Ésto que significa? Pues que podremos poner en marcha la raspberry con un simple clic en un pulsador, y que para cortar la corriente el Pololu espera una señal por parte de la raspberry como que ya está apagada. ¿Cómo se hace ésto? Vamos a verlo.
Primero os presento a Pololu. Como podéis ver es bien pequeñito. Viene sin soldar los pins, así que fueron los primeros en mi vida que he soldado. No es difícil pero requiere buena vista. Seguramente visto este proyecto las soldaduras se podrían hacer directamente a los cables. Pero en mi caso, como tuve que experimentar bastante, preferí soldar los pins. Pasamos a especificar que tenemos que conectar al Pololu.
1.- Conectaremos el positivo de la fuente de alimentación a un pin VIN y el negativo a un GND de su mismo lado.
2.- Conectaremos VOUT al pin 2 de la GPIO (Sí, vamos a alimentar la raspberry por el puerto GPIO). Conectaremos el GND del lado de VOUT al pin 9 del GPIO.
4.- Conectaremos el A y GND del mismo lado a un pulsado.
5.- Conectaremos el pin OFF del Pololu al GPIO pin 37
Con el punto 4 tendremos un pulsador que dará energía a la raspberry, y el Pololu no cortará la energía por mucho que volvamos a apretar el pulsador por mucho que accionemos el pulsador, ya que estará esperando una señal de la raspberry por el pin 3 (punto 5) para cortar corriente.
Por tanto necesitamos un pulsador de doble circuito, que cuando pulsemos accione por un lado el Pololu y por otro (y a la vez) mande una señal de apagado correcto a los GPIO 5 y 6. Por tanto necesitamos que funcione perfectamente el script de apagado que se comenta en la actualización 1, y oculto como spoiler.
Nos falta configurar que al apagarse correctamente la raspberry se mande una señal de halt al Pololu cuando acabe su shutdown, indicándole así que ya puede cortar la energía. Ésto es realmente sencillo una vez que se sabe, pero me dió bastantes dolores de cabeza descubrirlo. Modificaremos nuestro config.txt añadiendo al final del fichero la gestión de gpio-poweroff. Ésto por defecto efectúa una señal HIGH en el pin 37 una vez que se ha apagado correctamente la raspberry.
#GPIO Poweroff dtoverlay=gpio-poweroffSi habéis seguido todos los pasos hasta aquí os habréis dado cuenta de que tenemos dos pulsadores. Uno conectado al Pololu y otro conectado a la raspberry -el que controla el script de encendido/apagado-. Tranquilos, solo necesitamos un pulsador para circuito doble y solucionado. Fácil de encontrar en nuestra tienda de electrónica de referencia.
Así pues tenemos ya que al apretar el botón encenderemos el Pololu y éste a su vez a la raspberry, la señal que le llega a la raspberry por el segundo circuito del pulsador es ignorada al estar ésta apagada . Para apagar el sistema, el pulsador enviará una señal a la raspberry -que ejecutará el script- y se apagará, pero el Pololu ignorará la señal del pulsador y esperara el halt desde el GPIO pin 37. Una vez apagada la raspberry, el pin 37 cambiará de LOW a HIGH y el Pololu se apagará!
Led de encendido y led de actividad
Para sacar un led con la actividad es tan sencillo como añadir la siguiente línea a config.txt
dtoverlay=pi3-act-led,gpio=22Ésto hará que si al GPIO 22 (pin 15 en la Raspberry Pi 3) le conectamos un LED -con su correspondiente resistencia- podremos llevarnos el LED verde de actividad a donde queramos

Posteriormente lo mezclaremos con el de led de encendido (rojo) gracias al uso de un led RGB.
Alimentación
El proyecto del vídeo se alimenta de un transformador externo de 5V. Mi intención es -si el espacio me lo permite- mantener el transformador de 3A que tengo dentro de la PSX, y colocar a la PSX-pi un conector LEC320 C8 para que la estética externa no se diferencie de la original, y además se alimente con el cable original.
Por tanto modificamos el soporte para introducir el nuevo conector. Y nos haremos con una fuente de alimentación, lo más plana posible, para poder dejarla dentro de la PSX.
REFRIGERACIÓN
Es cierto que el proyecto original permite regular la velocidad del ventilador. En mi proyecto, gracias al hilo "CONTROL DEL VENTILADOR RPI3 (RPM SEGÚN TEMPERATURA)", implementaré la idea de poder tener un ventilador que ajuste su velocidad a la temperatura de la PSX. Lo podremos hacer de la siguiente manera:Con la nueva versión de la libreria wiringpi he necesitado modificar tu código para que funcione. He eliminado la variable GPIO, y la he sustituido por la llamada directa a la función. Queda de la siguiente manera:
Primero necesitamos tener actualizadas las librerías de wiringpi. Seguimos las instrucciones de su página web para comprobarlo (http://wiringpi.com/download-and-install/)
Después crearemos nuestro script, al que se le ha llamado como fancontrol.sh, con
sudo nano fancontrol.sh, y copiamos dentro el siguiente código:
sudo chmod +x fancontrol.shY lo añadiremos al cron, para que se ejecute en el arranque, mediante:
crontab -e Y AÑADIMOS AL FINAL DEL ARCHIVO @reboot /ruta/delscript/fancontrol.sh > /dev/null 2>&1Ya tenemos nuestra gestión del ventilador en marcha! Solo falta conectar a la GPIO el transistor y el ventilador tal como se especifica en "CONTROL DEL VENTILADOR RPI3 (RPM SEGÚN TEMPERATURA)"
MONTAJE
Evidentemente partimos de una Playstation, en concreto del modelo original. Yo, como no tenía ninguna, conseguí una por Wallapop. Gracias a retro-emulation.com podemos encontrar las piezas necesarias para adaptar la carcasa original de nuestra consola a las necesidades de la raspberry pi. Aquí podeis encontrar los ficheros a imprimir en 3D:Adaptación de la carcasa PSX a la Raspberry Pi 3
En mi caso le he encargado el trabajo a un miembro del foro, luzma, que vistos sus trabajos anteriores espero me entregue unas piezas de máxima calidad -y así ha sido, muy recomendable-.
Por desgracia las PSX europeas, o al menos el modelo que ha caído en mis manos, no tienen el interior como la americana de retro-emulation.com, además de que el cableado que he utilizado no se lo he comprado a ellos (porque es carísimo) así que lo compré en aliexpress y amazon y lo adapté. Así que hay alguna piezas que por desgracia no vamos a usar o debemos modificar a mano, ya que no dispongo de impresora 3D.
La dremel ha sido mi mejor amiga y compañera en este proyecto, que junto a la breadboard, han sido herramientas fundamentales para probar todo antes de conectarlo. Paso a comentar las piezas retocadas y las que no he utilizado de http://www.thingiverse.com/thing:2012518, y que por tanto os podéis ahorrar de fabricar. No hace falta que fabriquéis ni la base de la raspberry -que lleva el soporte del ventilador-, ni la pequeña pieza en forma de 'z' que se utiliza en el proyecto original para apoyar su PCB.
La caja para el lector de tarjetas que se atornilla en la parte trasera de la PSX necesita un buen cepillado con la dremel en una de sus esquinas para que una rueda dentada de la tapa de CD de la PSX no roce con ella. Y tendréis que retocar la parte trasera de la caja de conectores USB si no encontráis unos exactos a los que utiliza el proyecto original.
El conector eléctrico lo he recortado en la parte que va más interna de la PSX para hacer espacio a la fuente de alimentación y su agujero agrandado para acoger un enchufe de 220v. Para hacer ésto bien, montad primero la pieza, cerráis la PSX y con un rotulador indeleble marcáis todo el contorno cuadrado del espacio para el enchufe eléctrico. Y a darle a la dremel hasta hacer ese hueco exactamente de ese tamaño. Una vez hecho y con el conector nuevo puesto presentarlo en la caja y seguramente comprobareis que tenéis que hacer agujeros nuevos para los tornillos en la pieza impresa (recordad que dejaremos totalmente de serie la caja de la PSX, nada de hacerle más agujeros o romperla!)
Os recomiendo comprar los cables más pequeños que encontréis. Y con las fundas de los conectores más comedidos. Sobre todo el HDMI, con 20 o 30cm tenéis de sobra. Podeis orientaros por las medidas y tipo de cable que retro-emulation vende para comprar donde os vaya mejor cableado lo más similar posible (https://retro-emulation.com/shop/index. ... &id_lang=1) No hay demasiado espacio, así que unos cm de más en un cable os pueden dar un buen dolor de cabeza a la hora de cerrar la PSX, pero no es lo mismo tenerlos del conector de audio -delgado y muy flexible- que de HDMI. El tamaño aquí importa mucho!
El ventilador que he usado es uno de 50mm, la RP3 tiene 49mm entre sus agujeros de soporte, pero creo que podríais utilizar uno incluso más grande, ya que al final solo usé un agujero para fijar la RP3, ya que queda suficientemente atrapada entre el cableado y un tornillo. Además me permitió que pivotara para ir conectando los cables y poder acoger mejor el HDMI. Lo más importante es que el perfil del ventilador ha de ser mínimo (de 10mm o menos), porque de espacio en altura no vamos nada sobrados. Vigilad que el ventilador al girar no toque la parte inferior de la caja PSX ni la de la RP3. Suelen tener una parte protegida que impedirá que las aspan toquen algo, pero otra no. Para esa parte, si la escogéis para que vaya bajo la RP3 , os recomiendo poner una o dos arandelas de plástico -lo justo para que no rocen las aspas, recordad que no tenemos demasiado espacio-.
Para fuente de alimentación compré en amazon un transformador de 2.5a, el más barato y plano que encontré. Deberéis abrirlo y soldarlo al nuevo enchufe de la PSX-pi y a los cables que lleguen al Pololu.
Y por último, cuando compréis el cable extensor de microSD veréis que no cabe en la pieza impresa. Debéis sacarle la caja negra donde se ubica el lector para poder montarlo en la PSX-pi.
Nuestro objetivo es éste:

Si no me dejo nada, creo que lo he explicado todo más o menos. Os dejo aquí unas imágenes del montaje y otras en la página 2 de éste hilo, que seguramente valen más que mis explicaciones.
Esquema de montaje
Os adjunto un esquema de montaje de todo el cableado interior de la PSX.
Vídeos del resultado final
Ahí la tienes, en el primer arranque comprobando que todo funciona bien
https://www.youtube.com/watch?v=_I4270BPZxE
Y aquí ya acabada, yo en plan demo y mi hija poniendo la banda sonora
https://youtu.be/zkTGh-merL8
Lista de la compra:
- Playstation, en Wallapop :idea:
- Piezas 3D, descargar los ficheros de aquí (http://www.thingiverse.com/thing:2012518) y mandarlos a imprimir (la base de la raspberry y una pequeña pieza en z no son necesario imprimirlas). A mi me lo hizo un forero de aquí, luzma, y tiene su hilo en compra-venta viewtopic.php?f=61&t=1624&p=9568&hilit=luzma#p9567
- Pololu switch 2808 http://www.tme.eu/es/details/pololu-280 ... on/pololu/
- Conector de corriente http://www.tme.eu/es/details/4300.0098/ ... /schurter/
- Extensor para la microSD https://www.amazon.es/gp/product/B01C8C ... UTF8&psc=1
- Cargador de 2.5a https://www.amazon.es/gp/product/B01CSM ... UTF8&psc=1
- 4 cables USB AM/AH de 30cm (reciclé unos que tenía por casa)
- Ethernet Macho Hembra 30cm https://www.amazon.es/gp/product/B01326 ... UTF8&psc=1
- Cable alargador HDMI 30cm https://www.amazon.es/gp/product/B00QV3 ... UTF8&psc=1 -no encontré más pequeño, os recomiendo buscar uno de 0.30m-
- Cable de audio http://www.tme.eu/es/details/avk-184-05 ... bay/97111/
- Pulsador de doble circuito ( lo compré en una tienda de electrónica)
- Transistor 2N3904 ( lo compré en una tienda de electrónica)
- Led RGB, 1 resistencia de 100 y otra de 220 (Aproveche lo que me venia con la breadboard)
- Ventilador para PC, 0.20a, 50mm cuadrado y de 10mm de perfil. (reciclado de un PC viejo) El ventilador va atornillado a la caja PSX con un tornillo de la propia caja, pero necesitareis al menos un tornillo y un par de arandelas de plástico para fijar la raspberry al ventilador.
- Cableado y conectores fastom (yo aproveche los que tenia con un kit de una breadboard)
- Un par de bridas pequeñas.
Creo que no me dejo nada

Cualquier duda, aquí me tenéis para ayudaros. Y si queréis que os fabrique una por encargo, todo es hablarlo aunque lo divertido es que lo hagáis vosotros.
Y antes de acabar agradecer la ayuda del foro, sin el que no hubiera podido acabar este proyecto. Un saludo a todos!
+ INFO:
Gestión del POLOU desde Openlec por @Geralt17: link