IoT og smarthus

Jordfuktighetssensor med Arduino eller ESP32: kalibrering og korrosjon

Resistiv og kapasitiv jordfuktighetssensor i urtepotte koblet til utviklingskort på arbeidsbenk

En jordfuktighetssensor kan fortelle når jorden blir tørrere, men den er ikke et presisjonsinstrument som gir en universell prosentverdi. Jordtype, salter, temperatur, innstikksdybde, hvor kompakt jorden er og forskjeller mellom sensoreksemplarer påvirker råmålingen. Derfor er kalibrering og trend viktigere enn et pent tall på skjermen.

Kort forklartVelg en kapasitiv sensor for langvarig måling i jord. Kalibrer hvert eksemplar i den jorden det skal stå i, og med samme innstikksdybde som i drift. Med ESP32 må sensorens utgang holde seg under 3,3 V, og du bør bruke en ADC1-pinne når WiFi er aktivt. Ta flere målinger og bruk medianen. En vanlig Raspberry Pi trenger en ekstern ADC for analoge sensorer.

Resistiv eller kapasitiv sensor?

En enkel resistiv sensor måler ledningsevnen mellom to eksponerte metallflater. Mer vann og flere oppløste ioner gir som regel bedre ledning, men resultatet påvirkes sterkt av gjødsel og jordkjemi. Når det står likespenning over elektrodene, fører elektrolyse og oksidasjon til at de brytes ned, ofte i løpet av uker. En resistiv sensor kan være nyttig i en kort demonstrasjon, men bør ikke stå spenningssatt i en potte over tid.

En kapasitiv sensor registrerer hvordan jordens dielektriske egenskaper påvirker et elektrisk felt. Vann endrer kapasitansen mye mer enn tørr jord. Elektrodene er dekket av et isolerende belegg og har ikke direkte kontakt med jorden. Det reduserer korrosjonsproblemet kraftig, men gjør ikke hele kretskortet vanntett. Komponentdelen og kabeltilkoblingen skal holdes over jord og vann, i henhold til produsentens markering.

Tips: Rimelige kapasitive sensorer finnes i mange kopier med ulik timerkrets, regulator og komponentverdier. Noen virker dårlig på 3,3 V, andre gir høyere utgangsspenning enn forventet. Mål utgangen med multimeter i tørr og våt jord før du kobler sensoren til en ESP32.

Fra råverdi til beslutning

Sensoren gir et analogt spenningssignal, og mikrokontrollerens ADC gjør det om til et tall. Tallet gir bare mening sammen med forsyningsspenning, ADC-oppløsning, demping, referansespenning og kalibreringspunkter. På en kapasitiv sensor synker spenningen vanligvis når jorden blir våtere, så en høy råverdi betyr tørr jord. Kopier aldri terskelverdier ukritisk mellom plattformer, sensorer eller jordtyper.

Hvilken løsning passer prosjektet?

LøsningFordelBegrensningGod bruk
Resistiv sensorEnkel og rimeligPåvirkes av salter og korrodererKort undervisningstest og relative målinger
Kapasitiv analog sensorIngen eksponerte måleelektroderMå kalibreres; elektronikken er ikke automatisk vanntettPotter, drivhus og trendmåling
Ferdig trådløs sensorEnkel montering og integrasjonLukket protokoll, batteri og skytjeneste kan begrenseSmarthus og varsling uten egen krets
Industriell sensorBedre kapsling og dokumentasjonHøyere pris og ofte annet grensesnittLangvarig utendørs bruk og krevende miljø

En analog jordfuktighetssensor for Arduino og Raspberry Pi passer til læring og egne styringer. Et sett for automatisk plantevanning samler sensor, pumpe og kontroller i en mer komplett prototype. Flere alternativer finnes blant sensorer for temperatur og fuktighet.

Koble til Arduino eller ESP32

Les sensorens datablad først. Forsyningsområdet sier ikke nødvendigvis hva signalpinnen maksimalt kan levere. DFRobot SEN0193 er for eksempel spesifisert for 3,3–5,5 V forsyning og 0–3,0 V analog utgang, men en annen sensor kan være bygget annerledes. En ESP32-inngang skal aldri få 5 V. Bruk felles jord, en stabil forsyning og en ADC-pinne som faktisk er ledig på kortet.

  • Sensorens VCC kobles til 3,3 V eller 5 V etter sensorens krav. Med ESP32 er 3,3 V tryggest, så lenge sensoren fungerer stabilt på den spenningen.
  • GND kobles til kortets jord.
  • Signalet (AOUT) kobles til en analog inngang: A0 på Arduino Uno eller en ADC1-pinne på ESP32.

