Messstation mit Begrüßung
DIY-Projekt

Messstation mit Begrüßung

Arduino · Sensoren · Anzeige · Begrüßung
Messstation mit Begrüßung Bild 1

Diese Projektseite ist für eine kleine Messstation mit Begrüßungsfunktion vorbereitet. Die Station kann später Messwerte anzeigen und beim Einschalten oder bei Annäherung eine kurze Begrüßung ausgeben.

Aufbau

Verwendet wurden unter anderem:

- Arduino Uno oder kompatibler Mikrocontroller
- Temperatur- und Luftfeuchtigkeitssensor DHT11
- Ultraschallsensor HC-SR04
- LCD mit I2C-Anschluss 20×4 (vierzeilig)
- farbige Dupont-Kabel, ein Steckbrett
- zwei LEDs verschiedener Farben (grün/blau) und passende Vorwiderstände
- Kippschalter (rechts unter der grünen LED) und optional einen Netzschalter (im Bild unten, blau leuchtend)
- ein passendes Gehäuse mit Öffnung in der Rückseite für DHT11 und Kabeldurchführung
- Stromversorgung über USB A-B Kabel


Schaltskizze der Mini-Messstation

Messstation mit Begrüßung Bild 3

Das Innenleben im Rohbau: Kabelsalat inklusive.

Verkabelung

Bauteil Leitung Kabelfarbe Arduino
DHT11VCCgelb5V
DHT11DATweißD2
DHT11GNDviolettGND gemeinsam mit HC-SR04
HC-SR04 UltraschallVCCgrün5V
HC-SR04TriggergelbD7
HC-SR04EchorotD6
HC-SR04GNDGND gemeinsam mit DHT11
LCD I2CSCLorangeA5
LCD I2CSDAgrünA4
LCD I2CVCCrot5V
LCD I2CGNDbraunGND
PiezoPlusrotD5
PiezoMinusblauGND über Kippschalter
LED grün / Status-LEDPlusgrün3,3V
LED grün / Status-LEDMinusbraunGND
LED blau / Alarm synchron zum PiezoPlusrotD9
LED blau / Alarm synchron zum PiezoMinusschwarzGND über denselben Kippschalter wie Piezo

Funktion und Wirkung

In dieser Messstation passieren mehrere Dinge weitgehend unabhängig voneinander.

Zuerst misst der Ultraschallsensor HC-SR04 die Entfernung zu einem Objekt vor dem Sensor. Das zurückkehrende Echo-Signal wird vom Arduino ausgewertet und mit einer hinterlegten Formel in eine Entfernung umgerechnet. Diese Entfernung wird anschließend auf dem LCD-Display in Zentimetern angezeigt.

Ähnlich wie bei einem Parksensor am Auto gibt ein Piezo einen Piepton aus, der schneller wird, je kleiner die gemessene Entfernung ist. Im selben Takt blinkt die blaue LED. Piepton und blaue LED lassen sich über einen Kippschalter deaktivieren.

Ab einer unterschrittenen Distanz, hier 60 cm, wird zusätzlich eine Begrüßung, zum Beispiel „Hallo Dayer“, in den Zeilen 1 und 2 des Displays eingeblendet.
Unabhängig davon misst der DHT11-Sensor Temperatur und Luftfeuchtigkeit. Diese Werte werden in den Zeilen 3 und 4 des Displays angezeigt.

Hinweis: In der obigen Schaltskizze ist nur ein zweizeiliges LCD dargestellt. Für die Messstation wird tatsächlich ein vierzeiliges 20×4-LCD mit I2C-Anschluss verwendet.

Arduino-Code

Der Sketch kann hier markiert und kopiert werden.
Bereinigte Version des verwendeten Sketches:
// Messstation mit Begrüßung, Ultraschall, DHT11 und LCD 20x4

