2018/02/12

Distancias con sensor de ultrasonidos HC-SR04

El sensor de ultrasonidos HC-SR04 se utiliza mucho en robótica por su facilidad de conexión a la placa. Solo tenemos que alimentarlo (VCC a 5v con el cable rojo y GND a tierra con el cable negro). Para controlarlo tiene otras dos patillas (Trigger y Echo) que conectamos a dos pines digitales, por ejemplo: Trigger al pin 4 y Echo al pin 2.

Funciona lanzando un pulso de sonido de alta frecuencia (Trigger) y escuchando el rebote de ese mismo eco (Echo). En función del tiempo que tarde el sonido en rebotar en un objeto y volver al sensor podemos determinar la distancia al objeto en cuestión. Según las especificaciones tiene un rango de medidas que va desde un mínimo de 2 centímetros hasta un máximo de 4 metros.


Este es el código que tenemos que cargar en nuestra placa:
const int trigger = 4;
const int echo = 3;

void setup() {
  Serial.begin(9600);
  pinMode(trigger, OUTPUT); 
  pinMode(echo, INPUT);
  digitalWrite(trigger, LOW);
}

void loop(){
  long t;
  long d;
  
  digitalWrite(trigger, LOW);
  delayMicroseconds(4);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  
  t = pulseIn(echo, HIGH);
  d = t/59;

  Serial.print("Distancia: ");
  Serial.print(d);
  Serial.print("cm");
  Serial.println();
  delay(100);
}

Servomotor

Un servomotor (también llamado servo) es un dispositivo similar a un motor DC (de corriente continua) que tiene la capacidad de situarse y mantenerse en cualquier ángulo dentro de su rango de giro (normalmente entre 0 y 180 grados). Está compuesto por un pequeño motor DC, con un sistema de engranajes que le proporcionan una potente reductora, más un controlador electrónico. También existen servos de rotación continua, es decir que pueden comportarse como un motor DC normal con mucha reductora. Estas características, junto con la facilidad de conexión y programación, hacen de este dispositivo uno de los sistemas más usados en robótica para producir movimiento.

Para controlar un servo con Arduino solo tenemos que alimentarlo y conectar el cable amarillo a una salida digital con PWM. Si tenemos la placa conectada al ordenador por USB podemos alimentar el servo directamente desde la placa (cable rojo a 5v y cable negro a GND):


Si la placa Arduino no está conectada al ordenador tenemos que alimentar el servo con una pila externa (aparte de la alimentación que tenga la placa):


Este es el código que tenemos que cargar en nuestra placa:
#include <Servo.h> //Incluímos la librería Servo.h
Servo servoMotor; //Declaramos la variable servoMotor

void setup() {
  servoMotor.attach(5); //Conectamos el servo al pin 5
}

void loop() {
  servoMotor.write(0); //Desplazamos a la posición 0º
  delay(1000); //Esperamos 1 segundo
  servoMotor.write(180); // Desplazamos a la posición 180º
  delay(1000); // Esperamos 1 segundo
}