Arduino
OKUDUĞUNUZ KONU
Arduino Renk Algılama Uygulaması
27

Arduino Renk Algılama Uygulaması

Yazar : Murat Duran4 Ocak 2016

Renk algılama uygulamaları robotikte ve otomasyonda çokça kullanılmaktadır.Biz projemizde basit bir uygulama yapacağız,sensörden alınan verilerle hangi renk olduğunu algılayıp bunu lcd ekrana yazdıracak ve aynı zamanda rgb led de hangi renk ise o renk yanacak.

Uygulamada adafruit firmasının geliştirdiği bir renk sensörünü kullanacağız.Uygulamamızın basit bir devresi var ister breadboard üzerine kurun , isterseniz de bizim gibi delikli pertinaks üzerine hiç fark etmez.

Projemizde kullanacağımız malzemeler

  • Arduino UNO
  • TCS34725 Renk Sensörü
  • RGB Led
  • LCD I2C Ekran
  • Servo Motor

Aldığınız TCS34725 sensör lehimsiz halde gönderilmektedir.İçerisinden çıkan erkek header ları lehimlemeniz gerekiyor.Lehimlerken dikkat etmeniz kısım kablo çıkışlarının arkasına gelmesi gerekmekte aksi halde renk okuturken sıkıntı yaşayabilirsiniz.Sonradan fark ederseniz sökmeniz biraz uğraştırıcı olabilir.

Yapmanız gereken aşağıdaki devre şemasını kurduktan sonra arduino kodlarını yüklemenizdir.Kodlar içerisinde kütüphaneler mevcut bu kütüphanelerin sizin bilgisayarınızda yüklü olması lazım.Eğer kütüphane eklemeyi bilmiyorsanız bu linkten öğrenebilirsiniz.

renkalgilama-devresi

Projenin arduino kodları aşağıdadır.Öncelikle kütüphaneleri kurun , kütüphaneleri indirmek için tıklayınız.

// ProjeHocam - Robimek , Renk Algılama Uygulaması
// Coder : Sezgin Gül
#include <Servo.h> // Servo motor kütüphanesi
#include "Wire.h" // I2C iletişim protokolü kütüphanesi
#include "Adafruit_TCS34725.h" // Renk sensörü kütüphanesi
#include <LiquidCrystal_I2C.h> // Lcd kütüphanesi
LiquidCrystal_I2C lcd(0x27,16,2); // Lcd tanımlama
Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAN_1X); // Renk sensörü tanımlama
Servo renk_gosterge; // Servo motor tanımlama

unsigned int kirmizi_led = 3; // Rgb kırmızı pin
unsigned int mavi_led = 4; // Rgb mavi pin
unsigned int yesil_led = 5; // Rgb yeşil pin

uint16_t temizle, kirmizi, yesil, mavi; // Renk değerleri için tanımlamalar
float ortalama, r, g, b; // renk hesaplamaları için tanımlamalar

int kirmizi_aci = 30; // Servo motor kırmızı renk gösterge açısı
int yesil_aci = 90; // Servo motor yeşil renk gösterge açısı
int mavi_aci = 150; // Servo motor mavi renk gösterge açısı
int renksiz = 0; // Servo motor tanımsız renk gösterge açısı

