Faire un jeu de fil de buzz avec un arduino
Dans ce projet amusant, nous allons apprendre comment faire un jeu fil buzz avec l`Arduino. La plupart des pièces nécessaires se trouvent dans un kit de démarrage (ce qui est dans un kit de démarrage
Contenu
Consultez le résultat final - il joue même de la musique:
De quoi as-tu besoin
Voici les éléments de base dont vous aurez besoin pour réaliser ce projet:
- 1 x Arduino UNO ou similaire.
- 1 x cintre métallique.
- 2 x résistances 220 ohms.
- 1 x carte de test.
- 1 x buzzer piézo-électrique.
- 2 x clips crocodile.
- Assortiment de gaine thermorétractable.
- Mâle-mâle fil de montage.
Voici quelques pièces en option pour améliorer la construction:
- 1 x buzzer piézo supplémentaires.
- 1 x tige du goujon.
- 1 x affichage de segment Quad sept.
- 1 x résistance de 220 ohms.
- 1 x bouton momentané.
- Du fil de montage mâle-femelle.
- planche en bois (pour le cas).
- vis à bois assortis.
Presque tous les Arduino fonctionnera, à condition qu`elle comporte des broches assez. Jeter un coup d`œil à ce guide d`achat si vous n`êtes pas sûr de ce que vous avez besoin.Guide d`achat Arduino: Quel conseil devriez-vous obtenir?Guide d`achat Arduino: Quel conseil devriez-vous obtenir?Il y a tellement de différents types de cartes Arduino là-bas, vous seriez pardonné d`être confus. Que devriez-vous acheter pour votre projet? Aidons, avec ce guide d`achat Arduino!Lire la suite
Le plan de construction
Bien que cela puisse sembler complexe, il est en fait tout à fait un projet simple. Je vais commencer par le jeu de base, puis ajouter des composants supplémentaires pour augmenter la complexité. Vous pouvez « choisir » que vous le souhaitez en fonction des composants dont vous disposez.
Le mécanicien de base se compose d`une forme de fil et une boucle sur une poignée. Le joueur doit guider la boucle autour du cours sans les deux toucher. Si les deux touche, le circuit est terminé et le signal sonore retentit. Il est bien sûr possible de construire ce circuit en utilisant le microcontrôleur pas, mais où est le plaisir dans tout cela (et sinon comment voulez-vous apprendre à écouter la chanson thème « Flying Circus » Monty Python)?
Le cours
Ceci est la forme le joueur devra guider leur tour en boucle. Il est la base du jeu entier, alors faites bien! J`ai choisi d`avoir une petite goutte, suivie d`une grande montée. Pliez un cintre métallique dans la forme dont vous avez besoin. Fils de laiton ou de tube de cuivre fonctionneront tout aussi bien, même si un cintre peut être le plus avantageux.
Vous devrez peut-être porter des gants et utiliser une pince ou un marteau pour faire avancer les choses parfaites. Coupez l`excédent avec coupe-boulons. Laisser deux montants verticaux pour pousser à travers la base. Vous voulez ainsi de déposer les extrémités coupées pour la sécurité. Enfin, couper deux morceaux de gaine thermorétractable et la placer sur les extrémités de la façon suivante:
Cela isolera la boucle du cours, fournissant un début / fin ou d`une zone de sécurité. Sinon, une bande ou même une paille fera si vous n`avez pas un tube thermorétractable.
Maintenant attacher un câble à une extrémité du cours. Vous avez deux options: vous pouvez souder ou utiliser une pince crocodile. Une pince crocodile est l`option la plus facile, mais la soudure est une option plus fiable et à long terme. Assurez-vous de « malmener » la surface du cintre d`abord avec du papier de verre, et utiliser beaucoup de flux. (Jamais avant brasé? Apprenez à ici.)Apprenez à souder, avec ces conseils et projets simplesApprenez à souder, avec ces conseils et projets simplesÊtes-vous un peu intimidé par la pensée d`un fer chaud et le métal en fusion? Si vous voulez commencer à travailler avec l`électronique, vous allez avoir besoin d`apprendre à souder. Aidons.Lire la suite
En fonction de la taille du trou que vous percez dans la base à l`étape suivante, vous devrez peut-être alimenter le câble à travers le trou de montage en premier. L`utilisation de deux fils tordus ensemble augmentera la durabilité:
En utilisant une perceuse pour faire cela aide beaucoup:
La base
Video: Contrôle voiture avec Arduino Nano, via un Joystick
Il est temps de créer la base. Cela sert à tenir le cap en position verticale, ainsi que de fournir un endroit pour ancrer l`électronique à. J`ai utilisé quelques rognures de pin, bien que vous pouvez utiliser ce que vous avez autour de la maison - même une boîte en carton.
Couper trois morceaux pour former une forme « n ». Il suffit de visser (ou de la colle), ces trois pièces ensemble. Rappelez-vous de percer un trou pilote dans les pièces latérales premier à les empêcher le fractionnement. Vous pouvez fraiser les vis (surtout si vous remplirez et peinture), et je recommande fortement un peu de foret d`évasement. Si vous ne disposez pas d`un alésage d`outil de fraisage ou une perceuse, un foret de plus grand diamètre fera l`affaire.
Percez deux trous assez éloignés pour les extrémités du cours de s`asseoir dans. Fraiser le dessous prêt pour le collage.
La poignée
Maintenant, il est temps de faire la boucle / contrôleur. Twist un petit morceau du cintre à une extrémité pour créer une boucle avec une petite poignée en métal. Assurez-vous de déposer le bord coupé, puis le couvrir avec du ruban adhésif / mousse si nécessaire.
Cela formera l`autre moitié du circuit - lorsque cette boucle touche le cours qu`elle terminera le circuit (exactement comme un interrupteur). Souder (ou utiliser une pince crocodile) un autre fil au fond de cela, exactement la même chose que vous avez fait précédemment pour le cours.
Couper une petite longueur de cheville pour la poignée réelle. Cette boucle métallique emboîtera dans cette poignée. Si vous n`avez pas la cheville, vous pouvez arrondir un morceau de bois tendre carré à l`aide d`une ponceuse à bande ou disque (vous pouvez aussi utiliser du papier de verre, mais il faudrait beaucoup de temps).
Percez un trou dans cette poignée. Cela doit être assez grand pour la boucle métallique et le fil à travers:
Ceci est possible de le faire sur une perceuse à colonne, bien qu`il soit difficile. Un tour fera le travail parfaitement:
Video: Arnaque au distributeur de boissons - [ Le défi technologique ] - ROBOARNA
Oui, je suis tout à fait conscient que c`est un tour métallique (pour toute personne intéressée, c`est un tour de l`horlogerie Boley des années 1930. Je pense que c`est un 3C, mais j`aimerais entendre si vous savez plus à ce sujet).
Vous pouvez également utiliser un stylo à bille avec le centre enlevé.
Enfin, utilisez la colle chaude pour fixer le câble et la boucle dans la poignée. colle chaude fournira une forte (mais non permanent) appareil, il est donc parfait pour cela.
Video: 20141225 - Jeu de lumières Arduino - 24 voies
finition
Insérez le parcours de fil dans les trous de la base. Ne pas oublier d`ajouter la boucle / contrôleur premier. Utiliser à nouveau la colle chaude pour fixer le cadre à la base en remplissant les trous fraisés sur la face inférieure de la base de la manière suivante:
Le circuit
Voici le circuit complet. Vous ne devez pas faire le vôtre aussi complexe - lire la suite que nous décomposons chaque partie.
Tout d`abord, relier les deux éléments piézo-électriques à broches numériques 10 et 11. La polarité n`a pas d`importance:
Vous ne devez pas utiliser deux piezo - la seule raison pour laquelle je l`ai fait est d`avoir un son buzz beaucoup plus fort lorsque les fils se touchent. Se connecter un côté à la broche numérique, et l`autre à la masse.
Maintenant, branchez le cours du métal et poignée:
Encore une fois, peu importe dans quel sens ces deux sont câblés. Cette partie du circuit est exactement comme un bouton ou un interrupteur - le joueur termine le circuit lorsque la boucle touche le cours. Assurez-vous d`inclure les deux résistances.
Un des liens résistance du circuit à la masse (appelée une résistance pull-down), assurant qu`il ne « flotte » (ce qui permet au changement Arduino pour détecter le circuit). L`autre résistance protège l`Arduino. Lorsque les deux parties touchent, + 5 V passe dans la broche numérique. Si cette résistance était pas présent il y aurait un mort court - votre ordinateur déconnectera la prise USB pour trop de courant si tu es chanceux.
Branchez le câble de signal (violet, sur le schéma) à la broche numérique 9.
Ensuite, connectez un bouton poussoir à la broche numérique 2:
Enfin, connecter l`afficheur à DEL à sept segments:
Ce modèle particulier est de Seeed. Celui-ci utilise un TM1637 pour conduire quatre écrans - cela signifie que deux broches numériques sont nécessaires. Relier GND Arduino sol et CCV Arduino + 5V. Relier D10 à Arduino broche numérique 13 et CLK à la broche numérique 12.
Le code
Pour ce projet fonctionne, vous aurez besoin de deux fichiers supplémentaires. La première est appelée pitches.h
. Ce fichier mappe simplement les noms de notes à leur valeur piézo-électrique. Cela rend beaucoup plus facile d`écrire un morceau, comme vous pouvez simplement dire « NOTE_C3 » plutôt que « 31 », par exemple. Ceci est dans le domaine public et est disponible sur le site Arduino ici. Suivez les instructions pour créer un nouveau fichier appelé pitches.h
(Alternativement, collez le code dans votre script existant).
Ensuite, vous devez une méthode pour jouer effectivement des notes / mélodies sur le piézo. Ce point essentiel par Anthony DiGirolamo sur Github contient le code dont vous avez besoin. Copier tout entre « buzz vide » et « }} » et le coller dans votre fichier principal. Pour référence, la voici:
vide bourdonner(int targetPin, longue la fréquence, longue longueur) {/ * Buzzer exemple fonction par Rob Faludihttp: //faludi.comhttps: //gist.github.com/AnthonyDiGirolamo/1405180*/longue delayValue = 1000000/la fréquence/2- // calculer la valeur de retard entre les transitions//// 1 seconde la valeur de microsecondes, divisé par la fréquence, puis divisée en deux depuis//// il y a deux phases de chaque cyclelongue numCycles = la fréquence * longueur/ 1000- // calculer le nombre de cycles pour le moment approprié//// multiplier la fréquence, ce qui est vraiment cycles par seconde, par le nombre de secondes à//// obtenir le nombre total de cycles pour produirepour (longue je=0- je lt; numCycles- je++){ // pour la longueur calculée du temps ...digitalWrite(targetPin,HAUTE)- // écrire la broche de l`avertisseur sonore haut pour pousser le diaphragmedelayMicroseconds(delayValue)- // attendre la valeur de retard calculéedigitalWrite(targetPin,FAIBLE)- // écrire le bas broche buzzer pour retirer le diaphragmedelayMicroseconds(delayValue)- // attendre encore pour la valeur de retard calculée}}
La dernière bibliothèque dont vous avez besoin est de contrôler l`affichage à sept segments - vous pouvez sauter cette étape si vous n`utilisez pas un. Cette bibliothèque est appelée TM1637 et a été créé par Seeed, la même société qui a créé la carte de conducteur.
Dans l`IDE Arduino, cliquez sur « Gérer les bibliothèques » (Esquisser gt; inclure la bibliothèque gt; gérer les bibliothèques). Cela fera le gestionnaire de bibliothèque. Permettez-lui quelques secondes pour mettre à jour et la recherche dans la zone de recherche en haut à droite « TM1637 ». Deux bibliothèques sont disponibles - vous voulez « TM1637 » et non « TM1637Display ». Sélectionnez puis cliquez sur « Installer ».
Une dernière tâche avec cette bibliothèque - il est pas terminée! En l`état actuel, la bibliothèque ne peut afficher les numéros 0-9 et A-F. Si cela couvre tout ce que vous souhaitez afficher, vous pouvez sauter cette étape. Sinon, vous devrez modifier le code. Se détendre! Ce n`est pas aussi difficile que cela puisse paraître, et si vous pouvez écrire du code en utilisant l`IDE Arduino, vous pouvez le faire.
Tout d`abord, ouvrez votre dossier de bibliothèque. Ce sera dans votre dossier Arduino. c`est sous Mac OS X, en / Utilisateurs / Joe / Documents / Arduino / Bibliothèques
. Ouvrez le dossier appelé TM1637. Vous devrez modifier le fichier appelé TM1637.cpp
- vous pouvez ignorer en toute sécurité l`autre fichier avec l`extension .h
. Ouvrez ce fichier dans votre éditeur de texte favori (pour moi, c`est Sublime Text 3), le Bloc-notes ou l`Arduino IDE.
Modifier la troisième ligne de code de celle-ci:
statique int8_t TubeTab[] = {0x3f,0x06,0x5b,0x4F,0x66,0x6D,0x7D,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}-// 0 ~ 9, A, B, C, D, E, F
Pour ça:
statique int8_t TubeTab[] = {/ * Par défaut * /0x3f, // 0 0x06, // 10x5b, // 20x4F, // 3 0x66, // 40x6D, // 50x7D, // 60x07, // 7 0x7f, // 8 0x6f, // 90x77, // A - 100x7c, // b - 110x39, // C - 120x5e, // d - 130x79, // E - 140x71, // F - 15/ * Supplémentaire * /0x174, // h - 160x176, // H - 170x138, // L - 180x15, // M - 190x137, // n - 200x73, // P - 210x67, // q - 220x131, // r - 230x78, // t - 240x240 // - 25}-
Vous pouvez maintenant enregistrer et fermer ce fichier. Après chaque élément, le commentaire décrit ce personnage c`est. La partie suivante du commentaire est l`indice de l`élément.
Il est temps pour le code réel. Tout d`abord, comprennent les deux bibliothèques mentionnées précédemment:
#comprendre #comprendre
Maintenant, créez l`objet d`affichage:
TM1637 *_afficher = Nouveau TM1637(12, 13)-
Ne vous inquiétez pas si vous ne comprenez pas la syntaxe - cette ligne indique à l`Arduino broches 12 et 13 sont fixés à un affichage à sept segments, et de le configurer correctement.
La chanson est enregistrée dans mélodie
et tempo
. Ceux-ci contiennent toutes les notes et la durée de la note pour la musique. Si vous souhaitez changer la musique, modifier ces tableaux (bien que ce n`est pas aussi simple que coller dans les valeurs de notes, le calendrier est une partie très importante de la musique). le songState
variables stocke simplement la position de la dernière note jouée. Cela garantit que la mélodie est jouée du début à la fin, plutôt que de sauter autour incohérente:
int songState = 0-int mélodie[] = {NOTE_F4,...}int tempo[] = {8,...}
Notez que j`ai supprimé le contenu des tableaux, voir ci-dessous pour le code complet.
Ce code est non bloquant - cela signifie que l`Arduino peut effectuer plusieurs tâches simultanément. Jeter un coup d`œil à cette explication pour plus d`informations. Voici comment les compteurs sont configurés:Retard Arduino Fonction, et pourquoi vous devriez pas l`utiliserRetard Arduino Fonction, et pourquoi vous devriez pas l`utiliserBien que retard () est pratique pour des démonstrations de base de la façon dont fonctionne Arduino, vous devriez vraiment pas l`utiliser dans le monde réel. Voici pourquoi, et ce que vous devez utiliser à la place.Lire la suite
non signé longue previousMillis1 = 0-const longue intervalle1 = 1500-
la variable previousMillis1
sera mise à jour à un stade ultérieur pour mémoriser l`heure actuelle. le intervalle1
variable stocke la durée d`attente entre l`exécution de code - dans ce cas, 1,5 seconde. Elle est définie comme const
, ce qui signifie qu`il est constant et ne changera jamais - cela permet à l`Arduino d`optimiser le code.
À l`intérieur de installer()
fonction il y a quelques choses qui se passent. Tout d`abord, les entrées et les sorties sont configurés. Cela doit être fait, si l`Arduino sait ce qui est relié à chacune de ses broches pour:
pinMode(9, CONTRIBUTION)- // circuit de configurationpinMode(dix, SORTIE)- // buzzer de configuration 1pinMode(11, SORTIE)- // buzzer de configuration 2pinMode(2, CONTRIBUTION)- // Bouton de configuration
Maintenant, l`affichage doit la configuration:
_afficher-gt;ensemble(5)- // luminosité réglée_afficher-gt;point(faux)- // Supprimer deux points_afficher-gt;initialisation()- // commencer affichage
Les méthodes ensemble
, point
, et initialisation
sont tous contenus dans le _afficher
objet. Au lieu d`un point, un pointeur ( « -gt; ») est utilisé pour y accéder. Encore une fois, ne vous inquiétez pas la syntaxe (bien que, si vous souhaitez en savoir plus, consulter Pointeurs C ++).
La boucle principale a deux modes de jeu: défi et le jeu. Le jeu libre permet au joueur de jouer un nombre illimité de fois. mode Challenge est une minuterie pendant 20 secondes à l`aide du showCountdown
méthode. Il utilise le bouton pour démarrer et arrêter le chronomètre. actuellement, la seule façon de changer de mode de jeu est de modifier manuellement la variable appelée mode
. Voyez si vous pouvez ajouter un autre bouton pour faire et modifier le code approprié.
le bourdonner
méthode joue les notes qui lui sont données. Il est utilisé en conjonction avec chanter
. La méthode Chantez passe par chaque note et joue. Cette méthode est appelée régulièrement, même si elle ne jouiez la note suivante lorsque le temps est écoulé depuis la dernière lecture. Une fois que la chanson a atteint la fin, il remet à zéro la chanson au verset 1 (songState = 14
). Vous pouvez définir cette valeur à zéro pour commencer la chanson au début, mais la raison pour ce faire est de sauter l`introduction. L`introduction est jouée une fois après l`Arduino est mis sous tension, et il ne se joue pas à nouveau.
le showFree
et showPlay
méthodes écrivent simplement les mots « libre » et « PLAY » à l`écran. Remarquez comment le « r » en libre est minuscule, alors que tous les autres caractères sont en majuscules. Ceci est l`une des limites de sept écrans du segment. Ils ne peuvent pas montrer toutes les lettres de l`alphabet, et quelques-uns des personnages qu`ils peuvent afficher doivent être en cas mixtes.
le toggleFreePlay
méthode clignote l`affichage entre « FREE » et « PLAY ». Encore une fois, il le fait d`une manière non-blocage.
Une autre méthode utile est showNumber
. Cela écrit un numéro à deux caractères du milieu de l`écran comme ceci:
L`affichage est assez intelligent pour savoir comment afficher un grand nombre, il doit être dit explicitement ce qu`il faut faire. Cette méthode utilise une logique simple pour montrer le nombre approprié de chaque caractère.
La dernière méthode utilisée est appelée showCountdown
. Cela commence un compteur à 20, et diminue par un à chaque seconde. Si cela arrive à zéro, il bourdonne trois fois, pour indiquer que le temps est écoulé.
Voici tout ce que le code mis en place:
#comprendre // inclure la bibliothèque d`affichage#comprendre // emplacements comprennentTM1637 *_afficher = Nouveau TM1637(12, 13)- // créer un objet d`affichage, 12 = CLK (horloge), 13 = D10 (données)// la musiqueint songState = 0-int mélodie[] = {NOTE_F4, NOTE_E4, NOTE_D4, NOTE_CS4,NOTE_C4, NOTE_B3, NOTE_AS3, NOTE_A3,NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_A3,NOTE_G3, NOTE_C4, 0,NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3,NOTE_GS3, NOTE_A3, NOTE_F4, NOTE_C4,NOTE_C4, NOTE_A3, NOTE_AS3, NOTE_AS3,NOTE_AS3, NOTE_C4, NOTE_D4, 0,NOTE_AS3, NOTE_G3, NOTE_G3, NOTE_G3,NOTE_FS3, NOTE_G3, NOTE_E4, NOTE_D4,NOTE_D4, NOTE_AS3, NOTE_A3, NOTE_A3,NOTE_A3, NOTE_AS3, NOTE_C4, 0,NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3,NOTE_GS3, NOTE_A3, NOTE_A4, NOTE_F4,NOTE_F4, NOTE_C4, NOTE_B3, NOTE_G4,NOTE_G4, NOTE_G4, NOTE_G4, 0,NOTE_G4, NOTE_E4, NOTE_G4, NOTE_G4,NOTE_FS4, NOTE_G4, NOTE_D4, NOTE_G4,NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_C4,NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, 0}-int tempo[] = {8, 16, 8, 16,8, 16, 8, 16,16, 16, 16, 8,16, 8, 3,12, 16, 16, 16,8, 16, 8, 16,8, 16, 8, 16,8, 16, 4, 12,12, 16, 16, 16,8, 16, 8, 16,8, 16, 8, 16,8, 16, 4, 12,12, 16, 16, 16,8, 16, 8, 16,8, 16, 8, 16,8, 16, 4, 16,12, 17, 17, 17,8, 12, 17, 17,17, 8, 16, 8,16, 8, 16, 8, 1}-// configuration non de blocage// jeu gratuitnon signé longue previousMillis1 = 0- // mots de temps les derniers modifiésconst longue intervalle1 = 1500- // intervalle entre le changement// la musiquenon signé longue previousMillis2 = 0- // la dernière fois changéconst longue interval2 = 100- // intervalle entre les notesint DisplayStatus = 0- // garder une trace de ce qui s`afficheint mode = 0- // garder une trace du mode de jeu - changement à 0 ou 1 pour différents modescompte à rebours bool = faux-non signé longue previousMillis3 = 0- // la dernière fois changéconst longue interval3 = 1000- // intervalle entre le compte à reboursint compter = 20- // minuterie de mode défivide installer() {// mettre votre code d`installation ici, pour exécuter une fois:pinMode(9, CONTRIBUTION)- // circuit de configurationpinMode(dix, SORTIE)- // buzzer de configuration 1pinMode(11, SORTIE)- // buzzer de configuration 2pinMode(2, CONTRIBUTION)- // Bouton de configuration_afficher-gt;ensemble(5)- // luminosité réglée_afficher-gt;point(faux)- // Supprimer deux points_afficher-gt;initialisation()- // commencer affichage}vide boucle() {// mettre votre code principal ici, pour exécuter de façon répétitive:si(mode == 0) {// mode Défisi(digitalRead(2) == HAUTE) {retard(25)-si(digitalRead(2) == HAUTE) {compte à rebours = vrai- // arrêter le compte à rebours}autre {compte à rebours = faux- // arrêter le compte à rebours}}si(compte à rebours) {showCountdown()- // compte à rebours avance}}autre {// jeu gratuittoggleFreePlay()-}si(digitalRead(dix) == HAUTE) {retard(25)-si(digitalRead(dix) == HAUTE) {tandis que(digitalRead(dix) == HAUTE) {bourdonner(11, NOTE_B0, 1000/24)-}}}autrechanter()-}vide showCountdown() {// compte à rebours le temps restantnon signé longue currentMillis = Millis()- // heure actuellesi (currentMillis - previousMillis3 gt; = interval3) {previousMillis3 = currentMillis---compter-showNumber(compter)-si(compter == 0) {// jeu terminécompte à rebours = faux-compter = 20-// réinitialiser le compte à rebours// buzz 3 foisbourdonner(11, NOTE_B0, 1000/24)-retard(100)-bourdonner(11, NOTE_B0, 1000/24)-retard(100