På den klassiske ESP32 kan ADC2-pinnene ikke brukes mens WiFi er aktivt, så en sensornode som sender data trådløst må bruke ADC1. På Raspberry Pi 4 eller 5 finnes ingen innebygd analoginngang, og da trengs en ADC-modul. Raspberry Pi Pico har derimot ADC, fordi det er en mikrokontroller. Forskjellen forklares nærmere i sammenligningen av Pico og ESP32.

KortAnalog inngangSkalaViktig å vite
Arduino UnoInnebygd, 10 bit0–1023 med 5 V som standardreferanseTåler 5 V-signaler; enkel og forutsigbar
ESP32Innebygd, 12 bit0–4095, opptil ca. 3,1 V med standard demping i ArduinoMindre lineær nær ytterpunktene; bruk ADC1 sammen med WiFi
Raspberry Pi PicoInnebygd, 12 bitReferanse 3,3 VTre ADC-pinner er tilgjengelige for egne sensorer
Raspberry Pi 4 og 5IngenAvhenger av ekstern ADCBruk en I²C- eller SPI-ADC-modul

Kodeeksempel: median og kalibrering

Programmet under leser sensoren 15 ganger, sorterer målingene og bruker medianen. Deretter regnes råverdien om til en relativ skala mellom dine egne kalibreringspunkter. Koden fungerer i Arduino IDE på både Arduino Uno og ESP32.

// Jordfuktighet med median og kalibrering (Arduino Uno eller ESP32)
const int SENSOR_PIN = A0;   // ESP32: velg en ADC1-pinne, for eksempel 34
const int SAMPLES = 15;
const int RAW_DRY = 3000;    // eksempel: din måling i tørr jord
const int RAW_WET = 1300;    // eksempel: din måling i våt jord

int readMedian() {
  int values[SAMPLES];
  for (int i = 0; i < SAMPLES; i++) {
    values[i] = analogRead(SENSOR_PIN);
    delay(10);
  }
  for (int i = 1; i < SAMPLES; i++) {   // innsettingssortering
    int key = values[i];
    int j = i - 1;
    while (j >= 0 && values[j] > key) {
      values[j + 1] = values[j];
      j--;
    }
    values[j + 1] = key;
  }
  return values[SAMPLES / 2];
}

void setup() {
  Serial.begin(115200);
}

void loop() {
  int raw = readMedian();
  long percent = map(raw, RAW_DRY, RAW_WET, 0, 100);
  percent = constrain(percent, 0, 100);
  Serial.print("Rå: ");
  Serial.print(raw);
  Serial.print("  Relativ fukt: ");
  Serial.print(percent);
  Serial.println(" %");
  delay(60000);  // én måling i minuttet
}

Eksempelverdiene for tørr og våt jord gjelder en ESP32 med 12 bit oppløsning. På Arduino Uno er skalaen 0–1023, og tallene blir tilsvarende lavere. Erstatt begge verdiene med dine egne målinger fra kalibreringen under. Fordi en kapasitiv sensor gir lavere verdi i våt jord, er RAW_DRY større enn RAW_WET; map() håndterer den omvendte skalaen.

Kalibrer for jord, sensor og montering

  1. Merk innstikksdybden. Sensoren skal stå like dypt og vende samme vei i test og drift. Ikke dekk elektronikkdelen.
  2. Registrer et tørt referansepunkt. Bruk jorden prosjektet faktisk skal måle, og noter hva «tørr nok til vanning» betyr for planten.
  3. Registrer et vått referansepunkt. Vann jorden jevnt og la overskuddsvannet renne av. Et glass vann kan teste ytterpunktet, men beskriver ikke nødvendigvis mettet jord.
  4. Ta mange avlesninger. Bruk median eller et forsiktig gjennomsnitt, og lagre både råverdi og filtrert verdi.
  5. Kontroller over flere vanningsrunder. Juster terskelen hvis varselet kommer for tidlig eller for sent, men ta vare på rådataene.

En lineær omregning er praktisk for visning, men «0–100 %» er da en relativ skala mellom to lokale punkter, ikke volumetrisk vanninnhold. Skal målingen styre en verdifull avling eller dokumentere agronomiske forsøk, trengs en bedre referansemetode og jordspesifikk kalibrering.

Stabile målinger og lavt strømforbruk

