Arduino İle Su Seviye Sensörü Kullanımı, Kodu, Projesi | Robocombo

Arduino İle Su Seviye Sensörü Kullanımı, Kodu, Projesi | Robocombo

Merhaba arkadaşlar, bu yazımız da arduino ile su seviye sensörü kullanımı ve projesi konusunu arduino kodları ile birlikte öğrenip uygulayacağız.

Bu sensör su seviyesini ölçmek, yağmuru tespit etmek veya sızıntıyı tespit etmek için kullanılabilir.

Su Seviye Sensörü Genel Bakış

Su seviye sensörü, beşi güç iletkeni ve beşi hassasiyet iletkeni olan on iletken bakır izine sahiptir. Bu izler birbirine geçmiştir, böylece her iki güç izi arasında bir duyu izi vardır. Genellikle bu izler bağlı değildir, ancak suya daldırıldığında su ile köprülenir.
Sensör üzerinde, enerji olup olmadığını belli eden bir Güç LED'i vardır.

Su Seviye Sensörü Nasıl Çalışır?

Su seviye sensörünün çalışması oldukça basittir. Suya maruz kalan paralel iletkenler, direnci su seviyesine göre değişen değişken bir direnç (tıpkı bir potansiyometre gibi) gibi davranır . Dirençteki değişiklik, sensörün üstünden su yüzeyine olan mesafeye karşılık gelir.
Direnç, suyun yüksekliği ile ters orantılıdır:
  • Sensör ne kadar suya daldırılırsa, iletkenlik de o kadar iyi olur ve direnç azalır.
  • Sensör ne kadar az suya daldırılırsa, iletkenlik zayıf olur ve direnç artar.
Sensör, dirence göre bir çıkış voltajı üretir, bu da ölçerek su seviyesini belirleyebilmemize yardımcı olur.

Su Seviyesi Sensörü Pinout

Su seviye sensörünün kullanımı çok kolaydır ve sadece 3 pini vardır.
S (Sinyal) pimi, Arduino'nuzdaki analog girişlerden birine bağlanacak bir analog çıkıştır. + (VCC) pimi sensöre güç sağlar. Sensörü 3.3V - 5V arasında çalıştırmanız önerilir. Analog çıkışın sensör için hangi voltajın sağlandığına bağlı olarak değişeceğini lütfen unutmayın. - (GND) bir toprak bağlantısıdır.

Su Seviyesi Sensörü Arduino ile Bağlantısı - Kablolama 

Su seviye sensörünü Arduino'ya bağlayalım. Önce sensöre güç sağlamanız gerekir. Bunun için modüldeki + (VCC) pimini Arduino'daki 5V'ye ve - (GND) pimini toprağa bağlayabilirsiniz. Bununla birlikte, bu sensörler ile yaygın olarak bilinen bir sorun, nemli bir ortama maruz kaldıklarında kısa ömürlü olmalarıdır. Sondaya güç uygulanması, korozyon oranını sürekli olarak önemli ölçüde hızlandırır. Bunun üstesinden gelmek için, sensöre sürekli güç vermemenizi, ancak sadece okumaları aldığınızda güç vermenizi öneririz. Bunu yapmanın en kolay yolu, VCC pimini bir Arduino'nun dijital pimine bağlamak ve gereksiniminize göre HIGH veya LOW olarak ayarlamaktır. Böylece, VCC pinini Arduino'nun 7 numaralı dijital pinine bağlayacağız. Son olarak, S (Sinyal) pimini Arduino'nuzdaki A0 ADC pimine bağlayın. Aşağıdaki görsel de bağlantı kablolama gösterilmektedir.

Su Seviyesi Algılama Temel Arduino Kodu

Devre kurulduktan sonra, aşağıdaki kodu Arduino'nuza yükleyin.
// Sensor pins
#define sensorPower 7
#define sensorPin A0

// Value for storing water level
int val = 0;

void setup() {
	// Set D7 as an OUTPUT
	pinMode(sensorPower, OUTPUT);
	
	// Set to LOW so no power flows through the sensor
	digitalWrite(sensorPower, LOW);
	
	Serial.begin(9600);
}

void loop() {
	//get the reading from the function below and print it
	int level = readSensor();
	
	Serial.print("Water level: ");
	Serial.println(level);
	
	delay(1000);
}

//This is a function used to get the reading
int readSensor() {
	digitalWrite(sensorPower, HIGH);	// Turn the sensor ON
	delay(10);							// wait 10 milliseconds
	val = analogRead(sensorPin);		// Read the analog value form sensor
	digitalWrite(sensorPower, LOW);		// Turn the sensor OFF
	return val;							// send current reading
}
Kod yüklendikten sonra, sonuçları görmek için bir ekrana bağlayın. Sensör suya dokunmadığında "0" değerini görmelisiniz. Suyu algıladığını görmek için bir bardak su alabilir ve sensörü yavaşça içine koyabilirsiniz.
Sensör tamamen suya batırılacak şekilde tasarlanmamıştır. Yalnızca PCB üzerindeki açıkta kalan izleri suyla temas ettirecek şekilde kurmaya dikkat edin.

Açıklama:

Kod, sensörün + (VCC) ve S (Sinyal) pimlerinin bağlı olduğu Arduino pimlerinin bildirimi ile başlar.
#define sensorPower 7
#define sensorPin A0
Daha sonra val ile mevcut su seviyesini depolayan bir değişken tanımlarız.
int val = 0;
Şimdi Kurulum bölümünde, sensöre giden güç bağlantısını OUTPUT olarak bildiriyoruz, daha sonra LOW olarak ayarladık, böylece başlangıçta sensörden güç gelmiyor. Seri monitörü de kurduk.
pinMode(sensorPower, OUTPUT);
digitalWrite(sensorPower, LOW);
Serial.begin(9600);
Döngü bölümünde, readSensor() işlevi bir saniyelik aralıklarla tekrar tekrar çağırır ve döndürülen değeri yazdırırız.
Serial.print("Water level: ");
Serial.println(readSensor());
delay(1000);
readSensor() fonksiyonu mevcut su seviyesini elde etmek için kullanılır. Sensörü açar, 10 milisaniye bekler, analog değer formu sensörünü okur, sensörü OFF konuma getirir ve sonra analog değeri döndürür.
int readSensor() {
	digitalWrite(sensorPower, HIGH);
	delay(10);
	val = analogRead(sensorPin);
	digitalWrite(sensorPower, LOW);
	return val;
}

Ayarlama

Su seviye sensörünüzden doğru ölçümler elde etmek için, önce izlemeyi planladığınız belirli su türüne göre kalibre etmeniz önerilir. Bildiğiniz gibi saf su iletken değildir. Aslında sudaki mineralleri ve safsızlıkları iletken hale getirir. Bu nedenle, kullandığınız su türüne bağlı olarak sensörünüz az hassas olabilir. Veri depolamaya veya olayları tetiklemeye başlamadan önce, sensörünüzden gerçekten hangi okumaları aldığınızı görmelisiniz. Yukarıdaki kodu kullanarak, sensör tamamen kuruduğunda, tamamen suya daldığında, suya kısmen daldırıldığında sensörünüzün çıkardığı değerlere dikkat edin. Örneğin, yukarıdaki aynı devreyi kullanarak, sensör kuru olduğunda (0) ve kısmen suya daldığında (~ 420) ve tamamen suya daldığında seri monitörde aşağıdaki değerlere yakın olduğunu göreceksiniz (~ 520).
Bu test biraz deneme yanılma gerektirebilir. Okumaları iyi bir şekilde ele aldığınızda, bir eylemi tetiklemek istiyorsanız bunları eşik olarak kullanabilirsiniz. Bir sonraki örnekte, tam da bunu yapacağız.

Su Seviyesi Algılama Projesi

Bir sonraki örneğimiz için, su seviyesine göre LED'leri aydınlatacak taşınabilir bir su seviye sensörü projesi yapacağız.  
Gerekli Malzemeler:
 

Kablolama

Önceki örnekteki devreyi kullanacağız. Bu sefer sadece bazı LED'ler eklememiz gerekiyor. 3 LED'i # 2, # 3 ve # 4 - 220Ω akım sınırlama dirençlerine bağlayın. 5mm Led (Sarı, Kırmızı, Yeşil) ve 220R Direnç 1/4w Devrenizi aşağıda gösterildiği gibi bağlayın:

Arduino Kodu

Devre kurulduktan sonra, aşağıdaki kodu Arduino'nuza yükleyin. Bu koda iki değişken tanımlanmıştır. lowerThreshold ve upperThreshold . Bu değişkenler eşik seviyelerimizi temsil eder.
 
Alt eşiğin altındaki herhangi bir şey kırmızı LED'in yanmasını tetikler. Üst eşiğin üzerindeki her şey yeşil LED'i yakacaktır. Bunlar arasındaki her şey sarı LED'i yakacaktır.
/* Change these values based on your calibration values */
int lowerThreshold = 420;
int upperThreshold = 520;

// Sensor pins
#define sensorPower 7
#define sensorPin A0

// Value for storing water level
int val = 0;

// Declare pins to which LEDs are connected
int redLED = 2;
int yellowLED = 3;
int greenLED = 4;

void setup() {
	Serial.begin(9600);
	pinMode(sensorPower, OUTPUT);
	digitalWrite(sensorPower, LOW);
	
	// Set LED pins as an OUTPUT
	pinMode(redLED, OUTPUT);
	pinMode(yellowLED, OUTPUT);
	pinMode(greenLED, OUTPUT);

	// Initially turn off all LEDs
	digitalWrite(redLED, LOW);
	digitalWrite(yellowLED, LOW);
	digitalWrite(greenLED, LOW);
}

void loop() {
	int level = readSensor();

	if (level == 0) {
		Serial.println("Water Level: Empty");
		digitalWrite(redLED, LOW);
		digitalWrite(yellowLED, LOW);
		digitalWrite(greenLED, LOW);
	}
	else if (level > 0 && level <= lowerThreshold) {
		Serial.println("Water Level: Low");
		digitalWrite(redLED, HIGH);
		digitalWrite(yellowLED, LOW);
		digitalWrite(greenLED, LOW);
	}
	else if (level > lowerThreshold && level <= upperThreshold) {
		Serial.println("Water Level: Medium");
		digitalWrite(redLED, LOW);
		digitalWrite(yellowLED, HIGH);
		digitalWrite(greenLED, LOW);
	}
	else if (level > upperThreshold) {
		Serial.println("Water Level: High");
		digitalWrite(redLED, LOW);
		digitalWrite(yellowLED, LOW);
		digitalWrite(greenLED, HIGH);
	}
	delay(1000);
}

//This is a function used to get the reading
int readSensor() {
	digitalWrite(sensorPower, HIGH);
	delay(10);
	val = analogRead(sensorPin);
	digitalWrite(sensorPower, LOW);
	return val;
}

Sensör tamamen suya batırılacak şekilde tasarlanmamıştır.

Yalnızca PCB üzerindeki açıkta kalan izler suyla temas edecek şekilde kurmaya dikkat edin.

    
Etiketler: Su seviye sensörü
Ekim 17, 2021
Listeye dön
Çerez Uyarısı

Alışveriş deneyiminizi iyileştirmek için yasal düzenlemelere uygun çerezler (cookies) kullanıyoruz. Detaylı bilgiye Gizlilik ve Çerez Politikası
sayfamızdan erişebilirsiniz.