Boîte à lunch que fois des extraits de « The Simpsons »

si ce n’est pas une étape par étape instructable, j’espère que vous pouvez obtenir l’essentiel de ce que j’ai fait et je vais essayer de répondre aux questions de mon mieux.

Mon fils est un grand fan des Simpson (et je suppose que, oui je suis).  J’ai créé ceci comme un cadeau pour lui pour Noël.

Ce que nous avons ici est la boîte à lunch un Simpson qui, lorsque vous appuyez sur l’interrupteur rouge, jouera au hasard un des 413 fichiers wav stockés sur la carte SD qui est utilisée par le waveshield Adafruit.

Fait suite à une vidéo de lui en cours d’utilisation.

Les matériaux utilisés sont :

-Arduino UNO
-Kit de bouclier vague Adafruit v1.1
-Carte SD 2GB
-Boîte à lunch Simpsons - sur Amazon.com
-2 piles de 9 volts et 2 supports - radio shack
-3 LEDs
-un haut-parleur de 8 ohms
-un interrupteur DPDT
-un couple de condensateurs, résistances et un LM386 puce pour un petit amplificateur comme le son hors de l’écu de la vague n’est pas assez fort pour que l’orateur.

-certains fils

J’ai aussi utilisé un lecteur de carte SD et un programme appelé commutateur-il pour décompresser les fichiers wav.

Étapes à suivre :
1. acheter une Arduino Uno - nombreuses sources pour cela - environ 25,00 $

2. a acheté un Kit de Waveshield Adafruit - environ 22 h 00.
Ce qui doit être assemblé et les instructions sont ici :
http://www.Ladyada.net/make/waveshield/make.html

(Ceux-ci sont faciles à suivre les instructions avec beaucoup de bonnes photos)

3. acheter une carte de 2gb SD à utiliser dans le bouclier de la vague

4. fait une recherche sur internet pour: "Wav" Simpsons"et trouvé quelques sites qui avait tout à fait une bonne collection d’extraits de fichier wav de Simpsons.   J’ai pu (à l’aide de mon fils) Télécharger plus de 400 fichiers et enregistrez-les sur la carte SD.

-Remarque le bouclier vague n’aime pas les fichiers compressés pour certains fichiers devions être décompressés que j’ai fait à l’aide d’un logiciel freeware appelé « Switch-it ».

5. Etant donné que la sortie audio du bouclier vague est OK pour le casque, mais n’était pas assez forte pour que l’orateur, j’ai envoyé la sortie du bouclier vague à un petit amplificateur LM386 que j’ai construit en utilisant les instructions suivantes.

http://www.rason.org/projects/icamps/icamps.htm

6.  Ajouté des LEDs pour indiquer que l’appareil est en marche (interrupteur) et d’indiquer où il est autorisé à demander un nouveau fichier.

(note : J’ai ajouté une fonctionnalité qui quand on déprime l’interrupteur rouge lorsque la LED verte clignote, tous la vague les fichiers seront lus)

7. quelques autres observations :
-essentiellement le code attend l’interrupteur rouge être pressés.
elle génère ensuite un beween numéro randow 1 et 413 (le nombre de fichiers wave).  Il se lit à travers les fichiers wave et incrémente un compteur jusqu'à ce que le nombre aléatoire est atteint.  Il joue ensuite ce fichier.   Cela signifie que le nombre de fichiers est codé dans le code en dur.  Il n’y a probablement quelques moyen d’avoir le chiffre du code les fichiers combien il y a.
-parfois, il ne parvient pas à lire un fichier je pense car il n’aime pas les fichiers stéréo.

8. le code :

-copié à partir de diverses sources et donc indiqué dans le code.  Plus précisément, j’ai commencé avec le code qui est sur le site Adafruit et modifiés au besoin.

/*

Il s’agit de jouer un fichier wav au hasard chaque fois que le bouton est presse
v2 maintenant essayer d’ajouter bouton et autre code
v2 fonctionne bien
v3 - ajouter la possibilité de jouer toutes les chansons de maintenir le bouton enfoncé pendant le clignotement

*/

#include
#include

Carte de SdReader ;    Cet objet conserve les informations de la carte
Vol FatVolume ;    Il conserve les informations pour la partition sur la carte
FatReader racine ;   Il conserve les informations pour le répertoire racine de volumes

WaveHC vague ;      C’est le seul objet (audio) de la vague, puisque nous allons jouer seulement un à la fois

uint8_t dirLevel ; tiret de niveau pour les noms de fichier/dir (pour prettyprinting)
dir_t dirBuf ;     tampon pour répertoire lectures

#define DEBOUNCE 5 / / bouton debouncer
const int buttonPin = 8 ;     le nombre de la tige poussoir
buttonState int = 0 ;         variable pour la lecture de l’état de bouton poussoir

