Arduino Ders 32: Su Seviyesi Ölçümü

Arduino Uygulaması

Su Seviye Sensörü Kullanımı

Arduino ile su seviye sensöründen analog değer okuyup belirlenen seviyenin üzerine çıkıldığında LED yakacağız.

Arduino su seviye sensörü kullanımı

Su seviye sensörü, üzerinde bulunan iletken yollar sayesinde suyla temas ettiğinde farklı analog değerler üreten bir sensördür. Arduino ile bu değer okunarak su seviyesine göre uyarı sistemi yapılabilir.

Su seviye sensörünün çalışma mantığı; sensör üzerindeki iletken plakalar arasında kuru halde elektriksel temas az iken, su temas ettiğinde iletkenlik artmasına dayanır. Su seviyesi yükseldikçe sensörden okunan analog değer de değişir.

Sensörün analog çıkışı Arduino’nun analog girişlerinden biriyle okunur. Okunan değer 0-1023 aralığında olabilir. Bu değer belirli bir eşik değerinin üzerine çıktığında LED yakılarak uyarı alınabilir.

Bu tip su seviye sensörleri uzun süre suda bırakılırsa oksitlenebilir. Daha sağlıklı kullanım için sensörü yalnızca ölçüm sırasında beslemek veya uzun süre sürekli suda bırakmamak daha doğru olur.

Su seviye sensörlerinde genellikle VCC, GND ve S/Signal pini bulunur. Sinyal pini Arduino’nun analog girişine bağlanarak sensör değeri okunur.

Su seviye sensörü
  • Arduino Uno
  • Su seviye sensörü
  • 1 adet LED
  • 330Ω direnç
  • Breadboard
  • Jumper kablolar

LED bağlantısında 330Ω gibi uygun bir seri direnç kullanılmalıdır. Sensörün S/Signal pini bu örnekte Arduino’nun A0 analog girişine bağlanır.

Su seviye sensörünün VCC pini 5V’a, GND pini GND hattına, sinyal pini ise A0 analog girişine bağlanır. LED ise 2 numaralı dijital pine seri direnç ile bağlanır.

Arduino su seviye sensörü devre şeması

Arduino, analogRead(A0) komutu ile su seviye sensöründen gelen değeri okur. Okunan değer belirlenen eşik değerinden büyükse LED yanar. Değer eşik değerinden küçükse LED söner.

Bu örnekte eşik değeri 512 olarak seçilmiştir. Sensörünüzün verdiği değerlere göre bu eşik değeri değiştirilebilir.

const int giris = A0;
const int led = 2;

int deger = 0;

void setup() {
  Serial.begin(9600);
  pinMode(led, OUTPUT);
}

void loop() {
  deger = analogRead(giris);

  Serial.print("Sivi seviyesi degeri: ");
  Serial.println(deger);

  if (deger > 512) {
    digitalWrite(led, HIGH);
  } else {
    digitalWrite(led, LOW);
  }

  delay(50);
}
const int sensorPin = A0;
const int ledPin = 2;

const int esikDeger = 512;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int suSeviyesi = analogRead(sensorPin);

  Serial.print("Su seviyesi: ");
  Serial.println(suSeviyesi);

  if (suSeviyesi > esikDeger) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }

  delay(200);
}

Bu sürümde pin adları ve eşik değeri sabit olarak tanımlandı. Böylece kod daha okunabilir ve kolay düzenlenebilir hale getirildi.

const int sensorPin = A0;
const int ledPin = 2;

const int esikDeger = 512;

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int sensorDegeri = analogRead(sensorPin);
  int yuzde = map(sensorDegeri, 0, 1023, 0, 100);

  Serial.print("Ham deger: ");
  Serial.print(sensorDegeri);
  Serial.print(" | Su seviyesi: %");
  Serial.println(yuzde);

  digitalWrite(ledPin, sensorDegeri > esikDeger ? HIGH : LOW);

  delay(500);
}

Bu örnek, sensörden okunan 0-1023 aralığındaki değeri yaklaşık yüzde değerine dönüştürür. Kesin kalibrasyon için sensör kuru ve maksimum su seviyesindeyken alınan gerçek değerlere göre map aralığı düzenlenmelidir.

Yorum Gönder

Daha yeni Daha eski