まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Mot-clé - Arduino

Fil des billets - Fil des commentaires

samedi, 22 novembre 2025

Joystick Arcade pour Nintendo GameCube

La borne est en travaux !
En plus du PC « mame » je souhaite lui installer deux autres systèmes de jeux, dont l'un est la console GameCube.
Motivation ? Jouer à Ikaruga et SoulCalibur sur la borne avec les sticks arcade.
Sauf que ! Comment faire pour connecter ces derniers à la console ?

Avant de réinventer la roue, j'ai traîné sur le web à la recherche d'une proposition de circuit électronique.
J'ai eu un peu de mal à trouver ce que je cherchai, visiblement ça n'intéresse pas trop les foules… L'occasion de constater au passage que la manette GameCube n'était pas aussi électroniquement simple que ses aînées, et qu'il faudrait un circuit programmable pour faire le travail.

J'ai fini par trouver cette page, qui décrit comment construire un contrôleur maison, avec un Arduino, et surtout l’existence de la bibliothèque logicielle adéquate : https://github.com/NicoHood/Nintendo (que je joins en annexe à ce billet)

  • Le code C++ est vraiment très simple à adapter grâce aux exemples donnés, et j'ai alors pu assigner les numéros de broches d'un Arduino Pro Mini 5V aux boutons d'une manette GameCube et établir le schéma de câblage suivant :


Une fois un câble de manette de remplacement acheté, restait alors le plus long à faire, câbler les broches sur le joystick.

  • Ici le brochage est réalisé à l'aide de connecteurs « maisons », qui permettront d'interchanger le joystick entre plusieurs systèmes de jeu (USB ou GameCube pour le moment).


  • Le brochage du câble de la manette est le suivant :
Couleur  −   Usage 

Jaune    −   5V
Blanc    −   GND
Vert     −   GND
Noir     −   GND
Bleu     −   3,3V
Rouge    −   DATA
  • Voici le Scketch à inscrire sur l'Arduino, en ayant pris soins de charger la librairie de NicoHood :

https://github.com/makotoworkshop/Joystick_Arcade_GameCube

#include <Nintendo.h>

// Variables
#define Bouton_A  A1
#define Bouton_B  9
#define Bouton_X  A2
#define Bouton_Y  3
#define Bouton_START  A3
#define Bouton_L  7
#define Bouton_R  8
#define Bouton_Z  2
#define Direction_UP  6
#define Direction_DOWN  5
#define Direction_LEFT  A0
#define Direction_RIGHT  4

// Broche de communication vers la console GameCube
CGamecubeConsole gc_console(10);

// Structure de données de la manette
Gamecube_Data_t gc_data = defaultGamecubeData;


void setup() {
//  Serial.begin(115200);
  // Configuration des boutons en entrée avec résistance pull-up
  pinMode(Bouton_A, INPUT_PULLUP);
  pinMode(Bouton_B, INPUT_PULLUP);
  pinMode(Bouton_X, INPUT_PULLUP);
  pinMode(Bouton_Y, INPUT_PULLUP);
  pinMode(Bouton_START, INPUT_PULLUP);
  pinMode(Bouton_L, INPUT_PULLUP);
  pinMode(Bouton_R, INPUT_PULLUP);
  pinMode(Bouton_Z, INPUT_PULLUP);
  pinMode(Direction_UP, INPUT_PULLUP);
  pinMode(Direction_DOWN, INPUT_PULLUP);
  pinMode(Direction_LEFT, INPUT_PULLUP);
  pinMode(Direction_RIGHT, INPUT_PULLUP);
  delay(100);
}

void loop() {
  // Lecture des boutons
  gc_data.report.a      = !digitalRead(Bouton_A);
  gc_data.report.b      = !digitalRead(Bouton_B);
  gc_data.report.x      = !digitalRead(Bouton_X);
  gc_data.report.y      = !digitalRead(Bouton_Y);
  gc_data.report.start  = !digitalRead(Bouton_START);
  gc_data.report.z      = !digitalRead(Bouton_Z);
  gc_data.report.l      = !digitalRead(Bouton_L);
  gc_data.report.r      = !digitalRead(Bouton_R);

  gc_data.report.dup    = !digitalRead(Direction_UP);
  gc_data.report.ddown  = !digitalRead(Direction_DOWN);
  gc_data.report.dleft  = !digitalRead(Direction_LEFT);
  gc_data.report.dright = !digitalRead(Direction_RIGHT);

  // Stick analogique centré
  gc_data.report.xAxis = 128;
  gc_data.report.yAxis = 128;

  // Stick C centré
  gc_data.report.cxAxis = 128;
  gc_data.report.cyAxis = 128;

  // Gâchettes analogiques à 0
  gc_data.report.left = 0;
  gc_data.report.right = 0;

  // Envoi du rapport à la console de jeux
  gc_console.write(gc_data);

//  Serial.print("bouton Y = ");
//  Serial.println(gc_data.report.y);
  
}

