viernes, 4 de diciembre de 2015

SEGUNDA_ENTREGA

SENSOR DE DISTANCIA HC-sr04

OBJETIVO:
Controla, verificar el funcionamiento correcto del sensor HC-sr04 junto a los motores DC, para que el prototipo pueda reconocer objetos a determinada distancia.

 
DESARROLLO:
Después de haber realizado la primera entrega del prototipo sobre el funcionamiento de los motores DC, ahora realizo una segunda entrega en la misma que he utilizado los sensores de distancia HC-sr04 los cuales se enmarcan dentro de los sensores para medir distancias o superar obstáculos, entre otras funciones posibles.
Yo los he utilizado para la medición de distancias, esto lo consigue enviando un ultrasonido (el cual no puede ser oído por una persona) a través de uno de la pareja de cilindros que compone el sensor y espera a que dicho sonido rebote sobre el objeto y vuelta, retorno captado por el cilindro.
Este sensor tiene 4 pines de conexión: un VCC, Trigger (disparo del ultrasonido), Echo (recepción del sonido), y GND. Además, este sensor en concreto tiene un rango de distancias sensibles entre 3 cm y 3 m.
Se puede expresar matemáticamente como  d=170(m*s)/t partiendo de la ecuación de velocidad v=2d/t donde la d es igual a distancia que le tarda a la señal en llegar al objeto dividida por el tiempo, entonces con la fórmula mencionada se puede obtener la distancia a la cual esta el objeto.
Teniendo en cuenta todo lo mencionado permitirá que el prototipo pueda detectar obstáculos a los 10 cm y pueda girar hacia la izquierda, derecha, haciendo uso de los motores DC y así evitar chocar con los objetos detectados a la distancia establecida la cual puede variar dependiendo del rango establecido para el sensor de distancia. 
Esto es en cuanto puedo compartir con ustedes sobre el sensor de distancia que he utilizado después de haber realizado la investigación pertinente en función al tema planteado.  A continuación, colocaré los materiales utilizados, el código desarrollado para el funcionamiento de los mismos y por último un vídeo explicativo.
 
MATERIALES:

- Placa Arduino Mega: El Arduino Mega es una placa electrónica basada en el ATmega1280. Cuenta con 54 pines digitales de entrada / salida (de los cuales 14 se pueden utilizar como salidas PWM), 16 entradas analógicas, 4 UARTs (hardware puertos serie), un oscilador de cristal de 16 MHz, una conexión USB, un conector de alimentación, y un botón de reinicio.


Sensor HC-sr04: El HC-sr04 es un sensor ultrasónico de bajo costo que no solo puede detectar si un objeto se presenta, como un sensor PIR (Passive Infrared Sensor), sino que también puede sentir y transmitir la distancia al objeto. Tienen dos transductores, básicamente, un altavoz y un micrófono, ofrece una excelente detección sin contacto (remoto) con elevada precisión y lecturas estables en un formato fácil de usar.




Placa L298N: Placa controladora de 2 motores de Corriente Continua (CC). La cual usa 4 puentes H integrados en dos "chips" L298N.


Motores DC: Es una máquina que convierte la energía eléctrica en mecánica, provocando un movimiento rotatorio, gracias a la acción que se genera del campo magnético.
 



Cables



Protoboard







ESQUEMA DE CONEXIÓN 


 

PROGRAMA
// Programa para el control y funcionamiento de los motores DC y sensor de distancia
// Declaramos los pines de Trigger y Echo del Sensor de Distancia
int  trigger =21;
int echo=20;

//Declaramos entradas para Motor Izquierdo
int ENA=8;
int IN1=9;
int IN2=10;

// Declaramos entradas para Motor Derecho
int ENB=13;
int IN3=11;
int IN4=12;

// Inicializamos las variables estado y la variable dirección
int estado=0;
long direccion;

// Declaramos la función void setup()
void setup() {
// Iniciamos el monitor serial
  Serial.begin(9600);
// Colocamos la variable trigger como salida y echo como entrada
  pinMode(trigger,OUTPUT);
  pinMode(echo,INPUT);
 
// Declaramos las entradas de motores como salidas

  pinMode(ENA, OUTPUT);
  pinMode(ENB, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);

// Colocamos la función randomSeed
  randomSeed(analogRead(0));
// Llamamos al método apagar esperamos un tiempo de 3 segundos
  apagar();
  delay(3000);
}


// Declaramos la funcion void loop()

void loop() {
 
// Colocamos la variable trigger en apagado

    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 (distancia >=10) && (distancia <=50) condicion 
    if ((distancia>=10) && (distancia <=50)){
// Estado estara en cero
      estado=0;}
// Sino si(distancia > 10.0) estado estara en uno
    else if (distancia > 10.0){
      estado=1;}
// Sino estado cambiara a dos
    else{
      estado=2;
    }
  
//Creamos un swicht para que pueda ejecutar cada uno de los estados
    switch (estado) {     
// Al iniciar el estado en cero la entrada IN1 esta apagada
// y la Entrada IN2 esta encendida y girara a una velocidad de 125

      case 0:
        digitalWrite(IN1,LOW);
        digitalWrite(IN2,HIGH);
        analogWrite(ENA,125);
// Y la entrada para girar el motor derecho
// la entrada IN3 estara encencida y la IN4 apagada a una velocidad de 125

        digitalWrite(IN3,HIGH);
        digitalWrite(IN4,LOW);
        analogWrite(ENB,125);
        break;     
// En el caso 1 en cambio llamamos los metodos avanzarA() y avanzarB()
      case 1:
        avanzarA();
        avanzarB();
        break;      
// En el caso 2 dirección tomara un número aleatorio con la función random
// Que sera entre (0 y2)

      case 2:
        direccion = random(2);
// si es igual a 0
        if (direccion==0) {
//lama al metodo retroDerecha()
          retroDerecha();}
// sino retroIzquierda
        else {
          retroIzquierda();}
        break;}
}

// Método avanzarA
void avanzarA() {
// Entradas para el motor Izquierdo una estar encendida y otra apagada
// a una velocidad de 255
    digitalWrite(IN1,LOW);

    digitalWrite(IN2,HIGH);
    analogWrite(ENA,255);
  }

// Método avanzarB las entradas del motor derecho estara una encendida
//y la otra apagada a una velocidad de 125

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

// Método retroDerecha()
// Las entradas del motor izquierdo estaran una apagada y la otra encendida

void retroDerecha() {
    digitalWrite(IN1,LOW);
    digitalWrite(IN2,HIGH);
    analogWrite(ENA,255);
// las entradas del motor derecho tambien tomara el mismo estado
// para girar a la derecha
// esperan un tiempo de 5 segundos

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

// Método para retroIzquierda
// Las entradas del motor izquierdo estan una encendida y
// otra apagada a una velocidad de 255

void retroIzquierda() {
    digitalWrite(IN1,HIGH);
    digitalWrite(IN2,LOW);
    analogWrite(ENA,255);
// y para el motor derecho también se enciende una entrada
// y se apaga la otra y el motor girara a una velocidad de 125
// espera un tiempo de 5 segundos

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

// Método apagar donde se apaga las entradas de los dos motores DC
void apagar() {
  analogWrite(ENA,0);
  analogWrite(ENB,0);
  }


IMAGENES: 
Imágenes del prototipo terminado con los sensores de distancia y los motores DC.
 
 


 AUDIO:


VIDEO:

 

0 comentarios:

Publicar un comentario