Mon système est composé des éléments suivants :
• 1 Arduino (celui utilisé est un Arduino Mega 2560)
• 1 capteur piézoélectrique
• 1 méga ohms résistance
• Maquette contenant 3 LEDs
• 1 câble USB A-to-B
• 1 ordinateur portable sous Visual 2010 Studios et iTunes
La résistance 1Mega-ohms est présente pour empêcher le capteur piézoélectrique d’endommager le port d’entrée de l’Arduino. Les LEDs permettent d’obtenir de l’utilisateur. Le voyant orange clignote lorsque l’utilisateur clique sur le capteur, montrant ainsi que le système enregistre activement l’eau du robinet. La LED rouge clignote lorsque l’utilisateur clique sur un modèle qui n’est pas reconnu. De même, la LED verte clignote lorsque le motif d’une utilisation de robinets est acceptée par le système.
Le système utilise tant est alimenté par un câble USB reliant l’Arduino et l’ordinateur portable.
LOGICIEL (ARDUINO)
Le logiciel qui s’exécute sur l’Arduino est une version édulcorée du C++, inspirée par le langage de programmation de traitement. Il a été écrit à l’aide de l’IDE Arduino standard qui est disponible en ligne.
Le programme est relativement simple. Le système contient un tableau des modèles de robinet stockée qui peut être mis en correspondance. Le système tourne en boucle, attendez le premier robinet être détectée. Une fois que cela se produit, le système marque l’heure actuelle et attend le prochain robinet. Pour chaque robinet consécutive, le système stocke l’intervalle de temps entre elle et le robinet précédent. Ce processus se poursuit jusqu'à ce que le nombre maximal d’entailles est dépassé, ou aucun robinet n’a été détecté pendant une seconde. Les robinets sont ensuite normalisées. Cela permet pour robinets joué différents tempos pour être mis en correspondance avec le même modèle. Normalisation est effectuée en divisant chaque intervalle stockée par l’intervalle plus long et en multipliant par 100, transformant ainsi chaque intervalle à un entier compris entre 1 et 100.
Les modèles de robinet ont trois critères majeurs pour répondre si ils sont censées correspondre à un modèle stocké :
1. les deux modèles doivent contenir le même nombre d’entailles
2. un intervalle de l’utilisateur ne peut pas s’écarter de plus de 25 % par rapport à l’intervalle correspondant stockée
3. la moyenne de tous les intervalles ne peut s’écarter de plus de 15 % par rapport à la moyenne des intervalles stockées.
Si toutes ces conditions sont réunies, le système accepte le modèle. Le système transmet ensuite l’index de ce modèle comme un seul octet par la connexion série fournie par le câble USB à un programme d’écoute en cours d’exécution sur l’ordinateur portable (dans notre cas, un programme c# interfacé avec iTunes). Une fois l’octet a été transmis, le système retourne en attente pour un nouveau modèle de robinet utilisateur.
Les modèles de robinet actuellement mis en œuvre sont :
• Un seul robinet
• Deux robinets
• Trois robinets uniforme
• Quatre robinets uniforme
• Un robinet lent suivi par deux robinets rapides
• Deux robinets rapide suivies d’une lent robinet
• Le modèle « Rasage et une coupe de cheveux, deux Bits »
Cette liste de motifs est facilement personnalisable et extensible, une fois qu’on devient familier avec la façon dont les modèles sont représentés.
LOGICIEL (ORDINATEUR PORTABLE)
J’ai choisi d’écrire l’application portable-côté en c# parce que j’ai eu précédente femme victime écrit des interfaces personnalisées avec Arduinos en c#. Cela pourrait facilement être implémenté dans d’autres langues, aussi longtemps que le langage prend en charge la communication série via les ports COM.
Le programme c# utilise cadre XNA de Microsoft qui, bien que normalement utilisé pour développer des jeux, fournit un flux de programme nice, axée sur la boucle pour interfaçage avec Arduinos et d’afficher une interface utilisateur de visual.
Le programme commence ouvre une connexion série pour l’Arduino et la création d’une interface d’iTunes. Une fois que celles-ci sont établies, le programme interroge sans cesse la connexion série d’octets. S’il y a des octets qui seront lus, le programme lit chacun sous forme d’entier et exécute la commande correspondante. Par exemple, si l’octet contenue le chiffre 1, le programme bascule si iTunes est en lecture ou en pause. Puisqu’un byte contient 32 valeurs, un total de 32 commandes individuelles peut être émis de l’Arduino au programme c#. Dans cette démo de base, seulement six commandements sont effectivement mises en œuvre.
Les numéros reçus, commandes et modèles associés sont les suivants :
0. activer/désactiver des visualisations – « Rasage et une coupe de cheveux, deux Bits »
1. Lecture/Pause – un robinet de basculer
2. la prochaine chanson – deux robinets
3. précédente chanson – trois robinets uniformes
4. avance rapide – un seul robinet lent suivi par deux robinets rapides
5. rewind – deux robinets rapides suivies d’une lent robinet
6. activer/désactiver shuffle – quatre robinets uniformes
C# interfaces avec iTunes par le biais de son API COM. Mon programme affiche également un GUI de base qui fournit des informations sur l’état d’iTunes, la position au sein de la chanson en cours et de la piste en cours nom, artiste et album.