Digitales Lineal
Erstellt von Frank Lüthjohann
Benötigtes Material
- Arduino Uno
- USB-Kabel für den Arduino
- I2C Display
- Ultraschallsensor HC-SR04
- Kleines Breadboard
- 6x MM-Kabel
- 4x WM Kabel
Benötigte Software
- Bibliothek LiquidCrystal I2C von Marco Schwartz oder Frank de Brabander
Als PDF
Beschreibung
Mit diesem digitalen Lineal können leicht Entfernungen mithilfe eines
Ultraschallsensors bestimmt werden. Die Entfernungen werden in cm auf
dem Display angezeigt. Diese Messstation eignet sich hervorragend um von
diesem Aufbau ausgehend, spannende Physikexperimente z.B. zum Thema
Mechanik durchzuführen. Die Messstation kommt ohne Bibliothek aus. Der
Aufbau ist auch gut geeignet, um exemplarisch die Arbeitsweise von
Sensoren und den Aufbau eines Skriptes exemplarisch zu erklären.
Anknüpfungspunkte gibt es auch zum Thema Geschwindigkeiten. Im Skript
wird zu Bestimmung der Werte für die Entfernung auf eine konstante der
Schallgeschwindigkeit zurückgegriffen. In der Kommentierung werden die
mathematischen und physikalischen Zusammenhänge angedeutet.
Verkabelung
GND | | GND |
VCC | | 5V |
SDA | | A4 |
SCL | | A5 |
| GNG | GND |
| VCC | 5V |
| Trig | 9 |
| Echo | 10 |
Code
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
// Display Anschluss: SCL in A5, SDA in A4
LiquidCrystal_I2C lcd(0x27, 16, 2);
int TRIG_PIN = 9; // Anschluss trig = Trigger, Sender ("Lautsprecher") in Pin 9
int ECHO_PIN = 10; // Anschluss echo = Empfänger ("Mikrofon") in Pin 10
void setup() {
lcd.init();
lcd.backlight();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(9600);
}
void loop() {
// Berechnung der Entfernung
digitalWrite(TRIG_PIN, HIGH);
delay(10);
digitalWrite(TRIG_PIN, LOW);
// Der Variable "zeit" wird der Wert zugewiesen, wie lange das Signal bis zum
// Mikrofon braucht.Einheit ist in Mikrosekunden.
unsigned long zeit = pulseIn(ECHO_PIN, HIGH);
// Der Variable "entfernung" wird der Wert zu gewiesen, der sich aus der
// Berechnung der Zeit des Signals für einen Weg (zeit/2) mit einer Konstanten
// zur Schallgeschwindigkeit (343 m/s) ergibt. Man erhält so einen Wert in der
// Einheit cm.
unsigned long entfernung = (zeit / 2) * 0.03432;
// Entfernung auf Display und Serial Monitor anzeigen
if (entfernung >= 50 || entfernung <= 0) { // Wenn die Entfernung nicht
// zwischen 0 und 50cm liegt...
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kein Messwert"); //... schreibe "Kein Messwert" auf dem Display
Serial.println("Kein Messwert");
} else { // anderenfalls... (Der Messwert liegt zwischen 0 und 50 cm)...
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Entfernung:");
lcd.setCursor(0, 1);
lcd.print(entfernung); //...der Messwert in cm wird auf dem Display
// angezeigt
lcd.print("cm");
Serial.print(entfernung);
Serial.println(" cm");
}
// Warte eine Sekunde
delay(1000);
}