[RASPBERRY-PI] Réaliser une Console Portable avec une Framboise et des Legos


Hello amis Rétro-Gamers,

Il y a quelques temps de cela, nous vous avions proposé un article pour réaliser une box rétro-gaming avec une framboise
Et bien aujourd’hui nous avons décidé d'aller plus loin en vous guidant dans la réalisation de votre propre console portable (CPOS). 
Ayant upgradé ma box avec un RPI2 je ne savais plus quoi faire de mon RPI B+
Ce sont quelques projets comme la GAMEBUINO ou bien encore celui de la Team CROS qui m'ont donné l'envie de me lancer dans la réalisation d'une console portable en mode "Home Made". 
Vous l'aurez compris cette machine sera animée par mon RPI B+, ne disposant pas d'une imprimante 3D, le boitier sera réalisé avec ces fameuses petites briques que tout le monde connait! :)

Rappel:
Avant de commencer, ce tutoriel ne va pas détailler toute la procédure et certaines notions de base sont nécessaires, pour cela vous pouvez vous aider à notre précédent article: 
http://www.open-consoles-news.com/2014/10/raspberry-pi-realiser-une-retro-gaming.html

  • Achats des Prérequis & Outillage

Pour vos achats, vous trouverez tout ce qu'il vous faut sur les sites de référence suivants:

- http://www.modmypi.com/
- http://www.amazon.fr/

Ce qu'il vous faut:

- Un Raspberry PI B+, de préférence prenez un PI 2 qui offre beaucoup plus de puissance.
- Des dissipateurs thermiques (pour éviter la surchauffe)
- Un écran PI TFT 2.8 (assemblé) + un cable ruban
- Une alimentation 2A
- Une carte Micro-SD (16GO ou +, class 10):
- Une manette générique snes (ici un lot de 2)
- Une bombe de peinture
- Beaucoup de lego... (voir le récapitulatif dans le partie montage) 
http://shop.lego.com/en-FR/Pick-A-Brick-ByTheme

Prévoir également:

- Un câble réseau (le paramétrage se fera principalement en SSH).
- Un clavier USB (pour le reste du paramétrage)
- Un cutter / Scalpel
- Un fer à souder
- Une Dremel (si possible pour faciliter les découpes)
- De la pâte à fixe

  • Préparation du PI

    • Installation RetroPie/ES 2.6

Récupérez l'image système ici, puis préparez votre carte MicroSD.
(cf: Téléchargement / Installation).

Image RetroPie version 2.6: RPI1 / RPI2

A partir de là, la plus part des opérations se feront en SSH, par contre il est préférable de brancher également un clavier sur votre PI (pour certaines opérations). 
Nous utiliserons principalement Putty pour les connexions SSH et WinSCP pour modifier les fichiers du PI via le réseau.

Une fois le système installé, il vous suffit de brancher votre câble réseau, votre clavier et pour finir votre alimentation, le PI doit démarrer. 

Récupérez l'adresse IP de votre PI et connectez vous. 
Par défaut le hostname est retropie, pour le vérifier:

> ping retropie

Paramétrage avec la commande:

$ sudo raspi-config

Dans le menu “Advanced Options”:

hostname -> donnez un nom à votre machine pour qu'elle soit plus facilement repérable sur votre réseau
Expand Filesystem -> étendre la partition pour prendre toute la place disponible sur votre carte MicroSD

Redémarrez votre système et reconnectez vous.

Pour faciliter les choses nous allons donner certains droits à l'utilisateur pi sur plusieurs fichiers :

$ sudo chown pi:pi -R /opt/retropie/

Pour le moment nous ne configurerons qu'un seul système à savoir la NES. Dans un premier temps il vous faut donc récupérer des roms, pour cela vous pouvez utiliser notre script de synchronization des bestsets:
http://www.open-consoles.com/t8459-synchroniser-les-bestsets-open-consoles-sur-votre-pi

(voir la procédure, sinon si vous disposez déjà de roms, vous pouvez les copier directement dans le répertoire /home/pi/Retropie/roms/nes/)
Au prochain démarrage du PI le système devrait être disponible dans ES.
Si ce n'est pas le cas il faut vérifier le fichier /home/pi/.emulationstation/es_systems.cfg

Configurez emulationstation avec les touches suivantes de votre clavier:
UP = UP, DOWN = DOWN, LEFT = LEFT, RIGHT = RIGHT, A = X, B = Z, START = 1, SELECT = 5, TRIGGER LEFT = LEFTALT, TRIGGER RIGHT = LEFTCTRL

    • PITFT 2.8"

Cet écran se branche directement sur les ports GPIO du RPI. J'ai opté pour un écran déjà assemblé car sinon il est nécessaire de jouer du fer à souder pour monter deux headers sur l'appareil.



Header 1 : pour brancher l'écran à votre RPI
Header 2 : pour accéder aux ports GPIO libres du RPI (contrôles manette)

Plus d'informations dans le guide d'installation:
https://learn.adafruit.com/downloads/pdf/adafruit-pitft-28-inch-resistive-touchscreen-display-raspberry-pi.pdf

Dans mon cas l'installation est relativement simple il suffit de placer le PITFT sur le raspberry (éteint).

- Paramétrage Software:

Allumez le PI et connectez vous en SSH pour exécuter la commande:

$ sudo raspi-config

Dans le menu “Advanced Options”:

disable overscan -> Désactiver l'overscan
enable Device Tree -> Activer le Device Tree
enable SPI -> Activer SPI (SPI (load SPI kernel module by default))
force audio through 3.5mm jack -> Activer la sortie Audio vers la prise jack

Redémarrez votre PI puis se reconnecter en SSH pour exécuter la commande suivante qui mettra à jour les dépendances:

$ sudo apt-get update 

Installation de l'écran (Download & Install Kernel)

$ curl -SLs https://apt.adafruit.com/add | sudo bash
$ sudo apt-get install -y adafruit-pitft-helper
$ sudo adafruit-pitft-helper -t 28r

Dans le fichier /boot/config.txt, ajoutez les lignes suivantes avec la commande:

$ sudo nano /boot/config.txt

disable_overscan=1
hdmi_force_hotplug=1
hdmi_cvt=320 240 60 1 0 0 0
hdmi_group=1
hdmi_mode=87
gpu_mem=44
disable_audio_dither=1
overscan_scale=1
dtparam=spi=on

[pi1]
device_tree=bcm2708-rpi-b-plus.dtb
[pi2]
device_tree=bcm2709-rpi-2-b.dtb
[all]
dtparam=spi=on
dtparam=i2c1=on
dtparam=i2c_arm=on
dtoverlay=pitft28r,rotate=90,speed=80000000,fps=60

Un peu d'overcloking avec les lignes suivantes:

arm_freq=950
core_freq=250
sdram_freq=450
over_voltage=6

Tapez la commande ci-dessous pour redémarrer votre pi:

$ sudo reboot

L'écran doit être noir. 
En SSH, exécutez la commande suivante (Map console 1 to framebuffer 1):

$ con2fbmap 1 1

Sur votre PI, appuyez sur la touche F4 de votre clavier pour sortir de ES, le mode console doit apparaître à l'écran.

L'écran ne prenant pas en charge l'OpenGL, nous allons installer FBCP qui copie la sortie vidéo HDMI(0) vers l'écran PI TFT(1).

Ouvrez une connexion SSH et suivez la procédure ci-dessous.
Créez un répertoire temporaire:

$ mkdir ~/tmp
$ cd ~/tmp

Compilation et Installation de FBCP:

$ sudo apt-get install cmake
$ git clone https://github.com/tasanakorn/rpi-fbcp
$ cd rpi-fbcp/
$ mkdir build
$ cd build/
$ cmake ..
$ make
$ sudo install fbcp /usr/local/bin/fbcp

Pour tester FBCP:

$ /usr/local/bin/fbcp &

Avec votre clavier, lancez ES sur le PI:

$ emulationstation

L'interface de ES doit apparaître sur l'écran PITFT.

Plus d'informations sur le GitHub du projet: https://github.com/notro/fbtft/wiki/Framebuffer-use
First Test!

- Installation de scripts additionnels:

Pour simplifier certains choses j'ai créé plusieurs scripts. Ils sont disponibles ici:
https://github.com/frthery/ES_RetroPie/tree/master/scripts

En SSH, créer sur votre PI un répertoire scripts:

$ mkdir ~/scripts
$ cd ~/scripts

Copiez les scripts:

$ wget https://raw.githubusercontent.com/frthery/ES_RetroPie/master/scripts/esstart.sh
$ wget https://raw.githubusercontent.com/frthery/ES_RetroPie/master/scripts/esstop.sh
$ wget https://raw.githubusercontent.com/frthery/ES_RetroPie/master/scripts/killfbcp.sh

Donner les droits en exécution:

$ sudo chmod 755 *.sh

Dans le fichier ~/.bashrc nous allons ajouter les lignes suivantes en dessous de # some more ls aliases avec la commande:

$ sudo nano ~/.bashrc

alias esstart='~/scripts/esstart.sh'
alias esstop='~/scripts/esstop.sh'
alias killfbcp='~/scripts/killfbcp.sh' 

Ces alias vont nous permettre:

esstart -> démarrer FBCP et ES. Puis kill de FBCP à la sortie de ES (retour mode console)
esstop -> arrêter ES et kill de FBCP (retour mode console)
killfbcp -> kill de FBCP et retour mode console

Pour lancer esstart au démarrage de votre RPI nous allons modifier le fichier /etc/profile et remplacer la ligne:

[ -n "${SSH_CONNECTION}" ] || emulationstation
par:
[ -n "${SSH_CONNECTION}" ] || /home/pi/scripts/esstart.sh

Ce qui aura pour effet de lancer FBCP et ES au démarrage du RPI, et de revenir au mode console à la sortie de ES.

Modification du script runcommand.sh pour que ES ne switch pas de mode video au lancement des jeux:

sudo nano /opt/retropie/supplementary/runcommand/runcommand.sh

Ajoutez les lignes suivantes au début de la méthode get_mode:

mode_new = "DMT-87"
return

TIPS: Changer la font du mode console

Exécutez la commande suivante:

$ sudo dpkg-reconfigure console-setup
Sélectionnez "UTF-8", "Guess optimal character set", "Terminus" and "6x12 (framebuffer only)."

TIPS: Changer la font dans emulationstation

Éditez le fichier suivant:

$ sudo nano /etc/emulationstation/themes/simple/simple.xml
Se positionner sur l'élément gamelist et changez la valeur de primaryColor à 000000 et fontSize à 0.05
Sauvegardez le fichier et redémarrez votre RPI.

    • Les Contrôles

- Montage du câble
source: learn.adafruit.com

Table de Mappage:

Pour le câblage il faut découper l'extrémité de la nappe et ensuite dénuder les fils qui nous intéressent (voir table de mappage). Personnellement j'ai regroupé et marqué tous les fils pour mieux me repérer.

Le résultat du câblage

- Préparation de la manette

Ce qu'il faut faire:
- Démonter la manette générique



- Dessouder le câble d'origine de la PCB



- Découper la PCB comme ci-dessous (cutter), puis grattez la PCB pour faire apparaître le circuit et permettre la réalisation des soudures. (marqueurs rouges)


- Souder le câble sur la PCB en respectant la table de mappage au dessus. 

Attention! il s'agit certainement de la phase la plus délicate. En effet au niveau de vos soudure il faut bien faire attention à ce quelles ne gênent pas les contactes des contrôles.

