Horloge binaire RVB

Après avoir récupéré tout plein de LEDs RGB (rouge, vert et bleu dans la même LED), j'ai pu réaliser une idée qui me trottait dans la tête depuis un petit moment, une horloge binaire avec un affichage simultané de l'heure (en bleu), des minutes (en rouge) et des secondes (en vert). Chaque LED affiche donc une couleur, combinaison de ces trois couleurs.

L'horloge est contrôlée par un Arduino, qui pilote un driver de LEDs TLC5940 de Texas Instrument, qui permet de générer 16 signaux PWM. L'avantage d'utiliser des signaux modulés est de pouvoir régler la luminosité des LEDS en fonction des combinaisons de couleurs. En effet avec des signaux tout ou rien, une couleur seule (rouge par exemple) serait beaucoup moins brillante que le blanc, qui est générée en allumant les 3 couleurs. Le TLC5940 est disponible en sample sur le site de TI. Par contre j'en avait commandé 5, et j'en ai reçu seulement un...

Pour l'application, j'utilise la bibliothèque TLC pour Arduino, qui permet de communiquer avec ces contrôleurs de LED de manière très facile. Pour le décompte du temps, j'ai fait au plus simple, sans utiliser les timers de l'ATMega, d'ailleurs comme écrit dans les commentaires, l'horloge ne pourra pas fonctionner correctement très longtemps. En même temps je ne sais pas quelle est la précision des timers...

#include "Tlc5940.h"

byte s;  // seconds, in GREEN
byte m;  // minutes, in RED
byte h;  // hours, in BLUE

static unsigned long time; // "cheap" timer

void setup()
{
  // Initialisation of the TLC
  Tlc.init();
  Tlc.clear();
  Tlc.update();
  delay(1);

  // Set the hour here...
  h = 10;
  m = 30;
  s = 0;

  time = millis();
}

void loop()
{

  // if 1000ms are passed, update the clock.
  // /!\ the clock will die after the millis() counter
  // will roll back to 0, but it will stand at least
  // for about 50 days, which is enough for my test...
  if (millis() - time > 999)
  {
    time += 1000;
    updateClock();
    for (byte i=0; i<6; i++)
      setColor(i);
    Tlc.update();
    delay(1); // 1ms delay to update TLC
  }
}

// This function is called every second,
// and update the hours, minutes and seconds.
void updateClock()
{
  ++s;

  if (s>59)
  {
    s = 0;
    ++m;
  }

  if (m>59)
  {
    m = 0;
    ++h;
  }

  if (h>11) // 12 hours version, I don't have enough outputs for 24 hours...
  {
    h = 0;
  }
}

// This function sets the levels of each color
// in order to have better colors with the same
// level of brigthness (instead of just setting
// the signals full on or off)
void setColor(byte n)
{
  boolean g = (s & (1<<n));
  boolean r = (m & (1<<n));
  boolean b = (h & (1<<n));

  int red, green, blue;

  if (!r && !g && !b)
  {
    //BLACK
    red = 0;
    green = 0;
    blue = 0;
  }
  else if (!r && !g && b)
  {
    //BLUE
    red = 0;
    green = 0;
    blue = 4000;
  }
  else if (!r && g && !b)
  {
    //GREEN
    red = 0;
    green = 4000;
    blue = 0;
  }
  else if (!r && g && b)
  {
    //CYAN
    red = 0;
    green = 1500;
    blue = 1500;
  }
  else if (r && !g && !b)
  {
    //RED
    red = 4095;
    green = 0;
    blue = 0;
  }
  else if (r && !g && b)
  {
    //MAGENTA
    red = 3000;
    green = 0;
    blue = 2000;
  }
  else if (r && g && !b)
  {
    //YELLOW
    red = 3000;
    green = 2000;
    blue = 0;
  }
  else
  {
    //WHITE
    red = 3000;
    green = 2000;
    blue = 1000;
  }

  Tlc.set(n,red);
  Tlc.set(n+6,green);
  if (n<4)
    Tlc.set(n+12,blue);
}

