Microcontrolador con codificador rotatorio y capacidades bluetooth [cerrado]

Estoy buscando consejos sobre (qué usar/cómo hacer) un codificador rotatorio al que puedo conectarme a través de bluetooth. Estoy escribiendo una aplicación que necesita mostrar en la pantalla en tiempo real al usuario la cantidad de rotaciones a medida que la gira. Además, necesito que el microcontrolador registre las revoluciones por día para poder realizar un seguimiento de las revoluciones si su computadora está inactiva.

Criterios:

  1. Debe estar solo
  2. Tiene que ser compatible con bluetooth con una pc, mac, android y iphone.
  3. Tiene que poder almacenar hasta 7 días de datos (esto sería una cantidad muy pequeña de datos, solo la cantidad de rotaciones por día y la marca de tiempo).
  4. Tiene que ser pequeño y barato.

Estaba pensando en un microcontrolador con solo un codificador rotatorio y capacidades de bluetooth.

He visto microcontroladores como Arduino y creo que serían buenos para empezar, pero estaba buscando algo que realmente pudiera usarse en un producto final.

Use un módulo bluetooth como este: sparkfun.com/products/10559 Aparece como un puerto serie normal para la PC y como un UART normal para el microcontrolador. Entonces, todo lo que necesita es un microcontrolador que pueda decodificar un codificador rotatorio (2 entradas digitales) y comunicarse mediante UART (dos pines adicionales) y un par de bytes EEPROM para almacenar revoluciones.
¿Cuál es la diferencia entre un Arduino y "algo que realmente podría usarse en un producto final"?
La impresión que tengo es que Arduino es una herramienta de aprendizaje, no algo que verías en un producto real que comprarías, como un Fitbit.
Veo que el WRL-10559 que mencionaste es compatible con Bluetooth v2.0. ¿Sabes qué versión de Bluetooth usa? Gracias
No, es solo un resultado aleatorio en un motor de búsqueda aleatorio. Busque 'desglose del módulo bluetooth' y encontrará varios módulos a diferentes precios.
Hay clones muy pequeños de Arduino e incluso más pequeños. Además, una vez desarrollado en el software Arduino, se puede transferir fácilmente a un ATtiny o ATmega independiente. La ventaja es claramente no tener que diseñar el hardware/PCB/soldadura/... hasta que tenga un producto que funcione.

Respuestas (4)

Cualquier pequeño micro más un módulo BT barato debería ser adecuado para esto.

Por ejemplo, un PIC 12 o 16F , con algo como este módulo BT (he usado una versión de montaje en superficie de uno de estos con éxito en un prototipo reciente) más el codificador podría ensamblarse muy rápidamente para fines de prueba de concepto. En el lado de la PC, Java sería lo mejor para que pueda migrar a Android, Mac, Linux, etc.

¿Importa en qué idioma está programado el microcontrolador? Iba a escribir el programa que lee los datos en C# para Windows, Objective C para Mac y Java para Android. Gracias
Yo optaría por un lenguaje portátil como C++. No estoy seguro de las ventajas y desventajas de Java. La ventaja de usar un lenguaje portátil (como C++) es que solo tiene que escribir (y mantener) un único árbol fuente. Todas las plataformas admiten C++ (Win, Mac, Linux, AVR, PIC, ...)
¿Estás hablando de usar C++ para el microcontrolador? Gracias
Lo siento si es una pregunta estúpida, pero nunca he programado un microcontrolador. Gracias
C es el lenguaje de elección para pequeños micros (o ensambladores) Algunos de los micros más grandes tienen compiladores C++ disponibles, pero no algo como el PIC12/16/18 mencionado anteriormente. @jippie estaba hablando de C ++ para las cosas del lado de su PC.
Para ser honesto, realmente no sé la diferencia entre C y C++. Sé que C# para microcontroladores está fuera de discusión la mayor parte del tiempo y sé que uso algunas cosas de C++ para Arduino. Si Arduino hace C ++ completo, no lo sé. También los archivos fuente para mi ATtiny tienen una .cppextensión y para estos también soy consciente de que uso algunos detalles de C++, pero honestamente no sabría la diferencia formal entre los dos. C ++ para PC/Linux/Mac definitivamente está bien en lo que a mí respecta, ya que es altamente portátil (y no me importa compilar cosas).
Las ventajas de Java son que es muy fácil de transportar: ciertamente cubre 3 de las 4 plataformas anteriores (no estoy seguro sobre el iPhone, ya que nunca he desarrollado nada para él) C ++ también es una opción similar, pero la plataforma Android se basa en Java ( curiosamente, creo que las cosas nativas subyacentes de Android son C ++, pero eso es más para el programador de Android "incondicional")