#include <DHT.h>                 // DHT-Bibliothek laden
#include <LiquidCrystal_I2C.h>  // LCD-I2C-Bibliothek laden

LiquidCrystal_I2C lcd(0x27, 20, 4); // LCD-Adresse, 20 Zeichen, 4 Zeilen

#define DHTPIN 2       // DHT11-Datenleitung an Pin D2
#define DHTTYPE DHT11  // Es handelt sich um den DHT11-Sensor

DHT dht(DHTPIN, DHTTYPE); // Sensor-Objekt anlegen

int trigger = 7; // Trigger-Pin des Ultraschallsensors
int echo = 6;    // Echo-Pin des Ultraschallsensors
int LED = 9;     // blaue Alarm-LED
int piezo = 5;   // Piezo-Signalgeber

long dauer = 0;      // Dauer des Echo-Signals
long entfernung = 0; // berechnete Entfernung in Zentimetern

void setup() {
  Serial.begin(9600); // seriellen Monitor starten
  dht.begin();        // DHT11-Sensor starten

  lcd.init();      // LCD starten
  lcd.backlight(); // Hintergrundbeleuchtung einschalten

  pinMode(trigger, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(LED, OUTPUT);
  pinMode(piezo, OUTPUT);
}

void loop() {
  // Ultraschallsensor kurz anstoßen
  digitalWrite(trigger, LOW);
  delayMicroseconds(5);

  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);

  digitalWrite(trigger, LOW);

  // Echo auswerten und Entfernung berechnen
  dauer = pulseIn(echo, HIGH);
  entfernung = (dauer / 2) * 0.03432;

  // Temperatur und Luftfeuchtigkeit auslesen
  float Luftfeuchtigkeit = dht.readHumidity();
  float Temperatur = dht.readTemperature();

  if (entfernung >= 500 || entfernung <= 0) {
    Serial.println("Kein Messwert");

    // obere Displayzeilen leeren
    lcd.setCursor(0, 0);
    lcd.print("                    ");
    lcd.setCursor(0, 1);
    lcd.print("                    ");

    digitalWrite(LED, LOW);
    noTone(piezo);
    delay(300);
  } else {
    Serial.print(entfernung);
    Serial.println(" cm");

    // Entfernung in der zweiten Displayzeile anzeigen
    lcd.setCursor(0, 1);
    lcd.print("Entfernung: ");
    lcd.print(entfernung);
    lcd.print(" cm   ");

    // Begrüßung ab 60 cm Abstand
    if (entfernung <= 60) {
      lcd.setCursor(0, 0);
      lcd.print("    Hallo Dayer    ");
    } else {
      lcd.setCursor(0, 0);
      lcd.print("                    ");
    }

    // Piepton und blaue LED werden schneller, je kleiner die Entfernung ist
    if (entfernung <= 150) {
      digitalWrite(LED, HIGH);
      tone(piezo, 1000);
      delay(entfernung * 3);

      digitalWrite(LED, LOW);
      noTone(piezo);
      delay(entfernung * 3);
    } else {
      digitalWrite(LED, LOW);
      noTone(piezo);
      delay(300);
    }
  }

  // Werte auch im seriellen Monitor ausgeben
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(Luftfeuchtigkeit);
  Serial.println(" %");

  Serial.print("Temperatur: ");
  Serial.print(Temperatur);
  Serial.println(" Grad Celsius");

  // dritte Displayzeile: Luftfeuchtigkeit
  lcd.setCursor(0, 2);
  lcd.print("Luftfeucht: ");
  lcd.print(Luftfeuchtigkeit);
  lcd.print(" %   ");

  // vierte Displayzeile: Temperatur mit Gradzeichen
  lcd.setCursor(0, 3);
  lcd.print("Temperatur: ");
  lcd.print(Temperatur);
  lcd.print(" ");
  lcd.write(223); // Gradzeichen auf dem LCD
  lcd.print("C   ");
}

← Zurück zu den DIY-Projekten