Paso 10: Interupts
Siguiendo una sugerencia de rfmdelgado también puede utilizar interrupciones en pines digitales del arduino para registrar el tiempo que la canica pasa cada puerta. Esto requiere circuitería externa un poco para poder trabajar con el umbral ajustable de valores necesitan para de cada puerta.
Lo primero que necesitamos es un comparador de voltaje que se puede comparar dos tensiones de entrada y salida un voltaje alto o bajo, según la cual uno es más alto. No tengo un chip de comparador de voltaje construido pero es posible usar un op-amp con ningún lazo de retroalimentación en su lugar. He seguido las instrucciones del Comparador de tensión de información y circuitos para el uso de un LM358 dual op-amp. Como la impedancia de entrada de arduino es tan alta, en el orden de 10MΩ, su multa a conectar directamente el op-amp salida directamente al pin digital de arduino sin necesidad de utilizar un diodo o un transistor como sugiere en el enlace.
Un circuito simple sólo compararía la salida de las puertas con el voltaje de un resistor variable que se utiliza como un divisor de tensión. Esto requeriría ajuste manual cada vez que los equipos utilizados.
Una mejor alternativa es utilizar la salida PWM del arduino analogWrite() para proporcionar una tensión de referencia ajustable. Un filtro de paso bajo, que consiste en un resistor y un condensador, es necesario para suavizar la salida, he utilizado la calculadora en el Diseño del filtro RC pasabajos para PWM para elegir los valores. Un valor grande de 10μF fue utilizado para el condensador ya que queremos básicamente obtener un voltaje de DC constante con voltaje de ondulación mínima. La resistencia que utilicé fue 2.2kΩ. Hay bastante flexibilidad en los valores utilizados. La salida del filtro se alimenta en el no-invertir (+) entrada de las entradas del op-amp y la salida de la puerta de entrada se alimenta en la inversión (-) entrada. En un Uno pines 5 y 6 se utilizan como estos tienen una alta frecuencia de 980 Hz dando más libertad de acción en los valores de RC.
Para el código otra vez tenemos un una fase de entrenamiento largo. La salida PWM se aumenta lentamente, en cada paso que se lee el comparador de voltaje. Inicialmente será cero y se cambiará a 1 cuando la salida PWM supera la puerta. El valor cuando esto sucede es recodificado. Luego se invierte el proceso con la salida PWM que se redujo de máximo a cero, el valor donde se registra la entrada cambia de 1 a 0. Finalmente se toma el valor de umbral como el promedio de levantamiento y caídos valores además de un incremento fijo. Este valor se escribe en el PWM que se utiliza como el voltaje de umbral de largo plazo.
Con el umbral sets interrupciones pueden luego ser habilitadas mediante AttachInterrupt. Sólo estamos interesados en el modo de levantamiento cuando la entrada va de bajo a alto. Pines 2 y 3 que son interrupciones 0 y 1 fueron utilizados en un Uno. El código de interrupción real es bastante simple, se registra el tiempo y la diferencia de tiempo entre los dos tiempos es el tiempo transcurrido del mármol.
Utilizando interrupciones podría mejorar la resolución de la sincronización potencialmente mejor que el aproximadamente 1ms obtenido el código básico. Sin embargo existe una variación considerable en el experimento, sobre todo en la posición exacta que el mármol es liberado por lo que no hay demasiado que ganar.