Simulacion De Porton

by johancass95 in Circuits > Arduino

96 Views, 1 Favorites, 0 Comments

Simulacion De Porton

CapportonArdPP.png
CapportonArd.png
digrama conexiones.png

Este proyecto, aunque básico, sienta las bases para comprender el funcionamiento de sistemas más complejos. Además, ¡imagina las posibilidades de ampliación! Podrías agregar sensores de proximidad, control remoto o incluso integrar esta funcionalidad en un sistema domótico más grande.

Imagina tener el control de un portón automatizado con un simple código en Arduino. Este código simula la operación de un portón utilizando un motor DC y finales de carrera para detectar los límites de apertura y cierre. Además, emplea un botón para iniciar su movimiento.

Escenario real del Proyecto:

Imagina un portón que se abre y cierra de forma autónoma, con la capacidad de detectar cuándo alcanza sus extremos. Este proyecto te permite crear esta experiencia mediante un sencillo código en Arduino.

Supplies

imagen_2023-12-28_223426231.png


Codigo Comentado

// Definición de pines y constantes
#define DCHA_PIN 3 // Pin 3 de Arduino como entrada PWM (derecha)
#define IZDA_PIN 5 // Pin 5 de Arduino como entrada inversa PWM (izquierda)
#define POT_FinalC1 6 // Entrada analógica del primer final de carrera
#define POT_FinalC2 7 // Entrada analógica del segundo final de carrera
#define Btn_Star 10 // Pin 10 de Arduino para el botón de inicio

// Variables para control
bool motorMoviendo = false; // Estado del motor (movimiento o no)
bool finalDerActivado = false; // Estado del final de carrera derecho
bool finalIzqActivado = false; // Estado del final de carrera izquierdo

void setup() {
Serial.begin(9600);
pinMode(POT_FinalC1, INPUT_PULLUP); // Configura el pin del primer final de carrera como entrada con resistencia pull-up
pinMode(POT_FinalC2, INPUT_PULLUP); // Configura el pin del segundo final de carrera como entrada con resistencia pull-up
pinMode(Btn_Star, INPUT_PULLUP); // Configura el pin del botón como entrada con resistencia pull-up
pinMode(DCHA_PIN, OUTPUT); // Configura el pin de dirección derecha como salida
pinMode(IZDA_PIN, OUTPUT); // Configura el pin de dirección izquierda como salida
Para(); // Llama a la función Para() para asegurar que el motor esté detenido al inicio
}

void loop() {
// Si se pulsa el botón y el motor no está en movimiento
if (digitalRead(Btn_Star) == LOW && !motorMoviendo) {
Serial.println("Botón presionado");

// Verificar el estado de los finales de carrera
finalDerActivado = digitalRead(POT_FinalC1); // Lee el estado del primer final de carrera
finalIzqActivado = digitalRead(POT_FinalC2); // Lee el estado del segundo final de carrera

// Si se alcanza el final de carrera derecho, detener el motor
if (!finalDerActivado) {
Serial.println("Final de carrera izquierda alcanzado");
Izquierda(); // Llama a la función Izquierda()
}

// Si se alcanza el final de carrera izquierdo, detener el motor
if (!finalIzqActivado) {
Serial.println("Final de carrera derecha alcanzado");
Derecha(); // Llama a la función Derecha()
}
} else {
// Si el motor está en movimiento
if (motorMoviendo) {
// Espera hasta que ambos finales de carrera se desactiven para detener el motor
while (digitalRead(POT_FinalC1) and digitalRead(POT_FinalC2)) {
}
Para(); // Llama a la función Para() para detener el motor
}
}
}

// Función para mover el motor hacia la derecha
void Derecha() {
motorMoviendo = true;
digitalWrite(DCHA_PIN, HIGH); // Activa el pin de dirección derecha
digitalWrite(IZDA_PIN, LOW); // Desactiva el pin de dirección izquierda
delay(200); // Espera 200 milisegundos
}

// Función para mover el motor hacia la izquierda
void Izquierda() {
motorMoviendo = true;
digitalWrite(DCHA_PIN, LOW); // Desactiva el pin de dirección derecha
digitalWrite(IZDA_PIN, HIGH); // Activa el pin de dirección izquierda
delay(200); // Espera 200 milisegundos
}

