Introducción:
En el siguiente tutorial se les presentará el funcionamiento de un servomotor controlado a través de la señal de un sensor de ultrasonido, además, utilizando una pantalla OLED 128×32 se visualizarán los valores de distancia medida por el sensor, y también respecto a la distancia, el ángulo del Servomotor.
Elementos utilizados:
– Protoboard Mediana
– Arduino UNO y cable (USB del PC al puerto de Arduino)
– Sensor de Ultrasonido
– Servomotor 180° no continuo
– Pantalla OLED 128×32 I2C 0.91″ SSD1306
Conexiones, por partes:
Servomotor
– Pin «Power» de Servomotor (Rojo) a 5V de Arduino
– Pin «Ground» de Servomotor (Café) a GND de Arduino
– Pin «Signal» del Servomotor (Naranja) a Pin 9 de Arduino
Pantalla OLED
– Pin VCC de Pantalla OLED a 5V de Arduino
– Pin GND de Pantalla OLED a GND de Arduino
– Pin SDA de Pantalla OLED a A4 de Arduino
– Pin SCL de Pantalla OLED a A5 de Arduino
Sensor de Ultrasonido
Un sensor de ultrasonido es un componente que emite una onda y calcula la distancia basándose en el retorno de esta onda, se puede saber otras funciones o aplicaciones si profundizamos más en el tema viendo el siguiente tutorial.
(Tutorial Sensor Ultrasónico)
– Pin VCC de Sensor Ultrasónico a 5V de Arduino
– Pin Trig de Sensor Ultrasónico a Pin 2 de Arduino
– Pin Echo de Sensor Ultrasónico a Pin 3 de Arduino
– Pin GND de Sensor Ultrasónico a GND de Arduino
Conexión completa de los componentes:
Código
Descargar Servo.Ultrasónico.Pantalla.ino
Código, explicación en partes
#include <U8g2lib.h>
#include <Servo.h>
- Incluye las librerías necesarias para el manejo de la pantalla OLED (U8g2lib) y el servo (Servo).
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
Servo miServo;
- Crea un objeto u8g2 para la pantalla OLED utilizando la resolución 128×64 y el protocolo I2C.
- Crea un objeto miServo para el control del servo.
const int pinTrig = 2; // Pin de trig del sensor de ultrasonido
const int pinEcho = 3; // Pin de echo del sensor de ultrasonido
- Define constantes para los pines del sensor de ultrasonido.
void setup() {
Serial.begin(9600);
u8g2.begin();
miServo.attach(9); // Pin de control del servo
pinMode(pinTrig, OUTPUT);
pinMode(pinEcho, INPUT);
}
- En la función setup(), inicia la comunicación serial, la pantalla OLED y asocia el servo al pin 9.
- Configura los pines del sensor de ultrasonido como salida y entrada.
void loop() {
long duracion, distancia;
- La función loop() inicia el bucle principal y declara variables para almacenar la duración del pulso y la distancia medida.
// Generar pulso ultrasónico
digitalWrite(pinTrig, LOW);
delayMicroseconds(2);
digitalWrite(pinTrig, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrig, LOW);
- Envía un pulso ultrasónico desde el pin Trig para activar el sensor de ultrasonido.
// Calcular distancia
duracion = pulseIn(pinEcho, HIGH);
distancia = (duracion / 2) / 29.1;
- Mide la duración del eco del pulso ultrasónico en el pin Echo y calcula la distancia en centímetros.
// Mapear la distancia directamente al rango de ángulos del servo (0 a 180 grados)
int anguloServo = map(distancia, 0, 40, 0, 180);
// Ajustar el ángulo del servomotor
miServo.write(anguloServo);
- Mapea la distancia medida al rango de ángulos del servo (0 a 180 grados) y ajusta el ángulo del servo.
// Mostrar información en la pantalla OLED
u8g2.firstPage();
do {
// Utiliza una fuente razonable y centrada
u8g2.setFont(u8g2_font_t0_11_tf);
// Limpiar pantalla
u8g2.clearBuffer();
// Parte superior de la pantalla
u8g2.setCursor(5, 20);
u8g2.print("Mechatronics");
// Centro de la pantalla
u8g2.setCursor(5, 40);
u8g2.print("Distancia: ");
u8g2.print(distancia);
u8g2.print(" cm");
// Parte inferior de la pantalla
u8g2.setCursor(5, 60);
u8g2.print("Angulo: ");
u8g2.print(anguloServo);
u8g2.print(" grados");
// Enviar a la pantalla
u8g2.sendBuffer();
} while (u8g2.nextPage());
- Configura la pantalla OLED y muestra información sobre la distancia y el ángulo en diferentes partes de la pantalla.
delay(70);
}
- Introduce un retraso de 70 milisegundos antes de repetir el bucle para estabilizar la visualización y evitar actualizaciones demasiado rápidas.
En el siguiente video se comprueba el correcto funcionamiento del circuito, además de visualizar de forma óptima los resultados:
Conclusión
En resumen, este tutorial destaca la integración de un servomotor, sensor ultrasónico y pantalla OLED con claras instrucciones y código. Proporciona una solución efectiva para controlar el servomotor según la distancia medida, con resultados visualizados en tiempo real en la pantalla. El video demostrativo valida la funcionalidad eficiente de esta configuración.
pero el servomotor debe estar alimentado en vcc y gnd en una externa para que funcione ?????