TI vende una solución completa de bluetooth + microcontrolador (CC256x + MSP430 o Stellaris). Consulta sus plataformas de evaluación . La solución EZ430 es muy buena y debería funcionar para usted, ya que es compacta y puede conectar un codificador rotatorio.

Si tuviera que escribir un programa de demostración en Arduino, ¿sabe si podría portarlo al CC256x + MSP430 o Stellaris? Gracias
En cierto modo sí. Ambos se programan en C, pero el CC256x+MSP430 tiene una forma determinada de hacer las cosas para poder enviar los datos. El código Arduino no se puede traducir directamente al código MSP430/Stellaris.

¿cuál es la velocidad de rotación? ¿Para cuántas rotaciones por día estás diseñando?

Es posible que pueda salirse con la suya con solo el chip bluetooth y escribir para que su microcontrolador mire su codificador. El (antiguo) BC4 tiene opciones en las que puede escribir su código para un chip "virtual" que se ejecuta dentro de él. Eso lo reduciría a un solo chip para hacer todo.

La forma tradicional de hacer esto es usar cualquiera de los módulos bluetooth fácilmente disponibles que se exponen como puertos seriales bluetooth, y luego usar un pequeño micro para hablar con sus puertos seriales "reales". Otros ya han respondido con módulos de ejemplo. Asegúrese de usar un módulo con el que su micro solo pueda hablar, de lo contrario, es posible que deba implementar un protocolo de nivel inferior como H4, BCSP o algo así para poder usarlo. (y si va por ese camino, pruebe el excelente btstack de Matthias Ringwald ; lo he reducido con éxito para que quepa en un LPC2100 y hable con teléfonos móviles.

La característica principal que probablemente debería buscar en el microcontrolador son las entradas de alta velocidad. Su codificador será completamente inútil si su microcontrolador no puede seguir el ritmo y todo parecerá ruido (suponiendo que esté usando un codificador de cuadratura). También debe investigar un poco sobre los codificadores de filtrado de ruido por la misma razón.

Dicho esto, si está buscando crear un prototipo (sin haber verificado la velocidad de las entradas), vaya con Arduino porque la mayor parte del trabajo ya está hecho y solo obtenga un escudo Bluetooth. Siempre puede considerar hacer sus propios Arduinos (después de todo, son de código abierto) y puede obtener el precio de alrededor de $ 3 por placa.

Si no sigue la ruta de Arduino, se trata de seleccionar un módulo Bluetooth y ver qué opciones de interfaz están disponibles.

[Editar] Por los comentarios, parece que estoy acostumbrado a usar codificadores de mayor resolución que los que requieren muchas aplicaciones generales, por lo que es posible que haya exagerado la necesidad de entradas de alta velocidad. De cualquier manera, al menos debe hacer la pregunta sobre qué tipo de resolución necesita y si sus entradas perderán pulsos.

Tendría dificultades para encontrar un microcontrolador que no tuviera entradas lo suficientemente rápidas. Sin embargo, uno con al menos dos interrupciones de borde bidireccionales (idealmente donde ambos bordes se pueden habilitar al mismo tiempo) simplificará el software, aunque no es necesario.
@ChrisStratton ¿No debería depender eso de la resolución del codificador? Vengo del lado de las pistas del PLC y, por lo general, usamos codificadores de muy alta resolución, por lo que debe asegurarse de que está usando las entradas de alta velocidad designadas o perderá la cuenta. También es sensible al tiempo de escaneo si no usa interrupciones o procesamiento paralelo para encontrar transiciones entre escaneos.
Las entradas en un procesador suelen ser mucho más rápidas que las que puede encontrar en un módulo empaquetado, especialmente si tiene multiplexación o filtrado genérico. ¿O suele trabajar con codificadores que tienen velocidades de salida de MHz?
realmente no necesita entradas de alta velocidad; cualquier cosa con contadores de eventos de temporizador o pines de interrupción en el cambio funcionaría (siendo la mejor solución la primera). Si está contando rotaciones de velocidad increíblemente alta, es posible que necesite un mejor micro, pero casi cualquier cosa debería ser capaz de manejar esta parte del diseño.
Estoy acostumbrado a los codificadores de MHz, principalmente en aplicaciones industriales de servomovimiento. Es común tener millones de pulsos por revolución.
Solo lo necesito para contar cada rotación y el tiempo entre rotaciones. Se girará a mano, por lo que la velocidad no debería ser un problema. Gracias