Gants de l’Arduino (An Attempt) (2 / 5 étapes)

Étape 2: Le schéma / le Code

C’est le schéma et le code que j’ai utilisé de l’autre instructable. La seule différence que j’ai fait était que je voulais utiliser deux gants au lieu d’un gant et le bâton. De cette façon si vous voulez mime tout autre instrument, vous pourriez, par exemple si je voulais jouer comme une harpe ou quelque chose. Cette décision était purement visual.

------------------------------------------------------
Un tableau contenant la forme d’onde
d’un son de guitare
Char [] de forme d’onde =
{125, 148, 171, 194, 209, 230, 252, 255,
253, 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134 et 127,
105, 80, 58, 51,38, 22, 12, 2, 10, 35,
58, 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143, 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110} ;

Nous utilisons cette forme d’onde pour changer le
volume de la sortie
Char [] waveformVolume =
{125, 148, 171, 194, 209, 230, 252, 255,
253, 244, 235, 223, 207, 184, 169, 167,
163, 158, 146, 131, 126, 129, 134 et 127,
105, 80, 58, 51,38, 22, 12, 2, 10, 35,
58, 75, 89, 103, 120, 141, 150, 148, 145,
144, 140, 129, 116, 105, 95, 86, 75, 72,
73, 76, 88, 103, 117, 121, 120, 115, 120,
143, 159, 162, 156, 155, 163, 184, 202,
214, 215, 211, 213, 212, 205, 196, 182,
162, 142, 118, 99, 84, 68, 54, 40, 28,
19, 10, 7, 0, 0, 5, 9, 14, 21, 33,
49, 59, 65, 75, 92, 110} ;
Un tableau utilisé comme mémoire tampon afin d’éviter
distance de ponctuel erronée
mesures
unsigned int distance_buffer [] = {16000,
16000, 16000, 16000, 16000, 16000, 16000,
16000, 16000, 16000, 16000, 16000, 16000,
16000, 16000, 16000} ;

const int distance_length = 3 ;
int distance_index = 0 ;

Les valeurs de dépassement de capacité de 2 octaves
la fréquences d’int [] = {39, 42, 44, 47,
50, 52, 56, 59, 63, 66, 70, 74, 79,
84, 89, 94, 100, 105, 112, 118, 126,
133, 141, 149} ;

Hauteur d’origine
hauteur int = 160 ;

Accélération et volume initial
paramètre
int lastAcc = 0 ;
flotteur volume = 0 ;

lecture audio sur la broche 3
speakerpin octets = 3 ;

variable d’index pour la position des
forme d’onde
waveindex volatile octets = 0
currentvalue volatils octets = 0 ;

Broche utilisée pour capteur ultrasons
const int pingPin = 7 ;

Broches pour les potentiomètres
const int sustainPin = 1 ;
const int sensitivityPin = 2 ;

Broches pour chaque doigt de la gauche
main
const int finger1 = 9 ;
const int finger2 = 10 ;
const int finger3 = 11 ;
const int finger4 = 12 ;

int fingerValue = 0 ;

longue durée, pouces, cm ;

void setup() {}

pinMode(3,OUTPUT) ; Haut-parleur sur la broche 3

pinMode(finger1,INPUT) ;
pinMode(finger2,INPUT) ;
pinMode(finger3,INPUT) ;
pinMode(finger4,INPUT) ;

/**************************
Configuration audio PWM
****************************/
la valeur Timer2 rapide mode PWM
(double fréquence PWM)
bitSet (TCCR2A, WGM21) ;
bitSet (TCCR2B, CS20) ;
bitClear (TCCR2B, CS21) ;
bitClear (TCCR2B, CS22) ;

activer les interruptions maintenant qui enregistre
ont été mis en
SEI() ;

/*************************
Configuration d’interrupt Timer 1
*************************/
désactiver les interruptions tout en
registres sont configurés
CLI() ;

/ * Opération de port normal, épingles déconnectés
de fonctionnement de la minuterie (rupture pwm) * /
bitClear (TCCR1A, COM1A1) ;
bitClear (TCCR1A, COM1A1) ;
bitClear (TCCR1A, COM1A1) ;
bitClear (TCCR1A, COM1A1) ;

/ * Mode 4, CTC avec dessus valeur de Registre
OCR1A. Permet de régler le calage variable pour
l’interruption en écrivant de nouvelles valeurs à
OCR1A. */
bitClear (TCCR1A, WGM10) ;
bitClear (TCCR1A, WGM11) ;
bitSet (TCCR1B, WGM12) ;
bitClear (TCCR1B, WGM13) ;

/ * la valeur du diviseur d’horloge 8.  */
bitClear (TCCR1B, CS10) ;
bitSet (TCCR1B, CS11) ;
bitClear (TCCR1B, CS12) ;