void setup() { // pinlerin çıkış ve giriş ayarları ve tanımlamaları
  
lcd.init();  // lcd yükleme
lcd.backlight(); // lcd ışık ayarı
Serial.begin(9600); // serial iletişim hızı
 renk_gosterge.attach(9); // servo motor 9. dijital pin tanımlaması
 
if (tcs.begin()) { // renk sensörüne bağlandıysa veri almaya başla
 // lcd ye mesaj gönder
 lcd.setCursor(0, 1); 
lcd.print("Renk Gostergesi");
} else { // renk sensörüne bağlanmadıysa 
  // lcd ye mesaj gönder
   lcd.setCursor(0, 1);
lcd.print("baglanti hatasi!");
while (1); // yeniden bağlanmaya çalış
}
delay(1000); // 1 saniye bekle
 lcd.clear(); // lcd yi temizle
  // led pinlerini çıkış olarak ayarla
 pinMode(kirmizi_led, OUTPUT);
  pinMode(mavi_led, OUTPUT);
   pinMode(yesil_led, OUTPUT);
   // başlangıçta led sönük ayarla
   digitalWrite(kirmizi_led,HIGH);
  digitalWrite(yesil_led,HIGH);
  digitalWrite(mavi_led,HIGH);
}
void loop() { // sonsuz döngü
   
Renk_oku(); // Renk oku algoritmasını çalıştır
Rengi_goster(); // Renk göster algoritmasını çalıştır
delay(500); // 500 milisaniye bekle
}

void Renk_oku() // Renk okuma algoritması
{
tcs.getRawData(&kirmizi, &yesil, &mavi, &temizle); // renk sensöründen gelen değerleri al
 
ortalama = (kirmizi+yesil+mavi)/3; // renk değerlerini topla ve ortalamasını al
r = kirmizi/ortalama; // kırmızı renk değeri oranı
g = yesil/ortalama; // yeşil renk değeri oranı
b = mavi/ortalama; // mavi renk değeri oranı

 lcd.setCursor(0,0); // lcd ekran ilk satır ve sutununa  "r" yaz
lcd.print("r"); //
lcd.setCursor(1,0); // lcd ekran ilk satır ve ikinci sutununa  r nin değerini yaz
lcd.print(r);
 lcd.setCursor(5,0); // lcd ekran ilk satır ve 5.sutununa  "g" yaz
lcd.print("g:");
lcd.setCursor(7,0); // lcd ekran ilk satır ve 7.sutununa  g değerini yaz
lcd.print(g);
 lcd.setCursor(11,0); // lcd ekran ilk satır ve 11.sutununa  "b" yaz
lcd.print("b:");
lcd.setCursor(13,0); // lcd ekran ilk satır ve 11.sutununa  b değerini yaz
lcd.print(b);
}

void Rengi_goster() // Renk gösterme algoritması
{
if ((r > 1.4) && (g < 0.9) && (b < 0.9)) { // kırmızı renk olma durumu
  renk_gosterge.write(kirmizi_aci); // servo motor kırmızı rengi göster
lcd.setCursor(0,1); // lcd ekran 2.satıra kırmızı renk yaz
lcd.print("Kirmizi Renk");
kirmizi_yak(); // kırmızı led yak
}
else if ((r < 0.95) && (g > 1.4) && (b < 0.9)) {  // yeşil renk olma durumu
  renk_gosterge.write(yesil_aci); // servo motor yeşil rengi göster
  lcd.setCursor(0,1); // lcd ekran 2.satıra yeşil renk yaz
lcd.print("Yesil Renk"); // yeşil led yak
yesil_yak();
} 
else if ((r < 0.8) && (g < 1.2) && (b > 1.2)) { // mavi renk olma durumu
   renk_gosterge.write(mavi_aci); // servo motor mavi rengi göster
lcd.setCursor(0,1); // lcd ekran 2.satıra mavi renk yaz
lcd.print("Mavi Renk");
mavi_yak(); // mavi led yak

}
else { // tanımlı renkler değilse 
lcd.setCursor(0,1);  // lcd ekran 2.satıra birşey yazma
lcd.print("               ");
renk_gosterge.write(renksiz); // servo motor tanımız pozisyona al
led_kapat(); // ledi kapat
}
}


