Farbeinstellung mit Rotary-Encoder

Description

Avec une diode électroluminescente RGB, vous pouvez créer presque toutes les couleurs en mélangeant rouge, vert et bleu avec une luminosité différente. La suggestion du circuit suivant montre comment ajuster la couleur d’un RGB conduit comme désiré avec l’aide d’un Arduino et d’un encoder Rotary. Le commutateur de pression de l’encoder est utilisé pour sélectionner la couleur à changer. La couleur de la couleur réelle est affichée avec le SMD Led. Tourner l’encoder vers la droite augmente la valeur de la couleur sélectionnée ou la diminue en tournant à gauche. Le résultat est affiché avec le RGB Led.

Circuit

En plus de l’Arduino, nous avons besoin de trois modules de la 35in1 Arduino Kit,

encoder rotatif, le SMD RGB Led et le RGB Led normal.

Les connecteurs doivent être connectés à l’Arduino comme suit

  • Arduino D2 - Rotary Encoder CLK
  • Arduino D3 - Rotary Encoder SW
  • Arduino D4 - Rotary Encoder 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

En outre, les connecteurs GND de tous les modules doivent être connectés au GND de l’ARDuino et à la connexion encoder-5V du Rotary à la 5V de l’Arduino.

Pour les connecteurs Rotary Encoder CLK et Rotary Encoder SW, les condensateurs de 100 nF doivent être échangés contre le sol pour supprimer les interférences.

Le circuit fini ressemble alors à ceci.

Circuit

Modules:

Rotary Encoder:

Le Rotary Encoder est un dispositif simple. Il contient un disque conactant segmenté et deux contacts A et B couchés à côté du côté en tournant, selon la direction de rotation, le conatkt A, puis le contact B via le disque est connecté au contact C.

disque de code

Sur l’analyseur logique cela ressemble à ceci (canal 0 - contact A ou connexion CLK sur le module et le canal 1 - contact B ou connexion DT sur le module).

Se tourner vers la droite au bord de la chute (rouge) canal 1 est toujours HIGH:

Tourner vers la gauche au bord de la chute (rouge) canal 1 est toujours LOW:

Si vous regardez le bord tombant du canal 0, vous pouvez déterminer la direction de rotation à partir du canal 1. (1 pour la droite et 0 pour la gauche). Nous allons l’utiliser dans le programme. Le nombre de bords tombants indique jusqu’où la rotation a été.

SMD-Led

Le module contient un RGB SMD Led avec des résistances appropriées afin que 5V puisse être placé directement aux connecteurs R(ot), G(rân) et B(lau).

RGB Led

Le module contient un RGB Led conventionnel avec des résistances appropriées afin que 5V puisse être placé directement aux connecteurs R(ot), G(rân) et B(lau). Cette Led a de meilleures propriétés de mélange de couleurs.

Programme:

 

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

const byte colSwitch 2;
const byte impulsion 3;
const byte pulseDirection 4;

delta de const byte 16;

définir certaines variables globales
col d’ente volatil 0; couleur actuelle rouge
rouge int volatilLevel 128; luminosité rouge
volatile int greenLevel 128; vert est éteint
int blueLevel volatils 128; bleu est éteint



configuration vide()
mettre votre code de configuration ici, pour s’exécuter une fois:
Serial.begin(115200);
définir les modes de broche
pinMode (infoLedRed, OUTPUT);
pinMode (infoLedGreen, OUTPUT);
pinMode (infoLedBlue, OUTPUT);
pinMode (colorLedRed, OUTPUT);
pinMode (colorLedGreen, OUTPUT);
pinMode (colorLedBlue, OUTPUT);
définir les épingles d’entrée
pinMode (colSwitch, INPUT_PULLUP);
pinMode (pulse, INPUT_PULLUP);
pinMode (pulseDirection, INPUT_PULLUP);
définir les interruptions
attacheInterrupt (digitalPinToInterrupt(pulse),rotaryPulse, FALLING);
attacheInterrupt (digitalPinToInterrupt(colSwitch),changeColor, FALLING);
définir des informations dirigées
showInfo();
Serial.println ("Démarrer:");
}

