DIY-Projekt

Messstation mit Begrüßung

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

Diese Projektseite zeigt eine kleine Messstation mit Begrüßungsfunktion. Die Station zeigt beim Einschalten die Temperatur und Luftfeuchtigkeit an und bei Annäherung zusätzlich zur Entfernung eine kurze Begrüßung.

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
- ein Piezo-Lautsprecher
- zwei LEDs verschiedener Farben (grün/blau) und passende Vorwiderstände (im Bauplan nicht eingezeichnet)
- Kippschalter (rechts unter der grünen LED) und optional ein Netzschalter (im oberen 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 Messstation

Messstation mit Begrüßung Bild 3

Das Innenleben im Rohbau: Kabelsalat inklusive.

Verkabelung

Bauteil Leitung Kabelfarbe Arduino
DHT11 VCC gelb 5V
DHT11 DAT weiß D2
DHT11 GND violett GND gemeinsam mit HC-SR04
HC-SR04 Ultraschall VCC grün 5V
HC-SR04 Trigger gelb D7
HC-SR04 Echo rot D6
HC-SR04 GND schwarz GND gemeinsam mit DHT11
LCD I2C SCL orange A5
LCD I2C SDA grün A4
LCD I2C VCC rot 5V
LCD I2C GND braun GND
Piezo Plus rot D5
Piezo Minus blau GND über Kippschalter
LED grün / Status-LED Plus grün 3,3V
LED grün / Status-LED Minus braun GND
LED blau / Alarm synchron zum Piezo Plus rot D9
LED blau / Alarm synchron zum Piezo Minus schwarz GND ü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 Zeile 1 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