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);
}