Aufgebaut wird die Schaltung mit einem Arduino Nano und einem Motortreiber mit L298. Die beiden Endsensoren sind Reed Kontakte. In den entsprechenden Fahrzeugen ist ein Magnet befestigt, der die Reed Kontakte schaltet.
[code]
// angelehnt an (c) Michael Schoeffler 2016, http://www.mschoeffler.de
const int enb = 6; // PWM pin 6
const int in3 = 7;
const int in4 = 8;
int sensorA = 14 ; // Analog Pin 0 Haltepunkt A
int sensorB = 15; // Analog Pin 1 Haltepunkt B
void setup() {
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(enb, OUTPUT);
pinMode ( sensorA, INPUT ); //Sensor A und B als Input
pinMode ( sensorB, INPUT );
digitalWrite( sensorA , HIGH ); //Interne Widerst�nde setzen
digitalWrite( sensorB , HIGH );
}
void slow() {
analogWrite(enb, 128);
}
void fast() {
analogWrite(enb, 255);
}
void halt() {
analogWrite(enb, 0);
}
void loop() {
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
fast();
while (1) //Loop bis SensorA aktiviert ist
{
if ( digitalRead( sensorA ) == 0 ) //SensorA ist gegen 0 geschaltet
break ;
delay( 10 );
}
halt();
delay(5000);
// change of direction
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
fast();
while (1) //Loop bis SensorB aktiviert ist
{
if ( digitalRead( sensorB ) == 0 ) //SensorB ist gegen 0 geschaltet
break ;
delay( 10 );
}
halt();
delay(5000 );
}
[/code]
Den Arduino UNO mit L293 Motorshield habe ich auch verwendet. Funktioniert ebenso gut. Hier der Code:
[code]
#include "AFMotor.h"
int sensorA = 14 ; // Analog Pin 0 Haltepunkt A
int sensorB = 15; // Analog Pin 1 Haltepunkt B
AF_DCMotor motor( 1 ); //
void setup()
{
pinMode ( sensorA, INPUT ); //Sensor A und B als Input
pinMode ( sensorB, INPUT );
digitalWrite( sensorA , HIGH ); //Interne Widerst�nde setzen
digitalWrite( sensorB , HIGH );
}
void loop()
{
motor.run( FORWARD );
motor.setSpeed( 200 );
while (1) //Loop bis SensorA aktiviert ist
{
if ( digitalRead( sensorA ) == 0 ) //SensorA ist gegen 0 geschaltet
break;
delay( 10 );
}
motor.run( RELEASE );
delay( 5000 ); // 5 Sekunden Wartezeit
motor.run( BACKWARD );
motor.setSpeed( 200 );
while (1) //Loop bis SensorA aktiviert ist
{
if ( digitalRead( sensorB ) == 0 ) //SensorB ist gegen 0 geschaltet
break;
delay( 10 );
}
motor.run( RELEASE );
delay(5000 ); // 5 Sekunden Wartezeit
}
[/code]