/ * Désactiver Force sortie comparer pour
Canaux A et B. * /
bitClear (TCCR1C, FOC1A) ;
bitClear (TCCR1C, FOC1B) ;

/ * Initialise la sortie comparer
S’inscrire A à 160 pour définir le
premier pitch * /
OCR1A = 160 ;

désactiver l’interruption de la prise d’entrée
bitClear (TIMSK1, ICIE1) ;
désactiver la sortie
Comparer B interruption de Match
bitClear (TIMSK1, OCIE1B) ;
activer la sortie
Comparer une interruption du Match
bitSet (TIMSK1, OCIE1A) ;
désactiver le débordement interrompre
bitClear (TIMSK1, TOIE1) ;

Enable interrompt maintenant que
registres ont été établis
SEI() ;
}

Gestionnaire de débordement Timer
{ISR(TIMER1_COMPA_vect)}

/ * timer1 ISR.  Chaque fois qu’il
est appelé il affecte à speakerpin la
valeur suivante dans la forme d’onde []. Fréquence
modulation s’effectue en modifiant la
synchronisation entre les appels successifs de
Cette fonction, par exemple pour une tonalité de 1KHz,
régler l’allumage pour qu’il fonctionne
par le biais de forme d’onde [] 1000 fois
une seconde. */

réinitialiser le waveindex si elle a atteint
la fin du tableau

Si {(waveindex > 102)
waveindex = 0 ;
}

Définissez la valeur de sortie
Si {(volume > 0,03)
analogWrite (speakerpin,
waveformVolume[waveindex]) ;
}
waveindex ++ ;

Mise à jour le terrain
OCR1A = pitch ;
}

void loop()
{
Désactiver interputs, envoyer un ping
message et attendre la réponse.
CLI() ;
pinMode (pingPin, sortie) ;
digitalWrite (pingPin, basse) ;
delayMicroseconds(2) ;
digitalWrite (pingPin, HIGH) ;
delayMicroseconds(5) ;
digitalWrite (pingPin, basse) ;
durée = pulseIn (pingPin, haute, 2000) ;
SEI() ;
convertir l’heure dans un lointain
en centimètres
et le stocker dans la mémoire tampon
distance_buffer [distance_index ++
distance_length %] = Durée / 20 ;

Trouver dans la mémoire tampon la plus courte
distance mesurée
cm = 16000 ;
pour (int i = 0; i < distance_length; i ++) {}
cm = min (cm, distance_buffer[i]) ;
}

Vérifier quelles les doigts sont pressées
fingerValue = 5 ;
{if(!digitalRead(finger4))}
fingerValue = 4 ;
}
{if(!digitalRead(finger3))}
fingerValue = 3 ;
}
{if(!digitalRead(finger2))}
fingerValue = 2 ;
}
{if(!digitalRead(finger1))}
fingerValue = 1 ;
}

Mise à jour le sustain et
valeurs de sensibilité
flotteur soutenir =
Map(analogRead(sustainPin), 0,
1024, 101, 130) / 100,0 ;
sensibilité de l’int =
Map(analogRead(sensitivityPin),
0, 1024, 100, 200) ;

Mise à jour le volume
volume = volume / subir ;
Si (volume < 0) {}
volume = 0 ;
}

Vérifier l’accéléromètre
acc int = analogRead(0) ;
int accDiff = lastAcc - acc ;

Mise à jour la valeur du volume
Si (accDiff > 5 * (200 - sensibilité)) {}
volume = (float)
Pow (accDiff,
sensibilité / 100,0) / 50000 ;
}
lastAcc = acc ;

Vérifiez que le volume n’est pas supérieur à 1
Si {(volume > 95)
volume =. 95 ;
}

Mise à jour le volume dans la forme d’onde
pour (int i = 0; i < = 102; i ++) {}
waveformVolume [i] =
((forme d’onde [i] - 127) * volume) + 127 ;
}

La valeur du terrain selon la distance
entre les deux mains et la
doigts pressés
Si (cm < 102 & & cm > 0) {}
Si {(cm > 30)
hauteur = fréquences [7 +
(((cm-30) / 24) * 4 + fingerValue - 1)] ;
} else {}
hauteur = carte (cm, 0, 30, 39, 79) ;
}
} else {}
hauteur = fréquences [7 +
(((102-30)/24) * 4 + fingerValue - 1)] ;
}

Délai pour éviter le rebond de signaux
Delay(50) ;
}

------------------------------------------------------

Articles Liés

Gant de puissance Arduino

Gant de puissance Arduino

l'idée principale est de créer un accessoire pour le plaisir et cosplay semblable à un gant de fer homme ou canons blaster Megaman.Étape 1: pièces je vais utiliser un anneau de fruits Ada 16 pixels et 8 5 bandes de pixel avec un arduino accéléromètre
Percussions MIDI gant en utilisant Arduino et capteurs de lumière