Pour terminer ce projet, je compte utiliser un module RTC (Real Time Clock) qui me permettra de sauvegarder l'heure après la mise hors tension de l'Arduino, et utiliser des balles de ping-pong pour diffuser la lumière des LEDs !

3615 MATOU

Premier hack avec l'Arduino : le Minitel. Le Minitel n'est ni plus ni moins qu'un terminal série, avec des standards d'encodage des caractères préhistoriques. C'est donc après une bonne après-midi de boulot (le temps de dompter le dinosaure) que j'ai réussi ce petit hack.

La méthode est loin d'être simple, j'ai dû utiliser un vieux programme MSDOS permettant de convertir des images en mode Videotex, puis faire quelques retouches pour afficher cette image avec une résolution phénoménale de 80*72 pixels sur 4 niveaux de gris...

Le nouvel Arduino Uno

Récemment (cela fait qund même presque 2 mois maintenant), Arduino a lancé une nouvelle version de ses cartes de développement maintenant célèbres. Les cartes Arduino Duemilanove et Mega ont subis quelques modifications et sont renommées en Arduino Uno et Arduino Mega2560.

{filename}../images/arduino_1.jpg

Le packaging de l'Arduino Uno, qui peut facilement faire penser à un autre produit... ;-)

Depuis le temps que je lorgnais sur ces cartes, j'en ai profité pour commander des Arduino Uno, et en bon fan d'électronique, je vous propose un "unboxing" de la nouvelle Uno.

Après avoir ouvert la boîte, on trouve la platine Uno, un set d'autocollants très sympathique et un petit dépliant explicatif :

{filename}../images/arduino_3.jpg

Petite remarque, sur une des cartes que j'ai acheté, la soudure du composant gérant l'USB (une puce Atmel en passant) n'a pas été nettoyée, et il y a quelques résidus de flux de soudure, ce qui n'est pas très propre :

{filename}../images/arduino_7.jpg

Le packaging est donc assez sympathique, mais j'aurais aimé que la carte soir un peu plus protégée, ne serait-ce que par un sachet plastique pour éviter que la poussière du carton d'emballage ne salisse la carte et ne se loge dans les connecteur, même si je n'ai pas eu de problèmes de ce côté-là. De même, l'ajout de petits patins afin d'isoler la carte par rapport à une table par exemple aurait été bienvenue. Enfin, l'ajout de goodies est appréciable, pour revendiquer son appartenance à la communauté Arduino !

La carte est ensuite très simple à utiliser. Il suffit de se rendre sur le site Arduino, de télécharger l'IDE de développement et de se laisser guider avec les exemples de base !

Par rapport à la version précédente, voici ce qui a changé dans la version Uno :

  • Un nouveau design, avec des informations plus explicites sur les pins,
  • Une puce Atmega8U2 qui fait convertisseur USB-Série, en lieu et place de l'ancienne puce FTDI, qui peut être reprogrammée pour créer de vrais périphériques USB,
  • Un bootloader plus rapide, plus léger, donc plus de place pour le programme utilisateur (+1,5Kb).

J'ai pas mal de projets à faire avec cette carte, il ne me reste donc plus qu'à me mettre au travail !

Me voici ingénieur...

Après deux ans de classe prépa puis trois ans à l'École Centrale de Nantes, je suis devenu officiellement ingénieur. Outre le fait que ceci a changé le titre de mon site, j'ai aussi changé de région.

Après mon stage de fin d'études sur Paris (au passage je passe le bonjour à toutes les personnes que j'ai connues là-bas), je suis revenu dans ma Bretagne natale pour travailler dans le domaine qui me passionne le plus : la robotique mobile.

