Go Down

Topic: Frage über Dc Motor Steuerung mit L293D (Read 69 times) previous topic - next topic

Guenesg

Hallo Zusammen,

ich bin (ein blutiger) Anfänger und möchte mir durch learning by doing Arduino beibringen. Ich habe nicht viel Erfahrung was C++ angeht , versuche seit Tagen ein kleine Projekt zu realisieren aber komme ständig an neue Grenzen.

ich möchte ein DC Motor dazu bringen, dass der selbstständig zwischen zwei  Punkten  A<-->B Pendelt. Ich habe dafür an L293D gedacht. Weil es einfacher zu bedienen ist.  (PWM-,Fahrtrichtungsänderungs-vorteile)

 A und B sind wie Taster zu denken so lange die aktiv sind soll der Motor auf diese Position bleiben. Sobald die inaktiv sind soll die Fahrtrichtung geändert werden.

Motor soll zwei Geschwindigkeiten haben. Jeweils vor Position A und B möchte ich Induktive Näherungssensoren (Sensor C) anbringen damit solange diese aktiv sind, dass der Motor von langsam auf schnell oder umgekehrt fahren kann.
Ich habe in letzte Zeit viele Tutorials angeschaut mir viele codier Beispiele gesehen und versucht diese in meine Vorhaben zu integrieren..

Ich hätte echt nicht gedacht, dass meine Vorhaben sich in so eine komplexe Sache verwandelt  ::)
Hier ist meine Code die ich zumindest angefangen habe :

Code: [Select]
const int enb = 6;  // PWM pin 6
const int in3 = 3;  //  Motor pins 
const int in4 = 4;  //  Motor pins
int sensorA = 11 ; // Analog Pin 11 Sensor A
int sensorB = 5; // Analog Pin 5 Sensor B
int sensorC = 7; //Pin Näherungssensor

void setup() {

pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enb, OUTPUT);

 
pinMode ( sensorA, INPUT ); //Sensor A
pinMode ( sensorB, INPUT ); //Sensor B
pinMode ( sensorC, INPUT ); // Naherungssensor

digitalWrite( sensorA , HIGH ); //Interne Widerstaende
digitalWrite( sensorB , HIGH );
digitalWrite( sensorC , HIGH );

}
void slow() {
analogWrite(enb, 70);
}
void fast() {
analogWrite(enb, 100);
}
void halt() {
analogWrite(enb, 0);
}
void vorwaerts () {   
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
fast ();
}
void rueckwaerts (){
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
fast();
}
void loop() {

vorwaerts();
fast();

while (1)
{if (digitalRead( sensorC ) == LOW )// Loop bis SenasorC aktiviert ist
break ;
 delay( 10 );
}
slow();
while (1) //Loop bis SensorA aktiviert ist
{
if ( digitalRead( sensorA ) == 0 ) //SensorA ist gegen 0 geschaltet
break ;
delay( 10 );
}
halt();
delay(5000);
// Fahrtrichtungsaenderung
rueckwaerts();
fast();
while (1) //Loop bis SensorB aktiviert ist
{
if ( digitalRead( sensorB ) == 0 ) //SensorB ist gegen 0 geschaltet
break ;
delay( 10 );
}
halt();
delay(5000 );
}




Vielen Dank im Voraus



DrDiettrich

Du solltest Dich mit dem Programmieren ohne Schleifen befassen, und dann ohne delay().
Und mit ordentlicher Formatierung, siehe IDE ^T.

Für den Anfang folgende Vereinfachung: z.B. statt
Code: [Select]
while (1)
{if (digitalRead( sensorC ) == LOW )// Loop bis SenasorC aktiviert ist
break ;
delay( 10 );
}

einfach
Code: [Select]
while (digitalRead( sensorC ) != LOW )// Loop bis SenasorC aktiviert ist
  delay( 10 );

Das macht den Code schon mal übersichtlicher.

Statt LOW und HIGH helfen auch sinnvoller benannte Konstanten, die können einen nachfolgenden und möglicherweise falschen Kommentar überflüssig machen.

Go Up