Un carton televisor (avec arduino et LED) (11 / 14 étapes)

Etape 11 : Conversion d’images sonores !


Afin de jouer quelque chose sur le televisor, une image (le film se compose d’images distinctes) doit être modulé dans une intensité lumineuse variable des LEDS à l’intérieur le televisor.

Comme chaque trou traverse la fenêtre, l’intensité variable des LEDs détermine l’intensité de cet endroit particulier chaque fois qu’un trou se trouve en ce moment. Ainsi, l’image est formée par une ligne.

Je l’ai déjà dit que l’intensité des LED sera contrôlée comme un périphérique audio.  Il s’agit tout simplement audio qui sortent une prise casque de mon ordinateur portable dans un amplificateur sur la LED. (plus sur cela plus tard)
Ainsi, le programme a besoin de convertir la blancheur des lignes à une tension de la sortie audio de mon ordinateur portable.
Fondamentalement un fichier audio doit être créé et joué, c’est aussi simple que cela.

Pour ce faire, une image est prise et divisée en 24 colonnes (chacun d’eux représente un trou traversant la fenêtre).  Ensuite, chaque ligne est converti en une image en niveaux de gris .
La blancheur ou l’intensité est calculée comme suit :

Chaque pixel a une valeur de rouge, verte et bleue, ensemble, ils forment la couleur spécifique que vous voyez. Pour convertir ces rouges, verts et bleus des valeurs dans l’intensité générale perçue de le œil, formule suivante est utilisée :

intensité = 0,29 * rouge + 0,71 * vert + 0,08 * bleu.

