medir velocidad / movimiento robot

Saludos.
Es mi primer post por aqui, aunque visito asiduamente el foro en busca de info. Estoy construyendo un pequeño robot motorizado y me gustaria poder detectar si el mismo esta en movimiento o se ha quedado atrapado/atascado.
Basicamente esta equipado con un arduino duemilanove, un puente h-l298 y un par de motores 3v. En principio he puesto un par de fines de carrera y un sensor infrarrojo (HC-SR04) para detectar choques en algunos lados del robot, pero me gustaria saber si existe algun componente o método para detectar si el robot se mueve o ha quedado atrapado sin accionarse ningun fin de carrera ( para no tener que forrar todos los lados/esquinas con fines de carrera).

¿¿Alguna sugerencia o experiencia??
De antemano gracias por compartir la experiencia.

Con motores DC es muy difícil saber si está girando o no. En principio, si no se están moviendo, consumen más, se calientan más, y no generan picos de tensión en las lineas de alimentación.

Posiblemente haya alguien con más experiencia que te pueda ayudar más.

Gracias ADLC por tu comentario, esperemos a ver si alguien más se anima y comparte alguna idea.

En principio lo unico que se me ocurre es establecer un valor maximo de toma de datos para la distancia que me devuelve el sensor HC-SR04, de tal modo que si pasados no se... 50 valores por ejemplo, se mide la misma distancia implicaria que el robot esta "atascado", no se mueve por eso el sensor siempre enfoca al mismo lugar y siempre mide lo mismo.

¿Alguna otra idea sobre este procedimiento??

Saludos

¿Cómo de estable es la medidad de distancia?

Pues... no va como un tiro la verdad, realizando pruebas puede variar entorno a 1 cm, pero bueno, esa variación mediante programacion puedo considerarla la misma, asi si un valor da por ejemplo 10 cm y el siguiente 9 cm lo considero el mismo y supongo que no se ha movido. Así variaciones entre una medida y la siguiente de al menos 2 cm las considero movimiento.

a nivel Hardware es tan sencillo como medir la corriente que pasa por el puente H. Si esta es elevada, implica que el robot se esta moviendo, si esta es residual, implica que esta parado, si esta es muy elevada , fuera del valor nominal, implica que esta atascado y sus motores estan consumiendo demasiado.
Hay que medir la corriente total suministrada al puente H mediante la lectura de la caida de tension en una resistencia de valor bajo en serie con el circuito del puente H, y luego leer este valor analogico desde el programa, determinando que valores son de referencia.

Y poner un encoder en cada rueda no lo ves viable?

Gracias manumoli y tato por compartir la experiencia, a priori la solución de manumoli me parece la más elegante, para realizar la propuesta por Tato tendria que modificar un poco la estructura, a ver si me pongo y os cuento como lo llevo a cabo. Me pondre un poco al dia con el tema de resistencias y demás. Ya que la alimentación del puente H es superior a 5V creo que tendré que tirar de divisores resistivos para medirla luego en el analogico de arduino.
Gracias!!

No has de modificar el voltaje. Tan solo hacer pasar la corriente total que consume el motor por una resistencia de bajo valor en ohmios. A medida que la corriente aumenta, la caida de tension en esta resistencia sera mayor, aqui ponemos un pin del Atmega que nos mida el valor analogico de forma constante, con lo cual nos esta Monitorizando el consumo del motor de forma continua.
Al sobrepasar unos determinados margenes, realizamos la accion que creamos oportuna en el Programa.