Proyecto 6 

Sensor Ultrasonidos HC-SR04

Proyecto 6a

El sensor de ultrasonidos emite un eco y al recibirlo produce una señal analógica acorde con el tiempo que ha tardado en recibirlo.

Esto es, obtendremos valores enteros desde “0″ a “1023″ según la distancia al obstáculo.  

Mediante el monitor se podrán representar los valores obtenidos. La “entrada de información” será el sensor de ultrasonidos y como salida usaremos LEDs y un servo.

Usar 4 LEDs para representar distancias entre 0 y 20cm, es decir, si el obstáculo está entre los 0 y los 5cm, se enciende un LED, si está entre los 5 y los 10cm se encienden dos, y así hasta 20cm. Si pasa de 20cm, entonces los cuatro LEDs parpadearán.

Esquema

Sketch

#define echoPin 6

#define trigPin 7

 

float maximumRange = 20;

float minimumRange = 0;

long duration, distance, contador;

float aux;

 

void setup() {

 Serial.begin (9600);

 pinMode(trigPin, OUTPUT);

 pinMode(echoPin, INPUT);

 pinMode(9, OUTPUT);

 pinMode(10, OUTPUT);

 pinMode(11, OUTPUT);

 pinMode(12, OUTPUT);

}

 

void loop() {

 digitalWrite(trigPin, LOW);

 delayMicroseconds(2);

 digitalWrite(trigPin, HIGH);

 delayMicroseconds(10);

 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);

 distance = duration/58.2;

 Serial.println(distance);

 if (distance > maximumRange){

  Serial.println("OUT_OF_RANGE");

    for (int i = 9; i <= 12;i++){

    digitalWrite(i,HIGH);

    }

    delay(150);

    for (int i = 9; i <= 12;i++){

    digitalWrite(i,LOW);

    }

    delay(150);

 }

 else {

  aux = (1.0/maximumRange)*4.0*distance;

  contador = aux;

  contador = contador + 9;

  for (int i = 9; i <= contador; i++)

    digitalWrite(i,HIGH);

  for (int i = 12; i > contador; i--)

    digitalWrite(i,LOW);

 }

 delay(50);

}


Proyecto 6b

El ejercicio b consiste en hacer uso de un servo para representar la distancia en vez de los LEDs.

Esquema

Sketch

/*

 VCC a 5v

 GND a GND

 Echo al pin 6

 Trig al pin 7

*/

#include <Servo.h>

#define echoPin 6

#define trigPin 7

 

float maximumRange = 20;

float minimumRange = 0;

long duration, distance;

int dec=0;

Servo servo1;

 

void setup() {

 Serial.begin (9600);

 pinMode(trigPin, OUTPUT);

 pinMode(echoPin, INPUT);

 servo1.attach(3);

}

 

void loop() {

 digitalWrite(trigPin, LOW);

 delayMicroseconds(2);

 digitalWrite(trigPin, HIGH);

 delayMicroseconds(10);

 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);

 distance = duration/58.2;

 Serial.println(distance);

 if (distance > maximumRange ){

 Serial.println("maxRange");

 }

 else {

 dec= distance*5;

 servo1.write(dec);

 delay(30);

 }

}


Proyecto 6c

Representar la misma distancia (20cm) con 10 LEDs en lugar de 4.

Esquema

Sketch

#define echoPin 2

#define trigPin 3

 

float maximumRange = 20;

float minimumRange = 0;

long duration, distance, contador;

float aux;

 

void setup() {

 Serial.begin (9600);

 pinMode(trigPin, OUTPUT);

 pinMode(echoPin, INPUT);

 pinMode(4, OUTPUT);

 pinMode(5, OUTPUT);

 pinMode(6, OUTPUT);

 pinMode(7, OUTPUT);

 pinMode(8, OUTPUT);

 pinMode(9, OUTPUT);

 pinMode(10, OUTPUT);

 pinMode(11, OUTPUT);

 pinMode(12, OUTPUT);

 pinMode(13, OUTPUT);

}

 

void loop() {

 digitalWrite(trigPin, LOW);

 delayMicroseconds(2);

 digitalWrite(trigPin, HIGH);

 delayMicroseconds(10);

 digitalWrite(trigPin, LOW);

 duration = pulseIn(echoPin, HIGH);

 distance = duration/58.2;

 Serial.println(distance);

 if (distance > maximumRange){

  Serial.println("OUT_OF_RANGE");

    for (int i = 4; i <= 13; i++){

    digitalWrite(i,HIGH);

    }

    delay(150);

    for (int i = 4; i <= 13; i++){

    digitalWrite(i,LOW);

    }

    delay(150);

 }

 else {

  aux = (1.0/maximumRange)*10.0*distance;

  contador = aux;

  contador = contador + 4;

  for (int i = 4; i <= contador; i++)

    digitalWrite(i,HIGH);

  for (int i = 13; i > contador; i--)

    digitalWrite(i,LOW);

 }

 delay(50);

}