Arduino ve Prosessing ile RGB LED

watch_later 1/28/2016
RGB red (kırmızı), green (yeşil), blue (mavi) renklerin baş harfleri birleştirilerek oluşturulmuştur. RGB LED‘ler, bir kontrol devresi yardımıyla 16 farklı renk verebilmektedirler.

RGB şerit LED‘lerde her renk için bir kanal vardır. Bu kanallar sayesinde birçok renk elde etmek mümkündür. Bir kontrol devresi yardımıyla, ilgili renk kanalının voltajı düzenlenerek, tamamen yanması, tamamen sönmesi ya da kısmen yanması sağlanır. Aynı anda ihtiyaç duyulan diğer kanallarda da bu işlem sürdürülerek, istenen rengin oluşması sağlanır.


RGB şerit LED‘ler 3 renkli olması dolayısıyla 3 çiplidir. Tek SMD pakete paketlenerek oluşturulmuştur. 3 çipli şerit LED‘lerden tek farkı aynı SMD içinde tek renk değil, 3 ayrı renkte çip olmasıdır. Farklı renk kombinasyonları söz konusu olduğundan, anlık ihtiyaç duyulan güç miktarı değişiklik gösterir. Tabi ki kullanılan metraj burada oldukça önemlidir. İstenilen renge ve kullanılan metraja göre akım gücü değişmektedir.
RGB Led Simülasyonu
Processing özellikle programlamaya yeni başlamış insanların kullanabileceği bir tümleşik geliştirme ortamıdır. Bu IDE kolay bir şekilde programlamayı öğretirken aynı kolaylıkla zengin görsellikler oluşturmaya yardımcı oluyor. Processing Java tabanlı, 2001 yılında başlatılan bir projedir.
Processing open-source(açık kaynaklı) bir yazılımdır. Processing'in Arduino IDE arayüzleri arası benzerlikler vardır. Bunun sebebi Arduino'nun Processing temel alarak oluşturulmasıdır. 

Processing ile Oluşturulmuş Color Range

Processing Sketch:
import processing.serial.*;

Serial port;

void setup() {
  size(400, 500); //ekran boyutu
  noStroke();
  
  // arkaplan
  colorMode(HSB, 400);
  for (int i = 0; i < 400; i++) {
    for (int j = 0; j < 400; j++) {
      stroke(i, j, 400);
      point(i, j);
    }
  }
  port = new Serial(this, Serial.list()[0], 115200); //seri port ayarlanır
}

void draw() {
  // Mouse ile çizimlerde kullanılır
}

void mouseClicked() {
  processColor();
}

void mouseDragged() {
  processColor();
}

void processColor() {
  color c = get(mouseX, mouseY);
  noStroke();
  fill(c);
  rect(0, 400, 400, 100);
  
  sendColorToSerial(c);
}

void sendColorToSerial(color colour) {
  // HEX çevir
  String hexColor = hex(colour, 6);
  
  // HEX'i sayıya çevir
  long numColor = unhex(hexColor);
  
  // seri port üzerinden rengi gönder
  port.write("(" + numColor + ")");
}


Arduino Sketch:
char mesaj[8];
unsigned int okunanKarakter, sayac, r, g, b;
unsigned long color;
boolean serialOkunan;

void setup() {
  Serial.begin(115200); //baud rate
  serialOkunan = false;
}

void loop() {
  if (Serial.available() > 0 && !serialOkunan) {
    /*başlangıçta okunan false ise
      ve başlangıç karakterine eşitse*/
    if (Serial.read() == '(') {
      renkOku();
    }
  }
}

void renkOku() {
  serialOkunan = true;
  sayac = 0;

oku:
  if (Serial.available() > 0) {
    okunanKarakter = Serial.read();
    if (okunanKarakter == ')' || sayac == 8) {
      goto bitir;
    } else {
      mesaj[sayac++] = okunanKarakter;
      goto oku;
    }
  }
  goto oku;

bitir:
  serialOkunan = false;
  mesaj[sayac] = '\0';
  setColor(mesaj);
}

void setColor(char* _income)
{
  // Long'a çevir
  color = atol(_income);
  //değerleri aktar
  r = color >> 16 & 0xFF;
  g = color >>  8 & 0xFF;
  b = color >>  0 & 0xFF;

  //pinlere gönder
  analogWrite(9, r);
  analogWrite(11, g);
  analogWrite(10, b);
}


RGB LED Fritzing Şeması





Bir sonraki yazımda görüşmek üzere…



sentiment_satisfied Emoticon