Hallöchen,
ich habe eine Schaltung zur PWM aufgebaut, in Kombination mit einem IRF540 Mosfet, um einen kleinen Motor aus dem Arduino Starterkit drehzahlzuregeln und dem HC-SR0 Ultraschallsensor zur Abstandsmessung. Bei einem gewissen Abstand, soll der Motor abgeschaltet werden. Die Drezahl des Motors wird über ein 10K-Potentiometer geregelt. Eine Diode in Sperrichtung habe ich parallel zum Motor auch drin.
Folgendes Problem:
Sobald ich den Motor mittels Poti laufen lassen will, misst der Ultraschallsensor durchgehend +/- 630 mm, egal wie weit ich den Poti aufdrehe, stelle ich den Poti wieder auf 0, so dass der Ausgang des Arduinos auch den Wert 0 hat, misst er wieder normal.
Ich hab das ganze mit einer Diode getestet, weil ich EMV Probleme wegen Induktionen vermutet habe. Wenn ich die LED OHNE !! Vorwiderstand dimmen will, habe ich das gleiche Phänomen, sobald ich die Diode mit Vorwiderstand betreibe nicht.
Ich weiß nicht wo mein Fehler liegen könnte. Wenn nötig würde ich auch einen Schaltplan zeichnen.
Vielleicht kann mir ja jemand helfen!
Auf jeden Fall schonmal vielen Dank im Vorraus fürs Anschauen und mögliche Hilfeversuche!
Liebe Grüße
Aljoscha
Hier noch mein Code:
int Motor = 9 ; // Ausgang Motor
int Poti = A0 ; // Analogeingang Potentiometer / Sensor
int Poti_Wert ; // Variable um Wert des Potentiometers / Sensors zu speichern
int Schalter = 10 ; // Start-Schalter
int Schalterzustand = 0 ; // Variable um Wert des Schalters zu speichern
int previous_Schalterzustand = 0 ; // Variable um vorherigen Wert des Schalters zu speichern
int Start = 0 ; // Variable die ein Betätigen des Schalters speichert
int Trigger = 11 ; // Trigger Ausgang für Ultraschallsensor
int Echo = 12 ; // Echo-Eingang des Ultraschallsensors
int Zeit ; // Variable, für den Wert von "pulseIn" ; Zeit in Mikrosekunden bis der Schall wieder beim Empfänger ankommt
int Abstand ; // Variable für den errechneten Wert des Abstandes zum Objekt
int LED1 = 13 ; // Ausgang für Signal-LED 1 (Abstand < 50 mm)
boolean Blinken = LOW ;
int LED2 = 8 ; // Ausgang für Signal-LED 2 ("Anlage" in Betrieb / Start)
unsigned long previous_millis ;
unsigned long interval = 1000 ;
void setup ()
{
pinMode (Schalter, INPUT) ;
pinMode (Echo, INPUT) ;
pinMode (Trigger, OUTPUT) ;
pinMode (LED1, OUTPUT) ;
pinMode (LED2, OUTPUT) ;
Serial.begin (9600) ;
}
void loop ()
{
// Liest den Eingangszustand des Schalters aus und prüft, ob eine Änderung des Signals stattgefunden hat
Schalterzustand = digitalRead (Schalter) ;
if ((Schalterzustand == 1) && (previous_Schalterzustand == 0))
{
Start = 1 - Start ;
delay (30) ;
}
previous_Schalterzustand = Schalterzustand ;
// Wenn eine Änderung stattgefunden hat und Start = 1 ist führe den Anweisungsblock aus
if (Start == 1)
{
digitalWrite (LED2, HIGH) ;
// setzt den Triggerausgang LOW, dann HIGH und wieder LOW, dadurch wird Ultraschall ausgesendet
digitalWrite (Trigger, LOW) ;
delayMicroseconds (2) ;
digitalWrite (Trigger, HIGH) ;
delayMicroseconds (5) ;
digitalWrite (Trigger, LOW) ;
// misst die Zeit in Mikrosekunden, bis der Schall nach dem Aussenden wieder beim Empfänger ankommt
Zeit = pulseIn (Echo, HIGH) ;
// Berechnet den Abstand zum Objekt in Millimeter
Abstand /*mm*/ = (Zeit * 0.343) / 2 ;
Serial.print (Abstand) ;
Serial.print ( " , " ) ;
Serial.println (Poti_Wert / 4) ;
// Wenn Abstand > X mm, dann führe Anweisungsblock aus / Motor darf laufen !
if (Abstand > 80)
{
Poti_Wert = analogRead (Poti) ;
analogWrite (Motor, Poti_Wert / 4) ;
digitalWrite (LED1, LOW) ;
}
// Wenn Abstand < X mm, dann führe Anweisungsblock aus ; Motor darf nicht laufen!
else
{
if ((millis() - previous_millis) > interval)
{
previous_millis = millis() ;
Blinken = !Blinken ;
digitalWrite (LED1, Blinken) ;
}
analogWrite (Motor, 0) ;
}
}
// Wenn Variable Start = 0, kein Betrieb, Motor darf nicht laufen!
else
{
analogWrite (Motor, 0) ;
digitalWrite (LED2, LOW) ;
digitalWrite (LED1, LOW) ;
}
delay (50) ;
}