Ajuste de color con codificador rotatorio

Descripción

Con un diodo emisor de luz RGB puedes crear casi todos los colores mezclando rojo, verde y azul con diferente brillo. La siguiente sugerencia de circuito muestra cómo ajustar el color de un LED RGB como se desee con la ayuda de un Arduino y un codificador giratorio. El interruptor de presión del codificador se utiliza para seleccionar el color que se va a cambiar. El color del color real se muestra con el Led SMD. Girar el codificador a la derecha aumenta el valor del color seleccionado o lo disminuye girando a la izquierda. El resultado se muestra con el LED RGB.

Circuito

Además del Arduino, necesitamos tres módulos del 35in1 Arduino Kit,

codificador giratorio, el SMD RGB Led y el RGB Led normal.

Los conectores deben estar conectados al Arduino de la siguiente manera

  • Arduino D2 - Codificador rotativo CLK
  • Arduino D3 - Codificador rotativo SW
  • Arduino D4 - Codificador rotativo DT
  • Arduino D6 - SMD Led R
  • Arduino D7 - SMD Led G
  • Arduino D8 - SMD Led B
  • Arduino D9 - RGB Led R
  • Arduino D10 - RGB Led G
  • Arduino D11 - RGB Led B

Además, los conectores GND de todos los módulos deben estar conectados al GND del ARDuino y a la conexión Rotary encoder+5V al +5V del Arduino.

Para los conectores CLK y Rotary Encoder SW, los capacitores 100nF deben cambiarse contra tierra para suprimir las interferencias.

El circuito terminado entonces se ve así.

Circuito

Módulos:

Codificador rotativo:

El codificador giratorio es un dispositivo sencillo. Contiene un disco conactante segmentado y dos contactos A y B acostados junto al lado girando, dependiendo de la dirección de rotación, el conatkt A y luego el contacto B a través del disco se conecta al contacto C.

disco de código

En el analizador lógico esto se ve así (canal 0 - contacto A o conexión CLK en el módulo y canal 1 - contacto B o conexión DT en el módulo).

Girar a la derecha en el borde descendente (rojo) canal 1 es siempre ALTO:

Girar a la izquierda en el borde descendente (rojo) canal 1 es siempre BAJO:

Si observa el borde descendente del canal 0, puede determinar la dirección de rotación desde el canal 1. (1 para la derecha y 0 para la izquierda). Lo usaremos en el programa. El número de bordes que caen indica hasta qué punto estaba la rotación.

SMD-Led

El módulo contiene un LED RGB SMD con resistencias adecuadas para que 5V se pueda nalgar directamente a los conectores R(ot), G(r-n) y B(lau).

RGB Led

El módulo contiene un LED RGB convencional con resistencias adecuadas para que 5V se pueda nalgar directamente a los conectores R(ot), G(r-n) y B(lau). Este Led tiene mejores propiedades de mezcla de color.

Programa:

 

Fconst byte infoLedRed 6;
const byte infoLedGreen n.o 7;
const byte infoLedBlue n.o 8;
const byte colorLedRed - 9;
const byte colorLedGreen 10;
const byte colorLedBlue 11;

const byte colSwitch n.o 2;
pulso de byte const a 3;
const byte pulseDirection n.o 4 ;

const byte delta á 16;

definir algunas variables globales
byte volátil col - 0; color rojo actual
volatile int redLevel 128; rojo brillo completo
volatile int greenNivel 128; verde está apagado
volatile int blueLevel 128; azul está apagado



configuración del vacío()
ponga su código de configuración aquí, para ejecutar una vez:
Serial.begin(115200);
definir modos de pin
pinMode(infoLedRed, OUTPUT);
pinMode(infoLedGreen, OUTPUT);
pinMode(infoLedBlue, OUTPUT);
pinMode(colorLedRed, OUTPUT);
pinMode(colorLedGreen, OUTPUT);
pinMode(colorLedBlue, OUTPUT);
definir pines de entrada
pinMode(colSwitch, INPUT_PULLUP);
pinMode (pulso, INPUT_PULLUP);
pinMode(pulseDirection, INPUT_PULLUP);
definir interrupciones
attachInterrupt(digitalPinToInterrupt(pulse),rotaryPulse, FALLING);
attachInterrupt(digitalPinToInterrupt(colSwitch),changeColor, FALLING);
set info led
showInfo();
Serial.println("Inicio:");
}

