DIY MIDI USB CONTROLEUR Project Arduino Uno Besoin d'aide
- 76 réponses
- 10 participants
- 13 096 vues
- 10 followers
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
Sujet de la discussion Posté le 24/01/2019 à 13:39:48DIY MIDI USB CONTROLEUR Project Arduino Uno Besoin d'aide
Bonjour a tous
Mon projet est de réaliser un contrôleur MIDI
uniquement dans le but de commander des paramètres de mon logiciel mao et autres Vst
6 Potentiometres ( 10kohm )
8 boutons
je peux programmer via le logiciel Arduino ,la carte est bien reconnu par le port USB ,et je peux également flasher le contrôleur USB ATMEGA16U2 via le logiciel FLIP afin de pouvoir transmettre les Données Midi via L'usb manipulation que se fait sans problème
https://dartmobo.com/midi-over-usb/
Ci joint voici les programmes ainsi que les projets dont je me suis inspiré
https://www.hackster.io/etiennedesportes/ableton-live-midi-controller-9182b3
Les boutons fonctionnent le mappage se fait correctement dans mon logiciel Mao
Mais les potentiomètres ne fonctionnent pas
Leur course est différente
Leur mappage en midi est impossible car selon la position des potentiomètres la diode TX clignote en permanence
Même si je réussie a mapper un ou 2 potentiomètres le mappage des autres est impossible
Car des que je touche un autre potentiomètre la diode TX clignote donc le mappage est aléatoire
J'ai également testé avant avec ce programme
https://www.instructables.com/id/Easy-3-Pot-Potentiometer-Arduino-Uno-Effects-Midi-/
et le logiciel Hailess Midi et loopBe1
Les 3 potentiomètres (2k2ohm) fonctionnaient
Mon schéma de câblage
Est ce que Le problème vient du code ou bien est ce que mon câblage au niveau des potentiomètres n'est pas bon ?
Sur D'autres projets similaires comme celui ci
https://www.instructables.com/id/Custom-Arduino-MIDI-Controller/
il est conseillé de mettre des condensateurs de 100nf entre le masse et la commande ainsi qu'entre le + et la masse de chaque potentiomètres dans le but d’éliminer les bruits
je vous remercie par avance pour votre aide
Le code principale
La bibliothèque Midi.h
Mon projet est de réaliser un contrôleur MIDI
uniquement dans le but de commander des paramètres de mon logiciel mao et autres Vst
6 Potentiometres ( 10kohm )
8 boutons
je peux programmer via le logiciel Arduino ,la carte est bien reconnu par le port USB ,et je peux également flasher le contrôleur USB ATMEGA16U2 via le logiciel FLIP afin de pouvoir transmettre les Données Midi via L'usb manipulation que se fait sans problème
https://dartmobo.com/midi-over-usb/
Ci joint voici les programmes ainsi que les projets dont je me suis inspiré
https://www.hackster.io/etiennedesportes/ableton-live-midi-controller-9182b3
Les boutons fonctionnent le mappage se fait correctement dans mon logiciel Mao
Mais les potentiomètres ne fonctionnent pas
Leur course est différente
Leur mappage en midi est impossible car selon la position des potentiomètres la diode TX clignote en permanence
Même si je réussie a mapper un ou 2 potentiomètres le mappage des autres est impossible
Car des que je touche un autre potentiomètre la diode TX clignote donc le mappage est aléatoire
J'ai également testé avant avec ce programme
https://www.instructables.com/id/Easy-3-Pot-Potentiometer-Arduino-Uno-Effects-Midi-/
et le logiciel Hailess Midi et loopBe1
Les 3 potentiomètres (2k2ohm) fonctionnaient
Mon schéma de câblage
Est ce que Le problème vient du code ou bien est ce que mon câblage au niveau des potentiomètres n'est pas bon ?
Sur D'autres projets similaires comme celui ci
https://www.instructables.com/id/Custom-Arduino-MIDI-Controller/
il est conseillé de mettre des condensateurs de 100nf entre le masse et la commande ainsi qu'entre le + et la masse de chaque potentiomètres dans le but d’éliminer les bruits
je vous remercie par avance pour votre aide
Le code principale
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h> // INlcude MIDI library
const int buttonPin = 2; // the number of the Button pin
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;
const int buttonPin8 = 9;
// the number of the pushbutton pin
const int ledPin = 11; // the number of the LED pin
const int ledPin2 = 12;
const int ledPin3 = 13;
const int ledPin4 = 14;
const int ledPin5 = 15;
const int ledPin6 = 16;
const int ledPin7 = 17;
const int ledPin8 = 18;
// variables will change:
boolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state
boolean currentState2 = LOW;
boolean lastState2 = LOW;
boolean currentState3 = LOW;
boolean lastState3 = LOW;
boolean currentState4 = LOW;
boolean lastState4 = LOW;
boolean currentState5 = LOW;
boolean lastState5 = LOW;
boolean currentState6 = LOW;
boolean lastState6 = LOW;
boolean currentState7 = LOW;
boolean lastState7 = LOW;
boolean currentState8 = LOW;
boolean lastState8 = LOW;
void setup() {
Serial.begin(31250); // default midi speed rate
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(ledPin3, OUTPUT);
pinMode(buttonPin3,INPUT_PULLUP);
pinMode(ledPin4, OUTPUT);
pinMode(buttonPin4, INPUT_PULLUP);
pinMode(ledPin5, OUTPUT);
pinMode(buttonPin5, INPUT_PULLUP);
pinMode(ledPin6, OUTPUT);
pinMode(buttonPin6, INPUT_PULLUP);
pinMode(ledPin7, OUTPUT);
pinMode(buttonPin7,INPUT_PULLUP);
pinMode(ledPin8, OUTPUT);
pinMode(buttonPin8, INPUT_PULLUP);
MIDI.begin();
}
static int iAn0Val, iAn1Val, iAn2Val, iAn3Val, iAn4Val, iAn5Val;
void loop(){
// read the state of the pushbutton value:
currentState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (currentState == LOW && lastState == HIGH) {
digitalWrite(ledPin,HIGH);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
else if (currentState == HIGH && lastState == LOW) {
digitalWrite(ledPin, LOW);
MIDI.sendNoteOn(42,127,1);
// turn LED on
delay(20);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
lastState = currentState;
currentState2 = digitalRead(buttonPin2);
if (currentState2 == LOW && lastState2 == HIGH) {
digitalWrite(ledPin2,HIGH);
MIDI.sendNoteOff(39,0,1);
}
else if (currentState2 == HIGH && lastState2 == LOW) {
digitalWrite(ledPin2, LOW);
MIDI.sendNoteOn(39,127,1);
delay(20);
MIDI.sendNoteOff(39,0,1);
}
lastState2 = currentState2;
currentState3 = digitalRead(buttonPin3);
if (currentState3 == LOW && lastState3 == HIGH) {
digitalWrite(ledPin3,HIGH);
MIDI.sendNoteOff(40,0,1);
}
else if (currentState3 == HIGH && lastState3 == LOW) {
digitalWrite(ledPin3, LOW);
MIDI.sendNoteOn(40,127,1);
delay(20);
MIDI.sendNoteOff(40,0,1);
}
lastState3 = currentState3;
currentState4 = digitalRead(buttonPin4);
if (currentState4 == LOW && lastState4 == HIGH) {
digitalWrite(ledPin4,HIGH);
MIDI.sendNoteOff(41,0,1);
}
else if (currentState4 == HIGH && lastState4 == LOW) {
digitalWrite(ledPin4, LOW);
MIDI.sendNoteOn(41,127,1);
delay(20);
MIDI.sendNoteOff(41,0,1);
}
lastState4 = currentState4;
currentState5 = digitalRead(buttonPin5);
if (currentState5 == LOW && lastState5 == HIGH) {
digitalWrite(ledPin5,HIGH);
MIDI.sendNoteOff(38,0,1);
}
else if (currentState5 == HIGH && lastState5 == LOW) {
digitalWrite(ledPin5, LOW);
MIDI.sendNoteOn(38,127,1);
delay(20);
MIDI.sendNoteOff(38,0,1);
}
lastState5 = currentState5;
currentState6 = digitalRead(buttonPin6);
if (currentState6 == LOW && lastState6 == HIGH) {
digitalWrite(ledPin6,HIGH);
MIDI.sendNoteOff(43,0,1);
}
else if (currentState6 == HIGH && lastState6 == LOW) {
digitalWrite(ledPin6, LOW);
MIDI.sendNoteOn(43,127,1);
delay(20);
MIDI.sendNoteOff(43,0,1);
}
lastState6 = currentState6;
currentState7 = digitalRead(buttonPin7);
if (currentState7 == LOW && lastState7 == HIGH) {
digitalWrite(ledPin7,HIGH);
MIDI.sendNoteOff(37,0,1);
}
else if (currentState7 == HIGH && lastState7 == LOW) {
digitalWrite(ledPin7, LOW);
MIDI.sendNoteOn(37,127,1);
delay(20);
MIDI.sendNoteOff(37,0,1);
}
lastState7 = currentState7;
currentState8 = digitalRead(buttonPin8);
if (currentState8 == LOW && lastState8 == HIGH) {
digitalWrite(ledPin8,HIGH);
MIDI.sendNoteOff(44,0,1);
}
else if (currentState8 == HIGH && lastState8 == LOW) {
digitalWrite(ledPin8, LOW);
MIDI.sendNoteOn(44,127,1);
delay(20);
MIDI.sendNoteOff(44,0,1);
}
lastState8 = currentState8;
static int iAn0ValPrev;
iAn0ValPrev = iAn0Val; // previous value
iAn0Val = analogRead(A0)/8; // Divide by 8 to get range of 0-127 for midi
analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX value
static int iAn1ValPrev;
iAn1ValPrev = iAn1Val;
iAn1Val = analogRead(A1)/8;
analogPinMidiTX(2,iAn1Val,iAn1ValPrev);
static int iAn2ValPrev;
iAn2ValPrev = iAn2Val;
iAn2Val = analogRead(A2)/8;
analogPinMidiTX(3,iAn2Val,iAn2ValPrev);
static int iAn3ValPrev;
iAn3ValPrev = iAn3Val;
iAn3Val = analogRead(A3)/8;
analogPinMidiTX(4,iAn3Val,iAn3ValPrev);
static int iAn4ValPrev;
iAn4ValPrev = iAn4Val;
iAn4Val = analogRead(A4)/8;
analogPinMidiTX(5,iAn4Val,iAn4ValPrev);
static int iAn5ValPrev;
iAn5ValPrev = iAn5Val;
iAn5Val = analogRead(A5)/8;
analogPinMidiTX(6,iAn5Val,iAn5ValPrev);
}
void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{
// TX Value only if it has changed
if(iValPrev != iVal)
{
MidiTX(176,iChan,iVal); // 176 = CC command, 1 = Which Control, val = value read from Potentionmeter
}
}
void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //Valeur en Midi Command
{
Serial.write(MESSAGE);
Serial.write(CONTROL);
Serial.write(VALUE);
}
const int buttonPin = 2; // the number of the Button pin
const int buttonPin2 = 3;
const int buttonPin3 = 4;
const int buttonPin4 = 5;
const int buttonPin5 = 6;
const int buttonPin6 = 7;
const int buttonPin7 = 8;
const int buttonPin8 = 9;
// the number of the pushbutton pin
const int ledPin = 11; // the number of the LED pin
const int ledPin2 = 12;
const int ledPin3 = 13;
const int ledPin4 = 14;
const int ledPin5 = 15;
const int ledPin6 = 16;
const int ledPin7 = 17;
const int ledPin8 = 18;
// variables will change:
boolean currentState = LOW;//stroage for current button state
boolean lastState = LOW;//storage for last button state
boolean currentState2 = LOW;
boolean lastState2 = LOW;
boolean currentState3 = LOW;
boolean lastState3 = LOW;
boolean currentState4 = LOW;
boolean lastState4 = LOW;
boolean currentState5 = LOW;
boolean lastState5 = LOW;
boolean currentState6 = LOW;
boolean lastState6 = LOW;
boolean currentState7 = LOW;
boolean lastState7 = LOW;
boolean currentState8 = LOW;
boolean lastState8 = LOW;
void setup() {
Serial.begin(31250); // default midi speed rate
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin2, OUTPUT);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(ledPin3, OUTPUT);
pinMode(buttonPin3,INPUT_PULLUP);
pinMode(ledPin4, OUTPUT);
pinMode(buttonPin4, INPUT_PULLUP);
pinMode(ledPin5, OUTPUT);
pinMode(buttonPin5, INPUT_PULLUP);
pinMode(ledPin6, OUTPUT);
pinMode(buttonPin6, INPUT_PULLUP);
pinMode(ledPin7, OUTPUT);
pinMode(buttonPin7,INPUT_PULLUP);
pinMode(ledPin8, OUTPUT);
pinMode(buttonPin8, INPUT_PULLUP);
MIDI.begin();
}
static int iAn0Val, iAn1Val, iAn2Val, iAn3Val, iAn4Val, iAn5Val;
void loop(){
// read the state of the pushbutton value:
currentState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (currentState == LOW && lastState == HIGH) {
digitalWrite(ledPin,HIGH);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
else if (currentState == HIGH && lastState == LOW) {
digitalWrite(ledPin, LOW);
MIDI.sendNoteOn(42,127,1);
// turn LED on
delay(20);
MIDI.sendNoteOff(42,0,1);
// turn LED off
}
lastState = currentState;
currentState2 = digitalRead(buttonPin2);
if (currentState2 == LOW && lastState2 == HIGH) {
digitalWrite(ledPin2,HIGH);
MIDI.sendNoteOff(39,0,1);
}
else if (currentState2 == HIGH && lastState2 == LOW) {
digitalWrite(ledPin2, LOW);
MIDI.sendNoteOn(39,127,1);
delay(20);
MIDI.sendNoteOff(39,0,1);
}
lastState2 = currentState2;
currentState3 = digitalRead(buttonPin3);
if (currentState3 == LOW && lastState3 == HIGH) {
digitalWrite(ledPin3,HIGH);
MIDI.sendNoteOff(40,0,1);
}
else if (currentState3 == HIGH && lastState3 == LOW) {
digitalWrite(ledPin3, LOW);
MIDI.sendNoteOn(40,127,1);
delay(20);
MIDI.sendNoteOff(40,0,1);
}
lastState3 = currentState3;
currentState4 = digitalRead(buttonPin4);
if (currentState4 == LOW && lastState4 == HIGH) {
digitalWrite(ledPin4,HIGH);
MIDI.sendNoteOff(41,0,1);
}
else if (currentState4 == HIGH && lastState4 == LOW) {
digitalWrite(ledPin4, LOW);
MIDI.sendNoteOn(41,127,1);
delay(20);
MIDI.sendNoteOff(41,0,1);
}
lastState4 = currentState4;
currentState5 = digitalRead(buttonPin5);
if (currentState5 == LOW && lastState5 == HIGH) {
digitalWrite(ledPin5,HIGH);
MIDI.sendNoteOff(38,0,1);
}
else if (currentState5 == HIGH && lastState5 == LOW) {
digitalWrite(ledPin5, LOW);
MIDI.sendNoteOn(38,127,1);
delay(20);
MIDI.sendNoteOff(38,0,1);
}
lastState5 = currentState5;
currentState6 = digitalRead(buttonPin6);
if (currentState6 == LOW && lastState6 == HIGH) {
digitalWrite(ledPin6,HIGH);
MIDI.sendNoteOff(43,0,1);
}
else if (currentState6 == HIGH && lastState6 == LOW) {
digitalWrite(ledPin6, LOW);
MIDI.sendNoteOn(43,127,1);
delay(20);
MIDI.sendNoteOff(43,0,1);
}
lastState6 = currentState6;
currentState7 = digitalRead(buttonPin7);
if (currentState7 == LOW && lastState7 == HIGH) {
digitalWrite(ledPin7,HIGH);
MIDI.sendNoteOff(37,0,1);
}
else if (currentState7 == HIGH && lastState7 == LOW) {
digitalWrite(ledPin7, LOW);
MIDI.sendNoteOn(37,127,1);
delay(20);
MIDI.sendNoteOff(37,0,1);
}
lastState7 = currentState7;
currentState8 = digitalRead(buttonPin8);
if (currentState8 == LOW && lastState8 == HIGH) {
digitalWrite(ledPin8,HIGH);
MIDI.sendNoteOff(44,0,1);
}
else if (currentState8 == HIGH && lastState8 == LOW) {
digitalWrite(ledPin8, LOW);
MIDI.sendNoteOn(44,127,1);
delay(20);
MIDI.sendNoteOff(44,0,1);
}
lastState8 = currentState8;
static int iAn0ValPrev;
iAn0ValPrev = iAn0Val; // previous value
iAn0Val = analogRead(A0)/8; // Divide by 8 to get range of 0-127 for midi
analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX value
static int iAn1ValPrev;
iAn1ValPrev = iAn1Val;
iAn1Val = analogRead(A1)/8;
analogPinMidiTX(2,iAn1Val,iAn1ValPrev);
static int iAn2ValPrev;
iAn2ValPrev = iAn2Val;
iAn2Val = analogRead(A2)/8;
analogPinMidiTX(3,iAn2Val,iAn2ValPrev);
static int iAn3ValPrev;
iAn3ValPrev = iAn3Val;
iAn3Val = analogRead(A3)/8;
analogPinMidiTX(4,iAn3Val,iAn3ValPrev);
static int iAn4ValPrev;
iAn4ValPrev = iAn4Val;
iAn4Val = analogRead(A4)/8;
analogPinMidiTX(5,iAn4Val,iAn4ValPrev);
static int iAn5ValPrev;
iAn5ValPrev = iAn5Val;
iAn5Val = analogRead(A5)/8;
analogPinMidiTX(6,iAn5Val,iAn5ValPrev);
}
void analogPinMidiTX(int iChan, int iVal, int iValPrev)
{
// TX Value only if it has changed
if(iValPrev != iVal)
{
MidiTX(176,iChan,iVal); // 176 = CC command, 1 = Which Control, val = value read from Potentionmeter
}
}
void MidiTX(unsigned char MESSAGE, unsigned char CONTROL, unsigned char VALUE) //Valeur en Midi Command
{
Serial.write(MESSAGE);
Serial.write(CONTROL);
Serial.write(VALUE);
}
La bibliothèque Midi.h
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h>
/*
Basic I/O MIDI tutorial
by Franky
28/07/2009
*/
#define LED 13 // LED pin on Arduino board
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(4); // Launch MIDI with default options
// input channel is set to 4
}
void loop() {
if (MIDI.read()) {
digitalWrite(LED,HIGH); // Blink the LED
MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1)
delay(1000); // Wait for a second
MIDI.sendNoteOff(42,0,1); // Stop the note
digitalWrite(LED,LOW);
}
}
/*
Basic I/O MIDI tutorial
by Franky
28/07/2009
*/
#define LED 13 // LED pin on Arduino board
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(4); // Launch MIDI with default options
// input channel is set to 4
}
void loop() {
if (MIDI.read()) {
digitalWrite(LED,HIGH); // Blink the LED
MIDI.sendNoteOn(42,127,1); // Send a Note (pitch 42, velo 127 on channel 1)
delay(1000); // Wait for a second
MIDI.sendNoteOff(42,0,1); // Stop the note
digitalWrite(LED,LOW);
}
}
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h>
// This function will be automatically called when a NoteOn is received.
// It must be a void-returning function with the correct parameters,
// see documentation here:
// http://arduinomidilib.sourceforge.net/class_m_i_d_i___class.html
void HandleNoteOn(byte channel, byte pitch, byte velocity) {
// Do whatever you want when you receive a Note On.
if (velocity == 0) {
// This acts like a NoteOff.
}
// This function will be automatically called when a NoteOn is received.
// It must be a void-returning function with the correct parameters,
// see documentation here:
// http://arduinomidilib.sourceforge.net/class_m_i_d_i___class.html
void HandleNoteOn(byte channel, byte pitch, byte velocity) {
// Do whatever you want when you receive a Note On.
if (velocity == 0) {
// This acts like a NoteOff.
}
Spoiler - Cliquer ici pour lire la suite
#include <MIDI.h>
/*
MIDI Input tutorial
by Franky
28/07/2009
NOTE: for easier MIDI input reading,
take a look a the Callbacks example.
*/
#define LED 13 // LED pin on Arduino board
void BlinkLed(byte num) { // Basic blink function
for (byte i=0;i<num;i++) {
digitalWrite(LED,HIGH);
delay(50);
digitalWrite(LED,LOW);
delay(50);
}
}
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(); // Launch MIDI with default options
// (input channel is default set to 1)
}
void loop() {
if (MIDI.read()) { // Is there a MIDI message incoming ?
switch(MIDI.getType()) { // Get the type of the message we caught
case ProgramChange: // If it is a Program Change
BlinkLed(MIDI.getData1()); // Blink the LED a number of times
// correponding to the program number
// (0 to 127, it can last a while..)
break;
// See the online reference for other message types
default:
break;
}
}
}
/*
MIDI Input tutorial
by Franky
28/07/2009
NOTE: for easier MIDI input reading,
take a look a the Callbacks example.
*/
#define LED 13 // LED pin on Arduino board
void BlinkLed(byte num) { // Basic blink function
for (byte i=0;i<num;i++) {
digitalWrite(LED,HIGH);
delay(50);
digitalWrite(LED,LOW);
delay(50);
}
}
void setup() {
pinMode(LED, OUTPUT);
MIDI.begin(); // Launch MIDI with default options
// (input channel is default set to 1)
}
void loop() {
if (MIDI.read()) { // Is there a MIDI message incoming ?
switch(MIDI.getType()) { // Get the type of the message we caught
case ProgramChange: // If it is a Program Change
BlinkLed(MIDI.getData1()); // Blink the LED a number of times
// correponding to the program number
// (0 to 127, it can last a while..)
break;
// See the online reference for other message types
default:
break;
}
}
}
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
61 Posté le 13/06/2019 à 22:59:45
Citation :
Tu peux diminuer la consommation avec l'astuce de la persistance rétinienne, deux LED qui clignotent très vite à tour de rôle consomment comme une seule.
Il faut donc créer un sous programme qui aurait pour fonction d'allumer et éteindre chaque cercle de Led sur un temps très court ?
Citation :
Si tu alimentes directement tes rings par un transfo +5V, sans passer par la carte il n'y a alors plus de limites..
Quel genre de transfo ne présente pas de limite pour cette utilisation ?
Quelque chose dans ce genre?
https://www.amazon.fr/HAILI-AC110V-Transformateur-dalimentation-Convertisseur/dp/B07Q2VXDKT/ref=sr_1_fkmr0_1?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=5v%2B220V%2Btranffomatur&qid=1560459457&s=gateway&sr=8-1-fkmr0&th=1
[ Dernière édition du message le 13/06/2019 à 23:05:01 ]
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
62 Posté le 13/06/2019 à 23:02:40
Ou bien encore ça?
https://www.amazon.fr/Transformateur-Adaptateur-Bande-Alimentation-V-220/dp/B01G0Q3RXY/ref=pd_sim_107_5/257-9586545-5698853?_encoding=UTF8&pd_rd_i=B01G0Q3RWU&pd_rd_r=5b2cdb44-8e1e-11e9-8b5b-974a470d72c7&pd_rd_w=u5Teu&pd_rd_wg=jEJgP&pf_rd_p=7e133c34-2a2a-4f4f-8372-6a26c70ca073&pf_rd_r=EMYTGWP39Z821VJWM0Z4&refRID=EMYTGWP39Z821VJWM0Z4&th=1
https://www.amazon.fr/TOP-CHARGEUR-Adaptateur-Alimentation-Certification/dp/B07PM41CNR/ref=sr_1_29?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=bloc+alimentation+5V&qid=1560460042&s=electronics&sr=1-29
https://www.amazon.fr/SoulBay-Universel-Adaptateur-dalimentation-d%C3%A9coupage/dp/B07DG16TKS/ref=sr_1_19?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=bloc+alimentation+5V+EMBOUT&qid=1560460119&s=electronics&sr=1-19
https://www.amazon.fr/Transformateur-Adaptateur-Bande-Alimentation-V-220/dp/B01G0Q3RXY/ref=pd_sim_107_5/257-9586545-5698853?_encoding=UTF8&pd_rd_i=B01G0Q3RWU&pd_rd_r=5b2cdb44-8e1e-11e9-8b5b-974a470d72c7&pd_rd_w=u5Teu&pd_rd_wg=jEJgP&pf_rd_p=7e133c34-2a2a-4f4f-8372-6a26c70ca073&pf_rd_r=EMYTGWP39Z821VJWM0Z4&refRID=EMYTGWP39Z821VJWM0Z4&th=1
https://www.amazon.fr/TOP-CHARGEUR-Adaptateur-Alimentation-Certification/dp/B07PM41CNR/ref=sr_1_29?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=bloc+alimentation+5V&qid=1560460042&s=electronics&sr=1-29
https://www.amazon.fr/SoulBay-Universel-Adaptateur-dalimentation-d%C3%A9coupage/dp/B07DG16TKS/ref=sr_1_19?__mk_fr_FR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&keywords=bloc+alimentation+5V+EMBOUT&qid=1560460119&s=electronics&sr=1-19
[ Dernière édition du message le 13/06/2019 à 23:09:39 ]
Rémy M. (chimimic)
14200
Modérateur·trice thématique
Membre depuis 22 ans
63 Posté le 14/06/2019 à 04:07:30
Citation de Mat :
Il faut donc créer un sous programme qui aurait pour fonction d'allumer et éteindre chaque cercle de Led sur un temps très court ?
C'est une solution en effet, si les LED du ring ne bénéficient pas localement d'une possibilité de réglage de luminosité (les LED WS2812 des anneaux que j'ai utilisés pour mon vumètre 018 le peuvent, je n'ai pas regardé quel modèle tu utilises). Pour éviter tout effet de scintillement gênant, je te conseille d'utiliser une fréquence de rafraichissement d'au moins 50 Hz pour chaque LED ou groupe de LED (donc 150 Hz pour 3 anneaux, 250 Hz pour 5 anneaux). Cela bien sûr joue sur la puissance lumineuse perçue par l'oeil, mais quand il y a assez de flux au départ (avant diminution), ce n'est pas un problème. Il est certain aussi que cela rajoute du code, mais on n'a rien sans rien : faire fonctionner 5 anneaux en ne consommant au maximum que le courant d'un seul, ça vaut le coup.
Citation de Mat :
Quel genre de transfo ne présente pas de limite pour cette utilisation ?
Ceux qui peuvent délivrer le courant dont tu as besoin.
Si tu as besoin de 2 A sous 5 V, eh bien, prend un bloc alim 5 V d'au moins 2 A (2,5 A conseillé, la marge n'est pas de trop, surtout si tu choisis un modèle à bas coût).
Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
64 Posté le 14/06/2019 à 14:09:41
Citation :
(les LED WS2812 des anneaux que j'ai utilisés pour mon vumètre 018 le peuvent, je n'ai pas regardé quel modèle tu utilises)
J’utilise exactement les mêmes anneaux
J'ai cru comprendre que la fréquence de fonctionnement pour driver WS2812 est de 800khz et elle n'est pas modifiable
https://www.amazon.fr/NeoPixel-Anneau-LED-avec-WS2812-5050-LED/dp/B01B35DDTU
Anonyme
1096
65 Posté le 14/06/2019 à 14:16:01
J'en profite pour dire au passage que le site de Chimimic est une mine d'or. Son site représente un travail colossal et j'y ai presque tout appris.
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
66 Posté le 14/06/2019 à 14:27:57
Pour la persistance rétinienne j'ai procédé comme ceci
Sachant que l'affichage des cercles de led est géré par la fonction "pixels.show" j'ai créé un sous programme "Affiche" qui intègre un ON/off rapide pour chaque cercle de LED
j'ai également baissé pour l'instant la luminosité au minimum
et supprimer la variation de la luminosité en fonction de la rotation des potentiomètres
Le TX ne s'emballe plus que se soit sur le monitor série ou en mode Midi
Sachant que l'affichage des cercles de led est géré par la fonction "pixels.show" j'ai créé un sous programme "Affiche" qui intègre un ON/off rapide pour chaque cercle de LED
j'ai également baissé pour l'instant la luminosité au minimum
et supprimer la variation de la luminosité en fonction de la rotation des potentiomètres
void affiche()
{
static int iAn0ValPrev;
iAn0ValPrev = 0 ;
iAn0ValPrev = iAn0Val ; // previous value
iAn0Val = analogRead(A0);
if (abs (iAn0Val - iAn0ValPrev)>3)
analogPinMidiTX(1,iAn0Val,iAn0ValPrev); //TX value
pixels.show(); // This sends the updated pixel color to the hardware.
digitalWrite(4,HIGH); //on
delay(5); // petit délai pour l'oeil
pixels.show(); // This sends the updated pixel color to the hardware.
digitalWrite(4,LOW); //off
static int iAn1ValPrev;
iAn1ValPrev = 0 ;
iAn1ValPrev = iAn1Val;
iAn1Val = analogRead(A1);
if (abs (iAn1Val - iAn1ValPrev)>3)
analogPinMidiTX(2,iAn1Val,iAn1ValPrev);
pixels2.show();
digitalWrite(5,HIGH);
delay(5); // petit délai pour l'oeil
pixels2.show();
digitalWrite(5,LOW);
static int iAn2ValPrev;
iAn2ValPrev = 0 ;
iAn2ValPrev = iAn2Val;
iAn2Val = analogRead(A2);
if (abs (iAn2Val - iAn2ValPrev)>3)
analogPinMidiTX(3,iAn2Val,iAn2ValPrev);
pixels3.show();
digitalWrite(6,HIGH);
delay(5); // petit délai pour l'oeil
pixels3.show();
digitalWrite(6,LOW);
static int iAn3ValPrev;
iAn3ValPrev = 0 ;
iAn3ValPrev = iAn3Val;
iAn3Val = analogRead(A3);
if (abs (iAn3Val - iAn3ValPrev)>3)
analogPinMidiTX(4,iAn3Val,iAn3ValPrev);
pixels4.show();
digitalWrite(7,HIGH);
delay(5); // petit délai pour l'oeil
pixels4.show();
digitalWrite(7,LOW);
static int iAn4ValPrev;
iAn4ValPrev = 0 ;
iAn4ValPrev = iAn4Val;
iAn4Val = analogRead(A4);
if (abs (iAn4Val - iAn4ValPrev)>3)
analogPinMidiTX(5,iAn4Val,iAn4ValPrev);
pixels5.show();
digitalWrite(8,HIGH);
delay(5); // petit délai pour l'oeil
pixels5.show();
digitalWrite(8,LOW);
static int iAn5ValPrev;
iAn5ValPrev = 0 ;
iAn5ValPrev = iAn5Val;
iAn5Val = analogRead(A5);
if (abs (iAn5Val - iAn5ValPrev)>3)
analogPinMidiTX(5,iAn5Val,iAn5ValPrev);
pixels6.show();
digitalWrite(9,HIGH);
delay(5);
pixels6.show();
digitalWrite(9,LOW);
}
Le TX ne s'emballe plus que se soit sur le monitor série ou en mode Midi
[ Dernière édition du message le 14/06/2019 à 14:36:00 ]
Rémy M. (chimimic)
14200
Modérateur·trice thématique
Membre depuis 22 ans
68 Posté le 14/06/2019 à 15:03:50
Citation de Mat :
J’utilise exactement les mêmes anneaux
J'ai cru comprendre que la fréquence de fonctionnement pour driver WS2812 est de 800khz et elle n'est pas modifiable
Ne pas confondre fréquence d'envoi des données vers le ou les anneaux (Data/Clock), et fréquence de rafraichissement au niveau visuel.
Citation de King :
J'en profite pour dire au passage que le site de Chimimic est une mine d'or. Son site représente un travail colossal et j'y ai presque tout appris.
Merci
Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
69 Posté le 29/09/2019 à 20:26:29
Bonjour Electronifanzien
Voila j'ai pu finir mon controller (thread mis a jour
https://fr.audiofanzine.com/les-mains-dans-le-cambouis/forums/t.687260,diy-midi-controller-usb-plug-play-upgrade-neopixel-ring,post.9911428.html)
Concernant les led et le bug de la carte le problème était bien du à l'alimentation
J'ai donc ajouté une alimentation externe ainsi j'ai pu effectuer mes réglages de luminosité mais aussi ajouté des variations de couleurs
J'ai du faire face également a un autre problème celui du sens de rotation de cercles de led
La polarité de L'alimentation du Cercle comprenant 16 LEDS est différente des cercles 12 et 24
Donc le sens de rotation ne coïncidait pas avec le sens de rotation du potentiomètre.
En codant on peut gérer ce problème mais petite galère pour moi
Voila j'ai pu finir mon controller (thread mis a jour
https://fr.audiofanzine.com/les-mains-dans-le-cambouis/forums/t.687260,diy-midi-controller-usb-plug-play-upgrade-neopixel-ring,post.9911428.html)
Concernant les led et le bug de la carte le problème était bien du à l'alimentation
J'ai donc ajouté une alimentation externe ainsi j'ai pu effectuer mes réglages de luminosité mais aussi ajouté des variations de couleurs
J'ai du faire face également a un autre problème celui du sens de rotation de cercles de led
La polarité de L'alimentation du Cercle comprenant 16 LEDS est différente des cercles 12 et 24
Donc le sens de rotation ne coïncidait pas avec le sens de rotation du potentiomètre.
En codant on peut gérer ce problème mais petite galère pour moi
[ Dernière édition du message le 30/09/2019 à 09:06:40 ]
Mat Martigan
105
Posteur·euse AFfiné·e
Membre depuis 12 ans
70 Posté le 03/09/2020 à 10:23:27
Ayant pour projet d'augmenter le nombre de potentiometre et d'intégrer en sus un step sequencer à mon interface ,Il s'avère que les cercles de led neopixel ne sont peut-être pas la solution.
Certes ils sont programmables mais leur cout et leur consommation dès qu'il y en a beaucoup sont élevés.
J'opterai pour me fabriquer mes propres cerlce de led car dans mon cas les cercles ont une utilisation bien specifique.
Differentes solutions se sont présentées a moi.
La première une serie de leds commandée par des transistors bc547.
https://homediyelectronics.com/projects/led_bar_graph_with_transistors/ledbargraphcircuit
Et le deuxième la gestion des leds via des circuits intégrés LM3914.
https://learn.sparkfun.com/tutorials/dotbar-display-driver-hookup-guide/all
Rien de bien compliqué pour les montages test mais je me trouve confronté a quelques problèmes.
Avec les LM3914 Sur un potentiometre de 10kohm en fin de course il se trouve que j'ai une variation plus rapide des leds.
Il faut sans nul doute jouer sur la valeur des resistances des LM3914.
Pour le montage avec les transistors on voit que la variation de luminosité se fait progressivement est ce que cette variation peut se faire avec les LM3914 ?
Certes ils sont programmables mais leur cout et leur consommation dès qu'il y en a beaucoup sont élevés.
J'opterai pour me fabriquer mes propres cerlce de led car dans mon cas les cercles ont une utilisation bien specifique.
Differentes solutions se sont présentées a moi.
La première une serie de leds commandée par des transistors bc547.
https://homediyelectronics.com/projects/led_bar_graph_with_transistors/ledbargraphcircuit
Et le deuxième la gestion des leds via des circuits intégrés LM3914.
https://learn.sparkfun.com/tutorials/dotbar-display-driver-hookup-guide/all
Rien de bien compliqué pour les montages test mais je me trouve confronté a quelques problèmes.
Avec les LM3914 Sur un potentiometre de 10kohm en fin de course il se trouve que j'ai une variation plus rapide des leds.
Il faut sans nul doute jouer sur la valeur des resistances des LM3914.
Pour le montage avec les transistors on voit que la variation de luminosité se fait progressivement est ce que cette variation peut se faire avec les LM3914 ?
- < Liste des sujets
- Charte