Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

Arduino Projekt – Bodenfeuchtesensor & OLED Display

Posted on 7. Februar 202210. März 2024 by Stefan Draeger

In diesem Beitrag zeige ich dir, wie du die Werte von einem Bodenfeuchtesensor auf einem OLED Display vom Typ SSD1306 mit einem Arduino UNO anzeigen lassen kannst.

Arduino UNO R3 - Bodenfeuchtesensoren & OLED Display
Arduino UNO R3 – Bodenfeuchtesensoren & OLED Display

Den kapazitiven Bodenfeuchtesensor habe ich dir bereits im Beitrag Arduino Lektion 28: Bodenfeuchtesensor vorgestellt. In diesem Beitrag soll es darum gehen, wie die Daten auf dem Display angezeigt werden können.

Die Idee zu diesem Beitrag kommt von einem Leser meines Blogs, welcher dieses kleine Projekt verwirklicht und etwas Hilfe bei der Umsetzung benötigt.

  • Benötigte Ressourcen für dieses Projekt
  • Warum ein kapazitiver Bodenfeuchtesensor?
  • Aufbau der Schaltung
  • Programmieren in der Arduino IDE
    • Installieren der benötigen Bibliothek für das OLED Display
    • Erstellen des Sketches / Programmes
      • Schritt 1 – auslesen der Sensoren
      • Schritt 2 – anzeigen der Daten auf dem OLED Display
      • Schritt 3 – visualisieren der Daten
  • Download

Benötigte Ressourcen für dieses Projekt

Für dieses Projekt benötigst du:

  • einen Arduino UNO R3*,
    • ein USB Datenkabel*,
  • zwei (oder mehr) kapazitive Bodenfeuchte Sensoren*,
  • ein 0,96″ OLED Display* mit I²C Schnittstelle,
  • diverse Breadboardkabel*,
  • ein 400 Pin Breadboard*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Da wir ein OLED Display mit I2C Schnittstelle gewählt haben, können wir für dieses Projekt maximal 3 analoge Bodenfeuchtesensoren einsetzen.

Bauteile für den Aufbau der Schaltung
Bauteile für den Aufbau der Schaltung

Warum ein kapazitiver Bodenfeuchtesensor?

Es gibt auf ebay.de, aliexpress.com etc. diverse günstige Bodenfeuchtesensoren welche einen sehr großen Nachteil haben. Diese günstigen / billigen Sensoren lösen sich mit der Zeit auf und geben sogar ihre Bestandteile an die umliegenden Gewächse ab.

günstige Bodenfeuchtesensoren
günstige Bodenfeuchtesensoren
kapazitiver Bodenfeuchtesensor
kapazitiver Bodenfeuchtesensor
Bodenfeuchtesensor mit Metallstäben
Bodenfeuchtesensor mit Metallstäben

Auf dem ersten Bild sind die günstigen Sensoren abgebildet, beim rechten Modell kann man sogar schon sehen, dass dieser sich etwas auflöst. In der Mitte ist der kapazitive Bodenfeuchtesensor abgebildet und rechts ein weiteres Model, welches mit stabilen Metallstäben daher kommt. Alles Modellen ist jedoch gleich, dass diese jeweils die Daten analog liefern bzw. die Daten über einen analogen Pin gelesen werden.

Aufbau der Schaltung

Der Aufbau der Schaltung ist am Breadboard recht einfach man benötigt lediglich 12 Breadboardkabel. Wobei ich rote / orange Kabel für die Pluspole und schwarze bzw. weiße Kabel für den Minuspol verwende.

Arduino UNO R3 mit Bodenfeuchtesensor & OLED Display
Arduino UNO R3 mit Bodenfeuchtesensor & OLED Display
Sensor / AktorArduino UNO R3
Bodenfeuchtesensor 1
A0analoger Pin A0
D0– bleibt frei –
VCC5 V
GNDGND
Bodenfeuchtesensor 2
A0analoger Pin A1
D0– bleibt frei –
VCC5 V
GNDGND
OLED Display
SCLanaloger Pin A5
SDAanaloger Pin A4
VCC3.3 V
GNDGND
Pinbelegung für das Projekt

Für einen Test verwende ich zusätzlich zwei kleine Blumentöpfe mit feuchter Erde.

Aufbau der Schaltung  - Arduino UNO R3 - Bodenfeuchtesensoren & OLED Display
Aufbau der Schaltung – Arduino UNO R3 – Bodenfeuchtesensoren & OLED Display

Für den Aufbau verwende ich den Keyestudio UNO R3 welcher dem Arduino UNO R3 etwas ähnlich ist, jedoch hat dieser zusätzlichen Stiftleisten auf dem Board.

Programmieren in der Arduino IDE

Installieren der benötigen Bibliothek für das OLED Display

Für die Programmierung des Displays benötigen wir zusätzlich eine Bibliothek. Diese Bibliothek installieren wir über den Bibliotheksverwalter der Arduino IDE welchen wir über das Menü „Sketch“ > „Bibliothek einbinden“ > „Bibliotheken verwalten…“

Zunächst suchen wir mit dem Schlagwort „ssd“ und wählen dann in dem Eintrag „Adafruit SSD1306“ die Schaltfläche „Installieren“. Ggf. wird man während der Installation aufgefordert zusätzliche, benötigte Bibliotheken zu installieren, welches wir bestätigen.

Bibliothek - Adafruit SSD1306 von Adafruit
Bibliothek – Adafruit SSD1306 von Adafruit

Im Abschluss der Installation müssen wir nur noch die Schaltfläche „Schließen“ betätigen und können danach mit der eigentlichen Programmierung beginnen.

