menu search
  • Kaydol
brightness_auto

Hoş geldiniz! TÜRKLER SORUYOR PLATFORMU'na katılmak ister misiniz? Hemen kayıt olun veya giriş yapın.

more_vert

Derste tasarladığımız otomatik sulama sisteminde analog toprak nem sensörünü bağladım. Seri monitörde sürekli anlamsız, zıplayan değerler görüyorum, bu yüzden pompa ne zaman çalışacağına karar veremiyor. Sensörün doğru çalışması için kodda veya devrede neyi kontrol etmeli, kalibrasyon adımları neler olmalı?

thumb_up_off_alt 8 beğenilme thumb_down_off_alt 0 beğenilmeme

3 Cevap

more_vert
 
done_all
En İyi Cevap

Sorunun Kökeni

Toprak nem sensörünün zıplayan analog değerler vermesinin başlıca nedenleri şunlardır:

  1. Güç dalgalanması – Arduino’nun 5 V hattı sensörle aynı hat üzerinden besleniyorsa pompa, LED vb. yükler gerilimi çeker.
  2. Kablolama ve topraklama – Uzun kablolar, gevşek bağlantılar ve eksik ortak toprak sinyali gürültü oluşturur.
  3. Sensörün kendisi – Çoğu ucuz toprak nem sensörü bir potansiyometre + bir NPN transistör içerir; sensörün iç direnci 10 kΩ‑20 kΩ civarında değişir ve yüksek empedans nedeniyle ADC girişinde “yüzeysel” ölçüm olur.
  4. ADC referansının değişmesi – Arduino’nun varsayılan 5 V referansı, besleme gerilimi dalgalandıkça ölçümde sapma meydana gelir.

Donanım Kontrolleri

  • Güç kaynağını izole edin
    - Sensör ve Arduino’nun 5 V hatlarını ayırın. Sensör için bir regüleli 3.3 V (veya 5 V) kaynağı, Arduino’nun USB beslemesinden bağımsız bir DC‑DC buck ya da LDO kullanın.
    - Pompayı transistör (IRLZ44N gibi) ya da MOSFET üzerinden sürün; Arduino’nun pininden doğrudan çekmeyin.

  • Kablolamayı kısaltın ve kablo kalınlığına dikkat edin
    - 20 cm’den uzun kablo kullanıyorsanız, kalkanlı (shielded) kablo tercih edin.
    - Sensör ve Arduino arasına 100 nF kapasitör (GND‑A0 arasında) ekleyerek yüksek frekanslı gürültüyü süzün.

  • Toprak nem sensörünün bağlantısı
    `text
    VCC → 5 V (veya 3.3 V)
    GND → GND
    AOUT → A0 (Arduino analog giriş)
    `
    - Eğer sensör iki kablolu (VCC‑GND) ve bir adet analog çıkışlı ise, 10 kΩ pull‑down direnci A0‑GND arasında bağlayın. Bu, girişin “yüzen” kalmasını önler.

Yazılım & Kalibrasyon

1. Sabit referans kullanın

`cpp
// AREF pinine stabil 3.3V bağlayın ve aşağıdaki satırı ekleyin
analogReference(EXTERNAL);
`
Bu, ADC’nin referans gerilimini sabitleyerek ölçümdeki dalgalanmayı azaltır.

2. Ortalama ve medyan filtre

`cpp
const uint8_t N = 10; // örnek sayısı
int readings[N];
uint8_t idx = 0;

int readSoil() {
readings[idx++] = analogRead(A0);
if (idx == N) idx = 0;

// medyan bul
int copy[N];
memcpy(copy, readings, sizeof(readings));
sort(copy, copy+N);
return copy[N/2];
}
`
Bu basit medyan filtresi “tek tek” pikleri yok eder.

3. Kalibrasyon adımları

| Adım | Açıklama |
|------|----------|
| Kuru toprak | Sensörü havada (veya tamamen kurumuş toprakta) 5 s tutun, ortalama değeri dryVal olarak kaydedin. |
| Islak toprak | Sensörü su dolu bir kaba (yaklaşık 100 % nem) 5 s tutun, ortalama değeri wetVal olarak kaydedin. |
| Haritalama | int moisture = map(readSoil(), dryVal, wetVal, 0, 100); ile % nem elde edin. |
| Eşik belirleme | Örneğin if (moisture < 30) pumpOn(); else pumpOff(); gibi bir eşik koyun. |

4. Pompa kontrolü (Gecikme & Koruma)

`cpp
unsigned long lastPump = 0;
const unsigned long pumpDelay = 60000; // 1 dk aralık

void loop() {
int moisture = map(readSoil(), dryVal, wetVal, 0, 100);
if (moisture < 30 && millis() - lastPump > pumpDelay) {

digitalWrite(PUMP_PIN, HIGH);
lastPump = millis();

} else {

digitalWrite(PUMP_PIN, LOW);

}
}
`
Bu, pompanın aşırı çalışmasını ve gerilim çöküşünü önler.