samedi, 30 juillet 2022

TempéroClock

dsc03666.jpg

Étant donné que je m'amuse bien avec les capteurs de températures/humidités en ce moment, j'ai eu envie d'en ajouter un dans le salon/salle à manger/atelier/salle de jeu/dortoire à ratoux/chambre d'amis/biliothéque…

  • Et plutôt que d'entreprendre un nouvel afficheur, j'ai préféré utiliser celui que j'avais déjà, l'horloge de salon, elle même dérivée de l'horloge du WebRadioRéveilWifi, donc de conserver la même carte électronique, et simplement la modifier pour ajouter un capteur DHT11.
  • J'ai donc édité le schéma (projet kicad en annexe[1]) afin de documenter les modifications faites à la volée (comprendre charcutage de pistes au cutter, soudage de composants à la sauvage).


Ont donc été supprimé les leds alarmes et le buzzer, car finalement ça ne m'est pas utile, afin de disposer d'une sortie PWM de l'Arduino pour séparer la commande des deux leds constituant le « deux points » scindant heure et minutes.
Je n'ai pas de photos à montrer, j'ai refermé l'appareil là… flemme.

Le programme :

  • Le code est ici ou en annexe du billet[2], corrigé de quelques erreurs de jeunesse, mais je n'ai pas pris le temps de nettoyer le code et de commenter correctement, désolé…

  • Les boutons Alarmes ont donc été remplacées par :

- Un bouton « Temp/Humido » permettant de choisir d'afficher en permanence la température ou bien l'humidité (mise à jours toutes les 2 secondes).
- Un bouton « Caroussel » permettant d'afficher l'heure durant 8 secondes, puis de basculer 2 secondes sur la température, puis 2 secondes sur l'humidité.
- Le bouton « Horloge » permet comme auparavant de mettre à l'heure l'horloge en le combinant aux boutons « heures » ou « minutes », mais aussi de demander d'afficher uniquement l'heure.



- Pour le reste, les leds de l'horloge s'allument lorsque le capteur PIR détecte un mouvement, et ceci pour 3 heures durant, avant de s'éteindre.
- Pendant ce temps la photorésistance se charge d'ajuster l'intensité lumineuse des leds, plus forte s'il capte beaucoup de lumière et moins forte dans le cas contraire.



  • Une petite vidéo :

Notes

[1] À voir ci-dessous… Attention, je n'ai pas mis à jour le PCB, il n'y a que le structurel qui contient les modifications

[2] ci-dessous

dimanche, 3 juillet 2022

Tempéro, thermomètres connectés -02-

Précédemment sur makotoworkshop.org… :

À priori, non, tu ne met pas ton capteur de DHT22 dehors « comme ça », et encore moins accroché au mur de ta fenêtre.

C'est ce que j'ai assez vite déduit aux vues des résultats de recherche sur Thingiverse, en quête d'inspiration pour un modèle de boîtier.
En effet, il semble finalement assez logique de se tenir aussi éloigné que possible des murs du bâtiment, au risque sinon de se retrouver à mesurer la T° résiduelle emmagasinée par celui-ci, et malgré ça, on ne peut pas non plus imaginer laisser le capteur cuire en plein soleil…

Une fois de plus ce fût l'occasion d'apprendre de nouvelle choses, et en cela, l’existence du « Stevenson shelter », un abris ventilé dans lequel on place les instruments de mesure pour les protéger du soleil tout en les laissant prendre le vent.

J'ai pu trouver le modèle qui me convenait et de l'adapter à mon besoin en le « remixant » en Stevenson shelter pour balcon.

  • Arès avoir imprimé toutes les pièces déterminantes en blanc, évidemment ici pour profiter de l'effet albédo, j'ai fait un essai d'assemblage de la soucoupe du bas avec la glissières.



