Contador de vueltas

Hola! cree un contador de vueltas para una maquina bobinadora de motores, pero me gustaria agregarle un pulsador y que resete el contador, tambien que llegado a una x cantidad de vueltas me haga sonar una alarma es posible? podrian ayudarme? Gracias! comparto el codigo

#include <LiquidCrystal_I2C.h>
int led = 6;
int pinIN = 7;  // Crea Variable pinIN y la asocia al pin digital 7    
int valorIN = 0;  // Crea Variables con un valor inicial asociado
int contenido = 0; 
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
  pinMode(pinIN, INPUT); // Define el Puerto 7 como Entrada
  lcd.init();
  lcd.backlight();
  lcd.clear();
  
  lcd.setCursor(1,0);  // Seteamos la ubicacion del texto 1, linea 0 que sera escrita sobre el LCD             
  lcd.print("CUENTA VUELTAS ");  // Imprime "CUENTA OBJETOS" sobre el LCD
  lcd.setCursor(2,1);            
  lcd.print("CANTIDAD: "); 
  
}

void loop()
{
   valorIN=digitalRead(pinIN);  // Realiza la lectura Digital del pin 7
  if(valorIN!=1)  // Si la lectura es 1 incremente el valor de contenido
  {
    contenido++; 
    while(digitalRead(pinIN)!=1) {
        delay(100);     // Realiza un Delay para estabilizar
      }
    lcd.setCursor(12,1);  // Ubicamos el cursor en la posicion 12 sobre la linea 1
    lcd.print(contenido);  // Imprimimos el valor del contenido sobre dicha ubicacion
                 
}
  }

¡Hola! Claro, puedo ayudarte a mejorar tu contador de vueltas para la máquina bobinadora de motores. Para agregar un pulsador y una alarma, necesitaremos hacer algunas modificaciones en tu código.

Primero, asegurémonos de que tengas un pulsador conectado correctamente a tu Arduino. Luego, podemos implementar las siguientes funcionalidades:

  1. Resetear el contador con un pulsador:
  • Cuando se presione el pulsador, restableceremos el contador a cero.
  • Para hacer esto, necesitamos detectar cuándo se presiona el pulsador y luego reiniciar la variable contenido.
  1. Activar una alarma después de cierta cantidad de vueltas:
  • Definiremos un valor umbral (por ejemplo, 10 vueltas).
  • Cuando el contador alcance ese valor, activaremos una alarma para indicar que se ha alcanzado la cantidad deseada de vueltas.

Aquí está el código modificado con estas funcionalidades:

#include <LiquidCrystal_I2C.h>

int pinIN = 7;  // Pulsador conectado al pin digital 7
int valorIN = 0;
int contenido = 0;
int umbralVueltas = 10;  // Establece el umbral de vueltas para la alarma

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
  pinMode(pinIN, INPUT);
  lcd.init();
  lcd.backlight();
  lcd.clear();

  lcd.setCursor(1, 0);
  lcd.print("CUENTA VUELTAS");
  lcd.setCursor(2, 1);
  lcd.print("CANTIDAD: ");
}

void loop()
{
  valorIN = digitalRead(pinIN);

  if (valorIN != 1)
  {
    contenido++;
    while (digitalRead(pinIN) != 1)
    {
      delay(100);
    }
    lcd.setCursor(12, 1);
    lcd.print(contenido);

    // Verifica si se alcanzó el umbral de vueltas
    if (contenido >= umbralVueltas)
    {
      // Activa la alarma (puedes agregar aquí el código para hacer sonar una alarma)
      // Por ejemplo, puedes usar un zumbador o un LED parpadeante.
      // ¡No olvides implementar la lógica para detener la alarma cuando sea necesario!
    }
  }
}

¿Respuesta y código de chatgpt, verdad?

Conecta el pulsador donde está conectado el sensor de rotación.
Desapareció la conexión del LED en pin 6.
Difícilmente funcione como el PO quiere. :wink:

no te entendi amigo...

Estoy diciendo que el código de #2 no está bien, que no va a funcionar como quieres y que parece hecho por chatgpt.

