Aller au contenu

Harpe Laser

L’objectif de ce projet est de construire une harpe laser pouvant jouer des notes de musiques. La harpe donne l’illusion de créer plusieurs faisceaux de lasers grâce à un seul faisceau envoyé sur un miroir relié à un moteur tournant très vite. Lorsqu’un ou plusieurs des faisceaux sont coupés, une photorésistance (LDR) le détecte et envoie un signal à une carte Arduino qui va envoyer la note MIDI correspondant au faisceau coupé au PC pour que le son soit joué.

Composants utilisés:

  • Laser 1mW
  • Miroir
  • Moteur pas à pas
  • Carte Arduino Uno
  • Motor Shield
  • Photorésistance (LDR) x4
  • Résistances x5
  • Bouton

Modélisation:

vu du dessous
vu du deussus
vue de profile

Le modèle de la harpe a été réalisée grâce au logiciel Onshape puis découpée dans du MDF d’une épaisseur de 6mm avec une découpeuse laser. Notre harpe est constituée d’une boite principale qui contient la carte Arduino ainsi que le mécanisme permettant de créer les faisceaux laser. Cette boîte présente une fente sur le dessus pour que les faisceaux laser sortent. Ensuit il y a l’arc intérieur dans lequel on a percé des trous pour y insérer les photorésistances, ces trous ne sont pas présents sur la modélisation car ils ont été fait manuellement après fixation du laser afin d’être certains que les faisceaux frappent les photorésistances. Enfin il y l’arc extérieur qui permet de consolider la structure et de cacher les câbles reliant les photorésistances à la carte Arduino On peut aussi remarquer sur la vue de côté il y a un trou dans la parois prévu pour faire sortir les différents câbles, notamment celui d’alimentation et celui permettant la communication entre la carte Arduino et l’ordinateur. Quant au trou sur le dessus de la boite, il sert à placer un bouton poussoir qui contrôle l’allumage et l’extinction de la harpe, c’est le bouton vert que l’on voit ci-dessous.

Fonctionnement:

Ce projet est constitué de trois parties principales: découper le laser en plusieurs faisceaux à l’aide du moteur, détecter les variations de luminosité avec les photorésistances et envoyer un signal à un ordinateur pour faire du son.

Génération des faisceaux laser:

Pour générer les différents faisceaux laser, nous utilisons un laser, un moteur pas à pas et un miroir. Le laser est placé à l’horizontale vers le miroir fixé sur l’axe du moteur. Nous avons choisi d’utiliser un moteur pas à pas car ce type de moteur peut s’arrêter à des positions très précises de manière rapide. Pour donner l’illusion de plusieurs faisceaux laser, nous utilisons donc cette particularité du moteur pour faire osciller le miroir entre plusieurs positions très rapidement, en marquant un petit temps de pause à chaque position pour créer un faisceau ponctuel. La persistance rétinienne de l’œil donne donne l’illusion que tous les faisceaux sont actifs en même temps alors qu’en réalité, c’est le même faisceau qui change très rapidement de position. Pour rendre le faisceau encore plus précis, nous éteignons le laser entre chaque changement de position du moteur, pour le rallumer une fois le moteur arrêté. La boucle que nous utilisons pour le moteur et le laser est donc la suivante:

  • Faire avancer le moteur de 5 pas (Chaque pas de notre moteur le fait tourner de 1.8°, nous avons choisi un écartement de 5 pas entre nos faisceaux)
  • Allumer le laser
  • Attendre 10ms
  • Éteindre le laser

Si nous voulons 5 faisceaux, il nous suffit d’exécuter 5 fois cette boucle, puis 5 fois encore mais en inversant le sens du moteur pour que le faisceau revienne à sa position initiale.

Détection des variations de lumière

Une fois que les faisceaux laser sont créés, il faut un moyen de détecter quand un des faisceaux est coupé pour pouvoir produire un son. A l’origine, nous voulions utiliser une photorésistance placée à côté du moteur qui capterait la réflexion du laser sur la main du joueur. Cependant, pour que cette solution marche, il faudrait un laser très puissant et être dans une pièce très sombre. Après avoir vu la puissance d’un laser de 1 mW, nous avons compris que ça ne marcherait pas. La solution que nous avons trouvé est de construire une arche autour de la harpe pour pouvoir placer une photorésistance sur la trajectoire de chaque faisceau. Chaque photorésistance est branchée à la carte avec le montage suivant (nous utilisons une alimentation externe pour le 5V):

