Probador_Valvulas_IAC — Arduino Uno simulation

Motor DC o Motor de pasos

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by albertoarangurenp.

Components

Sketch code

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// --- Dirección I2C del LCD ---
LiquidCrystal_I2C lcd(0x27, 16, 2);

// --- Asignación de Pines (Panel de 5 Botones) ---
const int btnUp        = 2;  // Incrementar (+)
const int btnDown      = 3;  // Decrementar (-)
const int btnModo      = 4;  // Cambiar Modo / Menú
const int btnFreqVel   = 8;  // Frecuencia / Velocidad
const int btnAutoSweep = 11; // Auto-Sweep (Barrido Automático)

// --- Pines de Potencia ---
const int pinSTEP = 5; // A4988 STEP
const int pinDIR  = 6; // A4988 DIR
const int pinEN   = 7; // A4988 ENABLE

const int pinPWM_Apertura = 9;  // MOSFET 1 / BTS7960 (Timer 1 - Canal A) -> OUT-A / LED Amarillo
const int pinPWM_Cierre   = 10; // MOSFET 2 / BTS7960 (Timer 1 - Canal B) -> OUT-B / LED Rojo

// --- Variables de Estado y Menú ---
int modoActual = 0; // 0: Menú, 1: IAC 4P, 2: IAC 3P, 3: IAC 2P
int opcionMenu = 0; // 0: IAC 4P | 1: IAC 3P | 2: IAC 2P

// Parámetros IAC 4 Pines
int retardoPaso4P = 2000; // 4000us (Lento), 2000us (Medio), 1000us (Rápido)
int indiceVel4P = 1;      // 0: Lento, 1: Medio, 2: Rápido
const char* nombresVel4P[] = {"Lent", "Med ", "Ráp "};

// Parámetros IAC 3P y 2P (PWM)
int porcentajePWM = 50;  // 0% a 100%
int indiceFreqPWM = 1;   // 0: 100Hz, 1: 150Hz, 2: 200Hz, 3: 300Hz
const int freqsPWM[] = {100, 150, 200, 300};

// Variables Auto-Sweep
bool enAutoSweep = false;
int sweepDir = 1; // 1: Incrementando, -1: Decrementando
unsigned long ultimoPasoSweep = 0;

// Declaración previa de funciones
void apagarSalidas();
void configurarTimer1_PWM(int frecuenciaHz);
void mostrarPantalla();
void ejecutarSweep4P();
void ejecutarSweepPWM();
void darPasoA4988();
void actualizarPWM();
void actualizarLineaPWM();

void setup() {
  pinMode(btnUp, INPUT_PULLUP);
  pinMode(btnDown, INPUT_PULLUP);
  pinMode(btnModo, INPUT_PULLUP);
  pinMode(btnFreqVel, INPUT_PULLUP);
  pinMode(btnAutoSweep, INPUT_PULLUP);

  pinMode(pinSTEP, OUTPUT);
  pinMode(pinDIR, OUTPUT);
  pinMode(pinEN, OUTPUT);

  pinMode(pinPWM_Apertura, OUTPUT);
  pinMode(pinPWM_Cierre, OUTPUT);

  apagarSalidas();

  lcd.init();
  lcd.backlight();
  configurarTimer1_PWM(freqsPWM[indiceFreqPWM]); // Frecuencia por defecto 150Hz
  mostrarPantalla();
}

void loop() {
  // =========================================================
  // 1. LECTURA DEL BOTÓN DE MODO / MENÚ
  // =========================================================
  if (digitalRead(btnModo) == LOW) {
    delay(180);
    enAutoSweep = false;

    if (modoActual == 0) {
      modoActual = opcionMenu + 1; // 1: 4P, 2: 3P, 3: 2P
      if (modoActual == 1) {
        digitalWrite(pinEN, LOW); // Habilitar A4988
      } else {
        porcentajePWM = 50;
        actualizarPWM();
      }
    } else {
      apagarSalidas();
      modoActual = 0;
    }

    mostrarPantalla();
    while (digitalRead(btnModo) == LOW);
  }

  // =========================================================
  // 2. LECTURA DEL BOTÓN FREQ / VEL
  // ==============================

More projects by albertoarangurenp