ArduRGB

luca 01/11/2011 0

ArduRGB è un semplice progetto per mostrare come pilotare un led RGB da Arduino.

Nel repository su GitHub sono presenti lo sketch per Arduino e un programma di esempio scritto in C# e nel forum è possibile porre domande/richieste…

Attenzione: il programma descritto di seguito prevede l’uso di un led a catodo comune, in caso sia invece ad anodo comune i valori inviati devono essere sottratti a 255

Il programma in esecuzione su Arduino riceve via seriale un messaggio composto da 3 bytes, ognuno dei quali indica l’intensità dei colori R (rosso), G (verde) e B (blu). I valori ricevuti vengono utilizzati per comandare le 3 uscite PWM (pin 9/10/11) a cui è collegato il led.

Per prima cosa, definiamo i pin a cui è collegato il led e l’array dove memorizzeremo il messaggio in fase di ricezione:

// definizione dei pin
const int red_pin = 9;
const int green_pin = 10;
const int blue_pin = 11;
 
// variabili per ricezione messaggio
byte message[3];
int message_index;

Nel blocco setup() configuriamo la comunicazione seriale (9600 baud), i pin (come output) e i valori iniziali (led spento):

void setup() {
 
  // init porta seriale
  Serial.begin(9600);
 
  // pins configurati come output
  pinMode(red_pin, OUTPUT);
  pinMode(green_pin, OUTPUT);
  pinMode(blue_pin, OUTPUT);  
 
  // iniziamo con i led spenti
  analogWrite(red_pin, 0);
  analogWrite(green_pin, 0);
  analogWrite(blue_pin, 0);
 
  // init puntatore posizione messaggio
  message_index = 0;
}

Infine nel loop() attendiamo che sia disponibile un byte sulla porta seriale, lo memorizziamo nell’array e – se è il terzo byte ricevuto – inviamo i 3 valori sulle uscite PWM:

void loop() {
 
  // ricevuto nuovo byte
  if (Serial.available() > 0) {
 
    // lo salvo nell'array 
    // e incremento il puntatore
    message[message_index] = Serial.read();
    message_index++;
 
    // se ho ricevuto 3 bytes resetto il puntatore
    // e invio i valori
    if(message_index == 3) {
      message_index = 0;
      analogWrite(red_pin, message[0]);
      analogWrite(green_pin, message[1]);
      analogWrite(blue_pin, message[2]);
    }
  }

Attraverso il programma in esecuzione sul PC è possibile scegliere un colore ed inviare la sua codifica RGB attraverso una porta seriale alla scheda Arduino:

Come prototipo, ho utilizzato un led RGB piranha a catodo comune:

collegato alle 3 porte PWM di Arduino tramite delle resistenze (1Kohm va benissimo) per limitare la corrente:

Ecco il prototipo realizzato ed un filmato che ne mostra il funzionamento:

Leave A Response »