Farbeinstellung mit Rotary-Encoder - AZ-Delivery

descrizione

Con un diodo a emissione di luce RGB è possibile creare quasi tutti i colori mescolando rosso, verde e blu con luminosità diversa. Il seguente suggerimento di circuito mostra come è possibile utilizzare un Arduino e un codificatore rotante per creare il colore di un LED RGB come preferisci. Il pulsante dell'encoder viene utilizzato per selezionare il colore da modificare. Il Led SMD mostra di che colore è. Ruotando l'encoder verso destra aumenta il valore del colore selezionato o diminuisce verso sinistra. Il risultato viene visualizzato con il led RGB.

circuito

Oltre ad Arduino, abbiamo bisogno di tre moduli del kit Arduino 35in1,

il codificatore rotante, il led RGB SMD e il normale led RGB.

I connettori devono essere collegati ad Arduino come segue

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

Inoltre, le connessioni GND di tutti i moduli devono essere collegate al GND dell'Arduino e alla connessione + dell'encoder rotativo a + 5V dell'Arduino.

Per le connessioni Rotary Encoder CLK e Rotary Encoder SW, i condensatori da 100nF devono essere collegati a terra per sopprimere gli impulsi di interferenza.

Il circuito finito si presenta così.

circuito

moduli:

Codificatore rotante:

L'encoder rotativo è un dispositivo semplice. Contiene un disco di contatto segmentato e due contatti adiacenti A e B. A seconda della direzione di rotazione, i primi contatti A e B sono collegati al contatto C tramite il disco, a seconda della direzione di rotazione.

codice disco

Questo si presenta quindi nell'analizzatore logico (canale 0 = contatto A o connessione CLK sul modulo e canale 1 = contatto B o connessione DT sul modulo).

Ruotando a destra sul fronte di discesa (rosso), il canale 1 è sempre ALTO:

Ruotando a sinistra sul fronte di discesa (rosso), il canale 1 è sempre BASSO:

Se si osserva il fronte di discesa del canale 0, è possibile determinare la direzione di rotazione dal canale 1. (1 per destra e 0 per sinistra). Lo useremo nel programma. Il numero di bordi cadenti fornisce il valore di quanto è stato ruotato.

Led SMD

Il modulo contiene un LED SMD RGB con opportuni resistori serie in modo che 5 V possano essere collegati direttamente ai collegamenti R (ot), G (rün) e B (lau).

Led RGB

Il modulo contiene un LED RGB convenzionale con opportuni resistori serie in modo che 5 V possano essere collegati direttamente alle connessioni R (ot), G (rün) e B (lau). Questo led ha proprietà migliori per la miscelazione dei colori.

programma:

 

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 pulse = 3;
const byte pulseDirection = 4;

const byte delta = 16;

// definisce alcune variabili globali
byte volatile col = 0; // colore corrente rosso
volatile int redLevel = 128; // rosso piena luminosità
volatile int greenLevel = 128; // il verde è spento
volatile int blueLevel = 128; // il blu è spento



void setup () {
 // inserisci qui il codice di installazione, per eseguirlo una volta:
 Serial.begin (115200);
 // definisce le modalità pin
 pinMode (infoLedRed, OUTPUT);
 pinMode (infoLedGreen, OUTPUT);
 pinMode (infoLedBlue, OUTPUT);
 pinMode (colorLedRed, OUTPUT);
 pinMode (colorLedGreen, OUTPUT);
 pinMode (colorLedBlue, OUTPUT);
 // definisce i pin di input
 pinMode (colSwitch, INPUT_PULLUP);
 pinMode (impulso, INPUT_PULLUP);
 pinMode (pulseDirection, INPUT_PULLUP);
 // definisce gli interrupt
 attachInterrupt (digitalPinToInterrupt (pulse), rotaryPulse, FALLING);
 attachInterrupt (digitalPinToInterrupt (colSwitch), changeColor, FALLING);
 // imposta informazioni led
 showInfo ();
 Serial.println ("Start:");
}

