Entfernung fehlerhaft

Microcontroller: ESP8266 D1 Mini
Sensor: HC-SR04

Ich bekomme auf den Serial Monitor folgende Ausgabe...
0cm
Bewegung erkannt...
Die Benachrichtigung via TelegramBot funktioniert.
Irgendwas mit der Messung der Entfernung scheint nicht zu funktionieren.

Habe ich im folgenden Code was falsch geschrieben?
Sitze schon ewig davor und finde den Fehler nicht!



//Bibliotheken
#include <ESP8266WiFi.h> //D1 Mini
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

// Deine WLAN-Zugangsdaten
const char* ssid = "xxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";

// Den Telegram-Bot initialisieren
#define botToken "xxxxxxxxxxxxxxxxxxx"

//Deine User ID
#define userID "xxxxxxxxxxxxxxx"

WiFiClientSecure client;
UniversalTelegramBot bot(botToken, client);

const int trigPin = 14; //D5
const int echoPin = 22; //D6
long dauer = 0;
long entfernung = 0;

//Verbindung zum WLAN
void connectToWiFi() {
  Serial.print("Verbinde mich mit: ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(300);
  }
  Serial.println("");
  Serial.println("Verbunden!");
}

void setup() {
  Serial.begin(115200);
  client.setInsecure();

  // Verwendeter Pin
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
}

void loop() {
    
 digitalWrite(trigPin, LOW);
 delay(5);
	digitalWrite(trigPin, HIGH);
 delay(10);
 digitalWrite(trigPin, LOW);

	dauer = pulseIn(echoPin, HIGH);

	entfernung = (dauer / 2) * 0.03432;
 
 Serial.print(entfernung);

		Serial.println(" cm");


  if (entfernung <= 20)	{
 // Wenn der Wert für die Entfernung unter
		// oder gleich 20cm ist, dann... 

    connectToWiFi();
    bot.sendMessage(userID, "Bewegung erkannt!", "");
    Serial.println("Bewegung erkannt");
    
    WiFi.disconnect();
  }
}

das ist

delayMicroseconds();

Und 0 ist immer unter 20. Damit ist die Bedingung:

immer erfüllt.

Stopp mall es ist ein ESP also doch delayMicroseconds();

const int trigPin = 5;
const int echoPin = 18;

//define sound speed in cm/uS
#define SOUND_SPEED 0.034


long duration;
float distanceCm;


void setup() {
  Serial.begin(115200); 
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT); 
}

void loop() {

  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
 
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);

  duration = pulseIn(echoPin, HIGH);
  
 
  distanceCm = duration * SOUND_SPEED/2;
  
  Serial.print("Distance (cm): ");
  Serial.println(distanceCm);

  
  delay(1000);
}

Stimmt leider nicht, es werden milis benutzt = delay()
hier ein Beispiel

In diesem Tutorial steht

10 Microsekunden. Mindestens. Du hast den Ultraschallsensor an einem ESP8266.
Der hat nur 3,3V
Möglicherweise wird ein 10µS kurzer Pulse mit nur 3,3V nicht erkannt.
Pulse mal länger machen 20µS

void loop() {
    
 digitalWrite(trigPin, LOW);
 delay(5);
 digitalWrite(trigPin, HIGH);
 delay(20); // <<== Trigger-Impulslänge
 digitalWrite(trigPin, LOW);

oder einen Pegelwandler oder Transistor zwischen EPS8266-IO-Pin und HC04-Eingang setzen.

vgs

5v/3,3v Pegelwandler ist mit dabei, daran kann es nicht liegen!

Ich bin heute nochmals durch den Sketch gegangen und habe den Fehler gefunden!
Ständig wurde mir 0 cm angezeigt, ja klar muss ja den der echoPin = 22 ist falsch es sollte eigentlich ne 12 da stehen

richtig wäre echoPin = 12

Jetzt funktioniert alles!

//Bibliotheken
#include <ESP8266WiFi.h> //D1 Mini
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

// Deine WLAN-Zugangsdaten
const char* ssid = "xxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";

// Den Telegram-Bot initialisieren
#define botToken "xxxxxxxxxxxxxxxxxxx"

//Deine User ID
#define userID "xxxxxxxxxxxxxxx"

WiFiClientSecure client;
UniversalTelegramBot bot(botToken, client);

const int trigPin = 14; //D5
const int echoPin = 12; //D6
long dauer = 0;
long entfernung = 0;

//Verbindung zum WLAN
void connectToWiFi() {
  Serial.print("Verbinde mich mit: ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(300);
  }
  Serial.println("");
  Serial.println("Verbunden!");
}

void setup() {
  Serial.begin(115200);
  client.setInsecure();

  // Verwendeter Pin
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  
}

void loop() {
    
 digitalWrite(trigPin, LOW);
 delay(5);
	digitalWrite(trigPin, HIGH);
 delay(10);
 digitalWrite(trigPin, LOW);

	dauer = pulseIn(echoPin, HIGH);

	entfernung = (dauer / 2) * 0.03432;
 
 Serial.print(entfernung);

		Serial.println(" cm");


  if (entfernung <= 150)	{
 // Wenn der Wert für die Entfernung unter
		// oder gleich 150cm ist, dann... 

    connectToWiFi();
    bot.sendMessage(userID, "Bewegung erkannt!", "");
    Serial.println("Bewegung erkannt");
    
    WiFi.disconnect();
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.