Il ne vous reste plus qu'à installer le câble sur l'écran PITFT puis le reconnecter sur votre RPI.

- Software

Nous utiliserons retrogame, un outil permettant de mapper les actions sur les ports GPIO par des actions clavier.

Ouvrez une connexion SSH, et suivez la procédure ci-dessous.
Désactivation des options:

$ sudo raspi-config

Dans le menu “Advanced Options”:

disable serial -> Désactiver le serial
disable I2C -> Désactiver I2C

Récupérez retrogame:

$ cd ~/tmp
$ git clone https://github.com/adafruit/Adafruit-Retrogame
$ cd Adafruit-Retrogame

Éditez le fichier retrogame.c et modifiez les valeurs comme ci-dessous:

ioStandard[] = {
// This pin/key table is used when the PiTFT isn't found
// (using HDMI or composite instead), as with our original
// retro gaming guide.
// Input   Output (from /usr/include/linux/input.h)
{  2,     KEY_LEFT     },   // Joystick (4 pins)
{  3,     KEY_RIGHT     },
{  17,    KEY_UP       },
{  4,     KEY_DOWN     },
{  27,    KEY_X },   // A/Fire/jump/primary
{  22,    KEY_Z   },   // B/Bomb/secondary
{  14,    KEY_LEFTALT },   // X
{  15,    KEY_LEFTCTRL },   // Y
{  18,    KEY_5 },   // Credit
{  23,    KEY_1   },   // Start 1P
// For credit/start/etc., use USB keyboard or add more buttons.
{  -1,     -1           } }; // END OF LIST, DO NOT CHANGE

Pour mapper la touche esc sur la combinaison de touches ex: SELECT+START (pratique pour sortir des émulateurs), il faut modifier la ligne:

const unsigned long vulcanMask = (1L << 8) | (1L << 9);

Compilation et installation:

$ make retrogame
$ sudo mv retrogame /usr/local/bin

Pour que retrogame démarre en même temps que le PI, ajoutez la ligne suivante dans le fichier /etc/rc.local (avant le exit 0):

$ /usr/local/bin/retrogame &

Création d'une règle, pour que retrogame soit reconnu comme un clavier par EmulationStation:

$ sudo nano /etc/udev/rules.d/10-retrogame.rules

Ajoutez la ligne suivante:

SUBSYSTEM=="input", ATTRS{name}=="retrogame", ENV{ID_INPUT_KEYBOARD}="1"

Voila il  ne vous reste plus qu'à redémarrer votre PI et tester si vos contrôles sont fonctionnels (Menu ES).
Layout et correspondance des touches

Configuration de retroarch, pour cela il faut éditer le fichier /opt/retropie/all/retroarch.cfg avec la configuration ci dessous:

input_enable_hotkey = "num5"
input_exit_emulator = "num1"

input_player1_select = "num5"
input_player1_start = "num1"
input_player1_up = "up"
input_player1_down = "down"
input_player1_left = "left"
input_player1_right = "right"
input_player1_a = "x"
input_player1_b = "z"
input_player1_x = "alt"
input_player1_y = "ctrl"
input_player1_l = "nul"
input_player1_r = "nul"
input_player1_l2 = "nul"
input_player1_r2 = "nul"


  • Montage du Boitier Lego

Passons maintenant à la construction du boitier. Certainement l'étape la plus sympa :)
Place au Montage!
Légende:
Formes: P (pièce plate), PL (pièce plate lisse), B (brique)
 Couleurs: (N) noir, (G) gris, (R) rouge
Montage Etape 1
Etape Montage 2
Etape Montage 3
Etape Montage 4
Etape Montage 5 
Etape Montage 6
Etape Montage 7
Etape Montage 8

Pour une meilleure finition, j'ai décidé après coup d'ajouter une barre en dessous de l'écran (visible sur les photos plus bas). 