void loop () {
inserire il codice principale qui, per eseguire ripetutamente:
analogicOScrittura(colorLedRed;redLevel);
analogicO(colorLedGreen,greenLevel);
analogWrite(colorLedBlue,blueLevel);
}

funzione per impostare le informazioni led;
void showInfo()
digitalWrite(infoLedRed,LOW);
digitalWrite(infoLedGreen,LOW);
digitalWrite(infoLedBlue,LOW);
interruttore(col)
caso 0: digitalWrite(infoLedRed,HIGH);
pausa;
Caso 1: digitalWrite(infoLedGreen, HIGH);
pausa;
caso 2: digitalWrite(infoLedBlue, HIGH);
pausa;
}
}

servizio di interrupt per switch
cambiare il colore corrente
void changeColor()
col;
if (col n. 3) col - 0;
showInfo();
Serial.print("Colore: ");
Serial.println(col);
}

interrupt per impulso rotante
modificare il valore del colore per il valore corrente
void rotaryPulse()
char msg[50];
byte dir - digitalRead(pulseDirection);
Serial.println(dir); interruttore (col)
caso 0: redLevel : change(redLevel,dir);
pausa;
caso 1: greenLevel : change(greenLevel,dir);
pausa;
caso 2: blueLevel : change(blueLevel,dir);
pausa;
}
sprintf(msg,"Color changed Red:%d Blue:%d Green:%d",redLevel,blueLevel,greenLevel);
Serial.println(msg);
}

limiti di incremento o decremento del livello 0 e 255
int change(livello int, int dir)
if (dir s.c.)
livello - delta;
se (livello < 0) livello è 0;
- altro
livello delta di livello : ;
se (livello > 255) livello è 255;
}
livello di rendimento;
}

 

In primo luogo, vengono definite le connessioni utilizzate. colSwitch e pulse sono stati impostati su D3 e D2 perché questi input sono interrompibili. I connettori per il LED RGB sono stati impostati su D9, D10 e D11, in quanto possono essere utilizzati su tutte le schede Arduino per l'uscita analogica (PWM).

Inoltre, il valore delta definier viene aumentato o diminuito del valore del colore per impulso rotazionale.

Vengono quindi definite variabili globali per il colore di impostazione attualmente attivo (col) e per i valori di colore impostati (redLevel, greenLevel, blueLevel).

Nella funzione di installazione, le porte vengono preparate e assegnate alle funzioni di servizio colSwitch e pulse interrupt. Inneschiamo l'interrupt al bordo negativo.

 

Nella funzione loop, i valori di colore codificati vengono emessi sul led RGB.

La funzione showInfo visualizza il colore di impostazione attualmente selezionato tramite il Led SMD. Usiamo una funzione qui perché è necessaria due volte.

 

La funzione changeColor viene chiamata ogni volta che viene premuto il pulsante di pressione dell'encoder Rotary. Il valore per il colore dell'impostazione corrente viene aumentato di uno. Se è maggiore di due, viene impostato su zero. Quindi il valore corrente per info viene visualizzato sul Led SMD e anche l'output tramite l'interfaccia seriale.

 

La funzione rotaryPulse viene sempre chiamata sann quando si verifica un bordo inclinato all'uscita CLK dell'encoder rotante. In primo luogo, lo stato dell'uscita DT dell'encoder rotante è determinato per determinare la direzione. Quindi, a seconda del colore di impostazione corrente e della direzione di rotazione, il rispettivo valore di colore viene modificato. Questa operazione viene eseguita in un sottoprogramma. Infine, i nuovi valori vengono restituiti alla porta seriale per il controllo.

 

La funzione di modifica viene utilizzata per aumentare o diminuire un valore di colore. I parametri sono il valore e la direzione del colore correnti. Se la direzione è pari a 0, il valore del colore viene ridotto in caso contrario aumentato. Se il nuovo valore di colore fosse maggiore di 255, verrebbe impostato su 255. Lo stesso accade se il nuovo valore è minore di 0, quindi è impostato su 0. Il valore per l'aumento o la diminuzione è stato impostato su 16, ma può essere modificato singolarmente.

Für arduinoProjekte für anfänger

2 commenti

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 !

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione