Skyduino:~#
Articles
arduino, programmation

[Arduino] FFT et Tv-out

Bonjour tout le monde !

Ça faisait déjà pas mal de temps que j’avais prévu de faire cet article mais je n’avais pas encore eu le temps de me pencher dessus.

Le sujet du jour : concevoir un (pseudo) équalizeur audio avec les librairie TV-out et FixFFT.

Pour cet article je vais avoir besoin de deux librairies :
Tv-out qui permet de générer des signaux TV PAL ou NTSC (image noir et blanc), et FixFFT qui permet de réaliser des transformation de Fast Fourier (FFT) sur 8 bits.

Grâce à ces deux librairies je vais réaliser un (pseudo) équalizeur graphique à base d’arduino, avec sortie sur télévision.
Bon je préviens tout de suite, ça ne sera pas un truc très précis (voire même pas du tout) avec des bandes de fréquence bien délimitées.
Juste un truc réagissant plus ou moins aux sons capturés par le micro :)

Le matériel :
- Une carte arduino,
- Une shield Video-experiment, ou une "game shield", ou un connecteur TV composite et deux résistances (1K et 430 ohms),
- une breakout micro.

Afin de simplifier au maximum le montage j’utilise une shield video-experimenter, de ce fait le connecteur vidéo composite est directement câblé.
J’ai aussi utilisé mon astuces à base de digitalWrite() pour utiliser les broches A3 et A4 comme alimentation pour la breakout micro, ainsi aucun réel câblage n’est requis.

Si vous voulez reproduire mon montage avec une video-experimenter shield il faudra placer les jumper comme ceci :
Sync select : D9
Output select : Sync only

Voici un aperçu du montage fini.

Il ne reste plus qu’à ajouter une pile et un câble vidéo et tout est prêt !

Le code arduino :

#include <TVout.h> // Librairie TV-Out
#include <fix_fft.h> // Librairie FFT 8bits

TVout tv; // Objet TV-out
char im[128], data[128]; // Tableau contenant les nombres réels et imaginaires
byte i;

// setup()
void setup()
{                           
  pinMode(A3, OUTPUT);
  pinMode(A4, OUTPUT);
  digitalWrite(A3, HIGH);
  digitalWrite(A4, LOW); // Astuce pour brancher la breakout micro sans cablage

  analogReference(DEFAULT); // Référence analogique sur 5 volts
  tv.begin(_NTSC, 64, 128); // Initialisation de la librairie TV-out en NTSC 64x128 pixels
  tv.fill(BLACK); // Ecran noir
}

// loop()
void loop()
{
  for(i = 0; i < 128; i++){ // Acquisition des 128 mesures 
    data[i] = (analogRead(A5) / 4) - 128; // 100us     
    im[i] = 0; // Pas de nombres imaginaire           
  }

  // fix_fft(reel, imaginaire, m, FFTinverse)
  // m = log2(sizeof(data)) -> m = 7 car 2 ^ 7 = 128
  fix_fft(data, im, 7, false);

  tv.fill(BLACK); // Ecran noir
  for(i = 1; i < 64; i++){ // Affichage des 64 bandes de résultats
    data[i] = sqrt(data[i] * data[i] + im[i] * im[i]); // Valeurs absolue
    tv.draw_line(i, 0, i, data[i] * 2, WHITE); // Trace la ligne vertical     
  } 
  
  delay(10); // Rafraichissement 100Hz
}

Et le résultat en musique :

Enjoy ! :)

About these ads

Discussion

3 réflexions sur “[Arduino] FFT et Tv-out

  1. Crois-tu qu’il est possible de faire pareil avec une entrée directe? C’est à dire si on prend une prise jack comme entrée analogique? Ou alors le signal sera trop faible?

    Publié par N0ciple | 10 novembre 2012, 20 h 47 min
  2. La librairie FFT permet d’accélérer le calcul pour que l’Arduino soit plus réactive, c’est bien ça ?
    Sans FFT, la latence serait trop importante, je ne me trompe pas ?

    Je voudrais réaliser un module vidéo contrôlé en tension, sans FFT l’Arduino risque d’être à la ramasse ?

    Publié par RoKN | 17 avril 2014, 10 h 36 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

Archives

Wow. Dogecoin. Amaze.

Laissez un tip en Dogecoin

DMMNFk6WBVTpx2Wu1Z35GL61QXSd6r6WQx

Suivre

Recevez les nouvelles publications par mail.

Joignez-vous à 674 followers