| Dimmer mit Ultraschall(Serielle Kommunikation mit ESP32)In dem folgenden Versuch wird eine Leuchtdiode, die an den Mikrocontroller ESP32 angeschlossen wird, mithilfe
eines Ultraschallsensors gedimmt. Bei dem Ultraschall handelt es sich um einen Sensor, dessen Auswertungselektronik die Messdaten
über serielle Schnittstelle senden kann. Der Mikrocontroller muss die ankommenden Daten auslesen und entsprechend auswerten. Die
Helligkeit der Leuchtdiode wird von der Entfernung eines Gegenstandes von dem Sensor abhängen. Das Dimmen wird mit einem PWM-Signal
realisiert. Anstatt einer Leuchtdiode könnte man auf diese Weise z.B. eine Wasserpumpe ansteuern und mit dem Ultraschallsensor das
Wasserniveau in einem Behälter regeln. ESP32Mikrocontroller ESP32.
Ultraschall mit SR04M-2Ultraschall-Sensor Den Sensor zusammen mit dem zugehörigen Elektronikmodul SR04M-2 konnte man bei zahlreichen Internet-Shops für ca.
10 Euro erwerben. Der Ultraschallsensor ist wasserdicht, funktioniert jedoch unter Wasser nicht. Die Angaben über messbare
Entfernung weichen voneinander ab. Der minimale Abstand beträgt ca. 20-25 cm. Die maximale Entfernung pendelt zwischen 2 m und
4,5 m. Das Verbindungskabel hat eine Länge von 2,5 m. SR04M-2 Frontansicht (Pfeil: Jumper Stelle zur Einstellung der Betriebsmodi) SR04M-2 (Rückseite) Das Modul SR04M-2 sieht ähnlich aus wie JSN-SR04T -2 oder AJ-SR04M. Die Versorgungsspannung beträgt 5VDC, der
Stromverbrauch liegt bei 5 mA bis 30 mA. Erfassungsbereich des Abtastsensors beträgt weniger als 50°. Arbeitstemperatur liegt
im Bereich -10 °C bis 70°C. Kommunikation erfolgt über die Methode Trigger/Echo oder seriell mit RX/TX. Die Baudrate beträgt
9600,n,8,1.
LevelkonverterLevelkonverter.
Der SchaltplanSchaltplan Die TestschaltungTestschaltung Das Programm (ESP32)// ***********************************************************************************************// Dimmer mit Ultraschall // Serielle Kommunikation mit ESP32 // ESP32 Sketch // Arduino IDE 1.8.19 // ********************************************************************************************** #define RX2_Pin 16 // Serielle Schnittstelle 2 RX: GPIO 16 #define TX2_Pin 17 // Serielle Schnittstelle 2 TX: GPIO 17 #define LED_Pin 23 // GPIO 23 für Leuchtdiode #define PWM_Kanal 0 // PWM Parameter #define Frequenz 5000 #define Aufloesung 8 int Messwert_Tabelle [10]; void setup() { Serial.begin(9600); // Serial initialisieren Serial2.begin(9600, SERIAL_8N1, RX2_Pin, TX2_Pin); // Serial 2 initialisieren ledcSetup (PWM_Kanal, Frequenz, Aufloesung); // Kanal Parameter ledcAttachPin (23, PWM_Kanal); // LED an GPIO 23 } // *********************************************************************************************** void loop() { // Hauptprogramm if (Serial2.available()){ // Daten vorhanden int Entfernung; // Entfernung in mm byte Puffer [3]; // Puffer-Variable byte Start_Byte = (byte)Serial2.read(); // Startwert if (Start_Byte == 255){ Serial2.readBytes(Puffer, 3); // Puffer laden Entfernung = (Puffer [0]<<8) + Puffer [1]; // Berechnung der Distanz byte QS = ((Start_Byte + Puffer [0] + Puffer [1])&0xFF); // Quersumme if (QS == Puffer [2]) { // Quersumme OK? Serial.print("Entfernung = "); // Serieller Monitor Serial.print(Entfernung); // -"- int PWM_Wert = (1.27 * Entfernung) - 266; // LED Helligkeit if (PWM_Wert > 255) { PWM_Wert = 255; } // PWM Max if (PWM_Wert < 0) { PWM_Wert = 0; } // PWM min int Messwert_Gesamt = 0; // Mittelwert (Bei Bedarf) for (int i=9; i>0; i--) { Messwert_Tabelle [i] = Messwert_Tabelle [i-1]; Messwert_Gesamt = Messwert_Gesamt + Messwert_Tabelle [i]; } Messwert_Tabelle [0] = PWM_Wert; Messwert_Gesamt = (Messwert_Gesamt + PWM_Wert) / 10; Serial.print(" LED Helligkeit = "); // Serieller Monitor Serial.println(Messwert_Gesamt); // -"- ledcWrite(PWM_Kanal, Messwert_Gesamt); // Leuchtdiode dimmen } } } } // *********************************************************************************************** Bei der Skalierung der Werte kann die Formel auf folgender Seite behilflich sein: E-Rechner: Werte Skalierung
|
Google-Suche auf MEINE-SCHALTUNG.de : |