pour le jeu rsndom
long randNumber ;
longue ct = 0 ;

nécessaires pour jouer à tous les
playAll int = 0 ;
int numPress = 0 ;         variable pour la lecture de l’état de bouton poussoir
xx int = 0 ;
long firstTime = 1 ;

besoin de changer cela pour correspondre aux coûts numberr de fichiers wav sur carte sd
numWavs long = 413 ;

const int ledPin = 7 ;      le nombre de l’axe de la LED
Variables vont changer :
int ledState = élevé ;             ledState permet de définir la LED

/*
Définir des macros pour mettre des messages d’erreur dans la mémoire flash
*/
#define error(msg) error_P(PSTR(msg))

Définitions de fonction (nous les définissons ici, mais le code est ci-dessous)
void play (FatReader et dir) ;

Cette fonction pratique retournera le nombre d’octets actuellement libres en RAM, grand pour le débogage !
int freeRam(void)
{
extern int __bss_end ;
extern int * __brkval ;
int free_memory ;
Si ((int) __brkval == 0) {}
free_memory = ((int) & free_memory)-((int) & __bss_end) ;
}
else {}
free_memory = ((int) & free_memory)-((int) __brkval) ;
}
Return free_memory ;
}

//////////////////////////////////// SETUP
void setup() {}
Serial.Begin(9600) ;           mettre en place une bibliothèque série à 9600 bits/s pour le débogage

Si les broches d’entrée analogique 0 sont analogique non-connecté, aléatoire
bruit provoque l’appel à randomSeed() pour générer
nombre de graines différentes chaque fois le croquis est exécuté.
randomSeed() sera alors aléatoire la fonction aléatoire.
randomSeed(analogRead(3)) ;
initialiser la tige poussoir comme entrée :
pinMode (buttonPin, entrée) ;
Définissez la broche numérique en sortie :

pinMode (ledPin, sortie) ;
digitalWrite(ledPin,HIGH) ;

putstring_nl (« \nWave test!") ;  dire que nous nous sommes réveillés !

putstring ("RAM libre:") ;       Ce qui peut aider avec le débogage, manquer de RAM est mauvais
Serial.println(FreeRam()) ;

Si (! card.init()) {//play avec spi 8 MHz (par défaut plus rapide!)
erreur ("carte init. a échoué!") ;  Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
}

Enable optimiser la lecture - certaines cartes peuvent timeout. Désactiver si vous rencontrez des problèmes
card.partialBlockRead(true) ;

Maintenant, on va chercher une partition FAT !
uint8_t partie ;
pour (partie = 0; partie < 5; partie ++) {/ / nous avons jusqu'à 5 emplacements de regarder dans
Si (vol.init (carte, partie))
rupture ;                           Nous avons trouvé un, laisse en liberté sous caution
}
Si (partie == 5) {/ / si nous avons fini ne pas trouver un:(
erreur ("aucun FAT partition valide!") ;  Quelque chose a mal tourné, permet d’imprimer les raisons pour lesquelles
}

Permet d’indiquer à l’utilisateur sur ce que nous avons trouvé
putstring ("partition à l’aide") ;
Serial.Print (partie, DEC) ;
putstring (", est de type FAT") ;
Serial.println(vol.fatType(), DEC) ;     FAT16 ou FAT32 ?

Essayez d’ouvrir le répertoire racine
Si (! root.openRoot(vol)) {}
erreur ("Impossible d’ouvrir le répertoire racine!") ;      Quelque chose a mal tourné,
}

Ouf ! Nous avons passé les parties difficiles.
putstring_nl ("fichiers trouvés (* = fragmenté):") ;

Imprimer tous les fichiers dans tous les répertoires.
root.ls(LS_R | LS_FLAG_FRAGMENTED) ;


digitalWrite(ledPin,HIGH) ;
}

//////////////////////////////////// LOOP
void loop() {}
petite boucle pendant 3 secondes la première fois seulement
Si touche plus d’une fois, p [jeter toutes les vagues
Serial.println (firstTime) ;
Delay(1000) ;
Si (firstTime == 1) {}
faire
{
digitalWrite(ledPin,HIGH) ;
Delay(250) ;
digitalWrite(ledPin,LOW) ;
Delay(250) ;

numPress = digitalRead(buttonPin) ;
Si (numPress == HIGH) {}
playAll ++ ;
firstTime ++ ;
}
XX ++ ;
Serial.println (xx) ;
} tout en (xx < 10) ;

firstTime ++ ;
}

Serial.println (firstTime) ;
Serial.println (playAll) ;
Delay(1000) ;