void loop()
poner su código principal aquí, para ejecutar repetidamente:
analogWrite(colorLedRed,redLevel);
analogWrite(colorLedGreen,greenLevel);
analogWrite(colorLedBlue,blueLevel);
}

función para establecer la información led;
void showInfo()
digitalWrite(infoLedRed,LOW);
digitalWrite(infoLedGreen,LOW);
digitalWrite(infoLedBlue,LOW);
interruptor (col)
caso 0: digitalWrite(infoLedRed,HIGH);
descanso;
caso 1: digitalWrite(infoLedGreen,HIGH);
descanso;
caso 2: digitalWrite(infoLedBlue,HIGH);
descanso;
}
}

servicio de interrupción para el interruptor
cambiar el color actual
void changeColor()
col ++;
si (col 3) col á 0;
showInfo();
Serial.print("Color: ");
Serial.println(col);
}

interrupción para el pulso rotativo
cambiar el valor del color para el valor actual
vacío rotaryPulse()
char msg[50];
byte dir - digitalRead(pulseDirection);
Serial.println(dir); interruptor (col)
case 0: redLevel á change(redLevel,dir);
descanso;
caso 1: greenLevel á change(greenLevel,dir);
descanso;
caso 2: blueLevel á change(blueLevel,dir);
descanso;
}
sprintf(msg,"Color cambiado Rojo:%d Azul:%d Verde:%d",redLevel,blueLevel,greenLevel);
Serial.println(msg);
}

límites de control de nivel de incremento o disminución 0 y 255
int change(int level, int dir)
si (dir, 0)
nivel - delta;
si (nivel < 0) nivel - 0;
• de lo contrario
nivel +- delta;
si (nivel > 255) nivel 255;
}
nivel de retorno;
}

 

En primer lugar, se definen las conexiones utilizadas. colSwitch y pulse se han establecido en D3 y D2 porque estas entradas son interrumpibles. Los conectores para el LED RGB se han establecido en D9, D10 y D11, ya que se pueden utilizar en todas las placas Arduino para salida analógica (PWM).

Además, el definidor delta de valor aumenta o disminuye por el valor de color por pulso rotacional.

A continuación, se definen variables globales para el color de configuración activo (col) actualmente y para los valores de color establecidos (redLevel, greenLevel, blueLevel).

En la función de configuración, los puertos se preparan y se asignan a las funciones de servicio colSwitch y de interrupción de pulsos. Activamos la interrupción en el borde negativo.

 

En la función de bucle, los valores de color codificados se envían al led RGB.

La función showInfo muestra el color de ajuste seleccionado actualmente a través del Led SMD. Usamos una función aquí porque se necesita dos veces.

 

La función changeColor se llama cada vez que se pulsa el botón giratorio del codificador. El valor del color de configuración actual aumenta en uno. Si es mayor que dos, se establece de nuevo en cero. Entonces el valor actual para la información se visualiza en el SMD Led y también la salida vía la interfaz serial.

 

La función rotaryPulse siempre se denomina sann cuando se produce un borde inclinado en la salida CLK del codificador giratorio. En primer lugar, se determina el estado de la salida DT del codificador giratorio para determinar la dirección. A continuación, dependiendo del color de configuración actual y la dirección de rotación, se cambia el valor de color respectivo. Esto se hace en un subprograma. Por último, los nuevos valores se envían al puerto serie para su control.

 

La función de cambio se utiliza para aumentar o disminuir un valor de color. Los parámetros son el valor y la dirección del color actual. Si la dirección es 0, el valor de color se reduce de lo contrario aumenta. Si el nuevo valor de color fuera mayor que 255, se establecería en 255. Lo mismo sucede si el nuevo valor es menor que 0, entonces se establece en 0. El valor para aumentar o disminuir se ha establecido en 16, pero se puede cambiar individualmente.

Für arduinoProjekte für anfänger

2 comentarios

Michael

Michael

Wie könnte man diese Steuerung für ein ganzes 12v led band erweitern?

Wolfgang

Wolfgang

Achtung : Die Pin Belegung im Sketch stimmt nicht mit der Pin Belegung im Tesxt überein !

Deja un comentario

Todos los comentarios son moderados antes de ser publicados