ESP32 – Entfernungsmesser

Testaufbau ESP32 – Entfernungsmesser

Beschreibung ESP32 – Entfernungsmesser

Der ESP32 Entfernungsmesser basierend auf einem ESP32 Modul. Die Messung wird mit einem HC-SR04 Ultraschall Modul durchgeführt. Ein Taster startet die Messung der Entfernung, eine LED zeigt den Messstatus an. Das OLED Display 128 X 32, dass am I2C Bus des ESP32 angeschlossen ist, zeigt die ermittelte Enternung in cm an.

Bauteile:

  • AZ-Delivery ESP32S Dev Kit C
  • OLED 128 x 32, SPI, Adafruit SSD1306 kompatibel
  • HC-SR04 Ultraschall Modul
  • Taster 2 x ON
  • LED rot 5 mm
  • Widerstand 330
  • Widerstand 10k

I2C Anschluss

I2C DeviceESP32
SDASDA (default GPIO 21)
SCLSCL (default GPIO 22)

Schaltplan

Programm Code

Das Beispielprogrmm zum ESP32 Entferungsmesser benutzt die Adafruit_SSD1306 Library zu Anteuerung des OLED Displays. Das Display hat eine Auflösung von 127×64 Pixeln. Das OLED wird mit oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS) initialisiert, eine Definition der Parameter ist in
Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, OLED_RESET). Wire ist dabei die Definition der I2C Schnittestelle des ESP32, an der das Display angeschlossen ist. Nachdem der Taster gedrückt wurde startet eine Messung. Der ermittelte Wert wird auf dem Display angezeigt.

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
//
// OLED Parameter
//
#define OLED_RESET    -1 
#define SCREEN_ADDRESS 0x3C 
#define OLED_WIDTH 128 
#define OLED_HEIGHT 64 
//
// OLED Init
//
Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, OLED_RESET);
//
// IO Port Definitionen
//
#define LED_PIN       16 
#define TASTER        35  
#define Trigger_PIN   25 
#define Echo_PIN      26 
//
// Div. Variablen
//
unsigned long Duration;
int Distance;
//
// Setup Programm
//
void setup() {
  //
  // Serieller Port für Debug Ausgaben, falls notwendig
  //
  Serial.begin(9600);
  //
  // OLED Starten
  //
  oled.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  //
  // Taster init
  //
  pinMode(TASTER, INPUT);
  //
  // Rote LED
  //
  pinMode(LED_PIN, OUTPUT);
  //
  // Ultraschall Sensor
  //
  pinMode(Trigger_PIN, OUTPUT);
  pinMode(Echo_PIN, INPUT);
  // 
  // LED ausschlten
  //
  digitalWrite(LED_PIN, LOW);
}

//
// Programmschleife
//
void loop() {
  if(digitalRead(TASTER) == LOW) {
    //
    // LED an
    //
    digitalWrite(LED_PIN, HIGH);     
    //
    // Starte Entfernungs-Messung
    //
    digitalWrite(Trigger_PIN, HIGH);
    delayMicroseconds(20);
    digitalWrite(Trigger_PIN, LOW);
    //
    // Verzögerung einlesen
    //
    Duration = pulseIn(Echo_PIN, HIGH);
    // 
    // Distanz errechnen
    //
    Distance = Duration * 0.03432 / 2;
    //
    // Ergebnis anzeigen
    //
    testdrawtextON(Distance); 
  }
  else {
    testdrawtextOFF(Distance);
    digitalWrite(LED_PIN, LOW);
  }
}

//
// Ausgabe, wenn Taster gedrückt ist
//
void testdrawtextON(int distance) {
  char s[40], sl[40];  

  sprintf(s,"  %d cm",distance);
  oled.clearDisplay();
  oled.setTextSize(2);  
  oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(0,0);   
  oled.println(F(" Messung.."));
  oled.println("");

  sprintf(sl,"%d",distance);
  if (strlen(sl) == 1)
    sprintf(s,"  %d cm",distance);
  if (strlen(sl) == 2)
    sprintf(s," %d cm",distance);
  if (strlen(sl) == 3)
    sprintf(s,"%d cm",distance);
  oled.setTextSize(3); 
  oled.println(F(s));
  oled.display();
}

//
// Ausgabe, wenn Taster nicht gedrückt ist
//
void testdrawtextOFF(int distance) { 
  char s[40], sl[40];

  oled.clearDisplay();
  oled.setTextSize(2);  
  oled.setTextColor(SSD1306_WHITE);
  oled.setCursor(0,0);   
  oled.println(F("Entfernung"));
  oled.println("");

  sprintf(sl,"%d",distance);
  if (strlen(sl) == 1)
    sprintf(s,"  %d cm",distance);
  if (strlen(sl) == 2)
    sprintf(s," %d cm",distance);
  if (strlen(sl) == 3)
    sprintf(s,"%d cm",distance);
  oled.setTextSize(3); 
  oled.println(F(s));
  oled.display();
}
Nach oben scrollen