Paso 6: Integración de Arduino (Sensor de RPM)
En el espíritu de un trabajo hacia fuera de la bici, hemos querido proporcionar al usuario unas estadísticas acerca de su entrenamiento. Hemos seleccionado las RPM de la rueda trasera como una estadística clave. De él uno puede derivar la velocidad equivalente que le va la moto o la distancia que habría viajado si fuera estacionaria. Hay dos maneras fáciles de medir las RPM con un Arduino: un sensor óptico y un sensor de efecto Hall.
Sensor óptico:
Optamos por construir un sensor óptico de RPM de la moto debido a las piezas que teníamos disponibles. El concepto es simple; Un objeto rígido, opaco (en nuestro caso un rectángulo fino de plástico) se une a la llanta de la rueda trasera para que cada vez que la rueda gira, el objeto intercepta el camino entre un LED y un foto diodo. Para mantener el foto diodo y el LED en su lugar, nos propuso volver a una pieza convenientemente en forma de espuma de poliestireno con una muesca en ella sólo lo suficientemente amplio como para la rueda (ver fotos). Espuma de poliestireno facilita ajustar el LED y el foto diodo directamente alineados entre sí (porque diodos de la foto son muy sensibles a la dirección de la luz, trabajan mejor con la luz directamente en la parte superior, reduciendo así los efectos de la luz ambiente). Si el LED no se alinearon, simple se asomó otro agujero en la espuma de poliestireno en el lugar correcto. También es importante fijar el objeto opaco en el borde para que no interfieran con la correa del ventilador o golpear el marco, terreno, venta de bicicletas u otros obstáculos.
El circuito también es bastante sencillo. Corrimos de 5V de Arduino para el LED y el fotodiodo. Es importante que el LED no es la única cosa entre 5V y masa. El LED no proporciona mucha resistencia y 5V incluso puede enviar una gran cantidad de corriente a través del cable, que puede soplar su LED. Utilizamos un resistor del ohmio 1 k en serie con el LED, lo que significa que la corriente por el LED es sólo ~ 5mA. Lo más importante para recordar cuando se utiliza un fotodiodo que funciona al contrario del LED. En lugar de aplicar un voltaje para producir la luz, una luz se aplica para producir un voltaje, por lo tanto el diodo debe colocarse en el circuito hacia la dirección opuesta como el LED. El voltaje producido por la corriente del diodo de la foto se mide a través de una resistencia en serie después del diodo de la foto. La magnitud de este voltaje es lo de menos porque simplemente queremos saber si el fotodiodo detecta el LED o si está bloqueado. Ajuste de la resistencia siguiente, sin embargo, puede cambiar la magnitud del voltaje medido así que incluso con luz ambiente, el voltaje leído es 0. Hemos encontrado que usando un 47k resistencia ohm hecho para una tensión de 0 cuando está bloqueado y una tensión lo suficientemente significativa para fácilmente medida cuando no estaba bloqueado. Cada vez que el Arduino lee en voltaje de 0, sabe que la rueda ha girado una vez.
Enfoque de efecto Hall:
El efecto Hall puede utilizarse también para medir la rotación de la rueda. El efecto Hall se refiere a la tensión inducida por un campo magnético. La puesta en marcha de este enfoque es también muy simple. Un imán se une a la llanta de la moto y una sonda de Hall se une al marco o en un lugar similar como el LED del sensor óptico. Una sonda Hall es un componente de circuito diseñado para la salida un voltaje proporcional al campo magnético transversal a ella. Así cada vez que el imán pasa por la sonda de Hall, una tensión de salida y puede ser leída por el Arduino para contar una rotación (otra vez la magnitud de la tensión es irrelevante).
Código de ejemplo (Sensor óptico):
el código completo se puede encontrar al final de este Instructable
el código en negrita es lo que añadimos en el código de arriba
int pdiode = A3; fotodiodo para rpm
fotodiodo int;
ciclo int = 0;
int numCycle = 20; para un promedio de uso
flotador de t0 = 0.0;
Float t1;
void setup() {}
pinMode (pdiode, entrada);
}
void loop() {}
Si (motorV > 1.0 & &! hasBeenOn) {}
ciclo = 0;
T0 = float (millis());
}
getRpm();
}
void inverterControl() {}
otra cosa if(timecheck <5000) {}
ciclo = 0; Esto es una seguridad ya que arduino no puede ejecutar varios subprocesos
T0 = float (millis());
}
}
void getRpm() {}
puede desear considerar un if else/booleano que hace que cada vez más ciclo sólo al ciclismo
Si (t0 == 0.0) {//safety pues si empezamos a arduino y t0 no se ha establecido todavía
T0 = float (millis());
}
fotodiodo = analogRead(pdiode);
Si (((fotodiodo! = 0) & & (analogRead(pdiode) == 0)) || ((photodiode == 0) & & (analogRead(pdiode)! = 0))) {
ciclo ++;
T1 = float(millis());
Si (ciclo > numCycle) {}
RPM = (float(cycle)) / (t1 - t0) * 1000.0 * 60.0; conversión a las rotaciones por minuto
ciclo = 0;
T0 = float (millis());
}
}