boucle vide()
mettre votre code principal ici, pour exécuter à plusieurs reprises:
analogWrite (colorLedRed,redLevel);
analogWrite (colorLedGreen,greenLevel);
analogWrite (colorLedBlue,blueLevel);
}

fonction de définir l’info menée;
émission videInfo ()
digitalWrite (infoLedRed,LOW);
digitalWrite (infoLedGreen,LOW);
digitalWrite (infoLedBlue,LOW);
commutateur (col)
cas 0: digitalWrite (infoLedRed,HIGH);
pause;
cas 1: digitalWrite (infoLedGreen,HIGH);
pause;
cas 2: digitalWrite (infoLedBlue,HIGH);
pause;
}
}

interrompre le service pour le commutateur
changer la couleur actuelle
changement de videColor()
col - ;
si (col 3) col 0;
showInfo();
Serial.print ("Couleur: ");
Serial.println (col);
}

interrompre pour l’impulsion rotative
changer la valeur de couleur pour la valeur actuelle
vide rotatifPulse ()
char msg[50];
dir byte - digitalRead(pulseDirection);
Serial.println (dir); commutateur (col)
cas 0: redLevel - changement (redLevel, dir);
pause;
cas 1 : greenLevel et changement (greenLevel,dir);
pause;
cas 2 : blueLevel - changement (blueLevel,dir);
pause;
}
sprintf (msg," Color changed Red:%d Blue:%d Green:%d",redLevel,blueLevel,greenLevel);
Serial.println (msg);
}

augmentation ou de recul de niveau de décroissement 0 et 255
int changement (niveau int, int dir)
si (dir 0)
niveau - delta;
si (niveau et niveau; 0) niveau 0;
- autre
niveau delta;
si (niveau 'gt; 255) niveau '255;
}
niveau de retour;
}

 

Tout d’abord, les connexions utilisées sont définies. colSwitch et le pouls ont été réglés sur D3 et D2 parce que ces entrées sont interrompables. Les connecteurs pour le RGB Led ont été réglés à D9, D10 et D11, car ils peuvent être utilisés sur tous les panneaux Arduino pour la sortie analogique (PWM).

En outre, la valeur delta definier est augmentée ou diminuée par la valeur de couleur par impulsion rotationnelle.

Ensuite, les variables globales sont définies pour la couleur de réglage actuellement active (col) et pour les valeurs de couleur définies (niveau rouge, greenLevel, blueLevel).

Dans la fonction d’installation, les ports sont préparés et assignés aux fonctions de service colSwitch et pulse interrupt. Nous déclencheons l’interruption au bord négatif.

 

Dans la fonction de boucle, les valeurs de couleur codées sont la sortie à la RGB conduit.

La fonction showInfo affiche la couleur de réglage actuellement sélectionnée via le SMD Led. Nous utilisons une fonction ici parce qu’elle est nécessaire deux fois.

 

La fonction changeColor s’appelle chaque fois que le bouton push d’encoder du Rotary est appuyé. La valeur pour la couleur de réglage actuelle est augmentée d’un. S’il est supérieur à deux, il est ramené à zéro. Ensuite, la valeur actuelle pour l’information est affichée sur le SMD Led et également la sortie via l’interface série.

 

La fonction rotativepulse est toujours appelée sann lorsqu’un bord en pente se produit à la sortie CLK de l’encoder rotatif. Tout d’abord, l’état de la sortie DT de l’encoder rotatif est déterminé à déterminer la direction. Ensuite, selon la couleur de réglage actuelle et la direction de rotation, la valeur de couleur respective est modifiée. Cela se fait dans un sous-programme. Enfin, les nouvelles valeurs sont la sortie au port en série pour le contrôle.

 

La fonction de changement est utilisée pour augmenter ou diminuer une valeur de couleur. Les paramètres sont la valeur et la direction actuelles des couleurs. Si la direction 0, la valeur de couleur est réduite autrement augmentée. Si la nouvelle valeur de couleur était supérieure à 255, elle serait réglée à 255. La même chose se produit si la nouvelle valeur est inférieure à 0, alors il est réglé à 0. La valeur pour l’augmentation ou la diminution a été réglée à 16 mais peut être changée individuellement.

Für arduinoProjekte für anfänger

2 commentaires

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 !

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés