Başa dön
Arduino ile Su Seviye Sensörü Kullanımı

Arduino İle Su Seviye Sensörü Kullanımı, Çalışma Prensibi, Kodu ve Projesi

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.

<span class="com">// Sensor pins</span>
#define sensorPower 7
#define sensorPin A0

<span class="com">// Value for storing water level</span>
<span class="kwd">int</span> val = <span class="lit">0</span>;

<span class="kwd">void</span> <span class="func">setup</span>() {
	<span class="com">// Set D7 as an OUTPUT</span>
	<span class="func">pinMode</span>(sensorPower, OUTPUT);
	
	<span class="com">// Set to LOW so no power flows through the sensor</span>
	<span class="func">digitalWrite</span>(sensorPower, LOW);
	
	Serial.<span class="func">begin</span>(<span class="lit">9600</span>);
}

<span class="kwd">void</span> <span class="func">loop</span>() {
	<span class="com">//get the reading from the function below and print it</span>
	<span class="kwd">int</span> level = <span class="func">readSensor</span>();
	
	Serial.<span class="func">print</span>(<span class="str">"Water level: "</span>);
	Serial.<span class="func">println</span>(level);
	
	<span class="func">delay</span>(<span class="lit">1000</span>);
}

<span class="com">//This is a function used to get the reading</span>
<span class="kwd">int</span> <span class="func">readSensor</span>() {
	<span class="func">digitalWrite</span>(sensorPower, HIGH);	<span class="com">// Turn the sensor ON</span>
	<span class="func">delay</span>(<span class="lit">10</span>);							<span class="com">// wait 10 milliseconds</span>
	val = <span class="func">analogRead</span>(sensorPin);		<span class="com">// Read the analog value form sensor</span>
	<span class="func">digitalWrite</span>(sensorPower, LOW);		<span class="com">// Turn the sensor OFF</span>
	<span class="kwd">return</span> val;							<span class="com">// send current reading</span>
}

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.

<span class="kwd">int</span> val = <span class="lit">0</span>;

Ş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.

<span class="func">pinMode</span>(sensorPower, OUTPUT);
<span class="func">digitalWrite</span>(sensorPower, LOW);
Serial.<span class="func">begin</span>(<span class="lit">9600</span>);

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.<span class="func">print</span>(<span class="str">"Water level: "</span>);
Serial.<span class="func">println</span>(<span class="func">readSensor</span>());
<span class="func">delay</span>(<span class="lit">1000</span>);

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.

<span class="kwd">int</span> <span class="func">readSensor</span>() {
	<span class="func">digitalWrite</span>(sensorPower, HIGH);
	<span class="func">delay</span>(<span class="lit">10</span>);
	val = <span class="func">analogRead</span>(sensorPin);
	<span class="func">digitalWrite</span>(sensorPower, LOW);
	<span class="kwd">return</span> 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.

<span class="com">/* Change these values based on your calibration values */</span>
<span class="kwd">int</span> lowerThreshold = <span class="lit">420</span>;
<span class="kwd">int</span> upperThreshold = <span class="lit">520</span>;

<span class="com">// Sensor pins</span>
#define sensorPower 7
#define sensorPin A0

<span class="com">// Value for storing water level</span>
<span class="kwd">int</span> val = <span class="lit">0</span>;

<span class="com">// Declare pins to which LEDs are connected</span>
<span class="kwd">int</span> redLED = <span class="lit">2</span>;
<span class="kwd">int</span> yellowLED = <span class="lit">3</span>;
<span class="kwd">int</span> greenLED = <span class="lit">4</span>;

<span class="kwd">void</span> <span class="func">setup</span>() {
	Serial.<span class="func">begin</span>(<span class="lit">9600</span>);
	<span class="func">pinMode</span>(sensorPower, OUTPUT);
	<span class="func">digitalWrite</span>(sensorPower, LOW);
	
	<span class="com">// Set LED pins as an OUTPUT</span>
	<span class="func">pinMode</span>(redLED, OUTPUT);
	<span class="func">pinMode</span>(yellowLED, OUTPUT);
	<span class="func">pinMode</span>(greenLED, OUTPUT);

	<span class="com">// Initially turn off all LEDs</span>
	<span class="func">digitalWrite</span>(redLED, LOW);
	<span class="func">digitalWrite</span>(yellowLED, LOW);
	<span class="func">digitalWrite</span>(greenLED, LOW);
}

<span class="kwd">void</span> <span class="func">loop</span>() {
	<span class="kwd">int</span> level = <span class="func">readSensor</span>();

	<span class="kwd">if</span> (level == <span class="lit">0</span>) {
		Serial.<span class="func">println</span>(<span class="str">"Water Level: Empty"</span>);
		<span class="func">digitalWrite</span>(redLED, LOW);
		<span class="func">digitalWrite</span>(yellowLED, LOW);
		<span class="func">digitalWrite</span>(greenLED, LOW);
	}
	<span class="kwd">else</span> <span class="kwd">if</span> (level &gt; <span class="lit">0</span> &amp;&amp; level &lt;= lowerThreshold) {
		Serial.<span class="func">println</span>(<span class="str">"Water Level: Low"</span>);
		<span class="func">digitalWrite</span>(redLED, HIGH);
		<span class="func">digitalWrite</span>(yellowLED, LOW);
		<span class="func">digitalWrite</span>(greenLED, LOW);
	}
	<span class="kwd">else</span> <span class="kwd">if</span> (level &gt; lowerThreshold &amp;&amp; level &lt;= upperThreshold) {
		Serial.<span class="func">println</span>(<span class="str">"Water Level: Medium"</span>);
		<span class="func">digitalWrite</span>(redLED, LOW);
		<span class="func">digitalWrite</span>(yellowLED, HIGH);
		<span class="func">digitalWrite</span>(greenLED, LOW);
	}
	<span class="kwd">else</span> <span class="kwd">if</span> (level &gt; upperThreshold) {
		Serial.<span class="func">println</span>(<span class="str">"Water Level: High"</span>);
		<span class="func">digitalWrite</span>(redLED, LOW);
		<span class="func">digitalWrite</span>(yellowLED, LOW);
		<span class="func">digitalWrite</span>(greenLED, HIGH);
	}
	<span class="func">delay</span>(<span class="lit">1000</span>);
}

<span class="com">//This is a function used to get the reading</span>
<span class="kwd">int</span> <span class="func">readSensor</span>() {
	<span class="func">digitalWrite</span>(sensorPower, HIGH);
	<span class="func">delay</span>(<span class="lit">10</span>);
	val = <span class="func">analogRead</span>(sensorPin);
	<span class="func">digitalWrite</span>(sensorPower, LOW);
	<span class="kwd">return</span> 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.

 

 

Hepsi bu kadar. Umarım Arduino ile Su Seviye Sensörü Kullanımı makalemizi beğenmiş ve yeni bir şeyler öğrenmişsinizdir.

Memnun kaldıysanız aşağıda bulunan “yukarı ok“a tıklayarak +1 puan verebilirsiniz.

Diğer Güncel Arduino Projeleri için BURAYA TIKLAYABİLİRSİNİZ.

Sizde Robotlara ve Maker’lığa Meraklıysanız Robotik Marketimiz ROBOCOMBO‘yu Ziyaret Edebilirsiniz.

 

Okuduğunuz İçin Teşekkürler.

 

Kaynak: lastminuteengineers.com/water-level-sensor-arduino-tutorial/