Robotik Kodlama

Robotik Kodlama
Ana Sayfa

İLGİNİZİ ÇEKEBİLECEK LİNKLER :

28 Haziran 2021 Pazartesi

Arduino Renk Algılama - TCS230 TCS3200 Renk Sensörü

Arduino Renk Algılama- TCS230 TCS3200 Renk Sensörü

TCS230 Renk Sensörü Nasıl Çalışır?


TCS230, 8 x 8'lik bir fotodiyot dizisi yardımıyla renkli ışığı algılar. Daha sonra bir Akımdan Frekansa Dönüştürücü kullanılarak, fotodiyotlardan gelen okumalar, ışık yoğunluğuyla doğru orantılı bir frekansta bir kare dalgaya dönüştürülür. Son olarak, Arduino Board'u kullanarak kare dalga çıktısını okuyabilir ve renk için sonuçları alabiliriz.

TCS230 TCS3200 Renk Sensörü Çalışma Prensibi

Sensöre daha yakından bakarsak, çeşitli renkleri nasıl algıladığını görebiliriz. Fotodiyotların üç farklı renk filtresi vardır. Bunlardan 16'sında kırmızı filtre var, 16'sında yeşil filtre var, 16'sında mavi filtre var ve diğer 16 fotodiyotta filtresiz temiz.

TCS230 TCS3200 Renkli Sensör Fotodiyot Filtreleri Nasıl Çalışır

Her 16 fotodiyot paralel olarak bağlanmıştır, bu nedenle S2 ve S3 kontrol pinlerini kullanarak hangilerinin okunacağını seçebiliriz. Örneğin, kırmızı rengi tespit etmek istiyorsak, tabloya göre iki pini düşük mantık seviyesine ayarlayarak sadece 16 kırmızı filtreli fotodiyot kullanabiliriz.

TCS230 Renk Sensörü Frekans Ölçeklendirme Fotodiyot Tipi Tablosu

Sensörde, çıkış frekansını ölçeklendirmek için kullanılan iki kontrol pini daha vardır, S0 ve S1. Frekans,% 100,% 20 veya% 2'lik üç farklı ön ayar değerine ölçeklenebilir. Bu frekans ölçekleme işlevi, sensör çıkışının çeşitli frekans sayaçları veya mikro denetleyiciler için optimize edilmesini sağlar.Artık devam etmeye ve TCS230 sensörünü Arduino kartına bağlamaya hazırız. İşte devre şemaları.

Arduino Renk Algılama Eğitimi TSC230 TSC3200 Renk Sensörü Devre Şemaları

TCS230 Renk Sensörü Kaynak Kodu


Açıklama: Öncelikle sensörün bağlı olduğu pinleri tanımlamamız ve frekansı okumak için bir değişken tanımlamamız gerekiyor. Kurulum bölümünde dört kontrol pini çıkış olarak ve sensör çıkışını Arduino girişi olarak tanımlamamız gerekir. Burada frekans ölçeklendirmeyi de ayarlamamız gerekiyor, bu örnek için% 20'ye ayarlayacağım ve sonuçları Seri Monitörde görüntülemek için seri iletişimi başlatacağım.

Döngü bölümünde, kırmızı filtreli fotodiyotları okumakla başlayacağız. Bu amaçla, iki kontrol pini S2 ve S3'ü düşük mantık seviyesine ayarlayacağız. Daha sonra "pulseIn ()" işlevini kullanarak çıkış frekansını okuyacağız ve onu değişken "frekansa" koyacağız. Serial.print () işlevini kullanarak sonucu seri monitörde yazdıracağız. Aynı prosedür diğer iki renk için de geçerlidir, sadece kontrol pimlerini uygun renk için ayarlamamız gerekir.

