jueves, 3 de diciembre de 2015

Hago presente mi segunda entrega de mi prototipo, empezando con los materiales que utilicé:

-Arduino UNO.- Placa principal para dar funcionamiento al circuito.










-Placa L298N.- Controlador de los motores DC.















-Kit Motores DC: Motores de corriente alterna, irán conectados a la placa L298N.











- Sensor Ultrasónico: Nos permite captar la distancia hacia un obstáculo









-Fuente de alimentación de 9V: Energía necesaria para que funcione la placa L298N.





-Cables.- Para las conexiones de los pines de los componentes.











Diagrama de conexión de los componentes:


Código empleado:
//Declaración de variables
//Pines del sensor de distancia
int  trigger =6;
int echo=7;
//Motor Izquierdo
int ENA=8;
int IN1=9;
int IN2=10;
//Motor Derecho
int ENB=13;
int IN3=11;
int IN4=12;
int estado=0;     //Estado para los casos del switch
long direccion; //nos permite elegir dirección izquierda: 0 y derecha: 1

//Configuración
void setup() {
  Serial.begin(9600);
  pinMode(trigger,OUTPUT);
  pinMode(echo,INPUT);
  
  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
  
  //Iniciamos la lectura del random
  randomSeed(analogRead(0));
  
  //Después de 3 segundos empieza la ejecución
  apagar();
  delay(3000);
}

void loop() {
  
    digitalWrite(trigger,LOW);
    delayMicroseconds(5);
    // Comienzo de la medida
    digitalWrite(trigger, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigger, LOW);
    // Adquisición y conversión a centímetros
    float distancia = pulseIn(echo, HIGH);
    distancia = distancia * 0.01657;
   
    //Si la distancia esta entre 10 y 50 cm los motores disminuyen velocidad
    if ((distancia>=10) && (distancia <=50)){
      estado=0;}
    
    // Si la distancia es mayor a 10 el robot avanza a velocidad normal
    else if (distancia > 10.0){
      estado=1;}
    
    // Caso contrario esquiva el obstáculo
    else{
      estado=2;
    }
    
    //Elije el estado asignado anteriormente
    switch (estado) {
      case 0:
         //Motores avanzan a velocidad menor
        digitalWrite(IN1,LOW);
        digitalWrite(IN2,HIGH); 
        analogWrite(ENA,125);
  
        digitalWrite(IN3,HIGH);
        digitalWrite(IN4,LOW);
        analogWrite(ENB,125);
        break;
      
      case 1:
        //Llamada de métodos
        avanzarA();
        avanzarB();
        break;
       
      case 2:
        //Elije la dirección para girar
        direccion = random(2);
        if (direccion==0) {
          retroDerecha();}
        else {
          retroIzquierda();}
        break;}
}

//Métodos
void avanzarA() {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH); 
    analogWrite(ENA,255);}

void avanzarB() {
    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
    analogWrite(ENB,125);}

void retroDerecha() {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH); 
    analogWrite(ENA,255);

    digitalWrite(IN3,LOW);
    digitalWrite(IN4,HIGH);
    analogWrite(ENB,125);
    delay(500);}

void retroIzquierda() {
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW); 
    analogWrite(ENA,255);

    digitalWrite(IN3,HIGH);
    digitalWrite(IN4,LOW);
    analogWrite(ENB,125); 
    delay(500);}

void apagar() {
  analogWrite(ENA,0);
  analogWrite(ENB,0);}

Imágenes prototipo:





Video del funcionamiento:




Podcast:

1 comentario:

Datos personales:

Entradas populares