0

Petit test de Persistence of Vision avec Arduino

J'ai été contacté par le CI pour faire un projet de persistance de vision pour la Revue des Ingénieurs ! Ça m'a tout de suite motivé à faire un petit test : mon Arduino UNO, son protoshield et 5 LEDs.

Principe de la persistance de vision

Vous connaissez sans doute le principe de la persistance de vision : en faisant clignotter rapidement des LEDs qui se déplacent on peut imprimer des images dans l'oeil qui ne sait pas distinguer de si courts clignottements.

Grâce à mon Arduino j'ai donc fait un petit script qui fait clignotter les 5 LEDs selon un schéma me permettant d'afficher des images ou des textes.

Résultat

Code Arduino

// Pin numbers of the leds
int ledPins[] = {2,4,6,8,10};
int ledNum = sizeof(ledPins)/sizeof(int);

int drawing[] = {
  1,1,1,1,1, 0,1,1,1,0, 1,1,1,1,1, 0,1,1,1,0,0,
  0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
  0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
  0,0,1,0,0, 0,0,1,0,0, 0,0,1,0,0, 1,0,0,0,1,0,
  0,0,1,0,0, 0,1,1,1,0, 0,0,1,0,0, 0,1,1,1,0,0,
  };
int colNum = sizeof(drawing)/sizeof(ledPins);

void setup() {
  for(int led=0; led<ledNum; led++) {
    pinMode(ledPins[led], OUTPUT);
  }
}

void loop() {
  // Loop thru each column
  for(int col=0; col<colNum; col++) {
   
    // Loop thru each led
    for(int led=0; led<ledNum; led++) {
      digitalWrite(ledPins[led], drawing[(led*colNum)+col]);
    }
   
    // Wait a bit before next column
    delay(5);
  }
 
  // Wait a bit before restart
  delay(200);
}