PUERTA CORREDIZA CON SENSOR ULTRASONICO HC - SR04
FUNCIONAMIENTO
El sensor ultrasnico, mide y detecta la distancia de un objeto, para que el micro, por medio
de un cdigo, pueda interpretar las mediciones registradas. El rango de medicin del sensor
est entre los 2cm y los 500cm; con un margen de error de 0.3cm. la duracin del pulso,
entre entrada y salida, es de 10 microsegundos.
La frmula para medir las distancias del sensor, es la siguiente: Distancia = (Duracin / 2)
/29
Se coloca entre 29, debido a que la velocidad del sonido en centmetros (ya que el sensor
trabaja en centmetros) es de: 1/29 cm/uS.
El proceso de trabajo del circuito, es el siguiente:
Cuando se acerca un objeto al sensor (entre 3 y seis centmetros), el motor comienza a
trabajar, halando la puerta hacia un lado, abriendo la puerta.
Cuando el objeto es retirado del sensor, el motor se detiene.
Cuando el objeto se aleja, a una cierta distancia (entre 8 y doce centmetros), por medio del
circuito L29D, se invierte el giro del motor, para cerrar la puerta.
                                   PLANO DEL CIRCUITO
CDIGO DEL CIRCUITO
#define Pecho 6
#define Ptrig 7
#define enable 10
long duracion, distancia;
const int motorA = 8;
const int motorB = 9;
void setup() {
 Serial.begin (9600);
 pinMode(Pecho, INPUT);
 pinMode(Ptrig, OUTPUT);
 pinMode(motorA, OUTPUT);
 pinMode(motorB, OUTPUT);
 pinMode (enable, OUTPUT);
 }
void loop() {
 digitalWrite(Ptrig, LOW);
 delayMicroseconds(2);
 digitalWrite(Ptrig, HIGH); // genera el pulso de triger por 10ms
 delayMicroseconds(10);
 digitalWrite(Ptrig, LOW);
 digitalWrite(motorA, LOW);
 digitalWrite(motorB, LOW);
 duracion = pulseIn(Pecho, HIGH);
 distancia = (duracion/2) / 29;   // calcula la distancia en centimetros
 if (distancia >12 || distancia <= 1){ // si la distancia es mayor a 500cm o menor a 0cm
     digitalWrite(enable, LOW);
 }
 if (distancia <= 12 && distancia >= 8){
     digitalWrite(enable, HIGH);
     digitalWrite(motorA, HIGH);          //izquierda
     digitalWrite(motorB, LOW);
     delay(500);
 }
  if (distancia <=6 && distancia >= 3){
    digitalWrite(enable, HIGH);
    digitalWrite(motorA, LOW);
        digitalWrite(motorB, HIGH);     //derecha
        delay(500);
    }
}
SEGUNDO CDIGO (OPCIONAL)
#define Pecho 6
#define Ptrig 7
#define enable 10
long duracion, distancia;
const int motorA = 8;
const int motorB = 9;
void setup() {
 Serial.begin (9600);
 pinMode(Pecho, INPUT);
 pinMode(Ptrig, OUTPUT);
 pinMode(motorA, OUTPUT);
 pinMode(motorB, OUTPUT);
 pinMode (enable, OUTPUT);
 }
void loop() {
    digitalWrite(Ptrig, LOW);
    delayMicroseconds(2);
    digitalWrite(Ptrig, HIGH); // genera el pulso de triger por 10ms
    delayMicroseconds(10);
    digitalWrite(Ptrig, LOW);
    digitalWrite(motorA, LOW);
    digitalWrite(motorB, LOW);
    duracion = pulseIn(Pecho, HIGH);
    distancia = (duracion/2) / 29;   // calcula la distancia en centimetros
    if (distancia <= 1 || distancia >400){
        digitalWrite(enable, LOW);
    }
     if (distancia >9 && distancia <=400){
       digitalWrite(enable, HIGH);
        digitalWrite(motorA, LOW);
        digitalWrite(motorB, HIGH);      //derecha
        delay(1000);
    }
    if (distancia <=9 && distancia >=7){
      digitalWrite(enable, LOW);
    }
     if (distancia <=6 && distancia >= 3){
        digitalWrite(enable, HIGH);
        digitalWrite(motorA, HIGH);        //izquierda
        digitalWrite(motorB, LOW);
        delay(4500);
    }
}
La explicacin de este segundo cdigo es la siguiente: cuando un objeto es detectado por
el sensor a una distancia entre 3 y seis centmetros, el motor jala la puerta, para que esta
se abra. Luego retiramos el objeto de la vista del sensor, el motor queda detenido, pero
cuando el sensor ha calculado una distancia entre nueve y cuatrocientos centmetros, el
motor empuja a la puerta, para que esta quede cerrada.