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:

// pins definition
const int red_pin = 9;
const int green_pin = 10;
const int blue_pin = 11;
 
// message variables
byte message[3];
int message_index;

// message variables
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 serial communication
  Serial.begin(9600);
 
  // pins configured as output
  pinMode(red_pin, OUTPUT);
  pinMode(green_pin, OUTPUT);
  pinMode(blue_pin, OUTPUT);  
 
  // Start with black value (leds off)
  analogWrite(red_pin, 0);
  analogWrite(green_pin, 0);
  analogWrite(blue_pin, 0);
 
  // reset message position pointer
  message_index = 0;
}

// init serial communication
Serial.begin(9600);

// pins configured as output
pinMode(red_pin, OUTPUT);
pinMode(green_pin, OUTPUT);
pinMode(blue_pin, OUTPUT);

// Start with black value (leds off)
analogWrite(red_pin, 0);
analogWrite(green_pin, 0);
analogWrite(blue_pin, 0);

// reset message position pointer
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() {
 
  // new byte from serial communication
  if (Serial.available() > 0) {
 
    // store received byte in message array
    // and increment pointer
    message[message_index] = Serial.read();
    message_index++;
 
    // if we received 3 bytes, reset pointer
    // and output the values
    if(message_index == 3) {
      message_index = 0;
      analogWrite(red_pin, message[0]);
      analogWrite(green_pin, message[1]);
      analogWrite(blue_pin, message[2]);
    }
  }

// new byte from serial communication
if (Serial.available() > 0) {

// store received byte in message array
// and increment pointer
message[message_index] = Serial.read();
message_index++;

// if we received 3 bytes, reset pointer
// and output the values
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 »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi