ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Declaración de variables y definición de constantes

Hdu21838VcTrabajo1 de Julio de 2025

1.356 Palabras (6 Páginas)22 Visitas

Página 1 de 6

Declaración de Variables y Definición de Constantes

Variables

cpp

Copiar código

byte SD = 27;

byte SC = 29;

byte SI = 31;

byte Derecha, centro, izquierda;

byte PinEcoA = 3;

byte PinDisparoA = 2;

byte PinDisparoT = 13;

byte PinEcoT = 4;

long tiempoMs;

int distA;

int distT;

  • SD,: Representan los pines del Arduino a los que están conectados los sensores de línea. SD es el sensor derecho, SC es el sensor central, e SI es el sensor izquierdo.
  • Derecha, centro, izquierda: Variables que almacenarán los valores leídos de los sensores de línea.
  • PinEcoA, PinDisparoA, PinDisparoT, PinEcoT: Pines conectados a los sensores de ultrasonido. PinEcoA y PinEcoT reciben la señal de eco, mientras que PinDisparoA y PinDisparoT envían la señal de disparo.
  • tiempoMs: Almacena el tiempo medido por el sensor de ultrasonido.
  • distA, distT: Almacenan las distancias calculadas a partir de las mediciones de los sensores de ultrasonido.

Constantes

cpp

Copiar código

#define linea 0

#define nolinea 1

#define m1r 12

#define m1a 11

#define m2r 10

#define m2a 9

#define m3r 8

#define m3a 7

#define m4r 6

#define m4a 5

  • linea y nolinea: Representan los estados de los sensores de línea. linea indica que se detecta una línea (valor 0), mientras que nolinea indica que no se detecta una línea (valor 1).
  • m1r, m1a, m2r, m2a, m3r, m3a, m4r, m4a: Pines conectados a los motores del robot. Cada motor tiene dos pines: uno para avanzar (anterior, a) y otro para retroceder (retroceso, r).

2. Función setup()

La función setup() se ejecuta una vez al inicio del programa para configurar los pines y preparar los componentes para su uso.

cpp

Copiar código

void setup() {

  pinMode(SD, INPUT);

  pinMode(SC, INPUT);

  pinMode(SI, INPUT);

  pinMode(PinEcoA, INPUT);

  pinMode(PinDisparoA, OUTPUT);

  pinMode(PinEcoT, INPUT);

  pinMode(PinDisparoT, OUTPUT);

}

  • pinMode(SD, INPUT), pinMode(SC, INPUT), pinMode(SI, INPUT): Configuran los pines de los sensores de línea (SD, SC, SI) como entradas, ya que el Arduino leerá su estado.
  • pinMode(PinEcoA, INPUT), pinMode(PinEcoT, INPUT): Configuran los pines de eco de los sensores de ultrasonido como entradas para recibir las señales de eco.
  • pinMode(PinDisparoA, OUTPUT), pinMode(PinDisparoT, OUTPUT): Configuran los pines de disparo de los sensores de ultrasonido como salidas para enviar las señales de disparo.

3. Función loop()

La función loop() se ejecuta repetidamente, ejecutando la lógica principal del programa. Aquí se leen los sensores, se calculan distancias, y se toman decisiones para mover el robot.

Lectura de Sensores

cpp

Copiar código

void loop() {

  Derecha = digitalRead(SD);

  centro = digitalRead(SC);

  izquierda = digitalRead(SI);

  • Derecha = digitalRead(SD), centro = digitalRead(SC), izquierda = digitalRead(SI): Lee los valores de los sensores de línea y los almacena en las variables correspondientes. digitalRead() devuelve HIGH (1) o LOW (0).

Medición de Distancia

cpp

Copiar código

  IniciarDisparo();

  tiempoMs = pulseIn(PinEcoA, HIGH);

  distA = tiempoMs * 0.01715;

  tiempoMs = pulseIn(PinEcoT, HIGH);

  distT = tiempoMs * 0.01715;

  • IniciarDisparo(): Llama a una función para enviar una señal de disparo a los sensores de ultrasonido.
  • tiempoMs = pulseIn(PinEcoA, HIGH): Mide el tiempo que tarda en llegar la señal de eco en microsegundos para el sensor A.
  • distA = tiempoMs * 0.01715: Calcula la distancia en centímetros usando el tiempo medido. El factor 0.01715 convierte el tiempo en distancia.
  • tiempoMs = pulseIn(PinEcoT, HIGH), distT = tiempoMs * 0.01715: Realiza el mismo proceso para el sensor T.

Lógica de Movimiento

La lógica de movimiento del robot se basa en las distancias medidas y los estados de los sensores de línea. Dependiendo de estas condiciones, el robot puede avanzar, girar o retroceder. A continuación, se detallan algunos bloques de esta lógica.

Condición General

  if (distA >= 105 && distT >= 105) {

    if (Derecha == nolinea && centro == linea && izquierda == nolinea) {

      adelante(120);

    }

    // Otras condiciones...

  }

  • if (distA >= 105 && distT >= 105): Esta condición se verifica si ambas distancias medidas son mayores o iguales a 105 cm.
  • if (Derecha == nolinea && centro == linea && izquierda == nolinea): Si el sensor derecho e izquierdo no detectan línea y el sensor central sí lo hace, se llama a adelante(120) para mover el robot hacia adelante a una velocidad de 120.

Más Condiciones

Cada bloque if verifica diferentes combinaciones de distancias y estados de sensores de línea para tomar decisiones de movimiento. Aquí hay algunos ejemplos:

cpp

Copiar código

  if (distA >= 105 && 50 < distT < 105) {

    if (Derecha == nolinea && centro == linea && izquierda == nolinea) {

      adelante(135);

    }

    // Otras condiciones...

  }

  if (distA >= 105 && distT <= 50) {

    if (Derecha == nolinea && centro == linea && izquierda == nolinea) {

      adelante(150);

    }

    // Otras condiciones...

  }

  • Cada bloque de condiciones sigue una estructura similar: primero verifica las distancias (distA, distT) y luego los estados de los sensores (Derecha, centro, izquierda).
  • Dependiendo de estas condiciones, llama a funciones específicas para mover el robot (adelante(), vueltaderecha(), vueltaizquierda(), reversa()), con diferentes velocidades.

Funciones de Movimiento

Estas funciones controlan los motores del robot para realizar diferentes movimientos.

Mover Adelante

cpp

Copiar código

void adelante(byte vel) {

  analogWrite(m1r, 0);

  analogWrite(m2r, 0);

  analogWrite(m3r, 0);

  analogWrite(m4r, 0);

  analogWrite(m1a, vel);

  analogWrite(m2a, vel);

  analogWrite(m3a, vel);

...

Descargar como (para miembros actualizados) txt (10 Kb) pdf (113 Kb) docx (195 Kb)
Leer 5 páginas más »
Disponible sólo en Clubensayos.com