Continuamos con el proyecto del Dimmer programable que me permita utilizar todos los excedentes de mis placas fotovoltaicas.
En el capítulo de hoy vamos a analizar 3 soluciones distintas para detectar los cruces por 0 de la señal de alterna. Vemos su esquema, analizamos su funcionamiento, montamos el circuito y lo comprobamos con el osciloscopio.
Teoría y práctica en 20 minutos.
Tanto si necesitas uno, como si eres curioso y te gusta saber cómo funcionan las cosas, no te lo pierdas.
Enlaces de compra a los materiales del vídeo:
– PC815
Aquí el código que hemos probado en el vídeo:
#include <Arduino.h> const int pinEntrada = 34; // Pin GPIO34 volatile int contadorPulsos = 0; // cuenta las veces que cambia el pin de entrada const int antiruido = 4; // Milisegundos que esperamos antes de dar la entrada como válida unsigned long tiempo_entrada = 0; // Filtro para ruido en la entrada unsigned long ultimo_tiempo_entrada = 0; // Filtro para ruido en la entrada unsigned long ultimoTiempo = 0; // para contar segundos en el bucle principal // Interrupción externa. Se lanza cada vez que se detecta una señal de subida en el pin de entrada void IRAM_ATTR contador() { tiempo_entrada = millis(); // Comprobamos si la señal ha llegado antes que el tiempo filtrado if (tiempo_entrada - ultimo_tiempo_entrada > antiruido) { contadorPulsos++; // Detectado pulso de entrada, incrementamos contador y reseteamos tiempo ultimo_tiempo_entrada = tiempo_entrada; } } // Configuración void setup() { pinMode(pinEntrada, INPUT); // Definimos el pin de entrada // Asignamos la función "contador" a la interrupción por un flanco de subida en la entrada attachInterrupt(digitalPinToInterrupt(pinEntrada), contador, RISING); Serial.begin(115200); // Activamos puerto serie } void loop() { unsigned long tiempoActual = millis(); if (tiempoActual - ultimoTiempo >= 1000) { // Contar pulsos por segundo ultimoTiempo = tiempoActual; // Guardamos tiempo actual para saber cuándo pasa un segundo Serial.print("Pulsos por segundo: "); // Imprimimos los pulsos por segundo Serial.println(contadorPulsos); contadorPulsos = 0; // y ponemos el contador a 0 } }

