====== MIDIvibes ====== * Porteur du projet : Reso-nance * Date : 04/2020 * Licence : libre ! * Lien : [[https://github.com/reso-nance/midivibes | code arduino]] {{tag>MIDI arduino vibreur moteur}} ===== Description ===== Un arduino contrôle des vibreurs par MIDI-USB. À chaque vibreur est attribué un numéro de **Control Change** qui permet de l'actionner plus ou moins rapidement. ===== Matériaux ===== * un arduino micro / leonardo / zéro * au moins un vibreur et pour chaque vibreur : * une diode 1N4001 ou équivalente * un transistor NPN 2N2222 ou équivalent * une résistance 330R * un condensateur 0.1µF * une alimentation 5V ou 3V selon le vibreur ===== Circuit ===== Le circuit est très simple. Chaque vibreur est actionné par un petit transistor NPN. Une diode de roue libre protège le transistor et une résistance limite le courant provenant du pin de l'arduino. Un petit condensateur filtre les transients. {{ :projets:midivibes:wiring.png?direct&600 |}} ===== Code ===== La librairie [[https://www.arduino.cc/en/Reference/MIDIUSB | midiUSB]] permet à l'arduino d'être reconnu comme une interface MIDI. Afin de pouvoir connecter des vibreurs sur n'importe quel pin numérique, la librairie [[https://github.com/bhagman/SoftPWM | SoftPWM]] gère manuellement le PWM. Chaque moteur est déclaré dans un //struct// contenant le pin associé ainsi que son numéro de CC : struct motor { byte ccNumber; unsigned int pin; }; Ces //structs// sont ensuite ajoutés à un tableau qui permettra d'en modifier le nombre dynamiquement, sans avoir à modifier le reste du code. Il suffira donc d'ajouter une ligne ''%%{numéroDuCC, numéroDuPin}%%'' au tableau pour ajouter un vibreur: motor motors[] = { {1, 2}, // CC#1 will control pin 2 {2, 3} // and CC#2 -> pin 3 }; Selon le moteur, il est possible qu'il n'ait pas la force de vibrer en dessous d'une certaine valeur de PWM. Cette valeur peut être renseignée dans un //#define// en début de fichier : ''%%#define MIN_PWM 30 // minimal PWM value that will start the motor (0~255)%%''. De cette façon, le moteur tournera plus ou moins vite selon la valeur du CC reçu mais il s'éteindra toujours en recevant zéro. Un fondu peut également être appliqué en ouverture comme en fermeture à chaque changement de valeur. Sa durée est réglable en ms (0 pour le désactiver). Enfin, le numéro du canal MIDI est également réglable dans un //define//. ===== Photos ===== Autres photos, galerie, ...