void kirmizi_yak() // kırmızı renk tanımı
{
  digitalWrite(kirmizi_led,LOW);
  digitalWrite(yesil_led,HIGH);
  digitalWrite(mavi_led,HIGH);
}
void mavi_yak() // mavi renk tanımı
{
  digitalWrite(kirmizi_led,HIGH);
  digitalWrite(yesil_led,HIGH);
  digitalWrite(mavi_led,LOW);
}
void yesil_yak() // yeşil renk tanımı
{
  digitalWrite(kirmizi_led,HIGH);
  digitalWrite(yesil_led,LOW);
  digitalWrite(mavi_led,HIGH);
}
void led_kapat() // ledi söndür
{
   digitalWrite(kirmizi_led,HIGH);
  digitalWrite(yesil_led,HIGH);
  digitalWrite(mavi_led,HIGH);
}
SİZCE NASIL OLMUŞ?
Beğendim
43%
İlginç
19%
Eh İşte
15%
Anlamadım
8%
Kötü
6%
Berbat
9%
YAZAR HAKKINDA
Murat Duran
Murat Duran
Açık kaynak donanım ve yazılım geliştiricisiyim , mekanik ve robotik sistemler üzerinde çalışmalar yapmaktayım.Ayrıca bir start-up firması olan Proje Hocam 'ın kurucuyum.
27 YORUMLAR
  • Seyit ozdemir
    11 Mart 2016 at 22:59

    TCS34725_GAN1X was not declared in this scope sorun veriyor neden yardim edermisiniz

  • emin esen
    19 Mart 2016 at 15:51

    TCS34725_GAN1X was not declared in this scope sorun veriyor neden yardim edermisiniz

    • Seyit özdemir
      20 Mart 2016 at 20:10

      Yazılım da GAN YAZISI GANI OLACAK

      • kadir anka
        21 Mayıs 2016 at 22:38

        compilation terminated.

        exit status 1
        Derleme sırasında hata oluştu.

        This report would have more information with
        “Show verbose output during compilation”
        option enabled in File -> Preferences.

        hatası alıyorum lutfen yardm

  • esen_emin
    19 Mart 2016 at 19:54

    lcd bağlantısı nasıl yapılıyor acaba yardımcı olabilir misiniz?

  • Giray Bozkurt
    19 Nisan 2016 at 21:39

    LCDmin alt satırında sadece rengin ilk harfi yazıyor. Yani maviyse sadece m harfi var yardımcı olurmusunuz

  • emine neslihan demir
    7 Mayıs 2016 at 09:50

    TCS34725 renk sensöründe 7 adet giriş var fakat içerisinde gelen erkek header lar ın 8 adet girişi var.Erkek headerleri renk sensörüne nasıl takacağız? ve hangi girişler kullanılıyor? led, ınt, sda, scl, 3v3, gnd, vın? hangi giriş breadboarda, hangisi arduino uno’ya bağlanıyor?

  • mustafa
    8 Mayıs 2016 at 19:22

    Merhaba pwm olarak ledlere yansıtmak istediğimizde nasıl bir yol izlememiz gerekiyor. okunan renk registerlerine nasıl bir proses yapmalıyız?

  • Ali Kemal Aydın
    9 Mayıs 2016 at 09:03

    TCS34725_GANI_1X hatası alıyorum, sorun nerede acaba?

  • Mutlu Altın
    20 Mayıs 2016 at 09:36

    Program hata veriyor sebebi ?

  • kadir anka
    21 Mayıs 2016 at 22:32

    compilation terminated.

    exit status 1
    Derleme sırasında hata oluştu.

    This report would have more information with
    “Show verbose output during compilation”
    option enabled in File -> Preferences.

    hatası alıyorum lutfen yardm

  • bir dost
    23 Mayıs 2016 at 17:27

    Adafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAN_1X);

    Bu şekilde yapın :
    dafruit_TCS34725 tcs = Adafruit_TCS34725(TCS34725_INTEGRATIONTIME_50MS, TCS34725_GAIN_1X);

  • Erden Tirek
    6 Haziran 2016 at 02:03

    Bu projeyi TCS3200 Renk Sensörü ile yapabilmem için yazılımda ve bağlantılarda ne gibi değişiklikler yapmam gerekiyor ?

  • arda95
    1 Aralık 2016 at 00:03

    hocam kabloları bağladım şekildeki gibi ne lcd de değer ya da yazı görüyorum ne de ldr de ışık. Çakma arduino kullandığım için midir? ve de LCD ekranın hangi pinine ne bağlayacağı?

  • sinan çorba
    5 Ocak 2017 at 14:12

    TCS34725_GANI_1X hatası çözümü : TCS34725_GAIN_1X olacak yani GAN yerine GAIN olacak

  • ahmet uğurlu
    ahmet uğurlu
    22 Şubat 2017 at 23:00

    hocam merhaba arduino program derlerken hata alıyorum sorunumu giderebilmem için arduino klasörünü verebilirmisiniz dosya halinde

  • reis
    12 Mart 2017 at 15:48

    TCS34725 Renk Sensörü bu sensör bulunmuyor TCS3200 bununla yapabilirmiyim bu projeyi neleri değiştirmem gerekli acaba

  • halil
    19 Mart 2017 at 14:56

    yükleme yaparken
    avrdude: ser_open(): can’t open device “\\.\COM5”: Sistem belirtilen dosyayı bulamıyor.

    avrdude: ser_drain(): read error: İşleyici geçersiz.

    Donanıma yüklenirken sorun oluştu. İlgili linke göz atınız http://www.arduino.cc/en/Guide/Troubleshooting#upload
    WARNING: Spurious .github folder in ‘Adafruit TCS34725’ library

    bu hatayı veriyor yardımcı olurmusunuz

  • ahmet
    ahmet
    2 Mayıs 2017 at 11:14

    hocam merhaba uygulamanın zip dosyasını alabilirmiyiz

  • hasan
    6 Mayıs 2017 at 11:46

    Renk seçeneklerini artırmrak istiyorum. yardımcı olur musunuz ?

  • Mustafa
    15 Mayıs 2017 at 16:00

    Lcd ekran nasıl bağlanıyor yardımcı olurmusunuz

  • Burak Kiraz
    25 Mayıs 2017 at 20:52

    Aynı sensörden 3 adet kullanmak istyorum.Dİğer sensörleri tanıtmam için yardımcı olabilir misiniz?

  • niyazi
    14 Haziran 2017 at 23:55

    #include “Adafruit_TCS34725.h” bu hatayı veriyor

  • sezgin
    5 Ağustos 2017 at 13:03

    Merhaba;

    exit status 1
    Error compiling for board Arduino/Genuino Uno.
    bu şekilde bir hata alıyorum init() kısmı turuncu değik nasıl düzeltebilirim

  • can kurttekin
    6 Kasım 2017 at 18:52

    lcd ekranın bağlantı şeması nasıl yapılacak peki bilgi verirmisiniz

  • müberra uğuryok
    13 Kasım 2017 at 09:43

    merhaba biz renk sensörü kullanarak izlediği çizgi rengine göre hız değiştiren robot yapmak istiyoruz. bunun için renk sensörü ile birlikte hangi kodları kullanmalıyız.

  • DUHA LAÇİN
    8 Aralık 2017 at 04:52

    MERHABALAR DEVREYİ KURDUM ANCAK SERVO MOTOR SÜREKLİ DÖNMEKTE İSTEDİĞİM AÇIYA GÖRE YÖNLENDİREMİYORUM VE LCD DEN YAZI ALAMIYORUM BAĞLANTILARI DEFALARCA KONTROL ETMEME RAĞMEN HALA AYNI SORUN LCD DEN IŞIK GELİYOR LED DEN HİÇ BİR ŞEKİLDE IŞIK GELMİYOR SORUNLARIN SEBEPLERİ NELERDİR YARDIMCI OLUR MUSUNUZ?

YORUM YAP