Sensores Sharp y QTR

Amigos hola, como estan. El motivo de este tema es saber si alguien puede ayudarme con mi programa, es que funciona pero siento que le falta algo, necesito saber sus ideas ustedes que le agregarian, la idea de este es para un sumo que cuenta con 4 sensores qtr y 1 sensor sharp tambien eh estado pensando en ponerle otros 3 sensores sharp pero me preocupa saber si la alimentacion que me da el arduino es suficiente para alimentar a los 4 sensores qtr y a los 4 sharp. Ustedes que me recomiendan?

Aca dejo el programa

// Conexiones
int ai1 = 4;
int ai2 = 5;
int bi1 = 6;
int bi2 = 7;
int LED = 13;
 
// Variables
int lectura_linea_derecha = 0;
int lectura_linea_izquierda = 0;
int lectura_linea_frente = 0;
int lectura_linea_atras = 0;
int lectura_distancia_frente = 0;
 
// Inicialización
void setup() {
  pinMode(ai1,OUTPUT);
  pinMode(ai2,OUTPUT);
  pinMode(bi1,OUTPUT);
  pinMode(bi2,OUTPUT);
  delay(5000);
}
 
// Rutina
void loop() {
  digitalWrite(LED, LOW);
  lectura_linea_izquierda = analogRead(A0); // Lectura del sensor de línea izquierdo
  lectura_linea_derecha = analogRead(A1); // Lectura del sensor de línea derecho
  lectura_linea_frente = analogRead(A2);
  lectura_linea_atras = analogRead(A3);  
  lectura_distancia_frente = analogRead(A4); // Lectura de sensor de distancia izquierdo
 
  // ¡Detección de línea por el lado izquierdo!
  if(lectura_linea_izquierda < 30){
    digitalWrite(LED,HIGH);
    reversa();
    delay(500);
    derecha();
    delay(100);
    adelante();
  }
 
  // ¡Detección de línea por el lado derecho! 
  if(lectura_linea_derecha < 30){
    digitalWrite(LED,HIGH); 
    reversa(); 
    delay(500); 
    izquierda(); 
    delay(100); 
    adelante(); 
  }
  
  // ¡Detección de línea por el lado derecho! 
  if(lectura_linea_frente < 30){ 
    digitalWrite(LED,HIGH);
    reversa(); 
    delay(500); 
    izquierda(); 
    delay(100); 
    adelante(); 
  }  

  // ¡Detección de línea por el lado derecho! 
  if(lectura_linea_atras < 30){ 
    digitalWrite(LED,HIGH);
    adelante(); 
    delay(500); 
    izquierda(); 
    delay(100); 
    adelante(); 
  } 
  
  // ¡Detección de objeto por el frente! 
  if(lectura_distancia_frente > 200){
    digitalWrite(LED,HIGH);
    adelante();
  }
}


















 
void adelante(){
  digitalWrite(ai1,HIGH);
  digitalWrite(ai2,LOW);
  digitalWrite(bi1,HIGH);
  digitalWrite(bi2,LOW);
}
 
void derecha(){
  digitalWrite(ai1,LOW);
  digitalWrite(ai2,HIGH);
  digitalWrite(bi1,HIGH);
  digitalWrite(bi2,LOW);
}
 
void izquierda(){
  digitalWrite(ai1,HIGH);
  digitalWrite(ai2,LOW);
  digitalWrite(bi1,LOW);
  digitalWrite(bi2,HIGH);
}
 
void reversa(){
  digitalWrite(ai1,LOW);
  digitalWrite(ai2,HIGH);
  digitalWrite(bi1,LOW);
  digitalWrite(bi2,HIGH);
}
 
void detener(){
  digitalWrite(ai1,LOW);
  digitalWrite(ai2,LOW);
  digitalWrite(bi1,LOW);
  digitalWrite(bi2,LOW);
}

void rutina(){
  reversa();
  delay(1000);
  izquierda();
  delay(500);
  adelante();
}

CHIDORINGO.ino (2.4 KB)

Arduino puede entregar unos 300 a 350mA. Mide el consumo de tus sensores y sabrás si estas dentro o fuera. Asi que busca las hojas de datos de cada sensor y ve cuanto consume. Si no sabes, postea el enlace o el esquema de lo que estas usando para establecerlo. Si no das información no podremos asegurar si esta bien o mal.

Lo mejor de todo es usar un multimétro como amperimetro y medir el consumo.

Respecto del programa esta bien pero será lento a la hora de reaccionar.

Usas muchos delays y en un SUMO robot eso es ventaja para tu enemigo. No puedes esperar a que se ejecute algo y esperar 500 o 1 segundo hasta detectar otro sensor.

Debes crear una máquina de estados. Ve a documentación y lee uno de los primeros post que hay al respecto. Al final hay un comentario mío en el post#14 creo donde hago una modificación de un código con delay a otro usando una máquina de estados que emplea a millis().

El cambio es que tu robot SUMO será de respuesta instantánea a los eventos que detecte.