C’est parce que la sensibilité de l’oeil est différent pour les différentes couleurs. (Notez également que dans l’article de wikipedia, il y a 2 formules, mais depuis je suis tombé sur l’autre le plus, c’est celle que j’utilise. Et il a été déterminé pour une utilisation dans les téléviseurs n’est plus approprié (mais il n’importe lequel des deux est utilisé, il n’ya pas beaucoup de différence)
Remarque que je stocke immédiatement l’intensité dans un tableau de « shorts », c’est parce qu’un court-circuit est 2 octets soit 16 bits de longs qui est la résolution que j’utilise pour mon dossier de wav.

Il y a maintenant 24 tableaux d’intensités qui doivent être mis dans un fichier WAV. Selon la vitesse de l’échantillon, ces tableaux est mis en cellule.
Par exemple pour construire mon dossier WAV, je veux jouer à une vitesse de l’échantillon de 44100 Hz qui est la fréquence d’échantillonnage plus courante.  Et le disque dure 1/12 secondes à tourner.  Et chaque trou traverse la fenêtre pendant que le disque a besoin pour faire pivoter 14,8 degrés, 14,8/360 donc une partie d’une rotation.  Ainsi, suivant simplement la formule est utilisé :

amount_bins = SPS * (Rotationperiod) * (fraction de rotation un trou est visible)

Ceci s’élève à 151 bacs (arrondies) dans mon cas.
Donc, en termes simples, l’image est maintenant divisé en 24 colonnes et de 151 lignes.  Et toutes les pièces sont en moyenne en interne si vous vous retrouvez avec une image en niveaux de gris de 24 par 151 pixels.

De cette image convertie que les 24 rangs (chacun d’eux un tableau de 151 nombres) sont ensuite cousues ensemble après l’autre pour former un tableau de 24 * 151 = 3624 échantillons ou des numéros.  Quand ces données sont mises dans le fichier WAV, il jouera le son qui est nécessaire pour produire une image.

MAIS, une révolution du disque dure 1/12ème de seconde et avec une fréquence d’échantillonnage de 44100 Hz, ce qui représente à 3675 échantillons. Donc, vous voyez qu’il y a 51 numéros non utilisés.  Et c’est tout à fait très bien puisque c’est juste ce petit morceau d’espace inutilisé sur le disque si vous regardez le modèle de l’emplacement des trous dans l’une des premières étapes.

Il s’agit fondamentalement toutes les choses importantes.
Maintenant les données sont simplement posées dans un fichier WAV.  Je me réfère à cette page sur le format de fichier son WAV pour connaître en détail les modalités des octets.  Vous reconnaîtrez l’a clairement tout de cette page dans la fonction makeWav() (et le fuction printInfo()) dans le fichier « wavreader.cpp ».  J’ai tout simplement binaire imprimer tous les trucs qu’ils disent.

Ce que vous vous retrouvez avec est un fichier audio.  Si le disque de la televisor est filé jusqu'à la bonne vitesse et le fichier sonore (répété une fois 1000 pour la facilité) puis l’image peut être clairement vus écrémage à travers l’écran.

Alors, tout d’abord pour le programme lui-même j’utilise Magick ++ car ImageMagick est incroyablement puissante et facile à utiliser. J’ai été très heureux qu’elle a aussi fourni une image édition bibliothèque pour C++ appelée Magick ++.
La lecture et l’écriture de pixels a été fait avec cette bibliothèque.  Il y a beaucoup d’explication sur la façon d’installer et l’utiliser sur leur page d’accueil, pour linux, mac et windows.

Ensuite j’ai un vieux petit morceau de morue que j’ai écrit il y a longtemps.  J’ai voulu lire les données d’un fichier WAV, j’ai donc écrit un wavreader. Prenez garde qu’il est peu sale de code (n’oubliez pas les avertissements).  C’est un mélange de C et C++, il fonctionne très bien mais il n’est pas juste.
Le problème était (et est toujours) que je ne sais pas comment je peux avoir un fstream en tant que membre dans une classe. Ou quelque chose de simple qui se souvient de façon permanente à quelle position il est dans un fichier. Je suis allé C style et utilisé un pointeur de fichier simple.

Donc, j’utilise Linux, et il s’agit de la commande de compilation qui fonctionne :

g ++-O3 -o image main.cpp wavreader.cpp ' Magick ++-config--cppflags cxxflags----ldflags--libs'

(si vous l’essayez, vous verrez 3 avertissements que certaines valeurs de retour sont ignorés, il n’est pas que mauvaise, juste les résoudre des slideshows certains (pour moi) inutile pour certaines fonctions vraiment petites).  (et la - O3 est un peu pour la vitesse, mais il n’importe pas puisque je n’ai pas essayé ce programme avec des énormes lots de photos)

Bien sûr, vous pouvez utiliser votre favori GUI juste se méfier que ce n’est pas un drapeau normal. Je n’ai jamais vu ça avant, mais Magick ++-config est quelque chose qui imprime automatiquement les indicateurs ainsi que le ' ' symboles.
Et dans Qt Creator par exemple vous devez ajouter cette ligne dans le fichier pro :
Système de QMAKE_CXXFLAGS + += $$ (magique ++-config--cxxflags--cppflags)
(qui est bizarre, c’est pourquoi je l’ai fait dans Codeblocks où vous pourriez juste ajouter le choses littéralement telle qu’elle apparaît dans la commande de compilation)

D’utiliser effectivement le programme qu'il suffit de taper :

(qui est dans mon cas l'



de wikipedia) Après un quart de seconde, ou alors, l’image plus haut de cette page est retournée avec le fichier audio (ci-dessous).
Regardez l’image du fichier audio dans l’audio, vous pouvez clairement reconnaître le côté gauche de l’anneau dans les pics doubles ! (Saturn.wav)

Si vous donnez deux images comme argument, le programme assemble eux automatiquement: (les noms et les .wav comme premier argument)
par exemple

(la face qui était de René de ' Allo ' Allo!)
Cela donne alors la suite fichier wav: (encore appelé Saturn.wav)

Mais pour démontrer les capacités de ce petit programme permet d’examiner ce gif: (obtenu à partir ici)
Vous pouvez ensuite obtenir avec Imagemagick toutes les trames séparées. Si vous les placez dans un dossier et libérez le programme image sur eux, vous obtenez une flopée de convertis images d'où vous pouvez faire un nouveau gif :

(J’ai converti toutes les images à convertis de retour ensemble dans un gif, cela ne se produit pas automatiquement)
Mais le plus important programme retourne également le fichier wav entier d'où vous pouvez voir un extrait ci-dessous. Vous pouvez facilement reconnaître les cadres séparés. (elle est agrandie)

Quelque chose de bizarre que je ne peux pas expliquer immédiatement est que cela ne fonctionne pas avec des images qui sont déjà en nuances de gris.
Également si les vastes zones de pixels totalement blancs ou totalement noirs sont présents, il ne fonctionne pas eiter.

Mise à jour : Si tout ce qui précède est un peu trop technique, ou si vous avez des problèmes avec la compilation ou installer les bibliothèques, j’ai ajouté le fichier exécutable dans un zip ci-dessous.  (alors, décompresser et exécuter si vous me faites confiance)
Cependant, j’ai remarqué qu’il ne fonctionne pas sur windows, qui est ennuyeux. Il n’est pas aussi banal que j’ai pensé qu’il serait.

Articles Liés

Le Costume de méduses de bande de LED avec Arduino & LPD8806 Led Strips

Le Costume de méduses de bande de LED avec Arduino & LPD8806 Led Strips

tout a commencé quand j'ai vu un documentaire de la BBC en 2002 sur les eaux profondes de l'océan. Il y avait une méduse biolimunescent dans le documentaire, probablement de l'espèce « cténophores » qui a attiré mon attention dans les dernières année
Mise en route avec Arduino - RGB LED

Mise en route avec Arduino - RGB LED

Dans ce tutoriel nous allons examiner comment câbler jusqu'à un rouge/vert/bleu (RVB) diodes électroluminescentes (del) à un Arduino et contrôler sur le port série. Vous pouvez utiliser un élément fondamental de la LED RGB (c.-à-d. un dôme en plastiq
Circuit de Strip LED RGB avec Arduino

Circuit de Strip LED RGB avec Arduino

Ce Instructable couvre l'Assemblée d'un circuit capable d'ing PWM (modulation de largeur d'impulsion) une bande de RVB LED 9-12v et un Arduino pour faire défiler une gamme de couleurs de programmation. Je vais discuter de comment monter un transistor
LED Cube avec Arduino et PCB personnalisé

