Arcadoïde : Différence entre versions
(→Déroulement du projet) |
|||
(10 révisions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
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. | 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. | ||
+ | [[Fichier:protofinal.jpg|250px|thumb|la borne est là !]] | ||
==Matériel== | ==Matériel== | ||
Ligne 11 : | Ligne 12 : | ||
* Une plaque perforée (pour fixer les composants) | * Une plaque perforée (pour fixer les composants) | ||
* Peinture et bande de Vinyle (pour la décoration) | * Peinture et bande de Vinyle (pour la décoration) | ||
− | + | * Un smartphone avec un émulateur | |
* Découpeuse Vinyle | * Découpeuse Vinyle | ||
* Imprimante 3D | * Imprimante 3D | ||
Ligne 23 : | Ligne 24 : | ||
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. | 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). | + | 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 [http://play.google.com/store/apps/details?id=com.fastemulator.gbafree&hl=fr My Boy!], permettant d'émuler des jeux de GBA). |
[[Fichier:Peinture.jpg|250px|thumb|Peinture en cours !]] | [[Fichier:Peinture.jpg|250px|thumb|Peinture en cours !]] | ||
− | [[Fichier: | + | [[Fichier:Schema elec arcadoid.png|250px|thumb|schéma électrique de l'arcadoid]] |
==Pédagogie== | ==Pédagogie== | ||
Ligne 35 : | Ligne 36 : | ||
* Le découpage de pièces au laser | * Le découpage de pièces au laser | ||
* L'impression de pièces en 3D | * L'impression de pièces en 3D | ||
+ | |||
+ | ==Code Arduino== | ||
+ | <pre> | ||
+ | #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]); | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </pre> | ||
==Les membres de l'équipe== | ==Les membres de l'équipe== | ||
+ | [[Fichier:equipe.jpg|250px|thumb|La petite équipe au complet]] | ||
+ | |||
L'équipe est composée de 6 élèves de l'ENIB : | L'équipe est composée de 6 élèves de l'ENIB : | ||
Ligne 49 : | Ligne 152 : | ||
[[media:Arcadoid.pdf|Diaporama du premier jour]] | [[media:Arcadoid.pdf|Diaporama du premier jour]] | ||
==Diaporama : Jour 2== | ==Diaporama : Jour 2== | ||
− | + | [[media:Hackathon pédagogique Arcad'oid.pdf|Diaporama du deuxième jour]] | |
[[catégorie:enib2018]] | [[catégorie:enib2018]] |
Version actuelle datée du 19 janvier 2018 à 16:03
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.
Sommaire
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)
- Un adaptateur USB OTG (permettant de relier la carte au 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).
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).
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
L'équipe est composée de 6 élèves de l'ENIB :
- Brice
- Alexandre
- Léa
- Titouan
- Timothy
- Dorian