Skyduino:~#
Articles
arduino, programmation

[Arduino] Dé électronique avec capteur tilt et afficheur 7 segments

Bonjour tout le monde !

Aujourd’hui je vais vous présenter un projet très simple, tellement simple que je n’ai jamais eu l’idée de faire un article dessus 🙂

Un des montages classique que l’on réalise quand on débute en électronique c’est le « dé électronique ».
6 leds, quelques CI logique, et un capteur de vibrations, c’est le montage de base pour amuser les jeunes débutants.
Ca doit rappeler des souvenirs à ceux ayant déjà monté un kit de la marque velleman (ou autres).

Et si on remettez ce montage au goût du jour ? Avec une petite touche de magie « Arduinesque » 😉

Le sujet du jour : fabriquer un dé électronique avec une carte arduino !

La matériel :

Pour ce projet on va rester simple, mais pas trop !

Pour l’affichage pas question d’utiliser 6 leds comme dans la plupart des kit du commerce, non, un afficheur 7 segments c’est beaucoup plus marrant 🙂
De même pourquoi utiliser un capteur piezo pour détecter les choc, quand on dispose d’un capteur tilt.

Pourquoi faire simple quand on peut faire compliqué ? hein 😉

Le matériel à proprement parler :
Une carte arduino,
Un capteur tilt (j'en est déjà parlé il y a peu dans un autre article),
Un afficheur 7 segments avec électronique intégré (pareil j'ai fait un article dessus il y a peu de temps),
Une breadboard pour faciliter le câblage,
Des fils de câblage

Pour l’afficheur 7 segments, il est aussi tout à fait possible d’utiliser un afficheur 7 segments classique, avec un contrôleur BCD -> 7 segments externes (comme un CD4543 par exemple).

Le câblage :

Arduino -> capteur tilt
VCC -> VCC
GND -> GND
D8 -> S2
D9 -> S1

Arduino -> 7seg
VCC -> VCC
GND -> GND
D3 -> Data 1
A0 -> Data 2
A1 -> Data 4
A2 -> Data 8
D2 -> LATCH_STROBE

(Le pinmapping du 7seg est un peu bizarre pour faciliter mon câblage sur la breadboard)

La broche A3 doit être laissée libre, ou doit juste être reliée à un fils flottant, afin de servir d’antenne pour initialiser le générateur de nombre aléatoire.

Le code :

(Rien de bien compliqué, de plus, beaucoup de morceaux de code proviennent d’autre articles du blog)

/* Broche analogique libre servant pour RandomSeed() */
#define RAND_SEED_PIN A3

/* Broches de contrôle du 7seg */
#define LATCH_STROBE 2
#define LATCH_DATA_A 3
#define LATCH_DATA_B A0
#define LATCH_DATA_C A1
#define LATCH_DATA_D A2

/* Broche du capteur tilt */
#define _S1 9
#define _S2 8

/* Fonction qui retourne l'orientation du capteur tilt */
byte getPos() {
  byte n = digitalRead(_S1);
  n += 2 * digitalRead(_S2);
  return n;
}

/* Fonction qui affiche une valeur sur le 7seg */
void affichage(uint8_t valeur) {
  valeur &= 0x0F; // Sécurité : 0 < valeur < 15

  /* Envoi des données sur le latch */
  digitalWrite(LATCH_DATA_A, bitRead(valeur, 0));
  digitalWrite(LATCH_DATA_B, bitRead(valeur, 1));
  digitalWrite(LATCH_DATA_C, bitRead(valeur, 2));
  digitalWrite(LATCH_DATA_D, bitRead(valeur, 3));

  /* Affichage des données */
  delayMicroseconds(100);
  digitalWrite(LATCH_STROBE, LOW);
  delayMicroseconds(100);
  digitalWrite(LATCH_STROBE, HIGH);
}

/* setup() */
void setup() {
  /* Mise en sortie des broches de contrôle */
  pinMode(LATCH_STROBE, OUTPUT);

  /* Mise en sortie des broches du 7seg */
  pinMode(LATCH_DATA_A, OUTPUT);
  pinMode(LATCH_DATA_B, OUTPUT);
  pinMode(LATCH_DATA_C, OUTPUT);
  pinMode(LATCH_DATA_D, OUTPUT);

  /* Mise en sortie des broches du capteur tilt */
  pinMode(_S1, INPUT);
  pinMode(_S2, INPUT);

  /* Initialisation du générateur de nombre aléatoire */
  randomSeed(analogRead(RAND_SEED_PIN));
}

/* loop() */
void loop() {
  static byte oldPos = 0; // Ancienne valeur du capteur
  byte pos = getPos();    // Valeur actuelle du capteur
  
  /* Si le capteur a bouger */
  if(pos != oldPos) {
    affichage(random(0, 7)); // Affichage d'un nombre aléatoire entre 0 et 7
    delay(1000);             // Délai 1s
    oldPos = getPos();       // Sauvegarde du mouvement
  }
}

Le résultat :

*On secoue comme dans la pub orangina*

*Et on re-secoue *

Enjoy !

Advertisements

Discussion

4 réflexions sur “[Arduino] Dé électronique avec capteur tilt et afficheur 7 segments

  1. Un peu grand pour entrer dans la poche 🙂
    Mais ça change un peu du simple dé avec un poussoir, c’est plus logique de le secouer 🙂

    Merci pour ton article

    Publié par schizophrene | 1 mai 2012, 11 h 01 min
  2. Salut !

    Félicitations pour tes articles que je suis depuis un petit moment 🙂

    Par contre, quel est le modèle ton afficheur 7 segments ? parce que les plus répandus ont un affichage avec des « barres » et non des petits points comme celui ci-dessus … et je trouve le tiens très joli !

    Cordialement , titi@.

    Publié par titi@ | 3 mai 2012, 11 h 48 min

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.