MBHP_DINx4 (x 3)

Après les deux modules de sortie, voici les trois modules d’entrée terminés. Il ne reste plus qu’à connecter les LEDs et boutons pour construire l’interface de contrôle !
MIDIbox MBHP_DINx4

MIDIbox SID: premiers sons

Après quelques semaines de frustrations diverses (mon niveau de dextérité n’était pas suffisant pour souder correctement, et la puce “SID” que j’avais gardée en relique ne fonctionnait pas), je suis arrivé à la première étape fonctionnelle : un MIDIbox SID minimal avec un MOS SID 6581, un écran, un BankStick. Et ça sonne du tonnerre !

Je vous épargne les démos pour le moment : il y a plus qu’assez de vidéos sur Youtube montrant les presets du MIDIbox SID.

MIDIbox SID version minimale

La suite des opérations prendra un peu de temps : élaboration de la surface de contrôle (plusieurs dizaines de LEDs et de boutons), acquisition d’une autre puce SID, et montage du tout dans un boîtier.

Robbie : une création DIY familiale

Le gamin de trois ans et demi et maman ont réalisé un robot en carton assemblé avec des Makedo. Ensuite, il a demandé à papa si son robot pouvait avoir des lumières, parler, et bouger. Je n’ai pas de quoi faire déplacer ce robot, mais j’ai réalisé le reste : un nez musical.

La réalisation consiste en 3 LEDs et un oscillateur à ondes rectangulaires piloté en tension (VCO) autour d’un 555. Tout le matériel utilisé est de récupération, hormis la plaque d’expérimentation.

Merci au site Sonelec-Musique pour ses tutoriaux très clairs en électronique, d’où j’ai tiré le calcul de la résistance pour les LEDs et le schéma pour le VCO basé sur 555

Vue d’ensemble de Robbie
Vue d'ensemble de Robbie

Tête de Robbie
Tête de Robbie

Le nez de Robbie qui s’allume
Le nez de Robbie qui s'allume

Les boutons de commande
Robbie : les boutons de commande

L’intérieur de la tête
Robbie : intérieur de la tête

Le VCO à base de 555
Robbie : VCO à base de 555

Le haut-parleur, fixé avec des Makedo
Robbie : haut-parleur fixé avec des Makedo

PongDuino : épisode II

Le code est finalisé, les paddles 1 et 2 fonctionnent ainsi que le bouton pause :

L’épisode III ne viendra pas tout de suite, tellement la dernière étape sera triviale (ajout d’un buzzer).

Je préfère passer à autre chose, de plus musical.

PongDuino : épisode I

Cette fois-ci, j’ai décidé d’implémenter le jeu Pong sur un écran LCD à 2×16 caractères.
J’ai développé cela dans le train, en écrivant d’abord un émulateur d’afficheur dont les API sont compatibles avec le composant LiquidCrystal d’Arduino, puis écrit le moteur en C++.
Ce soir, en rentrant, Pong fonctionnait parfaitement dans mon émulateur.
Et le passage à un sketch arduino s’est fait en quelques instants !

Pour le moment, l’Arduino simule des actions alternées “haut/bas” des paddles, et relance le jeu en cas de balle perdue.

Et ça a marché du premier coup:

Les étapes suivantes : connecter des contrôleurs de jeu (un joystick et des boutons) et brancher un petit haut-parleur, afin de rendre le jeu un peu plus interactif.

arduino: affichage LCD 7 segments

Bonjour,

Voici mon premier projet Arduino : utiliser un afficheur LCD à 7 segments:

Le making off : la caméra d’un Acer Aspire One soudée sur un câble USB, montée sur un support en LEGO, filmée par guvcview, éditée par Avidemux sous Gentoo Linux, le tout sous l’oeil bienveillant de Caroline.

Arduino, Webcam et Caroline

Et le code associé

/*

7-Segments display example
by Xavier Miller https://www.xaviermiller.be

It displays 16 hex digits from 0 to F and dot.

Setup:

LCD display:
  G F (Com) A B
  | |   |   | |
  +-----------+
  |     A     |
  |   +---+   |
  |  F| G |B  |
  |   + - +   |
  |  E|   |C  |
  |   +---+ . |
  |     D     |
  +-----------+
  | |   |   | |
  E D (COM) C Dot

Arduino:
  A = 2;
  B = 3;
  C = 4;
  D = 5;
  E = 6;
  F = 7;
  G = 8;
  Dot = 9;
  
+ 330 ohms resistance to ground

*/

const byte pinStart = 2;

byte masks[] = 
{
  //GFEDCBA
  B00111111, // 0
  B00000110, // 1
  B01011011, // 2
  B01001111, // 3
  B01100110, // 4
  B01101101, // 5
  B01111101, // 6
  B00000111, // 7
  B01111111, // 8
  B01101111, // 9
  B01110111, // A
  B01111100, // b
  B00111001, // C
  B01011110, // d
  B01111001, // E
  B01110001  // F
};

void ShowDigit(byte value, byte dot)
{ 
  // guard
  if (value > sizeof(masks))
    value = 0;
  
  // get digit
  byte mask = masks[value];
  
  // apply dot
  if (dot)
    mask |= 128;
    
  // display each segment
  for (byte b = 0; b < 8; b++)
    digitalWrite(b + pinStart, (mask & (1 << b)) ? HIGH : LOW);
}

void setup()
{
  for (byte pin = 0; pin < 8; pin++)
    pinMode(pin + pinStart, OUTPUT);
}

void loop()
{
  for (byte dot = 0; dot < 2; dot++)
    for (byte digit = 0; digit < sizeof(masks); digit++)
    {
      ShowDigit(digit, dot);
      delay(500);
    }
}