Está en la página 1de 4

INSTITUTO TECNOLÓGICO DE VERACRUZ

ASIGNATURA:

Introducción a la Robótica Móvil

NOMBRE DE LA ACTIVIDAD:

Reporte de Practicas

ALUMNOS:

García Sánchez Juan Eduardo E19021216


García Zarate Christian Iram E19021218
Magaña Camacho Saul Andrej E19021255
Morales de Jesús Diego Fabian E19021772

CARRERA:

Ing. Mecatrónica

DOCENTE:

Miguel Angel Pérez Cabada

SEMESTRE:
AGOSTO – DICIEMBRE 2023

VERACRUZ, VER. A 05 DE ENERO DEL 2024


Practica #3.
Control de un servomotor mediante un sensor ultrasónico

Introducción

Este código, escrito en lenguaje C++ para la plataforma Arduino, utiliza un sensor ultrasónico
para medir la distancia a un objeto y controlar un servo motor en función de esa distancia. Se
emplea la biblioteca TaskScheduler para gestionar tareas periódicas y así medir la distancia
y controlar el servo motor en momentos específicos.

Desarrollo
El programa comienza definiendo los pines para el sensor ultrasónico (trigPin y echoPin) y
el servo motor (servoPin). Además, se establecen parámetros relacionados con el ancho de
pulso para el servo y el período del servo.

Se utiliza la biblioteca TaskScheduler para crear dos tareas periódicas (t1 y t2). La primera
tarea (t1) se encarga de medir la distancia utilizando el sensor ultrasónico y mostrar la
distancia en centímetros en el monitor serial. La segunda tarea (t2) convierte la distancia
medida en un valor de ancho de pulso para controlar el servo motor y luego activa el servo
motor con ese ancho de pulso.

El bucle principal (loop()) simplemente ejecuta las tareas programadas a través de la


biblioteca TaskScheduler.

Código:

#include <TaskScheduler.h>

const int trigPin = 5;


const int echoPin = 18;
const int servoPin = 23;

const int minPulseWidth = 500; // Ancho de pulso mínimo en microsegundos


const int maxPulseWidth = 2400; // Ancho de pulso máximo en microsegundos
const int servoPeriod = 20000; // Período del servo en microsegundos (20 ms)

#define SOUND_SPEED 0.034


#define CM_TO_INCH 0.393701

long duracion;
float distanciaCm;
void t1Callback(){

digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);

duracion = pulseIn(echoPin, HIGH);


distanciaCm = duracion * SOUND_SPEED/2;

Serial.print("Distancia (cm): ");


Serial.println(distanciaCm);
}

void t2Callback(){

int mov;
mov=map(distanciaCm,0, 40, 700, 2300);
Serial.println(mov);
if((mov>=700) && (mov<=2300)){
digitalWrite(servoPin, HIGH);
delayMicroseconds(mov);
digitalWrite(servoPin, LOW);
delayMicroseconds(25000);
}
}

Task t1(0, TASK_FOREVER, &t1Callback);


Task t2(0, TASK_FOREVER, &t2Callback);

Scheduler runner;

void setup() {
Serial.begin(115200);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(servoPin, OUTPUT);
runner.init();
runner.addTask(t1);
runner.addTask(t2);
delay(5000);
t1.enable();
t2.enable();
}

void loop() {
runner.execute();
}
Resultados

El código permite medir la distancia utilizando un sensor ultrasónico y controlar un servo


motor en función de esa distancia. Mientras que la tarea t1 mide la distancia y la muestra en
el monitor serial, la tarea t2 convierte la distancia medida en un valor de ancho de pulso para
controlar el servo motor.

Conclusión

Este código demuestra una aplicación básica de control de un servo motor en respuesta a la
medición de distancia utilizando un sensor ultrasónico. Puede ser utilizado como base para
proyectos que requieren interacciones basadas en la distancia medida, como un sistema de
aparcamiento automático o un robot que evite obstáculos.

También podría gustarte