Paire Larsen

Paire Larsen

La Paire Larsen sont deux structures qui génèrent du son. Fortement inspirés des oeuvres des Peter Vogel, elles sont en fait un circuit électronique qui capte le bruit électromagnétique ambiant grâce à une antenne, qu’un ATTiny transforme périodiquement en notes audibles. Les deux structures sont identiques et embarquent le même programme, pourtant quand on les place de part et d’autre de sa tête, on entend deux mélodies infernales mais complètement différentes.

Peter Vogel
Peter Vogel

MATÉRIEL :

  • ATTiny / 556 (ATtiny85-20PU – http://www.farnell.com/datasheets/1693899.pdf)
  • Haut-parleur
  • Résistance
  • Corde à piano
  • Porte pile

MONTAGE :

Schéma paire larsen

SOURCE :

La programmation d’un ATTiny se fait un peu différemment d’un Arduino classique. Vous aurez besoin d’une carte Arduino UNO et d’un condensateur. David Mellis vous explique tout (en anglais).

 

// PaireLarsen.ino

/*
  Liste des notes.
  Ce sont des valeur spéciales qui on été calculée à l'avance pour
  correspondre à la fréquence du processeur.
*/
const int notes[] = {239,225,213,201,190,179,169,159,150,142,134,127};

// PIN sur laquelle se trouve le haut-parleur
int Speaker = 1;

void setup()
{
  /*
    On définit les entrées/sorties,
    A2 ne sera pas connectée et captera des valeurs aléatoires 
    en fonction du bruit électromagnétique ambiant
    Speaker servira à sortir le signal sonore
  */
  pinMode(A2, INPUT);
  pinMode(Speaker, OUTPUT);
  delay(500);
}

void loop()
{
  // On lit une valeur aléatoire
  int reading = analogRead(A2);

  TinyTone(
    // On met à l'échelle la valeur afin de trouver un nombre entre 0 et le nombre de notes
    // Ce sera le numéro de notre note. notes[numéro] récupère la note qui correspond.
    notes[(reading/10) % 12],
    // On reprend notre valeur aléatoire pour déterminer une octave alétoire entre 2 et 4
    2 + reading % 3,
    // Idem, pour trouver une durée aléatoire
    50 + 50 * ((reading/100) % 3)
  );
}

/*
  Cette fonction optimisé pour l'ATTiny génére un signal sonore qui correspond
  à la note, l'octave et la durée spécifiée.

  Source et détails : http://www.technoblogy.com/show?KVO

*/
void TinyTone(unsigned char divisor, unsigned char octave, unsigned long duration)
{
  //TCCR1 = 0x90 | (8-octave for 1MHz clock
  TCCR1 = 0x90 | (11-octave); // for 8MHz clock
  OCR1C = divisor-1;         // set the OCR
  delay(duration);
  TCCR1 = 0x90;              // stop the counter
}