Medianen fjerner enkeltstående topper uten å glatte bort trenden. Unngå å måle akkurat mens WiFi sender, en motor starter eller pumpen slås på. Hold analogledningen kort, og bruk en avkoblingskondensator nær sensoren hvis produsenten anbefaler det.

Jordfuktighet endrer seg langsomt. For en potte holder det ofte med noen få målinger i timen. Mellom målingene kan sensoren slås av for å spare strøm og redusere slitasje. En sensor som trekker noen få milliampere, kan ofte forsynes direkte fra en GPIO-pinne, men sjekk strømforbruket i databladet og vent til signalet har stabilisert seg før du leser. Batteridrevne ESP32-noder bør i tillegg bruke dyp søvn mellom målingene.

Bruk hysterese når målingen skal styre noe: start for eksempel vanning under 30 % og stopp først over 45 % på din kalibrerte skala. Med bare én terskel kan pumpen slå seg av og på i rask rekkefølge når verdien ligger rundt grensen.

Trygg automatisk vanning

En pumpe skal styres med MOSFET eller motordriver, friløpsdiode og en egen forsyning som er dimensjonert for pumpen. Jord kan måtte være felles mellom kontroller og driver, men pumpestrømmen skal ikke gå gjennom utviklingskortet. Guiden L298N, MOSFET og PWM for DC-motorer viser hvordan du velger og kobler driveren.

Legg inn maksimal kjøretid, minste pause mellom vanninger, varsel ved tom tank og en plan for overløp. En sensorfeil skal føre til stopp eller varsel, aldri til ubegrenset vanning.

Vann og strøm: Bruk lavspente pumper og forsyninger til hobbyprosjekter. Styr ikke 230 V-utstyr direkte fra et utviklingskort, og hold all elektronikk unna søl og kondens. Trenger du å styre nettspenning, bruk ferdig, godkjent utstyr som er laget for formålet.

Start med logging og varsling før du automatiserer. Når du har sett flere tørke- og vanningsrunder, kan tersklene innføres. En ESP32-sensornode kan sende den filtrerte verdien til Home Assistant eller en MQTT-server, men den lokale sikkerhetslogikken bør fortsatt virke hvis WiFi eller serveren faller bort. Hvordan sensorer kobles til et lokalt smarthus, forklares i guiden til Home Assistant-protokoller.

Vanlige spørsmål

Hva betyr 100 prosent jordfuktighet?

På en hobbysensor betyr det som regel bare det våte kalibreringspunktet ditt. Det er ikke det samme som vitenskapelig målt volumetrisk vanninnhold.

Hvorfor viser to like sensorer ulike tall?

Komponenttoleranser, forsyning, ADC, belegg og montering varierer. Kalibrer hvert eksemplar og sammenlign trender, ikke ukorrigerte råtall.

Kan sensoren stå i vann?

Bare måledelen, opp til produsentens markering. Elektronikk og kontakt er normalt ikke vanntette.

Hvorfor hopper verdien når pumpen starter?

Motorstrøm kan gi spenningsfall og elektromagnetisk støy. Skill strømveiene, bruk riktig driver, og mål når pumpen er stoppet og signalet har stabilisert seg.

Kan jeg koble analogsensoren direkte til Raspberry Pi?

Nei, en vanlig Raspberry Pi-datamaskin trenger en ekstern ADC. Pico og de fleste andre mikrokontrollere har innebygd ADC.

Hvor lenge varer en resistiv sensor?

Det avhenger av spenning, hvor ofte den måler og jordkjemien. Står den spenningssatt hele tiden, kan elektrodene korrodere synlig på kort tid. Slå den av mellom målingene, eller velg en kapasitiv sensor.

Kilder og videre lesing

Prinsipp, spenningsområde og kalibreringsmetode er kontrollert mot DFRobots offisielle SEN0193-dokumentasjon og deres kalibreringsguide. Variasjon mellom sensorer og jordspesifikk kalibrering er støttet av den fagfellevurderte studien Calibration of Low-Cost Capacitive Soil Moisture Sensors.

Oppsummering

En jordfuktighetssensor fungerer best som en kalibrert trendmåler. Velg kapasitiv sensor for varig bruk, hold elektronikken tørr, kontroller spenningsnivåene og kalibrer i riktig jord. Filtrer rådata, bruk hysterese og observer flere vanningsrunder før målingen får styre en pumpe. Slik blir prosjektet både nyttigere og tryggere enn en tilfeldig prosentverdi kopiert fra et eksempel.

Alle guider

Produkter omtalt i denne guiden

Produktene som brukes og sammenlignes i guiden, med pris og lagerstatus.