Robotik Kodlama

Robotik Kodlama
Ana Sayfa

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

29 Haziran 2021 Salı

TCS230 / TCS3200 Renk Sensörünün Arduino ile Kullanımı

 TCS230 / TCS3200 Renk Sensörünün Arduino ile Kullanımı

Renk sensörleri, karmaşık otomasyon sorunlarına daha güvenilir çözümler sağlar. Yiyecek ve içecek, otomotiv ve imalat endüstrileri dahil olmak üzere çeşitli endüstrilerde, malzeme tespiti, parçalardaki renk izlerini tespit etme, üretim sürecindeki adımları doğrulama vb. Amaçlarla kullanılırlar.

Endüstriyel uygulamalarda pahalı renk sensörleri kullanılırken, TCS230 renk sensörü gibi ucuz sensörler daha az sıkı uygulamalar için kullanılabilir.

TCS230 renk sensörü (aynı zamanda TCS3200 olarak da bilinir) oldukça popülerdir, ucuzdur ve kullanımı kolaydır. Bu renk sensörünü Arduino projemizde kullanmadan önce, bir renk sensörünün gerçekte nasıl çalıştığını görmek iyi olur.

Renk Sensörleri Nasıl Çalışır?

Beyaz ışık, farklı dalga boylarına sahip üç ana renkten (Kırmızı, yeşil ve mavi) oluşur. Bu renkler, farklı renk tonları oluşturmak için birbirleriyle birleşir.

Beyaz ışık herhangi bir yüzeye düştüğünde, yüzey malzemesinin özelliklerine bağlı olarak ışığın bir kısmı emilir ve bir kısmı yansıtılır. Gördüğümüz renk, hangi dalga boylarının gözlerimize geri yansıdığının bir sonucudur.

renkleri nasıl görüyoruz

Şimdi sensöre dönersek, tipik bir renk sensörü, nesneye modüle edilmiş bir ışık yansıtan yüksek yoğunluklu beyaz bir LED içerir. Yansıtılan ışığın rengini algılamak için, neredeyse tüm renk sensörleri, aşağıdaki resimde gösterildiği gibi, ' Bayer Filtresi ' olarak da bilinen, renge duyarlı bir filtre ızgarasından ve altında bir dizi fotodiyottan oluşur.

renk sensörü bayer filtresi ve fotodiyot düzenlemesi

Tek bir piksel, biri kırmızı, biri mavi, biri yeşil ve biri açık filtreli (filtresiz) olmak üzere 4 filtreden oluşur. Bu model aynı zamanda ' Bayer Modeli ' olarak da bilinir Her filtre, aşağıda gösterildiği gibi, ışığı olduğu gibi geçirirken, her filtre alttaki fotodiyoda yalnızca tek bir renkteki ışığı geçirir. Şeffaf filtreden geçen bu ekstra ışık, düşük ışık koşullarında büyük bir avantajdır.

filtrelerden geçen renk sensörü bayer filtresi çalışma ışığı

İşlem çipi daha sonra her bir fotodiyodu (her seferinde bir renk) adresler ve ışığın yoğunluğunu ölçer. Bir dizi fotodiyot olduğu için, sonuçların önce ortalaması alınır ve ardından işlenmek üzere gönderilir. Kırmızı, yeşil ve mavi ışığın göreceli seviyesi ölçülerek nesnenin rengi belirlenir.

TCS230 Renk Sensörü Modülü

Modülün merkezinde Texas Advanced Optoelectronic Solutions - TCS230'dan ucuz bir RGB sensör çipi bulunur. TCS230 Renk Sensörü, neredeyse sonsuz sayıda görünür rengi algılayıp ölçebilen eksiksiz bir renk detektörüdür.



Sensörün kendisi, dört beyaz LED ile çevrili modülün merkezinde görülebilir. Modüle güç verildiğinde LED'ler yanar ve algılanan nesneyi aydınlatmak için kullanılır. Bu LED'ler sayesinde sensör, nesnenin rengini veya parlaklığını belirlemek için tamamen karanlıkta da çalışabilir.

TCS230, 2,7 ila 5,5 volt besleme voltajında ​​çalışır ve TTL mantık düzeyinde çıkışlar sağlar.

TCS230 İşletimi

TCS230, 16 fotodiyotun kırmızı filtreli, 16 fotodiyotun yeşil filtreli, 16 fotodiyotun mavi filtreli ve kalan 16 fotodiyotun filtresiz temiz olduğu 8 x 8 fotodiyot dizisi yardımıyla rengi algılar.

Sensöre yakından bakarsanız, aslında bu filtreleri görebilirsiniz.

tcs230 tcs3200 renk sensörü yakın çekim

16 fotodiyotun her biri paralel olarak bağlanır, bu nedenle S2 ve S3 iki kontrol pini kullanarak hangisini okuyacağınızı seçebilirsiniz. Örneğin, yalnızca kırmızı rengi algılamak istiyorsanız, tabloya göre iki pini DÜŞÜK olarak ayarlayarak 16 kırmızı filtreli fotodiyot seçebilirsiniz.

Benzer şekilde, farklı S2 ve S3 kombinasyonları ile farklı fotodiyot türleri seçebilirsiniz.

S2S3Fotodiyot tipi
DÜŞÜKDÜŞÜKKırmızı
DÜŞÜKYÜKSEKMavi
YÜKSEKDÜŞÜKTemizle (Filtre yok)
YÜKSEKYÜKSEKYeşil

Dahili bir akım-frekans dönüştürücü, fotodiyotlardan gelen okumaları, frekansı seçilen rengin yoğunluğuyla orantılı olan bir kare dalgaya dönüştürür. Tipik çıkış frekansı aralığı 2HZ ~ 500KHZ'dir.

Sensörde, çıkış frekansını ölçeklendirmek için kullanılan iki kontrol pini daha vardır, S0 ve S1. Frekans,% 2,% 20 veya% 100 olmak üzere üç farklı ön ayar değerine ölçeklenebilir. Bu frekans ölçekleme işlevi, sensörün çeşitli mikro denetleyiciler ve diğer cihazlarla kullanılmasına izin verir.

S0S1Çıkış frekansı ölçeklendirmesi
DÜŞÜKDÜŞÜKGücü kapat
DÜŞÜKYÜKSEK% 2
YÜKSEKDÜŞÜK% 20
YÜKSEKYÜKSEK100%

Farklı S0 ve S1 kombinasyonları ile farklı ölçeklendirme faktörleri elde edebilirsiniz. Arduino için çoğu uygulama% 20 ölçeklendirmeyi kullanır.

TCS230 Renk Sensörü Modülü Pin Çıkışı

Aşağıdaki şema, ortak bir TCS230 modülünün pini göstermektedir.

tcs230 tcs3200 renkli sensör modülü pin çıkışı

GND bir toprak pimidir.

OEÇıkışı Etkinleştirme pinidir. Bu pin nadiren kullanılır ve çoğu modülde kalıcı olarak etkinleştirilir. Zaten etkinleştirilmemişse, DÜŞÜK çekin.

S0 & S1 pimler frekans ölçeklendirmesini seçmek için kullanılır.

S2 & S3 renk dizisini seçmek için iğneler kullanılır.

DIŞARI pin bir TTL seviyesi kare dalgadır.

VCCpin modüle güç sağlar. 2.7V ila 5.5V güç kaynağına bağlayın.

TCS230 Renk Sensörünü Arduino UNO'ya Kablolama

TCS 230'u bir Arduino'ya bağlamak çok basittir. Her pin, Çıkış Etkinleştirme pini dışında kullanılır ve modül, Arduino'nun 5 voltluk çıkışından güvenli bir şekilde beslenir.

TCS230 ile deneyler için bağlantı aşağıdadır:

arduino ile kablolama tcs230 tcs3200 renk sensörü modülü

Arduino'da kullanılan pinlerin hiçbiri kritik değildir çünkü modül herhangi bir pime özgü özellik gerektirmez, bu nedenle farklı pinler kullanmak istiyorsanız bunu güvenle yapabilirsiniz. Kablolardaki herhangi bir değişikliği yansıtmak için koddaki pin numaralarını değiştirdiğinizden emin olun.

Sensörünüz Arduino ya bağlandıktan sonra, bir kod yazma zamanı!

Sensörü Kalibre Etme

TCS230 renk sensörüyle çalışmak için aslında iki taslak kullanacağız.

  1. İlk taslak (kalibrasyon taslağı) sensörden ham verileri elde etmemize yardımcı olacaktır.
  2. İkinci taslak (ana Arduino çizimi), algılanan renk için RGB değerlerini görüntülemek için önceden alınan ham verileri kullanacaktır.

Her iki çizimin de aynı donanım bağlantısını kullanacağını unutmayın.

Aşağıda kalibrasyon taslağı verilmiştir. Bu taslak, TCS230 sensörünü renge göre ele alır ve çıkış piminin darbe genişliğini okur. Çıkış daha sonra seri monitörde görüntülenir.

Çizimi Arduino'nuza yükleyin ve sensörü nesnelere bakacak şekilde monte edin. Beyaz ve siyah renk için bir referans nesne bularak başlayın. Bu referans nesneleri, üç rengin tümü için hem maksimum hem de minimum değerlerde okumalar üretecektir.

// Define color sensor pins
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

// Variables for Color Pulse Width Measurements
int redPW = 0;
int greenPW = 0;
int bluePW = 0;

void setup() {
	// Set S0 - S3 as outputs
	pinMode(S0, OUTPUT);
	pinMode(S1, OUTPUT);
	pinMode(S2, OUTPUT);
	pinMode(S3, OUTPUT);

	// Set Pulse Width scaling to 20%
	digitalWrite(S0,HIGH);
	digitalWrite(S1,LOW);

	// Set Sensor output as input
	pinMode(sensorOut, INPUT);

	// Setup Serial Monitor
	Serial.begin(9600);
}

void loop() {
	// Read Red Pulse Width
	redPW = getRedPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Green Pulse Width
	greenPW = getGreenPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Blue Pulse Width
	bluePW = getBluePW();
	// Delay to stabilize sensor
	delay(200);

	// Print output to Serial Monitor
	Serial.print("Red PW = ");
	Serial.print(redPW);
	Serial.print(" - Green PW = ");
	Serial.print(greenPW);
	Serial.print(" - Blue PW = ");
	Serial.println(bluePW);
}


// Function to read Red Pulse Widths
int getRedPW() {
	// Set sensor to read Red only
	digitalWrite(S2,LOW);
	digitalWrite(S3,LOW);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Green Pulse Widths
int getGreenPW() {
	// Set sensor to read Green only
	digitalWrite(S2,HIGH);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Blue Pulse Widths
int getBluePW() {
	// Set sensor to read Blue only
	digitalWrite(S2,LOW);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

Kod yükledikten sonra bu tür okumalar alacaksınız. Her iki uçta da aldığınız okumaları kaydedin.

tcs230 renkli sensör kalibrasyon çıktısı

Kod Açıklaması:

Taslak, TCS230'u bağlamak için kullanılan pimlerin tanımlanmasıyla başlar. Bazı değişkenler ayrıca kırmızı, yeşil ve mavi renk dizisinin darbe genişliklerini temsil edecek şekilde tanımlanmıştır.

#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

int redPW = 0;
int greenPW = 0;
int bluePW = 0;

Kurulumda S0-S3 pinlerini çıkış olarak tanımlıyoruz. Bu pinler, frekans ölçeklendirmesini ve ele almak istediğimiz rengi seçmek için kullanılacaktır. S0 ve S1 pinleri, bu renk sensörünü bir Arduino ile kullanırken ortak bir değer olan frekans ölçeklendirmesini% 20'ye ayarlamak için kullanılır. Ardından, sensörlerin Çıkış pini Arduino'ya bir giriş olarak tanımlanır, burası kare dalgayı alacağımız yerdir. Son olarak, seri monitörü kurduk.

void setup() {
	// Set S0 - S3 as outputs
	pinMode(S0, OUTPUT);
	pinMode(S1, OUTPUT);
	pinMode(S2, OUTPUT);
	pinMode(S3, OUTPUT);

	// Set Pulse Width scaling to 20%
	digitalWrite(S0,HIGH);
	digitalWrite(S1,LOW);

	// Set Sensor output as input
	pinMode(sensorOut, INPUT);

	// Setup Serial Monitor
	Serial.begin(9600);
}

Döngü bölümünde, üç işlevi çağırır getRedPW()getGreenPW()ve getBluePW()darbe genişliği elde edildi. getRedPW()Örnek olarak inceleyelim .

getRedPW()İşlev kırmızı darbe genişliği alır. Kırmızı filtreyi seçmek için S2 ve S3 pinlerini ayarlayarak başlar. Bu, bu işlevin yeşil ve mavi emsallerinden farklı olduğu tek adımdır.

Ardından, darbe genişliğini saklamak için bir tam sayı tanımlanır. Darbe genişliği daha sonra Arduino pulseIn()işlevi kullanılarak belirlenir Bu fonksiyon darbe genişliğini ölçer, bunu darbenin DÜŞÜK kısmının genişliğini ölçecek şekilde yapılandırdığımızı unutmayın. Sonuç milisaniye cinsinden zamandır. Bu değer daha sonra döndürülür ve işlev sona erer.

int getRedPW() {
	// Set sensor to read Red only
	digitalWrite(S2,LOW);
	digitalWrite(S3,LOW);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

Döngüde, renkli darbe genişliklerini okumak için üç işlev çağırıyoruz ve sensörün stabilize olmasını sağlamak için aralarına 200 ms'lik bir gecikme ekliyoruz. Daha sonra değerleri seri monitörde yazdırıyoruz ve döngüyü tekrarlıyoruz.

void loop() {
	// Read Red Pulse Width
	redPW = getRedPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Green Pulse Width
	greenPW = getGreenPW();
	// Delay to stabilize sensor
	delay(200);

	// Read Blue Pulse Width
	bluePW = getBluePW();
	// Delay to stabilize sensor
	delay(200);

	// Print output to Serial Monitor
	Serial.print("Red PW = ");
	Serial.print(redPW);
	Serial.print(" - Green PW = ");
	Serial.print(greenPW);
	Serial.print(" - Blue PW = ");
	Serial.println(bluePW);
}

Arduino Kodu - TCS230'dan RGB Değerlerini Okuma

Okumalarınızı aldıktan sonra, TCS230 renk sensöründen RGB değerlerini okuyacağımız bir sonraki taslağı yükleyebilirsiniz.

Krokiyi yüklemeden önce, çizimin üst kısmındaki kalibrasyon çiziminden elde ettiğiniz altı kalibrasyon değerini girin. "0" ı gerçek değerlerinizle değiştirin.

// Define color sensor pins
#define S0 4
#define S1 5
#define S2 6
#define S3 7
#define sensorOut 8

// Calibration Values
// *Get these from Calibration Sketch
int redMin = 0; // Red minimum value
int redMax = 0; // Red maximum value
int greenMin = 0; // Green minimum value
int greenMax = 0; // Green maximum value
int blueMin = 0; // Blue minimum value
int blueMax = 0; // Blue maximum value

// Variables for Color Pulse Width Measurements
int redPW = 0;
int greenPW = 0;
int bluePW = 0;

// Variables for final Color values
int redValue;
int greenValue;
int blueValue;

void setup() {
	// Set S0 - S3 as outputs
	pinMode(S0, OUTPUT);
	pinMode(S1, OUTPUT);
	pinMode(S2, OUTPUT);
	pinMode(S3, OUTPUT);

	// Set Sensor output as input
	pinMode(sensorOut, INPUT);

	// Set Frequency scaling to 20%
	digitalWrite(S0,HIGH);
	digitalWrite(S1,LOW);

	// Setup Serial Monitor
	Serial.begin(9600);
}

void loop() {
	// Read Red value
	redPW = getRedPW();
	// Map to value from 0-255
	redValue = map(redPW, redMin,redMax,255,0);
	// Delay to stabilize sensor
	delay(200);

	// Read Green value
	greenPW = getGreenPW();
	// Map to value from 0-255
	greenValue = map(greenPW, greenMin,greenMax,255,0);
	// Delay to stabilize sensor
	delay(200);

	// Read Blue value
	bluePW = getBluePW();
	// Map to value from 0-255
	blueValue = map(bluePW, blueMin,blueMax,255,0);
	// Delay to stabilize sensor
	delay(200);

	// Print output to Serial Monitor
	Serial.print("Red = ");
	Serial.print(redValue);
	Serial.print(" - Green = ");
	Serial.print(greenValue);
	Serial.print(" - Blue = ");
	Serial.println(blueValue);
}


// Function to read Red Pulse Widths
int getRedPW() {
	// Set sensor to read Red only
	digitalWrite(S2,LOW);
	digitalWrite(S3,LOW);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Green Pulse Widths
int getGreenPW() {
	// Set sensor to read Green only
	digitalWrite(S2,HIGH);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

// Function to read Blue Pulse Widths
int getBluePW() {
	// Set sensor to read Blue only
	digitalWrite(S2,LOW);
	digitalWrite(S3,HIGH);
	// Define integer to represent Pulse Width
	int PW;
	// Read the output Pulse Width
	PW = pulseIn(sensorOut, LOW);
	// Return the value
	return PW;
}

Kddu yükleyin ve sonuçları farklı renk örnekleriyle gözlemleyin. Gerekirse kalibrasyon değerlerinde küçük ayarlamalar yapabilirsiniz.

Kod Açıklama

Aşağıdakiler dışında, bu çizimin çoğunun önceki çizimle tamamen aynı olduğunu fark edeceksiniz:

Kalibrasyon çiziminden elde ettiğiniz altı kalibrasyon değeri, çizimin üst kısmına girilir.

// Calibration Values
int redMin = 0; // Red minimum value
int redMax = 0; // Red maximum value
int greenMin = 0; // Green minimum value
int greenMax = 0; // Green maximum value
int blueMin = 0; // Blue minimum value
int blueMax = 0; // Blue maximum value

Çıktısını almak istediğimiz RGB değerleri için üç yeni değişken tanımlandı.

int redValue;
int greenValue;
int blueValue;

Döngü bölümünde, önceki çizimde kullanılan aynı işlevi kullanarak değerlerin her birini okuruz. Ardından map(), kalibrasyon değerlerimizi referans olarak kullanarak bu değerleri RGB değerlerine dönüştürmek için Arduino işlevini kullanırız.

Aralığı tersine çevirdiğimize dikkat edin (Min değer 255 amd Maks değer 0'a eşlenir) çünkü fonksiyonlarımız frekansı değil darbe genişliğini döndürür.

// Read Red value
redPW = getRedPW();
// Map to value from 0-255
redValue = map(redPW, redMin,redMax,255,0);
// Delay to stabilize sensor
delay(200);

Son olarak, değerleri seri monitörde çıkarıyoruz. Bu son okumalar, taranan öğenin RGB değerlerine karşılık gelecektir.

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


Sayfalarımı ziyaret ettiğiniz için 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.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.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.

HC-SR501 PIR Sensörü Kullanımı ve Arduino

 HC-SR501 PIR Sensörü Kullanımı ve Arduino

Her çılgın bilim insanının laboratuvarı veya gencin gizli odası, haydut ajanların veya kardeşlerin saldırılarına karşı gelişmiş korumaya ihtiyaç duyar. Onlardan biriyseniz, muhtemelen sizin için bir Pasif kızılötesi (PIR) sensör almayı düşünmelisiniz. PIR sensörleri, odanızda olmaması gereken zamanlarda birinin olduğunu tespit etmenizi sağlar.

Bir casus filminden çıkmış gibi görünse de, muhtemelen her gün PIR sensörleri kullanıyorsunuz. Bu sensör, çoğu modern güvenlik sisteminde, otomatik ışık anahtarlarında, garaj kapısı açıcılarında ve bazı elektrikli cihazların çalıştırılmasının yalnızca insanların varlığında gerekli olduğu benzer uygulamalarda bulacağınızla aynıdır.

PIR Hareket Sensörü Nasıl Çalışır?

Bilmiyorsanız, Mutlak Sıfır'ın (0 Kelvin / -273,15 ° C) üzerinde bir sıcaklığa sahip tüm nesneler, insan vücudu da dahil olmak üzere kızılötesi radyasyon şeklinde ısı enerjisi yayar. Bir nesne ne kadar sıcaksa, o kadar fazla radyasyon yayar.

PIR sensörü, bu tür kızılötesi radyasyonu algılamak için özel olarak tasarlanmıştır. Temelde iki ana bölümden oluşur: Bir Pyroelektrik Sensör ve Kızılötesi sinyalleri piroelektrik sensöre odaklayan Fresnel lens adı verilen özel bir mercek .

PIR Sensörü Çalışan Pyroelektrik Sensör İki Algılama Yuvası

Bir Pyroelektrik Sensör, kızılötesi radyasyonun geçmesine izin veren bir malzemeden yapılmış iki dikdörtgen yuvaya sahiptir. Bunların arkasında, biri pozitif, diğeri negatif çıktı üretmekten sorumlu iki ayrı kızılötesi sensör elektrotu vardır. Bunun nedeni, ortam IR seviyelerinde değil, IR seviyelerinde bir değişiklik arıyoruz. İki elektrot birbirlerini iptal edecek şekilde bağlanmıştır. Bir yarısı diğerinden daha fazla veya daha az IR radyasyonu görürse, çıktı yüksek veya düşük sallanacaktır.

Sensör boştayken , yani sensör etrafında hareket yokken; her iki yuva da aynı miktarda kızılötesi radyasyonu algılar ve sıfır çıkış sinyaliyle sonuçlanır.

Ama insan ya da hayvan gibi sıcak bir vücut geçtiğinde ; ilk önce PIR sensörünün bir yarısını keser ve bu da iki yarı arasında pozitif bir diferansiyel değişikliğe neden olur. Sıcak vücut algılama alanından ayrıldığında, bunun tersi gerçekleşir ve sensör negatif bir diferansiyel değişiklik üretir. Karşılık gelen sinyal darbesi, sensörün çıkış pinini yüksek ayarlamasına neden olur.

PIR Sensör Çalışma Animasyonu Diferansiyel Çıkışı

HC-SR501 PIR Hareket Dedektörü

Bir kişinin bölgeden ne zaman ayrıldığını veya alana girdiğini veya yaklaştığını tespit etmesi gereken Arduino projelerimizin çoğu için, HC-SR501 PIR sensörleri mükemmel bir seçimdir. Düşük güç ve düşük maliyetlidirler, oldukça sağlamdırlar, geniş bir lens yelpazesine sahiptirler, arayüzü kolaydır ve hobiler arasında delice popülerdirler.

HC-SR501 PIR sensörünün aşağıdaki şemada gösterildiği gibi üç çıkış pini VCC, Çıkış ve Toprak vardır. Dahili bir voltaj regülatörüne sahiptir, böylece 4,5 ila 12 volt arasında herhangi bir DC voltajı ile çalıştırılabilir, tipik olarak 5V kullanılır. Bunun dışında, PIR'nizde birkaç seçeneğiniz var. Onları kontrol edelim.

Jumper Ayarlı PIR Sensör Pin Çıkışı Hassasiyet Zaman Ayarı BISS0001 IC Etiketleme Şeması

Birkaç parametreyi ayarlamak için kart üzerinde iki potansiyometre vardır:

  • Hassasiyet - Bu, hareketin tespit edilebileceği maksimum mesafeyi ayarlar. 3 metreden yaklaşık 7 metreye kadar değişir. Odanızın topolojisi, elde ettiğiniz gerçek aralığı etkileyebilir.
  • Zaman - Bu, algılamanın ardından çıktının ne kadar YÜKSEK kalacağını ayarlar. En az 3 saniye, en fazla 300 saniye veya 5 dakikadır.

Son olarak, kartın bir jumper'ı vardır (bazı modellerde jumper lehimlenmez). İki ayarı vardır:

  • H - Bu, Tutma / Tekrar / Yeniden Tetiklemedir Bu konumda HC-SR501, hareketi algılamaya devam ettiği sürece YÜKSEK bir sinyal vermeye devam edecektir.
    PIR Sensörü Tekrar Tetikleme Tekrar Modu Atlama Teli Ayarı
  • L - Bu Aralıklı veya Tekrar Yok / Yeniden Tetiklemesizdir Bu konumda çıkış, TIME potansiyometresi ayarı ile ayarlanan süre boyunca YÜKSEK kalacaktır.
    PIR Sensörü Yeniden Tetiklemeyen Yinelemeyen Mod Atlama Teli Ayarı

HC-SR501 PIR Sensörünü daha çok yönlü hale getirme

HC-SR501 devre kartında iki ek bileşen için lehim pedleri bulunur. Bunlar genellikle "RT" ve "RL" olarak etiketlenir. Bazı kartlarda etiketlerin, bileşenlerin karşısındaki taraftaki "kubbe" mercekle kaplı olabileceğini unutmayın.

Doğruluğu Artırmak için PIR Sensörü LDR ve Termistör Ayarı
  • RT - Bu, bir termistör veya sıcaklığa duyarlı direnç içindir. Bunun eklenmesi, HC-SR501'in aşırı sıcaklıklarda kullanılmasına izin verir, ayrıca dedektörün doğruluğunu bir dereceye kadar artırır.
  • RL - Bu bağlantı, Işık Bağımlı Direnç (LDR) veya Fotodirenç içindir. Bu bileşenin eklenmesi ile, HC-SR501 yalnızca, harekete duyarlı aydınlatma sistemleri için yaygın bir uygulama olan karanlıkta çalışacaktır.

Ek bileşenler doğrudan karta lehimlenebilir veya teller ve konektörler kullanılarak uzak konumlara uzatılabilir.

HC-SR501 PIR Sensör Pin Çıkışı

HC-SR501, kendisini dış dünyaya arabirim sağlayan 3 pimli bir konektöre sahiptir. Bağlantılar aşağıdaki gibidir:

Pasif Kızılötesi PIR Sensörü Pinout Şeması

VCC Arduino üzerindeki 5V pinini bağladığımız HC-SR501 PIR sensörünün güç kaynağıdır.

Çıktıpin 3.3V TTL mantık çıkışıdır. DÜŞÜK, hiçbir hareketin algılanmadığını, YÜKSEK ise bir miktar hareketin algılandığını gösterir.

GND Arduino'nun zeminine bağlanmalıdır.

PIR Sensörünü bağımsız bir birim olarak kullanma

HC-SR501 PIR sensörünün son derece popüler olmasının nedenlerinden biri, HC-SR501'in kendi başına oldukça yetenekli olan çok yönlü bir sensör olmasıdır. Ve onu bir Arduino gibi bazı mikrodenetleyicilerle arayüzleyerek çok yönlülüğünü daha da genişletebilirsiniz. İlk deneyimizde, kendi başına ne kadar yararlı olduğunu göstermek için HC-SR501'i kendi başına kullanacağız.

Bu deney için kablolama çok basit. Piller, sensörün VCC ve GND'sine bağlanır ve küçük bir Kırmızı LED, 220Ω akım sınırlama direnci aracılığıyla çıkış pinine bağlanır. 

Şimdi PIR hareket algıladığında, çıkış pini "yüksek" olacak ve LED'i yakacak!

Arduino olmadan PIR Sensör Kablo Tesisatı Kırılma Bağlantılarını Test Etme
Bu, bir PIR Sensörünün bağımsız uygulamalarda nasıl kullanılabileceğini gösterir.

Devreyi açtığınızda, PIR'ın odadaki kızılötesi enerjiye alışması için 30-60 saniye beklemeniz gerektiğini unutmayın. Bu süre zarfında LED biraz yanıp sönebilir. LED sönene kadar bekleyin ve ardından LED'in yandığını görmek için elinizi sallayın, vb. Önünde dolaşın!



Kablolama - PIR Sensörünü Arduino UNO'ya Bağlama

Artık PIR sensörünün nasıl çalıştığını tam olarak anladığımıza göre, onu Arduino'muza bağlamaya başlayabiliriz!

PIR sensörlerini bir mikro denetleyiciye bağlamak gerçekten çok basit. PIR, dijital bir çıkış görevi görür, bu nedenle yapmanız gereken tek şey, çıkış pininin YÜKSEK (Hareket Algılandı) veya DÜŞÜK (Algılanmadı) olarak çevrilmesini dinlemektir. PIR'a 5V ile güç verin ve toprağı toprağa bağlayın. Ardından çıkışı 2 numaralı dijital pime bağlayın.

Bunun doğru çalışması için HC-SR501 üzerindeki atlama telini H ( Yeniden Tetikleme ) konumuna ayarlamak isteyeceksiniz Ayrıca TIME değerini minimum 3 saniyeye ayarlamanız, TIME potansiyometresini sonuna kadar saat yönünün tersine çevirmeniz gerekir. Hassasiyeti istediğiniz yerde ayarlayın, emin değilseniz orta noktaya ayarlayın.

Bununla, artık bir kod yüklemeye ve PIR'ı çalıştırmaya hazırsınız.

PIR Sensör Modülü ile Arduino Kablolama Fritzing Bağlantıları
PIR Sensörünün Arduino UNO'ya Kablolanması

Arduino Kodu

Kod çok basittir ve temelde pin # 2'nin girişinin YÜKSEK veya DÜŞÜK olup olmadığını izler.

int ledPin = 13;                // choose the pin for the LED
int inputPin = 8;               // choose the input pin (for PIR sensor)
int pirState = LOW;             // we start, assuming no motion detected
int val = 0;                    // variable for reading the pin status
 
void setup() {
  pinMode(ledPin, OUTPUT);      // declare LED as output
  pinMode(inputPin, INPUT);     // declare sensor as input
 
  Serial.begin(9600);
}
 
void loop(){
  val = digitalRead(inputPin);  // read input value
  
  if (val == HIGH)	// check if the input is HIGH
  {            
    digitalWrite(ledPin, HIGH);  // turn LED ON
	
    if (pirState == LOW) 
	{
      Serial.println("Motion detected!");	// print on output change
      pirState = HIGH;
    }
  } 
  else 
  {
    digitalWrite(ledPin, LOW); // turn LED OFF
	
    if (pirState == HIGH)
	{
      Serial.println("Motion ended!");	// print on output change
      pirState = LOW;
    }
  }
}

Sonunda, hareket algılandığında seri monitörde bir mesaj yazdıracağız.

Pasif Kızılötesi PIR Sensörü Arduino Sketch Çıkışı Seri Monitör
Seri monitörde PIR Sensör çıkışı

PIR tabanlı uygulamaları tasarlamadan önce dikkat edilmesi gerekenler

Çoğu PIR sensöründe olduğu gibi, HC-SR501 odadaki kızılötesi enerjiye alışmak için biraz zaman gerektirir. Bu, sensöre ilk güç verildiğinde 30 ila 60 saniye sürer.

Ek olarak, sensör bir okuma yaptıktan sonra yaklaşık 5 veya 6 saniyelik bir "sıfırlama" süresine sahiptir. Bu süre zarfında herhangi bir hareket algılamayacaktır.

HC-SR501'e dayalı bir sistem tasarlarken bu gecikme sürelerini hesaba katmanız gerekecektir.

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


Sayfalarımı ziyaret ettiğiniz için 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.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.Bu konu ve modüller ile uğraşarak, ileride çok güzel makine ve elektronik aletler yapabilirsiniz.