Grâce aux tête fraisées des vis la glissière fait son office correctement.

  • Les trous de cette soucoupe sont plus petits et destinés à être taraudés donc, pour accueillir les vis de ⌀4 mm.


  • Ensuite collage du mille-feuille en m'aidant des trous prévus à l'origine pour des tiges filetées afin de bien aligner les pièces. Le capteur DHT22 ainsi fixé à son support vient se loger au centre :


  • Reste à visser la glissière en place.


  • Une fois la seconde partie de la glissière fixée à la rambarde du balcon à l'aide de serre-câbles, il suffit de glisser notre stevenson shelter en place et de ligaturer une attache dans la boucle prévue pour éviter qu'il ne bouge.



À suivre…

dimanche, 26 juin 2022

Tempéro, thermomètres connectés -01-

Ayant pu expérimenter les capteurs de température dans le but de réguler la température interne des bornes jubeat et Sound Voltex, la thématique estivale des températures records aidant, j'ai eu envie de m'essayer à bricoler une petite station météo partielle, sachant que le boulot serait pas mal inspiré de mes précédents travaux sur l'anémomètre (la version WiFi)

Partielle car il manquerait un pluviomètre et l'absence d'anémomètre va permettre je pense l'utilisation d'une alimentation sur batterie solaire, mais nous étudierons cela plus tard, commençons déjà par expérimenter.

Câblage :

Un capteur DHT22 est situé à l'intérieur de l'habitat.
Un autre capteur DHT22 est placé à l'extérieur de l'habitat.
Tous deux connectés sur un NodeMCU (plaquette à base d'esp8266) chargé d'envoyer les valeurs de températures et d'humidité sur un afficheur LCD connecté en I²C, et également sur un serveur web influxDB + Grafana pour tracer des courbes dans le temps.


  • Voici la maquette câblée, avec le module I²C bien pratique, soudé au dos de l'afficheur LCD :



Programme :

  • Le code utilisé est disponible en annexe du billet[1] et sur mon github.

https://github.com/makotoworkshop/nodeMCU_tempero_AlimSecteur.

  • J'attire cependant l'attention du bidouilleur attentif.

En effet le code utilisé dans le fichier ESPinfluxdb.cpp n'est plus compatible avec la librairie de carte disponibles dans l'Arduino IDE que j'utilise pour programmer le nodeMCU.
Pour disposer de la carte NodeMCU 1.0 (ESP-12E Module) dans l'IDE il faut avoir au préalable chargé la carte, ce qui se fait en deux temps :

1 - Ajouter l'adresse https://arduino.esp8266.com/stable/package_esp8266com_index.json à la case URL de gestionnaire de cartes supplémentaires depuis le menu Fichier > Préférences > onglet Paramètres.
2 - Ajouter la carte depuis le menu Outil > Type de carte > Gestionnaire de Carte, puis

rechercher esp8268 et on trouve esp8268 by ESP8266 Community dont la dernière version est la 3.0.1, et qui refuse de compiler le code dudit fichier avec des erreurs à base de machin « deprecated blablabla use WiFiClient… ».
J'ai eu beau modifier le code, je ne suis pas parvenu à circonscrire les erreurs de compilation, aussi j'ai rétrogradé à la version 2.4.2, celle-là même qui fonctionnait à l'époque de mes bricoles avec l'anémomètreWiFi.


Au démarrage du programme, différents messages s'affichent pour indiquer la connexion au WiFi, puis la connexion à la base de donnée influxDB, ainsi qu'un avertissement en cas de problème avec les capteurs.

  • Ensuite on devrait obtenir ceci :



Traceur de courbe :

  • Synoptique de principe :

Mon tuto de l'époque reste relativement adéquat, aussi je vous renvoie aux sections Configuration de la Base de données et Configuration de la Grafana de celui-ci.
Grafana a quelque peu évolué depuis, et certaines captures d'écrans ne sont plus bonnes, mais l'essentiel y est, flemme d'en refaire de nouvelles.

  • Voici ce qu'on peut obtenir avec un peu de temps à configurer les graphes :



À suivre…

Note

[1] Voir ci-dessous

- page 1 de 4