// Función para detener el motor
void Para() {
motorMoviendo = false;
digitalWrite(DCHA_PIN, LOW); // Desactiva el pin de dirección derecha
digitalWrite(IZDA_PIN, LOW); // Desactiva el pin de dirección izquierda
delay(200); // Espera 200 milisegundos
}

Descripción General de la programacion:

Este código simula el funcionamiento de un portón utilizando un motor DC y dos finales de carrera para detectar los límites de apertura y cierre. Se usa un botón para activar el movimiento del portón. Los pines usados son:

  • DCHA_PIN: Pin para controlar la dirección del motor hacia la derecha.
  • IZDA_PIN: Pin para controlar la dirección del motor hacia la izquierda.
  • POT_FinalC1 y POT_FinalC2: Pines para leer los estados de los finales de carrera.
  • Btn_Star: Pin del botón para activar el movimiento del portón.

Listado de Pines:

Entradas:

  • POT_FinalC1 (pin 6): Final de carrera 1
  • POT_FinalC2 (pin 7): Final de carrera 2
  • Btn_Star (pin 10): Botón de inicio

Salidas:

  • DCHA_PIN (pin 3): Control de dirección hacia la derecha del motor
  • IZDA_PIN (pin 5): Control de dirección hacia la izquierda del motor

Explicación Detallada de las Funciones:

setup():

  • Descripción: Configuración inicial de los pines y estados iniciales.
  • Acciones:Inicia la comunicación serial a 9600 baudios para la depuración.
  • Configura los pines POT_FinalC1 y POT_FinalC2 como entradas con pull-up.
  • Configura el pin Btn_Star como entrada con pull-up.
  • Configura los pines DCHA_PIN y IZDA_PIN como salidas.
  • Llama a la función Para() para asegurarse de que el motor esté detenido al inicio.

loop():

  • Descripción: Bucle principal que verifica la acción del botón y los finales de carrera.
  • Acciones:Verifica si se pulsa el botón Btn_Star y si el motor no está en movimiento.
  • Lee el estado de los finales de carrera POT_FinalC1 y POT_FinalC2.
  • Si se alcanza un final de carrera, se detiene el motor hacia esa dirección.
  • Si el motor está en movimiento y ambos finales de carrera están activados, se detiene el motor.

Derecha():

  • Descripción: Gira el motor hacia la derecha.
  • Acciones:Activa el movimiento del motor hacia la derecha (ajustando los pines correspondientes).
  • Hace una pausa de 200 milisegundos.

Izqierda():

  • Descripción: Gira el motor hacia la izquierda.
  • Acciones:Activa el movimiento del motor hacia la izquierda (ajustando los pines correspondientes).
  • Hace una pausa de 200 milisegundos.

Para():

  • Descripción: Detiene el motor.
  • Acciones:Desactiva ambos pines de control del motor.
  • Hace una pausa de 200 milisegundos para asegurar la detención del motor.

FK0LQ76LQP7WMYW.png

Si el proyecto se desarrolló en Proteus debido a la falta de disponibilidad del driver o componente específico en el simulador TinkerCAD, es una situación común y comprensible.

Proteus es una herramienta poderosa que permite simular circuitos electrónicos y sistemas, ofreciendo una amplia gama de componentes electrónicos y microcontroladores para construir y probar proyectos. En este caso, si el driver necesario para el proyecto no estaba disponible en TinkerCAD pero sí lo estaba en Proteus, se optó por desarrollar y simular el proyecto en esta plataforma.

La decisión de usar Proteus puede provenir de varias razones, como la necesidad de un componente específico, una mayor precisión en la simulación o la disponibilidad de características avanzadas de simulación que no están presentes en otros entornos.

Al migrar el proyecto a Proteus, se pudo haber logrado una representación más precisa del sistema y su funcionamiento, permitiendo probar y validar el proyecto de manera virtual antes de implementarlo físicamente. Esta aproximación es beneficiosa para detectar posibles errores o problemas antes de la implementación real.

Aunque las herramientas de simulación varíen en términos de componentes disponibles y capacidades, la idea es que la esencia del proyecto y su lógica se mantienen consistentes independientemente de la plataforma utilizada para la simulación.