Zum Schluss des Projektes folgt nun das Arbeiten mit dem Gleichstrommotor (DC- Motor) und der dazugehörigen H- Brücke.

Bevor man aber die beiden Bauteile verbaut, musst du dich damit befassen was ein DC- Motor und eine H- Brücke sind und wie sie generell funktionieren.

DC-Motor

Ein DC- Motor ist nichts anderes als ein elektromechanischer Wandler, der aus einer elektrischen Leistung mechanische Leistung erzeugt.

Die allgemeine Funktionsweise eines DC-Motors beschreibt sich wie folgt:

Der DC- Motor besitzt einen Dauermagneten und ein drehbares Eisenteil, dass zwischen dem Dauermagneten gelagert und von einer isolierten Spule aus Kupferdraht umwickelt ist. 

Sobald Gleichstrom durch die Spule fließt, baut die Spule ein Magnetfeld auf und der Eisenkern wird zum Elektromagneten. 

Aufgrund dessen, dass der Elektromagnet drehbar gelagert ist, richtet er sich so aus, dass immer die ungleichen Pole (vom Dauermagneten und Elektromagneten) gegenüberstehen. Wichtig zu wissen ist, dass der Elektromagnet solange in der Stellung bleibt, bis der Strom ausgeschaltet wird (aufgrund der magnetischen Kräfte). 

Aber damit sich der Elektromagnet dreht, muss die magnetische Ausrichtung umgepolt werden. Dies kann man ganz einfach erreichen, indem man die Stromrichtung in der Spule ändert. Das Ändern der Stromrichtung übernimmt ein sog. Kollektor, der mit der Spule verbunden ist und die Spule mit Spannung versorgt. 

Wenn der Elektromagnet sich dreht und kurz davor ist mit dem Dauermagneten die optimale Ausrichtung einzunehmen, wird der Strom über den Kollektor abgeschaltet und darauf mit umgekehrter Polung wieder eingeschaltet. Dadurch nimmt der Elektromagnet die umgekehrte Polung ein, wodurch sich die gleichen Magnetpole vom Dauer- u. Elektromagneten gegenüberstehen und sich abstoßen.

Im folgenden findest du noch ein hilfreiches Video, das erklärt, wie DC- Motoren funktionieren: 


Abbildung: DC-Motor

Quelle: BBS2 Wolfsburg

H-Brücke

Eine H- Brücke besteht aus aus 4 Schaltern (meistens Transistoren) die in einer H- förmigen Anordnung verbunden sind. Die vier Schalter bzw. Transistoren können so gestellt werden, dass ein Motor in den zwei unterschiedlichen Polaritäten angesteuert werden kann. Man kann also den Motor in 2 Richtungen ansteuern. Viele der H-Brücken bzw. Motorsteuerungen besitzen die Möglichkeit mittels PWM die Geschwindigkeit des DC- Motors zu regeln.



Abbildung: H-Brücke

Quelle: BBS2 Wolfsburg

Da wir uns nun ausführlich damit beschäftigt haben, wie ein DC- Motor funktioniert und wofür man eine H- Brücke verwendet, können wir nun mit dem Aufbau beginnen. Die folgenden Bilder zeigen wie der DC- Motor mit der H- Brücke und die H- Brücke mit dem ESP32 angeschlossen ist (Bitte beachtet die Notizen beim Schaltplan (Bild 2)).

Die H- Brücke ist mit folgenden PINs belegt:

A1 - PIN 18

A2 - PIN 17

OUTPUT1 - DC- Motor

OUTPUT2 - DC- Motor

GND - GND

+5 V - 5 V



Abbildung: Fritzing-Anordnung Ultraschallsensor mit 7-Segemnt Display, passivem Summer, H-Brücke und DC-Motor

Quelle: BBS2 Wolfsburg

Diese Abbildung zeigt den Schaltplan für den Aufbau des DC- Motor mittels der H- Brücke:

Abbildung: Fritzing-Schaltplan Ultraschallsensor mit 7-Segemnt Display, passivem Summer, H-Brücke und DC-Motor

Quelle: BBS2 Wolfsburg


Wenn man die H- Brücke und den DC-Motor richtig angeschlossen folgt nun der Schritt des Programmierens:

Source Code:


#include <TM1637Display.h>              // Bibliothek für die 7- Segment Anzeige
 
#define echo 25                         //Anschluss ECHO vom HC-SR04 wurde für PIN 25 festgelegt
#define trig 33                         //Anschluss TRIG vom HC-SR04 wurde für PIN 33 festgelegt
 
#define display_clk 16                  //Anschluss CLK von der 7- Segment Anzeige wurde für PIN 16 festgelegt 
#define display_dio 13                  //Anschluss DIO von der 7- Segment Anzeige wurde für PIN 13 festgelegt 
 
#define passiver_buzzer 27              //Der PIN für den passiven Summer wurde auf 27 festgelegt 
 