Erstellen des Sketches / Programmes

Das benötigte Programm erstellen wir in 3 Schritten.

  • im ersten Schritt lesen wir die Sensoren aus,
  • im zweiten Schritt zeigen wir die Daten auf dem OLED Display an,
  • im dritten Schritt möchte ich die Daten auf dem Display visualisieren

Schritt 1 – auslesen der Sensoren

#define sensor1 A0
#define sensor2 A1

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

void loop() {
  int sensorValue1 = analogRead(sensor1);
  int sensorValue2 = analogRead(sensor2);
  Serial.print("Bodenfeuchtesensor 1:");
  Serial.println(sensorValue1);

  Serial.print("Bodenfeuchtesensor 2:");
  Serial.println(sensorValue2);

  delay(1500);
}

Zunächst geben wir die Sensordaten auf der seriellen Schnittstelle aus.

Schritt 2 – anzeigen der Daten auf dem OLED Display

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET     4 
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define sensor1 A0
#define sensor2 A1

void setup() {
  Serial.begin(9600);

  if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("Fehler, Display wurde nicht erkannt!");
  }
  display.clearDisplay();
}

void loop() {
  int sensorValue1 = analogRead(sensor1);
  int sensorValue2 = analogRead(sensor2);
  Serial.print("Bodenfeuchtesensor 1:");
  Serial.println(sensorValue1);

  Serial.print("Bodenfeuchtesensor 2:");
  Serial.println(sensorValue2);

  showText("Bodenfeuchtesensor", 10, 0);
  showSensorValue("Sensor 1:", sensorValue1, 15);
  showSensorValue("Sensor 2:", sensorValue2, 25);
  
  display.display();
  delay(1500);
  display.clearDisplay();
}

void showSensorValue(String desc, int value, int row){
  showText(desc, 0, row);
  showText(String(value, DEC), 65, row);  
}

void showText(String value, int col, int row){
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(col, row);
  display.println(value);
}

Es werden nun die Sensordaten auf dem OLED Display angezeigt.

Arduino UNO R3 - Werte der Bodenfeuchtesensoren auf OLED Display
Arduino UNO R3 – Werte der Bodenfeuchtesensoren auf OLED Display

Schritt 3 – visualisieren der Daten

Im nun dritten und letzten Schritt wollen wir die Sensordaten auf dem Display visualisieren.

Dazu teilen wir den maximalen Wert von 1023 in sechs Blöcke auf und für jeden Block wird ein voller Kreis gezeichnet.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

#define OLED_RESET     4
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

#define sensor1 A0
#define sensor2 A1

const int CIRCLES = 6;

void setup() {
  Serial.begin(9600);

  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
    Serial.println("Fehler, Display nicht gefunden!");
  }
  display.clearDisplay();
}

void loop() {
  int sensorValue1 = analogRead(sensor1);
  int sensorValue2 = analogRead(sensor2);

  Serial.print("Sensor 1:");
  Serial.println(sensorValue1);

  Serial.print("Sensor 2:");
  Serial.println(sensorValue2);

  display.drawRect(2, 2, display.width() - 2, display.height() - 2, SSD1306_WHITE);
  display.drawLine(2, 14, display.width() - 2, 14, SSD1306_WHITE);

  showText("Bodenfeuchtesensor", 13, 5);
  showSensorValue("1:", sensorValue1, 27);
  showSensorValue("2:", sensorValue2, 43);

  display.display();
  delay(1500);
  display.clearDisplay();
}

void showSensorValue(String desc, int value, int row) {
  showText(desc, 8, row);
  showText(String(value, DEC), 20, row);

  drawCircles(row+3);
  drawFillCircles(row+3, value);
}

void showText(String value, int col, int row) {
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(col, row);
  display.println(value);
}

void drawCircles(int row) {
  int col = 60;
  for (int i = 1; i <= CIRCLES; i++) {
    display.drawCircle(col, row, 5, SSD1306_WHITE);
    col = col + 10;
  }
}

void drawFillCircles(int row, int value) {
  int mapValue = map(value, 0, 1023, 1, CIRCLES);
  int col = 60;
  Serial.println(mapValue);
  for (int i = 1; i <= mapValue; i++) {
    display.fillCircle(col, row, 2, SSD1306_WHITE);
    col = col + 10;
  }
}

Download

Hier nun der fertige Sketch zum bequemen download.

Arduino UNO R3 – Bodenfeuchtesensor & OLED DisplayHerunterladen

3 thoughts on “Arduino Projekt – Bodenfeuchtesensor & OLED Display”

  1. Klaus Glasow sagt:
    7. Februar 2022 um 22:21 Uhr

    Hallo Stefan,
    sehr gut und verständlich erklärte Vorgehensweise. Das Ergebnis der Visualisierung ist ebenfalls sehr ansprechend. Du zeigst wiedermal wie vielfältig das ganze Thema ist und was alles realisierbar ist.
    Mach weiter so.
    Gruß Klaus

    Antworten
    1. Stefan Draeger sagt:
      8. Februar 2022 um 09:01 Uhr

      Hallo Klaus,

      vielen Dank für dein positives Feedback.

      Gruß

      Stefan Draeger

      Antworten
  2. Sascha sagt:
    20. Oktober 2023 um 12:44 Uhr

    Hallo,
    das ist ein ein super Tutorial.
    Wie müsste man das mit den Kreisen ändern, damit man mehr Kreise je feuchter es ist hat.
    Ich finde wenn es nass ist viele kreise, wenn es trocken ist, wenig Kreise besser.

    Danke und Gruß Sascha

    Antworten

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}