Arcadoïde

De Les Fabriques du Ponant
Révision datée du 19 janvier 2018 à 16:03 par Spasfon (discussion | contributions) (Déroulement du projet)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Arcadoid (changement de nom !) est un projet de borne d'arcade à construire soi-même. Il a été réalisé en 2 jour lors du Hackathon ENIB 2018 au Fablab des fabriques du ponant. Il permet de lier la découverte de différents domaines d'activité et de créer un objet ludique et amusant à utiliser.

la borne est là !

Matériel

  • PC avec l'IDE Arduino, un logiciel de dessin vectoriel (Illustator, Inkscape...) et un logiciel de CAO (SolidWorks, Catia...)
  • Carte Programmable "Makey Makey" (ou Arduino Léonardo, Arduino Méga... permettant de se faire passer pour un clavier)
La carte utilisée
  • Un adaptateur USB OTG (permettant de relier la carte au téléphone)
L'adaptateur carte/téléphone
  • 6 boutons, 1 joystick et des fils de connexion
  • Plaques de MDF 3mm (pour les parois de la borne)
  • Une plaque perforée (pour fixer les composants)
  • Peinture et bande de Vinyle (pour la décoration)
  • Un smartphone avec un émulateur
  • Découpeuse Vinyle
  • Imprimante 3D
  • Découpeuse Laser

Déroulement du projet

On commence par remplacer le code Firmware du MakeyMakey par un code que nous avons réalisé, disponible ici : (URL Github code_Arcadoid). Ce code permet de reconnaitre en USB 10 touches différentes au clavier (Les flèches Haut, Bas, Gauche, Droite depuis le Joystick et "a", "b", "r", "l", "s", "p" depuis les boutons "A", "B", "R", "L", "SELECT", "START"). Il faut ensuite réaliser le carter de la borne d'arcade en CAO (les fichiers sont disponibles ici : (URL ZIP FICHIER CAO) ), ainsi que le design des différents boutons à imprimer en 3D (disponibles ici : URL ZIP BOUTON).

Le boitier une fois monté

Ensuite il suffit de dessiner le logo et la décoration de la borne en vectoriel (fichiers disponibles ici : (URL DXF LOGO)) et les découper à l'aide d'une découpeuse vinyle. On peut ensuite monter les différentes parties du carter de la borne d'arcade et souder les différents composants sur la plaque perforée. Une fois la borne d'arcade montée, il suffit d'autoriser le débuggage USB sur le téléphone, de le relier à la carte et de démarrer un jeu sur une application où les touches sont modifiables (Type My Boy!, permettant d'émuler des jeux de GBA).

Peinture en cours !
schéma électrique de l'arcadoid

Pédagogie

Le projet permet à ses participants de découvrir :

  • La programmation sous arduino
  • La soudure de composants sur plaque perforée
  • Le design de pièces sous Solidworks
  • La réalisation de dessin vectoriel
  • Le découpage de pièces au laser
  • L'impression de pièces en 3D

Code Arduino

#include <Mouse.h>
#include <Keyboard.h>

#define DEBUG 0
//--- JOYSTICK ---
//pin
#define JOY_VY 5
#define JOY_VX 4
#define JOY_SW 15
//constants
#define JOY_THRESHOLD 255
#define JOY_MIDDLE 512

//--- BUTTONS ---
//pin
#define BTN_A 0
#define BTN_B 1
#define BTN_L 2
#define BTN_R 3
#define BTN_START 4
#define BTN_SELECT 5
//constants
#define BTN_PRESSED 0
#define BTN_NUMBER 6

int BTN_PIN_LIST[BTN_NUMBER]={BTN_A,BTN_B,BTN_L,BTN_R,BTN_START,BTN_SELECT};
String BTN_DEBUG_LIST[BTN_NUMBER]={"A","B","L","R","START","SELECT"};
char BTN_KEY_LIST[BTN_NUMBER]={'A','b','l','r','p','s'};

double current_time;
double previous_time;
double input_delay;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  Keyboard.begin();
  pinMode(0,INPUT);
  previous_time = micros();
  input_delay = 60000;
}

void loop() {
  current_time = micros();
  
  if (current_time - previous_time>input_delay){
    // joystick
    int joy_x = analogRead(JOY_VX);
    int joy_y = analogRead(JOY_VY);
    if(joy_x<JOY_MIDDLE-JOY_THRESHOLD){
      previous_time = current_time;
      if(DEBUG)Serial.println("down");
      else{
        Keyboard.press(KEY_DOWN_ARROW);
      }
    }else{
      if(!DEBUG)Keyboard.release(KEY_LEFT_ARROW);
    }
    if(joy_x>JOY_MIDDLE+JOY_THRESHOLD){
      previous_time = current_time;
      if(DEBUG)Serial.println("up");
      else{
        Keyboard.press(KEY_UP_ARROW);
      }
    }else{
      if(!DEBUG)Keyboard.release(KEY_RIGHT_ARROW);
    }
    if(joy_y<JOY_MIDDLE-JOY_THRESHOLD){
      previous_time = current_time;
      if(DEBUG)Serial.println("left");
      else{
        Keyboard.press(KEY_LEFT_ARROW);
      }
    }else{
      if(!DEBUG)Keyboard.release(KEY_UP_ARROW);
    }
    if(joy_y>JOY_MIDDLE+JOY_THRESHOLD){
      previous_time = current_time;
      if(DEBUG)Serial.println("right");
      else{
        Keyboard.press(KEY_RIGHT_ARROW);
      }
    }else{
      if(!DEBUG)Keyboard.release(KEY_DOWN_ARROW);
    }
    //buttons
    for(int i=0;i<BTN_NUMBER;i++){
      if(digitalRead(BTN_PIN_LIST[i])==BTN_PRESSED){
        previous_time = current_time;
        if(DEBUG)Serial.println(BTN_DEBUG_LIST[i]);
        else Keyboard.press(BTN_KEY_LIST[i]);
      }else if(!DEBUG)Keyboard.release(BTN_KEY_LIST[i]);
    }
  }
}

Les membres de l'équipe

La petite équipe au complet

L'équipe est composée de 6 élèves de l'ENIB :

  • Brice
  • Alexandre
  • Léa
  • Titouan
  • Timothy
  • Dorian

Diaporama : Jour 1

Diaporama du premier jour

Diaporama : Jour 2

Diaporama du deuxième jour