Puslapiai

2012 m. gegužės 8 d., antradienis

RGB spalvų kalibravimas


Sveiki,
Šiandien nusprendžiau pasidalinti puikiais kodais, kurie padės išsirinkti RGB spalvas ar manipuliuoti jomis. Galima tai daryti su potenciometrais ar keičiant analogines išėjimo reikšmes nuo 0-255. Bet tai užimtų daug laiko.. Pati idėja kilo vieno komentatoriaus pagalba, kuris ketina pasidaryti kelių LED įjunginėjimus ir išjunginėjimus mygtukų pagalba.. O aš kaip tik buvau pradėjęs domėtis apie Arduino tiesioginį valdymą per kompiuterį. Kodo pats nerašiau, o susiradau internete. Pataisiau klaidą, nubraižiau paprastą schemą, šiek tiek patarimų ir tiek.. :)


Ko prireiks?

  • Arduino
  • RGB šviesos diodo su vienu katodu (4 kojelių)
  • Kelių varžų, priklausomai nuo LED. Aš naudojau keturias varžas po 220Ω 0.25W
  • Maketavimo plokštės
  • Jungiamųjų laidų
  • Processing programos

Schema:

Viską sujungiame, kaip nurodyta paveikslėlyje. Varžas naudokite pagal savo LED. Apie skaičiavimus galite daugiau paskaityti straipsnyje: Kaip apskaičiuoti šviesos diodui minimalų rezistorių?


Arduino kodas:

Kopijuojame ir įkeliame į Arduino.


void setup()
{
  // declare the serial comm at 9600 baud rate
  Serial.begin(9600);

  // output pins
  pinMode(9, OUTPUT); // red
  pinMode(10, OUTPUT); // green
  pinMode(11, OUTPUT); // blue
}

void loop()
{
  // call the returned value from GetFromSerial() function
  switch(GetFromSerial())
  {
  case 'R':
    analogWrite(9, GetFromSerial());
    break;
  case 'G':
    analogWrite(10, GetFromSerial());
    break;
  case 'B':
    analogWrite(11, GetFromSerial());
    break;

  }
}

// read the serial port
int GetFromSerial()
{
  while (Serial.available()<=0) {
  }
  return Serial.read();
}


Processing kodas:
Galbūt kažkas girdit apie ją pirmą kartą. Jei taip, tai siunčiamės iš čia - http://processing.org/ . O tada galime kopijuoti kodą ir spausti "Run" (programą reikia paleisti, kai jau prijungtas arduino su įkeldu prieš tai buvusiu kodu, nes processing programa atlieka tarpininkavimą tarp Arduino ir kompiuterio).
import processing.serial.*;
Serial port;

sliderV sV1, sV2, sV3;

color cor;

void setup() {
  size(500, 500);

  println("Available serial ports:");
  println(Serial.list());

  // check on the output monitor wich port is available on your machine
  port = new Serial(this, Serial.list()[0], 9600);

  // create 3 instances of the sliderV class
  sV1 = new sliderV(100, 100, 90, 255, #FF0000);
  sV2 = new sliderV(200, 100, 90, 255, #03FF00);
  sV3 = new sliderV(300, 100, 90, 255, #009BFF);
}

void draw() {
  background(0);

  sV1.render();
  sV2.render();
  sV3.render();

  // send sync character
  // send the desired value
  port.write('R');
  port.write(sV1.p);
  port.write('G');
  port.write(sV2.p);
  port.write('B');
  port.write(sV3.p);
}

/* 
Slider Class - www.guilhermemartins.net
based on www.anthonymattox.com slider class
*/
class sliderV {
  int x, y, w, h, p;
  color cor;
  boolean slide;

  sliderV (int _x, int _y, int _w, int _h, color _cor) {
    x = _x;
    y = _y;
    w = _w;
    h = _h;
    p = 90;
    cor = _cor;
    slide = true;
  }

  void render() {
    fill(cor);
    rect(x-1, y-4, w, h+10);
    noStroke();
    fill(0);
    rect(x, h-p+y-5, w-2, 13);
    fill(255);
    text(p, x+2, h-p+y+6);

    if (slide==true && mousePressed==true && mouseXmouseX>x){
     if ((mouseY<=y+h+150) && (mouseY>=y-150)) {
        p = h-(mouseY-y);
        if (p<0) {
          p=0;
        }
        else if (p>h) {
          p=h;
        }
      }
    }
  }
}

Jei viską teisingai atlikote, tai turėtumėt išvysti tokį vaizdą:
Dabar paprastai galite reguliuoti ir taip išgauti savo mėgstamiausias spalvas ir jų intensyvumą, be to matysite reikšmes kurias galėsite panaudoti savo įrenginyje.
Geriausia testuoti tamsoje ir pridengiant LED'ą su baltu popieriumi.
Parsisiųsti kodus:
Tai tiek šiam kartui.. :)


Komentarų nėra:

Rašyti komentarą