Montage des photorésistances

Ce montage nous permet de mesurer les variations de luminosité pour chaque photorésistance, et ainsi, savoir quand le laser est coupé par une main, cela se traduisant pas une grosse baisse de luminosité.

Cependant, placer les photorésistances sur la trajectoire des faisceaux apporte de nouveaux problèmes. En effet, le faisceau du laser est très fin, et donc si il ne touche pas directement la photorésistance, elle ne captera rien. Nous avons donc dû être très précis sur le contrôle du moteur et sur la fixation de chaque élément car la moindre variation sur la position du laser, du moteur ou du miroir décale complètement les faisceaux laser, qui ne sont plus alignés avec les photorésistances.

Il a aussi fallu faire en sorte qu’à chaque démarrage de la harpe, le laser commence toujours au même endroit: sur la première photorésistance qui est notre photorésistance de référence. Pour cela, nous avons plusieurs séquences de calibration qui permettent au moteur de toujours commencer au même endroit.

  • D’abord, nous avons la calibration de la photorésistance qui sert de repère au moteur. Elle réalise 40 mesures de la luminosité ambiante, puis la carte Arduino fait la moyenne de ces valeurs puis calcule un seuil au dessus duquel elle considèrera que la photorésistance capte le laser.
  • Ensuite, le laser s’allume et le moteur fait faire au miroir un tour complet pas par pas. Dès que le laser est aligné avec la photorésistance de référence, elle capte l’augmentation de luminosité et arrête le moteur.
  • Le laser va ensuite passer lentement sur chaque photorésistance pour que chacune d’elles mesure la valeur de luminosité du laser, puis la carte Arduino calcule un seuil pour chacune d’entre elles. En dessous de ce seuil, la carte considèrera que le laser est coupé. Finalement, le laser revient sur la photorésistance de référence.
  • Enfin, la boucle qui constitue la séquence principale de la harpe expliquée dans la partie 1) est lancée. Durant cette boucle, la carte va réaliser une mesure de la photorésistance correspondant à la position du moteur à chaque fois que le moteur bouge. Si cette valeur est inférieur au seuil calculé précédemment, la carte envoie un signal à l’ordinateur pour jouer un son.

Interface Arduino/Ordinateur

Pour jouer une note, la carte Arduino envoie 3 informations sur son port Serial: si la note est activée ou désactivée, sa hauteur, et sa vélocité. Nous utilisons le port Serial de la carte pour pouvoir envoyer les informations à l’ordinateur en passant par un câble USB, car sinon nous aurions dû acheter un adaptateur MIDI.

Ensuite, nous utilisons le logiciel Hairless MIDI<->Serial Bridge pour transformer les informations dans le format MIDI. Puis nous utilisons le logiciel LoopMidi qui nous permet de créer un port MIDI virtuel. Les informations venant de la carte sont donc d’abord transformées en MIDI puis envoyées dans le port virtuel. Finalement, nous pouvons lire ce port virtuel depuis un logiciel de musique comme FLStudio, ce qui nous permet d’affecter un instrument à la note reçue au format MIDI.

Le code arduino du projet est disponible ci-dessous:

Conclusion

A la fin de ce projet, nous avons réussi à avoir un prototype de harpe laser fonctionnel capable de jouer 4 notes de manière individuelle ou simultanée. Cependant, certaines choses peuvent être améliorées:

  • L’apparence de la structure de la harpe peut être améliorée pour la rendre plus belle esthétiquement, et pour mieux cacher les fils électriques
  • La solidité de la structure peut être aussi améliorée, car la structure actuelle de l’arche n’est pas assez stable et les photorésistances peuvent se décaler par rapport aux faisceaux laser
  • Le nombre de notes pourrait être augmenté en mettant plus de photorésistances. Pendant le projet, nous avons été limités sur ce point par la vitesse du moteur et le nombre disponible de photorésistances au fablab
  • Un moteur plus puissant pourrait être utilisé afin d’augmenter la vitesse de rotation du miroir, car actuellement, il tourne un peu trop lentement pour donner l’illusion complète d’avoir plusieurs faisceaux
  • Une machine à fumée pourrait être utilisée pour pouvoir voir les faisceaux laser

Malgré ces points à améliorer, nous sommes fiers de ce que nous avons créés et nous avons beaucoup appris sur des domaines comme la programmation sur des microcontrôleurs, l’électronique, la modélisation et la résolution de problèmes.