Hallo Allerseits,
ich nutze das Mega2560, Ardumoto H Brige, 2 DC Motoren und den SDM-IO-UART (Ultra Sonic) Sensor.
Folgender Test Code:
int dist = 0; // variable to store the values from sensor(initially zero)
int leftdist;
int rightdist;
int pwm_a = 3; //PWM control for motor outputs 1 and 2 is on digital pin 3
int pwm_b = 11; //PWM control for motor outputs 3 and 4 is on digital pin 11
int dir_a = 12; //dir control for motor outputs 1 and 2 is on digital pin 12
int dir_b = 13; //dir control for motor outputs 3 and 4 is on digital pin 13
#define TIMEOUT_OVERFLOW 1000
int TrigPin = 6;
int EchoPin = 7;
unsigned long ultrasoundDuration;
unsigned long distance_sensor;
void setup()
{
Serial.begin(9600); // starts the serial monitor
pinMode(pwm_a, OUTPUT); //Set control pins to be outputs
pinMode(pwm_b, OUTPUT);
pinMode(dir_a, OUTPUT);
pinMode(dir_b, OUTPUT);
}
void loop()
{
getDistance_sensor();
dist=distance_sensor;
Serial.print("Distance is = ");
Serial.print( dist , DEC);
Serial.print(" cm");
Serial.println();
delay(100);
if(dist > 20)
forward();
if(dist <= 20)
stop_engine();
}
void forward() {
digitalWrite(dir_a,LOW);
digitalWrite(dir_b,HIGH);
analogWrite(pwm_a, 100); //set both motors to run at (100/255 = 39)% duty cycle (slow)
analogWrite(pwm_b, 100);
return;
}
void stop_engine() {
digitalWrite(dir_b,LOW);
digitalWrite(dir_a,LOW);
analogWrite(pwm_a, 0);
analogWrite(pwm_b, 0);
delay(200); //wait after stopping
return;
}
int getDistance_sensor(){
unsigned char pin = 0;
unsigned int time_flag = 0;
pinMode(TrigPin, OUTPUT); //pin is output
pinMode(EchoPin, INPUT); // pin is now input
digitalWrite(TrigPin, HIGH);
delayMicroseconds(2);
digitalWrite(TrigPin, LOW);
delayMicroseconds(10);
digitalWrite(TrigPin, HIGH);
// wait for a LOW pulse
//ultrasoundDuration = pulseIn(EchoPin, HIGH);// will not work for HIGH pulse
TCCR1A = 0x00;
TCNT1 = 0x0000;
TCCR1B = 0x01;
pin = digitalRead(EchoPin);
while(pin)
{
pin = digitalRead(EchoPin);
time_flag++;
if(time_flag > TIMEOUT_OVERFLOW)
break;
}
TCCR1B = 0x00;
ultrasoundDuration = TCNT1;
ultrasoundDuration = ultrasoundDuration / 16;
// get results
distance_sensor= ultrasoundDuration*0.017;
return distance_sensor;
}
Ich versuche hier schlicht und einfach den Sensor parallel zu den DC Motoren zu betreiben. Leider funktioniert nur der linke Motor wenn der Sensor Code aktiv ist. Sobald ich den Sensor Code:
getDistance_sensor();
dist=distance_sensor;
Serial.print("Distance is = ");
Serial.print( dist , DEC);
Serial.print(" cm");
Serial.println();
delay(100);
auskommentiere funktionieren beide Motoren und der Roboter fährt wie gewollt vorwärts.
Ich hab auch schon gelesen das es ein Energie Problem sein könnte in älteren Posts, das habe ich aber durch ausprobieren einer zweiten Energiequelle allein für den Ardumoto ausschließen können. Zudem teste ich mein Arduino mit einem Netzteil um Batterien zu sparen.
Ich hoffe Ihr könnt mir weiter helfen. Wäre super, ich komme einfach nicht weiter....
Drive_test.ino (2.82 KB)