Hola:
Quiero hacer ejemplos sobre un circuito, detector de cruce por cero. Tengo un esquema que hice muy simple, como en Proteus 8.5 SP0 no incluye el optoacoplador H11AA1, uso el 4N25 con su diodo correspondiente.
Mirando este esquema.
Hice este esquema.
Antes que me lleguen los materiales, necesito un guía,
Mientras...
Hago pruebas de todo tipo en el Proteus, por ejemplo, hacer un circuito eléctrico mejor que se adapte a lo que busco. Cuando lo tenga, hacer pruebas de todo tipo si me detecta la entrada digital. Empezar hacer varios programas en Arduino de prueba. Tengo Arduino UNO r3 y el LCD, en shield key pad 16x2. Para ver los resultados si hace falta.
Una vez que me detecte los pulsos, por ejemplo que me muestre resultados en pantalla, o en el monitor serie si lo desean, hay que ver resultados de lo que hace la entrada.
Quiero hacer pruebas de todo tipo, pequeños y grandes. Por ejemplo:
Programa 1:
Contador de pulsos.
Solo se muestra en el monitor serie o LCD o los dos a la vez, la cantidad de pulsos que está detectando en la entrada del optoacoplador. Este ejemplo puede servir, lo adaptaré a mi manera y lo pongo aquí cuando acabe.
const int inputPin = 2;
int value = 0;
void setup() {
Serial.begin(9600);
pinMode(inputPin, INPUT);
}
void loop(){
value = digitalRead(inputPin); //lectura digital de pin
//mandar mensaje a puerto serie en función del valor leido
if (value == HIGH) {
Serial.println("Encendido");
}
else {
Serial.println("Apagado");
}
delay(1000);
}
Programa 2:
Lo que se nos ocurra. Iremos poco a poco.
Medir la frecuencia con interrupción.
// period of pulse accumulation and serial output, milliseconds
const int MainPeriod = 100;
long previousMillis = 0; // will store last time of the cycle end
volatile unsigned long previousMicros=0;
volatile unsigned long duration=0; // accumulates pulse width
volatile unsigned int pulsecount=0;
// interrupt handler
void freqCounterCallback()
{
unsigned long currentMicros = micros();
duration += currentMicros - previousMicros;
previousMicros = currentMicros;
pulsecount++;
}
void reportFrequency()
{
float freq = 1e6 / float(duration) * (float)pulsecount;
Serial.print("Frec:");
Serial.print(freq);
Serial.println(" Hz");
// clear counters
duration = 0;
pulsecount = 0;
}
void setup()
{
Serial.begin(19200);
attachInterrupt(0, freqCounterCallback, RISING);
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= MainPeriod)
{
previousMillis = currentMillis;
reportFrequency();
}
}
Programa 3:
Al detectar los pulsos de entrada y sabiendo gracias arriba los resultados cuanto cuenta por cada cierto tiempo, pues haremos algo como esto.
int pulsos = 0;
if (pulsos => 0)
{
// Mostrar mensaje:
// Motor detenido.
}
if (pulsos => 200)
{
// Motor en marcha.
}
if (pulsos =< 700)
{
// Motor detenido.
}
if (pulsos => 1023)
{
// Como sobre pasa el valor.
// Motor trabajando en vacío porque
// se rompió o se soltó la correa del
// tambor.
// Se detiene el motor.
}
¿Alguna sugerencia, comentarios e ideas?
Dejo claro que la entrada del optoacoplador tiene como máximo 35 Vac. Es regulable de 0Vac hasta los 35Vac.
Saludos.