//Pinbelegung für die H-Brücke
int inc1 = 18;
int inc2 = 19;
int motor = 17;
 
 
//Entfernung als globale Variable anlegen 
int entfernung = 0;
 
 
//Pulsweitenmodulation
const int freq = 30000;
const int resolution = 8;
 
 
//Funktion zur Messung der Entfernung über den Ultraschallsensor HC-SR04 (mit Echo und Trigger), Einheit: cm
int getEntfernung()
{
  long entfernung = 1;
  long zeitx = 0;
 
  digitalWrite (trig, LOW);				//setzt den Zustand von trig auf LOW
  delayMicroseconds(3);					//setzt eine Pause/Unterbrechung von 3 Mikrosekunden
  noInterrupts();
  digitalWrite(trig, HIGH);				//setzt den Zustand von trig auf HIGH
  delayMicroseconds(10);				//setzt eine Pause/Unterbrechung von 10 Mikrosekunden
  digitalWrite(trig, LOW);
  zeitx = pulseIn(echo, HIGH);
  interrupts();						//unterbricht den Vorgang
  zeitx = (zeitx / 2);					//teilt die Zeit durch 2
  entfernung = zeitx / 29.1;				//teilt die Restzeit durch die Geschwindigkeit des Schalls
  return (entfernung);					//gibt die berechnete Entfernung zurück
}
 
 
// Funktion zur Antriebssteuerung ---> mit geringer werdendem Abstand soll der Motor langsamer laufen
void antrieb(int entfernung)
{
  if ((entfernung <= 50) && (entfernung >= 25))
  {
    digitalWrite(inc1, LOW); 		//Laufrichtung einstellen
    digitalWrite(inc2, HIGH);
    ledcWrite(2, 230);
  }
 
  else if ((entfernung <= 24) && (entfernung >= 5))
  {
    digitalWrite(inc1, LOW); 		//Laufrichtung einstellen
    digitalWrite(inc2, HIGH);
    ledcWrite(2, 200);			//Sendet ein Signal an den Channel 2 mit einem Duty Cyle(Auslastungsgrad) von 230
  }
 
  else if (entfernung < 5)
  {
    digitalWrite(inc1, LOW); 		//Laufrichtung einstellen
    digitalWrite(inc2, HIGH);
    ledcWrite(2, 0); 			// Motor steht
  }
 
  else
  {
    digitalWrite(inc1, LOW); 		//Laufrichtung einstellen
    digitalWrite(inc2, HIGH);
    ledcWrite(2, 255);
  }
}
 
 
// Funktion zur Tonsteuerung ---> mit geringer werdendem Abstand soll sich die Tonfrequenz höher werden 
void sound(int entfernung)
{
  // die Entfernungsabstände können beliebig angepasst werden 
  if ((entfernung <= 50) && (entfernung >= 25)) 
  {
    ledcWriteTone(1, 300);
    delay(10);
  }
 
  else if ((entfernung <= 24) && (entfernung >= 15))
  {
    ledcWriteTone(1, 800);
    delay(5);
  }
 
  else if ((entfernung <= 14) && (entfernung >= 6))
  {
    ledcWriteTone(1, 1300);
    delay(2);
  }
 
  else if (entfernung <= 5)
  {
    ledcWriteTone(1, 1700);
    delay(1);
  }
 
  else
  {
    ledcWriteTone(1, 0);
    delay(1);
  }
}
 
 
TM1637Display display(display_clk, display_dio);
 
 
void setup()
{
  pinMode(trig, OUTPUT);			//
  pinMode(echo, INPUT);                         //
  pinMode(passiver_buzzer, OUTPUT);		//Legt den Eingangstyp des angegebenen PINs fest
  pinMode(motor, OUTPUT);                       //
  pinMode(inc1, OUTPUT);                        //
  pinMode(inc2, OUTPUT);                        //
 
  ledcSetup(1, freq, resolution); 		// Konfigurieren der Pulsweitenmodulation für Channel 0 --> Sound
  ledcAttachPin(passiver_buzzer, 1); 		//passiver Buzzer mit PWM-Channel verbinden
 
  ledcSetup(2, freq, resolution);		//Konfigurieren der Pulsweitenmodulation für Channel 1 --> Antrieb
  ledcAttachPin(motor, 2); 			//Motor mit dem PWM-Channel verbinden
}
 
 
 
 
void loop()
{
  entfernung = getEntfernung();
  sound(entfernung); 				//Aufruf der Funktion zum Ansteuern des passiven Buzzers
  antrieb(entfernung); 				//Aufruf der Funktion zum Antrieb des Motors
 
  //Einstellungen für die 7 Segment Anzeige
  display.setBrightness(7);
  display.showNumberDec(entfernung);
  delay(20);
}
Last modified: Thursday, 1 February 2024, 11:51 AM