lire l’état de la valeur du bouton poussoir :
buttonState = digitalRead(buttonPin) ;
digitalWrite(ledPin,HIGH) ;
Vérifiez si le bouton est appuyé.
Si c’est le cas, le buttonState est haute :
Si (buttonState == HIGH) {}

CT = 0 ;
lire un fichier wav c’est à dire continuer avec le code

digitalWrite(ledPin,LOW) ;

imprimer un nombre aléatoire de 1 à 60
randNumber = aléatoire (1, numWavs) ;
Serial.println(randNumber) ;

Delay(50) ;


root.Rewind() ;
Play(root) ;
}
else {}
ne rien faire

}
}

/////////////////////////////////// HELPERS
/*
imprimer des message d’erreur et arrêter
*/
void error_P (const char * str) {}
PgmPrint ("erreur:") ;
SerialPrint_P(str) ;
sdErrorCheck() ;
while(1) ;
}
/*
imprimer des message d’erreur et en cas d’erreur d’e/s SD, idéal pour le débogage !
*/
void sdErrorCheck(void) {}
Si (! card.errorCode()) retourner ;
PgmPrint ("\r\nSD I/O erreur:") ;
Serial.Print(Card.ErrorCode(), HEX) ;
PgmPrint (",") ;
Serial.println(Card.ErrorData(), HEX) ;
while(1) ;
}
/*
* jouer récursivement - débordement de pile possible si les sous-répertoires imbriqués trop
*/
void jouer {(FatReader & dir)
Fichier FatReader ;
while (dir.readDir(dirBuf) > 0) {/ / lire tous les fichiers dans le répertoire de l’un à la fois

Sauter il si elle n’est pas un sous-répertoire et non pas un. Fichier WAV
if (!. DIR_IS_SUBDIR(dirBuf)
& & strncmp_P ((char *) & dirBuf.name[8], PSTR("WAV"), 3)) {}
continuer ;
}

Serial.println() ;            effacer une ligne nouvelle

pour (uint8_t i = 0; i < dirLevel; i ++) {}
Serial.Write(' ') ;       Il s’agit de prettyprinting, mis en face des espaces
}
Si (! file.open (vol, dirBuf)) {/ / Ouvrez le fichier dans le répertoire
erreur ("file.open a échoué") ;          quelque chose a mal tourné
}

Si (file.isDir()) {/ / vérifier si nous avons ouvert un nouveau répertoire
putstring ("Subdir:") ;
printEntryName(dirBuf) ;
Serial.println() ;
dirLevel += 2 ;                      Ajouter des espaces plus
lire des fichiers dans le sous-répertoire
Play(file) ;                         récursive !
dirLevel-= 2 ;
}
else {}
AHA ! Nous avons trouvé un fichier qui n’est pas un répertoire
putstring ("jouer") ;
printEntryName(dirBuf) ;              Imprimez-le
Si (! wave.create(file)) {/ / Figure, est-ce un bon WAV ?
putstring ("pas un valide" WAV") ;     OK l’ignorer
} else {}
Serial.println() ;

Hourra, c’est un bon WAV !
CT ++ ;
Serial.println(randNumber) ;
Serial.println(CT) ;
Voici où nous jouons le fichier
veulent toutefois qu’un seul fichier wav qui est selectionné par nombre aléatoire
Si ((randNumber == ct) || (playAll > 1)) {

Wave.Play() ;

faire du bruit !

uint8_t n = 0 ;
tandis que (wave.isplaying) {/ / jouer ne se produit dans les interruptions, nous imprimons points en temps réel
putstring(".") ;
Si (! () ++ n % 32))Serial.println() ;
Delay(100) ;
}
digitalWrite(ledPin,HIGH) ;
}

sdErrorCheck() ;                    tout est OK ?
Si (wave.errors)Serial.println(wave.errors) ;     vague de décodage des erreurs
}
}


}
}

Articles Liés

Grillé cuit deux fois des patates douces avec Bacon Pain cannelle garniture

Grillé cuit deux fois des patates douces avec Bacon Pain cannelle garniture

Je pourrais manger un couple d'entre eux tous les jours et être heureux. Trois de mes favoris ; Bacon, cannelle et patates douces dans un plat, un peu fumé, un peu salé, un peu salé et un peu sucré, ma combinaison parfaite. Comme vous pouvez le voir
Oeuf de Pâques ou des bonbons contenant (origami assistée par ordinateur)

Oeuf de Pâques ou des bonbons contenant (origami assistée par ordinateur)

cette instructable vous guidera dans la création d'un conteneur décoratif pour Pâques, ou si vous désirez quelque chose vous voulez tenir. Je ne permets pas de choses en plus de bonbons.Matériaux :Ordinateur avec imprimante. Ajuster la taille de la c
Mourir & oeufs de Pâques avec des autocollants de décoration

Mourir & oeufs de Pâques avec des autocollants de décoration