Son Kontroller

  • GND ortaklığı: Tüm devre elemanlarının (Arduino, sensör, pompa sürücü) ortak bir GND’e bağlandığından emin olun.
  • Gürültü ölçümü: Bir multimetre ile sensör çıkışının DC değerini ölçün; dalgalanma varsa güç kaynağını tekrar kontrol edin.
  • Yazılım debug: Serial.println(moisture); ile gerçek zamanlı % nem değerini izleyin, ani sıçramalar olup olmadığını kontrol edin.

Bu adımları izleyerek sensörün kararlı ve doğru veri vermesini sağlayabilir, pompanın da zamanında çalışmasını güvence altına alabilirsiniz. Başarılar!

thumb_up_off_alt 12 beğenilme thumb_down_off_alt 0 beğenilmeme
more_vert

Sorunun Kökeni

Toprak nem sensörünün zıplayan analog değerler vermesinin en yaygın sebepleri

  • Güç dalgalanması (Arduino 5 V üzerinden beslenen sensör, pompa motoru devreye girdiğinde gerilim çöküyor)
  • Elektrot kirliliği / temas problemi (toprakla temas eden iki çubuk arasında oksidasyon, pas)
  • Gürültülü okuma (analog girişe doğrudan bağlandığında ortam gürültüsü ve ADC’nin quantization hatası)

Bu noktaları tek tek kontrol ettikten sonra kalibrasyona geçmek daha sağlıklı sonuç verir.

Devre Kontrolleri

| Kontrol | Nasıl Yapılır? |
|--------|----------------|
| Güç kaynağı | Sensörü ve Arduino’yu aynı 5 V kaynağından besliyorsanız, LDO regülatör veya DC‑DC buck ile ayrı bir stabil 5 V hattı oluşturun. Pompa motoru için ayrı bir besleme (ör. 12 V) ve flyback diyodu (1N4007) ekleyin. |
| Toprak elektrotları | Çubukları paslanmaz çelik veya galvanizli çinko ile değiştirin. Temas yüzeyini suyla temizleyip, bir kaç saat kurumasını bekleyin, ardından tekrar ölçün. |
| Filtreleme | Analog girişine 0.1 µF ve 10 µF birleştirilmiş bir bypass kondansatör ekleyin. Böylece yüksek frekanslı gürültü azaltılır. |
| Kablo uzunluğu | Uzun kablolar ADC’nin giriş direncini artırır. Mümkün olduğunca kısa ve kalın kablo kullanın; gerekirse shielded kablo tercih edin. |

Kod İyileştirmeleri

`cpp
const int sensorPin = A0;
const int pumpPin = 8;
const int samples = 10; // ortalama için örnek sayısı
const int deadband = 5; // titreşimi önleyen tolerans

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

int readSoil() {
long sum = 0;
for (int i = 0; i < samples; i++) {

sum += analogRead(sensorPin);
delay(5);

}
return sum / samples; // basit ortalama
}

void loop() {
static int lastValue = 0;
int value = readSoil();

// düşük geçiş filtresi (histerez)
if (value < 300 && lastValue >= 300 - deadband) {

digitalWrite(pumpPin, HIGH);

} else if (value > 600 && lastValue <= 600 + deadband) {

digitalWrite(pumpPin, LOW);

}
lastValue = value;

Serial.print("Nem: "); Serial.println(value);
}
`

  • Ortalama alma (samples) ve histerez (deadband) titreşimi büyük ölçüde azaltır.
  • analogRead() sonrası 5 ms gecikme ADC’nın kapasitif yükünü boşaltır.

Kalibrasyon Adımları

  1. Kuru ve ıslak referans ölçümü
    - Sensörü tamamen kuru (havada) tutun, 10 örnek alıp ortalamasını not edin → dryValue.
    - Ardından sensörü su dolu bir kapta (yaklaşık %100 nem) tutun, aynı yöntemi uygulayın → wetValue.

  2. Doğrusal haritalama
    `cpp
    float percent = map(value, dryValue, wetValue, 0, 100);
    percent = constrain(percent, 0, 100);
    `
    Böylece ADC değeri %0‑%100 aralığına dönüştürülür.

  3. Eşik belirleme
    - Tarım deneyiminize göre %30‑%40 aralığını “kurak” olarak, %70‑%80i “ıslak” olarak ayarlayın.
    - Pompanın çalışacağı eşik değerini bu yüzdeye göre map sonrası elde edilen değerden set edin.

  4. Dönemsel ayar
    - Sera içinde sıcaklık değişimi sensörün direncini etkileyebilir. Haftada bir dry/wet ölçümünü tekrarlayın ve dryValue, wetValue’yu güncelleyin.

Sonuç

