Puede usar una combinación de emisor / detector de infrarrojos para hacer brillar la luz entre las aspas del ventilador. Establece un valor umbral para determinar cuándo cada aspa del ventilador bloquea la ruta del LED IR al detector IR. Cuando la lectura baja (para el número de veces de cuchillas (numBlades)), entonces sabes que ocurrió una revolución. Luego, debe registrar el tiempo que le tomó a esa revolución tener lugar (revTime en milisegundos). 60000 / revTime = RPM. Luego deberá realizar una función de control para subir o bajar la velocidad, dependiendo de qué tan lejos esté la lectura de RPM del punto de ajuste deseado.
Int bladePass;
RevTime largo sin firmar;
- ¿Cómo puedo hacer un interruptor eléctrico que se enciende / apaga usando un sensor IR?
- ¿Cuál es la diferencia entre el sensor de magnetómetro y el sensor de brújula electrónica en los teléfonos móviles?
- Robótica: ¿cómo funcionan los sensores de color?
- Cómo controlar los servomotores basados en la entrada de un sensor IR usando Arduino
- ¿Cómo funciona el sensor de presión de freno?
Unsigned long lastRevTime;
Configuración nula () {
Coloque sus pinmodes para motor, emisor de infrarrojos, detector de infrarrojos y sonda de temperatura. El siguiente código no está completo, pero debería darle una idea de cómo calcular las rpm del sensor IR. La función lowLightLevelDetected se llama dentro de una instrucción if cuando el nivel de luz alcanza un cierto punto bajo. También necesitará poner un pequeño retraso dentro de esa función para evitar cualquier rebote que pueda ocurrir, use un ciclo while mientras el nivel de luz esté en su umbral bajo, y una vez que salga del ciclo while agregue el retraso mencionado anteriormente . Un par de milisegundos suena bien para empezar, pero tendrás que experimentar. Incluso puede hacer que su retraso sea una función de las rpm actuales. Buena suerte.
}
bucle vacío () {
If (lowLightLevelDetected ()) {
bladePass ++;
If (bladePass> = numBlades) {
revTime = millis () – lastRevTime;
lastRevTime = revTime;
rpm = 60000 / revTime;
}
}
}