LED Cube avec Arduino et PCB personnalisé

cette instructable détaille la conception et la construction des processus pour une 5 x 5 x 5 cube LED, contrôlée avec un Arduino, qui réside sur un circuits imprimés personnalisés.Vidéos, photos et informations supplémentaires se trouvent sur mon si
Clignotant LED avec Arduino Nano

Clignotant LED avec Arduino Nano

Bonjour les amis,Voyant un témoin clignotant est tellement amusant, mais lorsque vous effectuez un comme qui par vous-même puis le plaisir est d'autant plus. ^_^Alors, que la fête commence,Dans ce instructable, j'ai montré comment clignoter une diode
Comment faire un affichage LED à 7 segments avec Arduino

Comment faire un affichage LED à 7 segments avec Arduino

Je vais vous montrer comment faire un segment 7 Ecran à LEDS. Combiner avec Arduino pour créer le compte à rebours, texte simple et plus encore. J'aime faire des projets originaux. J'ai cherché l'ensemble d'instructables et n'a pas trouvé un comme ça
Commander une Led RGB avec Arduino et traitement

Commander une Led RGB avec Arduino et traitement

cette instructable (mon premier pas moins) indique comment contrôler une RGB a conduit à l'aide de la transformation et arduino.La caractéristique principale étant que la couleur est sélectionnée en cliquant sur une image, la valeur RGB du pixel sur
Parapluie de LED avec Arduino

Parapluie de LED avec Arduino

le parapluie de LED avec Arduino combine un parapluie, une matrice de LED 8 x 10 et un microcontrôleur Arduino pour créer un contrôlable, programmable a mené l'expérience dans l'intimité de votre propre parapluie. Ce projet a été inspiré par le parap
* mise à jour * LED-tour « Hello », Vu-mètre avancé de détection musique sans qu’avec Arduino et l’interfaçage d’IC avec le logiciel PC Windows !

* mise à jour * LED-tour « Hello », Vu-mètre avancé de détection musique sans qu’avec Arduino et l’interfaçage d’IC avec le logiciel PC Windows !

LED-tour « Hello », Vu-mètre avancé de détection musique sans qu'avec Arduino d'ICet l'interfaçage avec le logiciel PC Windows ! Salut, tout le monde.Ce qui rend ce projet cool c'est le fait, que sa musique de télédétection, contrairement aux traditi
Le code Morse avec arduino + LED

Le code Morse avec arduino + LED

SalutJe ne sais pas la vraie raison, mais j'ai le béguin pour que l'ancienne technologie et ses trucs, le plus de chose j'ai jamais aimé est le code morse et comment ils communiquent, ainsi, dans mes premiers jours avec arduino - il y a trois ans je
6 LED pendule avec Arduino

6 LED pendule avec Arduino

c'est ce que vous devez faire un pendule de 6 LED avec Arduino :6 x LEDSRésistances de 6 x 330 ohms7 x fils de raccordement1 x carte de prototypage ou Perfboard1 x Arduino Uno ou Arduino Mega 2560Ce projet ne tarde pas à faire du tout.C'est le code q
Matrice de LED avec arduino en toute simplicité

Matrice de LED avec arduino en toute simplicité

Je vais vous apprendre à utiliser une matrice de Led MAX7219 avec arduino UNO et la meilleure partie est qu'il est super facile.Étape 1: Ce que vous devez ?La liste des pièces :1. MAX7219 LED Matrix2. M/F fils de raccordement3. Arduino UNO4. câble US
Commander une LED avec arduino et Wifly shield

Commander une LED avec arduino et Wifly shield

Pour démontrer comment vous pouvez contrôler les périphériques via wifi à l'aide du bouclier de wifly arduino, je vais passer sous et hors tension d'une LED en envoyant une requête http de mon navigateur web sur le wifly shield.Exigences :1. Arduino
8 x 8 x 8 LED Cube avec Arduino Mega (+ Sound + PS contrôleur + jeu)

8 x 8 x 8 LED Cube avec Arduino Mega (+ Sound + PS contrôleur + jeu)

il s'agit d'une instructable qui repose sur le CubeChr, (par SuperTech-IT, (et par das-labor.org, (http://www.das-labor.org/wiki/Borg3d_Bauanleitung...)mais je pense que sa meilleure et plus facile.J'ai commencé ce projet sans aucune qualification de