J'adore décorer des oeufs de Pâques. Il est super amusant et ce qui peut être effectué toute l'année. Un couple d'années, je suis tombé sur une amusante façon de décorer et de teindre des oeufs de Pâques avec laser coupe autocollants de frontière et
Bent saison 1 Episode 6 « Mosa∩que Date » des flux de données en ligne | Regarder gratuitement

Bent saison 1 Episode 6 « Mosa∩que Date » des flux de données en ligne | Regarder gratuitement

Bent saison 1 Episode 6 « Date de tuile » Online Stream | Regarder gratuitement>>> regarder maintenant ! Cliquez ici <<<Précédemment sur Bent saison 1 Episode 5 « Maman », maman de Pete quand Vanessa retourne à la ville, Walt est détermi
Coloriage noir et blanc des Images avec The GIMP

Coloriage noir et blanc des Images avec The GIMP

j'ai trouvé plusieurs tutoriels ici et d'autres endroits qui ont montré comment coloriser une photo noir et blanche avec GIMP.  La plupart d'entre eux ont été compliquée et a trop d'étapes, alors j'ai décidé d'en écrire un qui devrait être facile pou
Le Seigneur des Anneaux Online - The Perfect Pie recette

Le Seigneur des Anneaux Online - The Perfect Pie recette

dans LOTRO, un de vos capacités artisanat ne peuvent être un cuisinier et de rendre les aliments qui vous donnera caractère mordus (effets de stimulation). Un des aliments de ce métier-able est le Perfect Pie. Il doit être parfait si peu hobbits rend
Contourner les règlements « sans chemise, sans chaussures, pas de service » avec des sandales on-the-fly !

Contourner les règlements « sans chemise, sans chaussures, pas de service » avec des sandales on-the-fly !

Ever voulait se lancer dans un établissement qui annonce « sans chemise, sans chaussures, aucun service » ? Jamais été demandé de quitter un tel établissement par manque de chaussures ? Voici la solution ! Notez qu'à distance, le modèle ci-dessous se
Comment pour faire des cartes Flash, The Fast, Easy et emprise

Comment pour faire des cartes Flash, The Fast, Easy et emprise

beaucoup de gens encore dessiner sur leurs fiches ou droit « proprement » sur eux, ou même découpe le texte à partir d'une feuille de papier imprimée, mais aucun de ceux air présentable. Ici, je vais vous montrer comment wow votre professeur avec vos
Créer des « War of The Worlds » inspiré « Junkbots »

Créer des « War of The Worlds » inspiré « Junkbots »

Our Hackerspace The Rabbit Hole a participé à la Instructables réutiliser construire nuit d'octobre. Nous avons un tas de plus en plus de « trucs » à la Rabbit Hole, vieux appareils électroniques, boîtes, morceaux de métal, matériaux restes et divers
Frank N. Stein vs les guerriers Wee

Frank N. Stein vs les guerriers Wee

Je suis impliqué dans une école de Taekwondo qui fonctionne avec notre local Parks and Recreation Department pour enseigner les arts martiaux aux familles et aux jeunes. Nous font usage des installations de la ville et la ville contribue à promouvoir
Pastèque Done Right : Des semences comme un Pro

Pastèque Done Right : Des semences comme un Pro

la pastèque est un passionné, fruits profondément savoureux qui exige d'être traitée comme la dame qu'elle est. Ici, à mon avis et expérience, est la meilleure façon de préparer, de semences et servir la Reine des fruits, melon d'eau.Étape 1: Prépare
Vif d’or origami (ou une boîte avec des ailes, tout ce que vous voulez l’appeler)

Vif d’or origami (ou une boîte avec des ailes, tout ce que vous voulez l’appeler)

Ok, j'ai donc été sur le web, lookin à trucs Harry Potter (comme toujours) quand j'ai trouvé cela ! Donc, ce n'est pas ma création, mais il est assez facile et amusant.PS Mon appareil s'est brisé, mes photos de peinture est tout ya eu!!PPS c'est mon
LEGO boîte à lunch ordinateur

LEGO boîte à lunch ordinateur

Avez-vous jamais voulu construire un ordinateur Raspberry Pi dans une boîte à lunch en utilisant les Legos ou autres briques emboîtables compatibles ? Tout d'abord, vous devrez mettre la main sur une boîte à lunch.Vous aurez besoin :Boîte à lunch 8 x
Construire un pistolet portail échelle 1:1 avec des lumières

Construire un pistolet portail échelle 1:1 avec des lumières

Introduction :Ce Instructable décrira en détail le processus que j'ai vécu tout en construisant ma propre Ouverture Science Handheld Portal Device [AKA le "Portal Gun"] des jeux Valve Portal et Portal 2. Bien que le Portal Gun est le principal o