Au passage, je rempile pour une année à la Coupe de France de Robotique avec une équipe nouvellement crée, Atlantronic. Cette équipe est composée d'un groupe d'anciens étudiants qui ont déjà participé à la coupe. Nous espérons que notre expérience nous aidera à créer un robot simple et performant !

Enfin, j'ai plein de projets en tête, et j'espère avoir du temps pour les réaliser et les partager ici !

Comment gérer ses mots de passe

Les mots de passe nous servent tous les jours, aussi bien en utilisation professionelle que personnelle. Dans cet article, je vais vous expliquer la méthode que j'utilise pour gérer facilement mes mots de passe.

Voici les principales contraintes que je souhaite respecter :

  1. Avoir un mot de passe différent pour chaque site ou service que j'utilise (ainsi, si une personne mal intentionnée récupère mon mot de passe, il ne fonctionnera pas ailleurs)
  2. Avoir un seul mot de passe à retenir (en fait deux : un pour tout ce qui est perso, et un pour le boulot)
  3. Pouvoir modifier facilement mon mot de passe

Tout d'abord, il faut choisir un mot de passe de base, constitué de caractères minuscules, majuscules, chiffres et caractères spéciaux (sauf " et ', on n'est jamais à l'abri d'un site mal codé). Pour cela, le plus simple est d'aller sur un site de génération de mot de passe, comme celui-ci. Ensuite, je génère plusieurs mots de passe, jusqu'à en trouver un qui puisse s'écrire relativement rapidement. En effet, mon mot de passe sera long et je le tape souvent, donc autant que se soit agréable. Par exemple, prenons cette base de 12 caractères :

8;M*w1/mEF2é

Ensuite nous allons utiliser cette base pour créer un mot de passe unique pour chaque site. Pour l'exemple, prenons par exemple Google, Twitter et Flickr. Bien sûr, il ne faut surtout pas faire ceci :

  • 8;M*w1/mEF2éGoogle
  • 8;M*w1/mEF2éTwitter
  • 8;M*w1/mEF2éFlickr

En effet, la découverte d'un mot de passe mettra à mal tous les autres... L'idée, c'est de camoufler la spécificité du site au sein du mot de passe. Pour ceci, on peut utiliser plein de méthodes différentes, et les combiner ou les adapter comme on le souhaite. Par exemple :

  • Ajouter le nombre de lettres du nom du site moins une au début du mot de passe
  • Ajouter le nombre de voyelles dans le nom du site à la fin du mot de passe
  • Utiliser la 3ème lettre du nom du site en 5ème position dans le mot de passe et en majuscule
  • Utiliser la lettre suivante dans l'alphabet de la première lettre du nom du site en 7ème position

Bien sûr, ceci peut paraître très compliqué au premier abord, mais cette gymnastique arrive très vite. Pour les trois sites cités précédemment, on arrive alors en appliquant ces règles à :

  • Google: 58;Mo*Hw1/mEF2é3
  • Twitter : 68;Mi*Uw1/mEF2é2
  • Flickr : 58;Mi*Gw1/mEF2é1

On arrive ainsi à trois mots de passe assez différents, tout en ayant un seul mot de passe à retenir. En voyant la longueur finale du mot de passe, on se rend bien compte qu'il faut que la base soit facilement saisissable. Mais en tapant 10 fois le mot de passe par jour, ça devrait rentrer !

Les deux premières contraintes sont donc satisfaites. Pour pouvoir à l'avenir changer facilement les mots de passe de tout mes sites, c'est très simple, j'enregistre dans un fichier l'adresse de changement de mot de passe de chaque site, et ainsi je n'en oublie aucun lorsqu'il s'agit de tout changer !

Je peux paraître un peu paranoïaque, mais il y a énormément de sites qui stockent les mots de passe en clair, par exemple les sites carrières de grandes entreprises. Et il devient donc potentiellement très facile pour des personnes malveillantes d'aller explorer votre vie privée avant une éventuelle embauche !

Voilà, j'espère vous avoir donné des astuces utiles...