Estoy haciendo un robot en forma de automóvil que debe remover obstáculos que están alrededor de el como se muestra en la siguiente figura
Ver el archivo adjunto 274171
El robot tiene forma de automóvil, por lo que utilice 4 motores de corriente directa, uno para cada rueda junto con 2 puentes H L298N y un Arduino Mega. Ademas de un sensor ultrasonico HC-SR04 para detectar los obstáculos como se muestra en la siguiente figura:
Ver el archivo adjunto 274172
Y el código de programación es el siguiente:
La idea es que el robot gire sobre su propio eje y cuando el sensor detecte un obstáculo, se detenga y avance hacia adelante, desplazando el obstáculo fuera del circulo y que después retroceda hacia el centro. El ciclo se repite hasta que no haya alguna lata dentro del circulo
Sin embargo lo que ocurre es que el robot solo avanza de adelanta hacia atrás y el sensor no parece detectar nada, alguien me podría decir que estoy haciendo mal? o hay algo que debería cambiar?
Ver el archivo adjunto 274171
El robot tiene forma de automóvil, por lo que utilice 4 motores de corriente directa, uno para cada rueda junto con 2 puentes H L298N y un Arduino Mega. Ademas de un sensor ultrasonico HC-SR04 para detectar los obstáculos como se muestra en la siguiente figura:
Ver el archivo adjunto 274172
Y el código de programación es el siguiente:
C-like:
#include <NewPing.h>
int ENA_IZQUIERDO = 22;
int IN1_IZQUIERDO = 24;
int IN2_IZQUIERDO = 26;
int IN3_IZQUIERDO = 28;
int IN4_IZQUIERDO = 30;
int ENB_IZQUIERDO = 32;
int ENA_DERECHO = 40;
int IN1_DERECHO = 42;
int IN2_DERECHO = 44;
int IN3_DERECHO = 46;
int IN4_DERECHO = 48;
int ENB_DERECHO = 50;
int Distancia;
int TRIGGER_PIN = 51;
int ECHO_PIN = 53;
int MAX_DISTANCE = 200;
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
void setup() {
pinMode(ENA_IZQUIERDO, OUTPUT);
pinMode(IN1_IZQUIERDO, OUTPUT);
pinMode(IN2_IZQUIERDO, OUTPUT);
pinMode(IN3_IZQUIERDO, OUTPUT);
pinMode(IN4_IZQUIERDO, OUTPUT);
pinMode(ENB_IZQUIERDO, OUTPUT);
pinMode(ENA_DERECHO, OUTPUT);
pinMode(IN1_DERECHO, OUTPUT);
pinMode(IN2_DERECHO, OUTPUT);
pinMode(IN3_DERECHO, OUTPUT);
pinMode(IN4_DERECHO, OUTPUT);
pinMode(ENB_DERECHO, OUTPUT);
}
void loop() {
unsigned int uS = sonar.ping();
Distancia = sonar.convert_cm(uS);
while(Distancia > 55){
giro();
}
delay(500);
adelante();
delay(1000);
detenerse();
delay(500);
atras();
delay(1000);
detenerse();
delay(500);
}
void adelante(){
digitalWrite(ENA_IZQUIERDO, HIGH);
digitalWrite(ENB_IZQUIERDO, HIGH);
digitalWrite(IN1_IZQUIERDO, LOW);
digitalWrite(IN2_IZQUIERDO, HIGH);
digitalWrite(IN3_IZQUIERDO, LOW);
digitalWrite(IN4_IZQUIERDO, HIGH);
digitalWrite(ENA_DERECHO, HIGH);
digitalWrite(ENB_DERECHO, HIGH);
digitalWrite(IN1_DERECHO, LOW);
digitalWrite(IN2_DERECHO, HIGH);
digitalWrite(IN3_DERECHO, LOW);
digitalWrite(IN4_DERECHO, HIGH);
}
void detenerse(){
digitalWrite(ENA_IZQUIERDO, LOW);
digitalWrite(ENB_IZQUIERDO, LOW);
digitalWrite(ENA_DERECHO, LOW);
digitalWrite(ENB_DERECHO, LOW);
}
void atras(){
digitalWrite(ENA_IZQUIERDO, HIGH);
digitalWrite(ENB_IZQUIERDO, HIGH);
digitalWrite(IN1_IZQUIERDO, HIGH);
digitalWrite(IN2_IZQUIERDO, LOW);
digitalWrite(IN3_IZQUIERDO, HIGH);
digitalWrite(IN4_IZQUIERDO, LOW);
digitalWrite(ENA_DERECHO, HIGH);
digitalWrite(ENB_DERECHO, HIGH);
digitalWrite(IN1_DERECHO, HIGH);
digitalWrite(IN2_DERECHO, LOW);
digitalWrite(IN3_DERECHO, HIGH);
digitalWrite(IN4_DERECHO, LOW);
}
void giro(){
digitalWrite(ENB_IZQUIERDO, HIGH);
digitalWrite(IN3_IZQUIERDO, LOW);
digitalWrite(IN4_IZQUIERDO, HIGH);
}
La idea es que el robot gire sobre su propio eje y cuando el sensor detecte un obstáculo, se detenga y avance hacia adelante, desplazando el obstáculo fuera del circulo y que después retroceda hacia el centro. El ciclo se repite hasta que no haya alguna lata dentro del circulo
Sin embargo lo que ocurre es que el robot solo avanza de adelanta hacia atrás y el sensor no parece detectar nada, alguien me podría decir que estoy haciendo mal? o hay algo que debería cambiar?