/ * Arduino Renk Algılama Eğitimi
*
* Dejan Nedelkovski, www.HowToMechatronics.com tarafından
*
* /
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frekans = 0;
geçersiz kurulum () {
pinMode ( S0, ÇIKIŞ ) ;
pinMode ( S1, ÇIKIŞ ) ;
pinMode ( S2, ÇIKIŞ ) ;
pinMode ( S3, ÇIKIŞ ) ;
pinMode ( sensorOut, GİRİŞ ) ;
// Sıklık ölçeklendirmeyi% 20'ye ayarlama
digitalWrite ( S0, YÜKSEK ) ;
digitalWrite ( S1, DÜŞÜK ) ;
Seri. başlangıç ( 9600 ) ;
}
geçersiz döngü () {
// Kırmızı filtrelenmiş fotodiyotların okunacak şekilde ayarlanması
digitalWrite ( S2, DÜŞÜK ) ;
digitalWrite ( S3, DÜŞÜK ) ;
// Çıkış frekansının okunması
frekans = pulseIn ( sensör Çıkışı, DÜŞÜK ) ;
// Değerin seri monitörde yazdırılması
Seri. print ( "R =" ) ; // yazdırma adı
Seri. print ( frekans ) ; // KIRMIZI renk frekansı yazdırılıyor
Seri. baskı ( "" ) ;
gecikme ( 100 ) ;
// Yeşil filtreli fotodiyotların okunacak şekilde ayarlanması
digitalWrite ( S2, YÜKSEK ) ;
digitalWrite ( S3, YÜKSEK ) ;
// Çıkış frekansının okunması
frekans = pulseIn ( sensör Çıkışı, DÜŞÜK ) ;
// Değerin seri monitörde yazdırılması
Seri. print ( "G =" ) ; // yazdırma adı
Seri. print ( frekans ) ; // KIRMIZI renk frekansı yazdırılıyor
Seri. baskı ( "" ) ;
gecikme ( 100 ) ;
// Mavi filtreli fotodiyotların okunacak şekilde ayarlanması
digitalWrite ( S2, DÜŞÜK ) ;
digitalWrite ( S3, YÜKSEK ) ;
// Çıkış frekansının okunması
frekans = pulseIn ( sensör Çıkışı, DÜŞÜK ) ;
// Değerin seri monitörde yazdırılması
Seri. print ( "B =" ) ; // yazdırma adı
Seri. print ( frekans ) ; // KIRMIZI renk frekansı yazdırılıyor
Seri. println ( "" ) ;
gecikme ( 100 ) ;
}

 

Şimdi Seri Monitörü çalıştırırsak bazı değerler almaya başlayacağız. Bu değerler, seçilen frekans ölçeklendirmesinin yanı sıra çevredeki aydınlatmaya da bağlıdır.

TSC230 Renk Sensörü Fotodiyot Spektral Yanıt Şeması

Burada, sensörün veri sayfasındaki fotodiyot spektral yanıt diyagramından görüldüğü gibi, her bir fotodiyot tipinin farklı hassasiyetine bağlı olarak üç değerin farklı olduğuna dikkat edin.

Yine de sensörün önüne farklı renkler getireceğimizde değerlerin nasıl tepki vereceğini şimdi görelim. Örneğin, kırmızı rengi getirirsek, benim durumumda başlangıç ​​değeri 70'ten 25'e düşecektir.

Arduino Eğitim Örneği ile rengi algılama

Şimdi, algılanan renkleri 0 ile 255 arasında değerlere sahip RGB Modeli ile temsil etmek istersek, okumaları 0 ile 255 arasındaki değerlere eşlemek veya dönüştürmek için map () işlevini kullanacağız.

// Frekans değerini 0 ile 255 arasındaki RGB Modeline yeniden eşleştirme
frekans = harita ( frekans, 25,70,255,0 ) ;

70'in değeri 0'a ve 25 - 255'e eşlenecektir. Aynı prosedür diğer iki renk için de geçerlidir.

İşte bu örnek için son kaynak kodu:

/ * Arduino Renk Algılama Eğitimi
*
* Dejan Nedelkovski, www.HowToMechatronics.com tarafından
*
* /
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8
int frekans = 0;
geçersiz kurulum () {
pinMode ( S0, ÇIKIŞ ) ;
pinMode ( S1, ÇIKIŞ ) ;
pinMode ( S2, ÇIKIŞ ) ;
pinMode ( S3, ÇIKIŞ ) ;
pinMode ( sensorOut, GİRİŞ ) ;
// Sıklık ölçeklendirmeyi% 20'ye ayarlama
digitalWrite ( S0, YÜKSEK ) ;
digitalWrite ( S1, DÜŞÜK ) ;
Seri. başlangıç ( 9600 ) ;
}
geçersiz döngü () {
// Kırmızı filtrelenmiş fotodiyotların okunacak şekilde ayarlanması
digitalWrite ( S2, DÜŞÜK ) ;
digitalWrite ( S3, DÜŞÜK ) ;
// Çıkış frekansının okunması
frekans = pulseIn ( sensör Çıkışı, DÜŞÜK ) ;
// Frekans değerini 0 ile 255 arasındaki RGB Modeline yeniden eşleştirme
frekans = harita ( frekans, 25,72,255,0 ) ;
// Değerin seri monitörde yazdırılması
Seri. print ( "R =" ) ; // yazdırma adı
Seri. print ( frekans ) ; // KIRMIZI renk frekansı yazdırılıyor
Seri. baskı ( "" ) ;
gecikme ( 100 ) ;
// Yeşil filtreli fotodiyotların okunacak şekilde ayarlanması
digitalWrite ( S2, YÜKSEK ) ;
digitalWrite ( S3, YÜKSEK ) ;
// Çıkış frekansının okunması
frekans = pulseIn ( sensör Çıkışı, DÜŞÜK ) ;
// Frekans değerini 0 ile 255 arasındaki RGB Modeline yeniden eşleştirme
frekans = harita ( frekans, 30,90,255,0 ) ;
// Değerin seri monitörde yazdırılması
Seri. print ( "G =" ) ; // yazdırma adı
Seri. print ( frekans ) ; // KIRMIZI renk frekansı yazdırılıyor
Seri. baskı ( "" ) ;
gecikme ( 100 ) ;
// Mavi filtreli fotodiyotların okunacak şekilde ayarlanması
digitalWrite ( S2, DÜŞÜK ) ;
digitalWrite ( S3, YÜKSEK ) ;
// Çıkış frekansının okunması
frekans = pulseIn ( sensör Çıkışı, DÜŞÜK ) ;
// Frekans değerini 0 ile 255 arasındaki RGB Modeline yeniden eşleştirme
frekans = harita ( frekans, 25,70,255,0 ) ;
// Değerin seri monitörde yazdırılması
Seri. print ( "B =" ) ; // yazdırma adı
Seri. print ( frekans ) ; // KIRMIZI renk frekansı yazdırılıyor
Seri. println ( "" ) ;
gecikme ( 100 ) ;
}

Renklerin o kadar doğru olmadığını, ancak yine de basit projeler için yeterince iyi olduklarını unutmayın. 

ANA SAYFAYA DÖN

Bahadır ÖZGEN
Electronic Robotic Coding Research and Development 1975 - ∞
Learn Forever
If you want, let's learn together...
https://roboticcode2020.blogspot.com/
bahadirozgen1975@gmail.com
facebook    robotic.code
instagram    @roboticcode


Bu konuları arkadaşlarınız ile paylaşarak onların da bilgiye ulaşmasında yardımcı olursanız çok sevinirim.Daha eklenecek ve çalışılacak o kadar çok bilgi var ki... Sayfalarımı ziyaret ettiğiniz için Size çok teşekkür ederim. Bu sitede mevcut olan içerikler kendi oluşturduğum projeler yazı,resim ve videolardan oluşmaktadır. İçerik oluşturmak çok uzun sürdüğü için bazı projelerde yurtdışı kaynaklardan faydalandım.Buradaki amacım ticari değildir. Ülkemizin çocukları ve gençlerine bu konularda Türkçe kaynak sıkıntısı çekenlere bazı materyaller sunmaktır.Arduino, Modüller ve kodlama konusunu tanıtmaktır, sevdirmektir. Kaynağı belli olan ve bizim kaynağına ulaşabildiğimiz materyal (yazı, fotoğraf, resim, video v.b.) için ilgili konularda fotoğraflarda logo varsa v.b. not olarak gösterilecektir.Sitemizde yayınlanan tüm içerik, bizim tarafımızdan ve internet üzerinden youtube, facebook ve blog gibi paylaşıma sunulmuş kaynak sitelerden alındığı için, sitemiz yasal yükümlülüğe tabi tutulamaz.Sitemizde telif haklarının size ait olduğu bir içerik varsa ve bunu kaldırmamızı isterseniz, iletişim sayfamızdan bizimle iletişime geçtiğiniz takdirde içerik yayından kaldırılacaktır. Varsa; bazı materyallerin üzerine eklediğimiz email ve site adresimiz sadece yayını temsilendir.Dünyada bilgi paylaşıldıkça ilerler ve birlikte öğrenmek için hevesleniriz.Türkiye'mizin gençlerinde ilgi uyandırabildi ve dikkati fen bilimlerine çekebildi isem.Ne mutlu bana.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabiliriz. İlginize teşekkür ederim.