Puede insertar una resistencia de detección de corriente de bajo valor en serie con la alimentación del motor y medir la caída de voltaje a través de ella. Cuando el motor está atascado, extraerá su corriente máxima (corriente de bloqueo) y esto debería / será distinto de su corriente de funcionamiento normal. Esta es la opción más sencilla de implementar.
También puede detectar y medir el e.m.f generado por el motor. cuando no está conducido y se desplaza libremente. Eso requiere que el voltaje de ambos terminales del motor a cada uno se dirija a un divisor de potencial y luego se mida. Si tiene un par de entradas ADC en su Arduino, puede usar aquellas con diodos de protección de entrada que salen de las posibles derivaciones del divisor. Puede retirar la unidad del motor, espere un momento hasta que vuelva el motor del inductor e.m.f. (menos de 1 ms: experimente con alcance) para eliminar el voltaje a través del voltaje del motor. Cuando se está moviendo, el motor producirá un voltaje generado. Esta es la opción menos intrusiva de implementar.
Edición: OP publicado "Este es mi motor. Tiene una potencia nominal de 6v, pero lo estaré ejecutando con mi potencia de 3v (2xAA). Corriente de funcionamiento libre @ 6V: 40 mA, corriente de bloqueo @ 6V: 360 mA "24/04/17
Es difícil decir cuál será la corriente de bloqueo a 3 V a partir de los datos de 6 V. Tratándolo como una resistencia, que no lo es, entonces busquemos 200 mA como el umbral para una parada.
La caída de voltaje en la resistencia debe ser lo suficientemente pequeña como para no desperdiciar una potencia excesiva del motor, pero lo suficientemente grande como para estar separada del ruido. Digamos que una corriente de bloqueo debería producir una caída de 0.2 V a través de la resistencia, justo por debajo del 7% de la potencia total del motor en ese punto. Esto conduce a una resistencia de 1 ohmio. En el peor de los casos, podría disipar I2R (0.36 x 0.36 x 1 = 0.1296) W en el puesto, así que usemos una resistencia de 0.5 W para una reducción generosa y barata del 25%.
Suponiendo que el ADC Arduino tiene un FSD de 3.3 V, este 0.2 V representa una conversión a 15 (15.45) para un ADC de 8 bits, a 248 (248.18) para un ADC de 12 bits. (Sabrás más sobre el ADC de tu Arduino en particular que yo).
Es sensato actuar sobre una medición filtrada en lugar de una medición instantánea, para reducir la susceptibilidad al ruido. Esto debería ser bastante fácil si la lectura a través de un ADC como software puede procesarlo. De lo contrario, se puede implementar un filtro RC de hardware simple, pero esto es menos flexible. Una combinación de los dos sería buena: un filtro RC de hardware para eliminar el ruido por encima de la frecuencia de muestreo del ADC y un filtro digital simple en el software.
Por lo tanto, el filtro RC de hardware puede tener una frecuencia de corte de 200 Hz. Esto conduce a una respuesta a un bloqueo en el decenio de 10 ms, que debería ser suficiente y, al mismo tiempo, ser menos susceptible a los tartamudeos del motor si el mecanismo de carga del motor se "pega".
De fc = 1 / (2 x pi x R x C), obtenemos R = 24,114 con C = 33 nF. Utilice 22 K y 33 nF.
Así que tu circuito sensorial actual es:
simular este circuito : esquema creado usando CircuitLab
Su filtro digital en software es un tema en sí mismo. Puede buscar un algoritmo de filtro adecuado en un texto adecuado o pegar una cosa aproximada para tener una oportunidad. En interés de un post más corto, por supuesto que estoy a favor de este último. Así que intente tomar lecturas del ADC del motor a intervalos de 1 ms, tal vez en una interrupción de 1 ms. Mantener un búfer histórico de las últimas 64 lecturas. Cada 10 ms (para aligerar la carga en su CPU), sume las últimas 64 lecturas y divídala por 64. Eso le permite obtener un promedio de las últimas 64 muestras en intervalos de 10 ms. Utilícelo para detectar la sobrecorriente del motor. (Estoy seguro de que alguien lo romperá matemáticamente, pero establece un punto de partida y un marco de software para que el OP pueda experimentar y aprender).