Güç dalgalanmasını izole edip, sensör girişine uygun filtre eklemek, ortalama ve histerezle yazılımda gürültüyü bastırmak, ardından kuru/ıslak referans ile lineer kalibrasyon yapmak, değerlerin stabil kalmasını sağlar. Bu adımları tamamladıktan sonra pompa kontrolü güvenilir bir şekilde çalışır; sera otomasyonunuz da finansal açıdan enerji tasarrufu ve verimlilik açısından daha sürdürülebilir bir yatırım hâline gelir.

İyi denemeler!

thumb_up_off_alt 7 beğenilme thumb_down_off_alt 0 beğenilmeme
more_vert

Arkadaşım, bu "zıplayan değer" sorunu akıllı sera projelerinde en sık karşılaştığımız klasik bir tuzak. Hemen panik yapma, bu durum donanımın bozuk olduğu anlamına gelmez; büyük ihtimalle sinyal gürültüsü ve yanlış referans noktası yüzünden oluyor. Benim 41 yıllık hayattaki ve yıllardır elektronikle uğraşan bir mühendis gözüyle baktığımda, sorunun kaynağı %90 ihtimalle devre tasarımındaki küçük ama kritik hatalarda.

Öncelikle donanım tarafına bakalım. Analog toprak nem sensörlerinin en büyük düşmanı uzun kablolar ve toprakta oluşan elektrokimyasal gürültüdür. Sensör ile Arduino arasındaki kabloyu maksimum 10-15 cm ile sınırla. Uzun kablolar anten gibi çalışıp ortam gürültüsünü toplar. Ayrıca sensörün pinlerini doğrudan dijital pinlere değil, mutlaka analog girişlere bağladığından emin ol. Daha da önemlisi, sensörün üzerinde veya Arduino'nun analog pinine yakın bir yere 100nF bir kapasitör (seramik kondansatör) yerleştir. Bu, anlık elektrik şoklarını ve gürültüyü emerek sinyali yumuşatır. Bir diğer hayati detay: Sensörün toprak kısmı nemli toprağa temas etmeli ama su birikintisi içinde kalmamalı.

Şimdi yazılım ve kalibrasyon kısmına gelelim. Tek bir analogRead() değeriyle pompa çalıştırmaya çalışmak, gürültülü bir ortamda doğru karar almak gibi imkansızdır. Bunu çözmek için koduna basit bir matematiksel filtre ekle. Mesela, 10 tane ardışık okumayı alıp ortalamasını al (Moving Average). Bu, o anlamsız zıplamaları büyük ölçüde ortadan kaldırır.

Kalibrasyon için ise şu adımları takip et:
1. Kuru Değer: Sensörü tamamen kuru, nem içermeyen bir ortamda (mesela masanın üstünde) 1 dakika beklet ve seri monitördeki ortalama değeri not et. Bu senin minValue'ın olacak.
2. Islak Değer: Sensörü su dolu bir bardağa batır, 1 dakika beklet ve ortalama değeri not et. Bu senin mapValue'ın olacak.
3. Map Fonksiyonu: Kodunda map(deger, minValue, maxValue, 0, 100) fonksiyonunu kullanarak bu iki uç noktayı 0-100 aralığına normalize et.

Son olarak, pompa kontrolünde histeresiz (hysteresis) mantığı kullan. Örneğin, nem %40'ın altına düşünce pump açılsın, %60'ın üzerine çıkınca kapansın. Aradaki %20'lik bant, sensörün sınır değerlerde gidip gelmesine neden olduğu için pompanın sürekli açıp kapatmasını (titremesini) önler.

Bu üç adımı uyguladığında, seri monitördeki kaotik değerlerin yerine stabil, güvenilirdi bir grafik göreceksin. Unutma, iyi bir donanım tasarımı, en iyi yazılım optimizasyonundan daha önemlidir. Kolay gelsin, seri monitördeki o düzenli verileri görmek tatmin edici olacaktır.

thumb_up_off_alt 6 beğenilme thumb_down_off_alt 0 beğenilmeme

İlgili sorular

thumb_up_off_alt 6 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 5 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 4 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap
thumb_up_off_alt 6 beğenilme thumb_down_off_alt 0 beğenilmeme
3 cevap
thumb_up_off_alt 8 beğenilme thumb_down_off_alt 0 beğenilmeme
1 cevap

12,182 soru

16,901 cevap

2 yorum

282 üye

Çevrimiçi Kullanıcı Sayısı: 15
0 Üye 15 Ziyaretçi
Bugünkü Ziyaretler: 6787
Dünkü Ziyaretler: 7316
Toplam Ziyaretler: 6490027

Son Kazanılan Rozetler

mustafa_Çelik_01 Bir rozet kazandı
ayşe_Şahin_01 Bir rozet kazandı
ozer_sahin Bir rozet kazandı
yusuf_kurt Bir rozet kazandı
Ömer_Çelik Bir rozet kazandı
...