Más allá de eso, la idea general está bien, debes resetear al variable contenido al pulsar el botón y activar la alarma cuando la variable alcance cierto valor.

Ya lo pude resolver con chatgpt, increible lo que hace la IA, les dejo el codigo

#include <LiquidCrystal_I2C.h>

int Infrarojo = 7;           // Pin del sensor infrarrojo
int BotonReset = 6;          // Pin del botón de reset
int LedParpadeo = 5;        // Pin del LED de parpadeo
int valorAnterior = HIGH;    // Valor anterior del sensor infrarrojo
int contenido = 0;           // Contador de vueltas
bool vueltasAlcanzadas = false; // Variable para indicar si se alcanzaron las vueltas
bool parpadeoActivado = false;  // Variable para indicar si el parpadeo está activado
int estadoLed = HIGH;  
LiquidCrystal_I2C lcd(0x27, 16, 2); // Inicialización del LCD

void setup() {
  pinMode(Infrarojo, INPUT);          // Sensor infrarrojo como entrada
  pinMode(BotonReset, INPUT_PULLUP);  // Pulsador como entrada con resistencia pull-up
  pinMode(LedParpadeo, OUTPUT);       // LED de parpadeo como salida
  
  lcd.init();                         // Inicialización del LCD
  lcd.backlight();                    // Enciende la retroiluminación
  lcd.clear();                        // Limpia la pantalla
  lcd.setCursor(1, 0);                // Establece la posición del cursor
  lcd.print("CUENTA VUELTAS ");       // Muestra el mensaje
  lcd.setCursor(2, 1);                // Establece la posición del cursor
  lcd.print("CANTIDAD: ");            // Muestra el mensaje
  digitalWrite(LedParpadeo, HIGH);
}

void loop() {
  int valorActual = digitalRead(Infrarojo); // Lee el sensor infrarrojo
  if (valorActual == LOW && valorAnterior == HIGH) { // Si el sensor pasa de alto a bajo (detecta un objeto)
    contenido++;                     // Incrementa el contador
    lcd.setCursor(12, 1);            // Establece la posición del cursor
    lcd.print(contenido);            // Muestra el contador
    
    if (contenido >= 50 && !vueltasAlcanzadas) { // Si el contador alcanza 10 vueltas y no se han alcanzado las vueltas antes
      vueltasAlcanzadas = true;      // Indica que se alcanzaron las vueltas
      parpadeoActivado = true;       // Activa el parpadeo del LED
    }
  }
  valorAnterior = valorActual;       // Actualiza el valor anterior del sensor

  if (parpadeoActivado) {                   // Si se activa el parpadeo
    parpadearLed();                         // Activa el parpadeo del LED
  }

  if (digitalRead(BotonReset) == LOW) {    // Si se presiona el botón de reset
    contenido = 0;                         // Resetea el contador
    lcd.setCursor(12, 1);                 // Establece la posición del cursor
    lcd.print("  ");                       // Borra el contenido del contador
    lcd.setCursor(12, 1);                 // Establece la posición del cursor
    lcd.print(contenido);                 // Muestra el contador reseteado
    vueltasAlcanzadas = false;            // Reinicia la variable de vueltas alcanzadas
    parpadeoActivado = false;             // Desactiva el parpadeo del LED
    digitalWrite(LedParpadeo, HIGH);       // Apaga el LED
    delay(100);                           // Espera para evitar rebotes
  }
}

void parpadearLed() {
  static unsigned long tiempoPrevio = 0;   // Variable para almacenar el tiempo previo
  static bool estadoLed = false;           // Estado actual del LED
  unsigned long tiempoActual = millis();   // Tiempo actual
  
  if (tiempoActual - tiempoPrevio >= 100) {  // Si ha pasado medio segundo
    tiempoPrevio = tiempoActual;           // Actualiza el tiempo previo
    
    digitalWrite(LedParpadeo, estadoLed); // Alterna el estado del LED
    estadoLed = !estadoLed;                // Cambia el estado del LED
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.