Pour cela il vous faut: 
P(R) 1x1 = 2
PL(R) 1x3 = 2
PL(R) 1x4 = 2
PL(R) 1x6 = 1
PL(R) 1x8 = 2

Récapitulatif des pièces:

- Fabrication du Panel de Contrôles:
Attention! Il s'agit d'une étape délicate du projet.

Pour réaliser le panel, nous utiliserons 2 plaques Lego de 6x12

Dans un premier temps nous allons enlever les tétons qui dépassent à l'aide d'un cutter (attention aux doigts) en conservant uniquement une ligne en haut (pour le contour de l'écran). Une fois l'opération terminée un petit ponçage léger pour obtenir une surface aussi lisse que possible.
Pour la disposition des touches j'ai créé un patron. Il suffit d’assembler les deux plaques avec deux pièces Lego et de coller le patron au scotch, puis un coup de peinture pour imprimer l'emplacement des contrôles. 

Deux plaques Lego 6x12 + Patron

J'ai ensuite découpé des petits morceaux de scotch pour délimiter proprement la croix et ainsi obtenir une découpe la plus nette possible. Passage à l'étape la plus délicate le découpage à la Dermel (croix, select + start) et à la perceuse avec un foret de 10mm pour les emplacements des boutons. Pour fignoler le tout vous pouvez utiliser une lime à ongle.

Résultat après découpage et peinture

Maintenant nous allons ajouter dans le boitier quelques pièces de Legos supplémentaires pour surélever et fixer les 3 PCB:

B(N)1x3 = 4
PL(R)1x3 = 2
B(N)1x4 = 12
PL(R)1x4 = 2
PL(R)2x4 = 2

Pour finir, fixez les PCB sur les supports à l'aide de pâte à fixe, plusieurs essais seront nécessaires pour que les contrôles se positionnent parfaitement dans les emplacements.

Contrôles en place!

Tout premier Test des contrôles!

- Le Résultat Final en photos:















En Mode Mini Ordinateur

  • Pour aller plus loin

- Ajout d'une batterie

Le choix le plus simple consiste à utiliser une batterie externe: 




L'avantage de cette batterie c'est qu'elle est utilisable en pleine charge. Elle peut donc jouer le rôle d'onduleur en cas de coupure de courant.

Sinon vous pouvez monter une batterie grâce aux instructions disponibles ici:
https://learn.adafruit.com/pocket-pigrrl/powerboost-1000c

Pour cela il vous faudra un PowerBoost que l'on peut trouver sur le site adafruit.

# UPDATE #
Ci dessous la procédure de mise en place de la batterie pour rendre notre pi-LegoBoy complètement autonome.

Pour ce faire, il vous faut les pièces suivantes disponibles sur le site Adafruit:
- PowerBoost 1000c 
- Batterie 3.7V 2500mAh 
- Slide Switch 
Remarque: L'avantage du PowerBoost 1000c c'est qu'il peut être rechargé en même temps que la console est allumée.

Les pièces dont vous aurez besoin
Création d'un compartiment pour loger la batterie et le PowerBoost
L'assemblage du système est relativement simple:
- Soudez deux fils sur le slide switch
- Soudez les extrémités sur les PIN EN et GND du PowerBoost
- Branchez la batterie, le voyant bleu de la carte doit s'allumer, avant de continuer débranchez la batterie et conservé le switch en position OFF (voyant éteint)
- Soudez le fil #2 de la nappe IDE du PITFT (blanc #1) sur la PIN (+) du PowerBoost et le fil #6 sur la PIN (-)
- Branchez la batterie puis positionnez le bouton sur ON
Dispositif assemblé!
On remonte le tout:
Fermeture du compartiment avec des plaques Lego

Switch et port Micro USB (recharge) en façade

Voyants d'utilisation et de recharge du PowerBoost


- Améliorer la sortie audio

A l'origine la sortie audio analogique (prise jack) n'est pas exceptionnelle, c'est pour cette raison que beaucoup d'utilisateurs achètent des cartes audio USB pour améliorer la qualité sonore de leur RPI.

Pour gagner en qualité vous pouvez opter pour cette carte qui se branchera sur un port USB libre:
http://thepihut.com/products/usb-audio-adapter | https://www.adafruit.com/products/1475
Instructions: https://learn.adafruit.com/usb-audio-cards-with-a-raspberry-pi




Pour les plus courageux, vous pouvez monter votre propre système audio grâce aux instructions disponibles ici: https://learn.adafruit.com/pocket-pigrrl/speaker

  • Conclusion
En conclusion, la console est agréable à l'utilisation mais cependant il y a quelques défauts qui selon moi sont facilement perfectibles.

En effet le RPI B+ souffre légèrement de son manque de puissance d'autant qu'il est sollicité par FBCP (pour la copie de la sortie vidéo) un RPI 2 serait donc plus adapté pour cette réalisation. Comme je l'ai dit plus haut la sortie audio analogique n'est pas exceptionnelle il faudrait voir le résultat avec une carte audio USB. Les contrôles sont également perfectibles en particulier la croix directionnelle qu'il faudrait fixer pour limiter les déplacements de la PCB au fil des parties.

Pour conclure, je dirais que le RPI est une machine vraiment formidable et se marie parfaitement avec les Legos pour toutes sortes de réalisations (les possibilités qu'offre ce combo sont sans limites, si ce n'est votre imagination). Au final cette expérience que j'ai pu partager avec mes enfants fut enrichissante en tout point de vue. 

Voila j'espère que cet article vous a plu, qu'il vous donnera quelques idées et vous aider dans vos réalisations.

PS: Pour en discuter vous pouvez nous rejoindre sur le forum à cette adresse: http://www.open-consoles.com/t9266-raspberry-pi-realiser-votre-cpos-avec-une-framboise-et-des-legos


---

Cet Article vous a été proposé par La Team Open-Consoles

Partager cet Article

Share on Google Plus

Articles similaires

Laissez-nous un commentaire

    Commentaire
    Commentaire

7 commentaires :

  1. Un seul mot pour cet article: ÉNORME!!! Bravo Spiky et merci. ;)

    RépondreSupprimer
  2. Génial comme projet !
    J'ai découvert aussi ça en faisant qlq recherches, ça date mais c'est mortel !

    http://www.fredzone.org/raspberry-pi-portable-ben-heck-839
    http://www.thingiverse.com/thing:110354

    RépondreSupprimer
  3. Oui il existe plein de projets de ce type, mais à ma connaissance aucun avec des legos :)

    RépondreSupprimer
  4. Bonjour.
    Super tutoriel. Malheureusement, malgré tout mes efforts, je n'arrive pas à faire s'afficher RetroPie sur mon Pi TFT HY28B. peut être pourriez vous m'aider ?
    J'en suis à l'étape ou RetroPie ou Kodi se lance, mais sur le HDMI.
    Peut être auriez vous une iso prête à fonctionner ?
    Crdt Peter

    RépondreSupprimer
  5. Bonsoir,

    tout d’abord super article qui va surement m’aidai, du moins en partie car j'ai un petit soucis, j'ai acheté il y as quelques mois une console d'arcade PICADE dispo sur le site de kubii.fr. Toutefois, étant débutant dans la prog et tout sa je voudrais savoir si vous savez où trouvé comment le programmé et qu'elle alimentation pourrais faire tourné la carte PICADE + le RPI 2b + l'écran 8" qui se connecte en HDMI et aussi l'ampli 2x3w de la carte PICADE. car là en voulant tout branché avec une alim raspberry 3 de 2.5amp sa me fait disjoncté l'écran. Quelqu'un pourrez m’aidai se serai sympa

    Cordialement

    RépondreSupprimer