Percussions MIDI gant en utilisant Arduino et capteurs de lumière

je vais vous décrire un plaisir et un moyen facile de créer votre propre expression sonore MIDI activé gant sans dépenser beaucoup d'argent sur les Interfaces MIDI ou coûteux capteurs.N'hésitez pas à me contacter directement par mail si vous aimez ou
Maître de l’accordéon - un synthétiseur de musique python/arduino

Maître de l’accordéon - un synthétiseur de musique python/arduino

Ce projet a été créé par une équipe de trois étudiants de l'Université de Pennsylvanie à MHacks 2014 Detroit (un week-end Hackathon). L'objectif de ce projet est de créer un synthétiseur de musique qui génère des signaux basé sur les gestes de l'util
Gant contrôlée main robotisée - Version Simple et peu coûteuse

Gant contrôlée main robotisée - Version Simple et peu coûteuse

Ce projet est basé sur la main robotique DIY instructable situé ici. Étant un étudiant médiocre cependant, je n'avais pas les moyens concoctera ~ 500 $ pour un 3D imprimés main et un autre 50 $ pour les servos. J'ai entrepris de réviser une conceptio
BRICOLAGE main robotisée contrôlée par un gant et Arduino

BRICOLAGE main robotisée contrôlée par un gant et Arduino

Cette idée de projet m'est venue lorsque j'étais assis sur un lit dans une chambre d'hôtel alors qu'il est en vacances. J'ai pensé: « Ce serait vraiment bien d'avoir une main robotisée que je peux contrôler ma propre main! » À leur retour, j'ai entre
Arduino alimenté les doublures de gants chauffants

Arduino alimenté les doublures de gants chauffants

Arduino alimenté gants chauffantsCe projet est sur la façon de rendre les monde plus intelligent chauffé gant des doublures de conditions extrêmement froides comme celles de Minnesota ou personnes qui ont syndrome(like me) de Raynaud. Ces gants vous
Détecteur de métaux Arduino gant

Détecteur de métaux Arduino gant

Ce projet est pour l'utilisation de la détection de métal pour le plaisir.J'ai voulu créer ce parce que je laisse tomber mes bijoux tout le temps et je suis habituellement ramper sur le sol pendant cinq minutes, essayant de trouver où il est tombé. P
Bras robotique avec des gants, téléphone Android et Arduino

Bras robotique avec des gants, téléphone Android et Arduino

Aujourd'hui, nous avons presque 2 techniques pour jouer avec le bras robotisé, soit par les boutons , par exemple comme le bouclier de jeu ou en utilisant des gants qui incluent les capteurs. Pourtant, aujourd'hui je vais vous montrer une nouvelle te
Arduino portable clavier gant

Arduino portable clavier gant

Le gant de clavier portable Arduino est un périphérique d'entrée du geste basé arduino alimenté. En déplaçant un doigt, vous pouvez utiliser un T9 fonde essentiellement un système d'entrée pour taper !L'appareil a été initialement développé comme une
Gant de télécommande TV en utilisant Arduino, projet sommative TEJ3

Gant de télécommande TV en utilisant Arduino, projet sommative TEJ3

Aujourd'hui nous allons apprendre comment créer un gant de la télécommande de votre téléviseur en utilisant un Arduino. J'ai fait un gant qui n'utilise que trois doigts, pour avoir tous les cinq, vous aurez besoin flex capteur (5), résistance (5), fi
Porter de nuit élégant collier

Porter de nuit élégant collier

Voici quelques idées sur la façon de créer un élégant pendentif qui brille doucement pendant la nuit. Il est très facile de créer et peut faire à peu de frais. La forme simple, rectangulaire s'adapte très bien à n'importe quel look que vous souhaitez
Horloge météo Arduino IoT

Horloge météo Arduino IoT

Dans ce Instructable, nous allons construire une horloge qui affiche aussi à l'intérieur et en dehors de conditions climatiques.J'ai l'habitude d'avoir une horloge peu cool qui, en plus de dire l'heure, affiche également la température à l'intérieur
Arduino VFD affichage horloge tutoriel - un Guide pour l’affichage VFD

Arduino VFD affichage horloge tutoriel - un Guide pour l’affichage VFD

... + Un petit peu sur les mécanismes d'entraînementTe souviens-tu (encore) l'affichage de votre ancien lecteur de CD, HiFi système ou voiture radio ? Avez-vous déjà remarqué les affichages utilisés dans votre supermarché local qui vous montre l'élém
Le gant SomaPhonic

Le gant SomaPhonic

Haptika est un ensemble de kits de bricolage technologie portable conçu pour atténuer les effets des abus sexuels et physiques. Survivants d'abus peuvent éventuellement contredisent les effets physiologiques et psychologiques de la violence par l'exp