Autor Tema: Proyecto Concurso de preguntas con microcontroladores  (Leído 6636 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado PIN_GUI_NO

  • PIC10
  • *
  • Mensajes: 3
Proyecto Concurso de preguntas con microcontroladores
« en: 20 de Febrero de 2018, 12:02:33 »
Buenos días a todos

Soy el presidente de una asociación cultural y me gustaría realizar una especie de concurso tipo buzz de la PS2. Para ello los mandos se compone de 5 pulsadores y un led, hasta aquí lo tengo todo más o menos claro. Pero la idea es conectar como mínimo 100 mandos como el que he descrito antes. Había pensado en ponerle a cada mando un microcontrolador y que todos se comuniquen con uno central o maestro. Pero no sé qué protocolo de comunicación me puede servir mejor para este cometido.

La idea de poner un microcontrolador a cada mando es porque asicada micro cuenta el tiempo que se tarda en pulsar y el botón a el que se ha pulsado.

De igual manera el maestro se debe comunicar con todos los microcontroladores para decirles que empieza el tiempo de la pregunta a la cual se debe responder y también cuando se debe encender el led.

Espero que me podáis ayudar ya que no sé qué protocolo es mejor para este cometido. He mirado SPI, I2C y Ethernet pero no sé si son los más adecuados ya que alguno está limitado por la distancia.

Espero que me podáis ayudar, muchas gracias y un saludo

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #1 en: 20 de Febrero de 2018, 12:20:03 »
Bienvenido,
Para poder ayudarte nos hace falta algo más de información

Por lo que comentas, parece que todos los mandos van a estar conectados por cable ¿Es así?
¿Qué distancias máximas va a haber y en qué configuración? (estrella, bus, etc)

Parece que el mando ya está diseñado ¿Qué microcontrolador vas a utilizar?
¿Qué experiencia tienes con los microcontroladores y las comunicaciones? (baja, media, alta, profesional)


Un saludo.

Desconectado planeta9999

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3520
    • Pinballsp
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #2 en: 20 de Febrero de 2018, 12:21:31 »

Ethernet te podría servir. SPI e I2C es para distancias muy cortas, normalmente para comunicar chips   instalados en la misma placa.

También podrías usar CAN bus

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #3 en: 20 de Febrero de 2018, 12:31:30 »
Yo me decantaría por un protocolo de 2 hilos por cada mando, con alimentación incluída y transmisión por consumo de corriente.
La topología, en estrellas pequeñas que conecten unos 10 mandos, todas ellas unidas con otro protocolo distinto.

Simplifica mucho el cableado, pero requiere diseño y conocimentos.

Un saludo.

Desconectado juaperser1

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 2980
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #4 en: 20 de Febrero de 2018, 12:33:03 »
Utiliza rs485 con un transceiver en cada mando.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #5 en: 20 de Febrero de 2018, 12:59:22 »
Por lo que comentas, parece que todos los mandos van a estar conectados por cable ¿Es así?
¿Qué distancias máximas va a haber y en qué configuración? (estrella, bus, etc)

Parece que el mando ya está diseñado ¿Qué microcontrolador vas a utilizar?
¿Qué experiencia tienes con los microcontroladores y las comunicaciones? (baja, media, alta, profesional)

Se me olvidó lo más importante ¿Qué presupuesto tienes?

Desconectado PIN_GUI_NO

  • PIC10
  • *
  • Mensajes: 3
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #6 en: 20 de Febrero de 2018, 13:02:30 »
Bienvenido,
Para poder ayudarte nos hace falta algo más de información

Por lo que comentas, parece que todos los mandos van a estar conectados por cable ¿Es así?
¿Qué distancias máximas va a haber y en qué configuración? (estrella, bus, etc)

Parece que el mando ya está diseñado ¿Qué microcontrolador vas a utilizar?
¿Qué experiencia tienes con los microcontroladores y las comunicaciones? (baja, media, alta, profesional)


Un saludo.

Como bien dices, los cables van a estar conectados por cable, la distancia es la poca que pueda haber entre las personas que participen, la configuración dependerá de que protocolo use al final. El micro aun no lo he elegido ya que también lo elegiré dependiendo del protocolo de comunicación, lo que sí que tengo claro es que el micro ira externamente del mando también comunicado por cable.

La experiencia que tengo, soy Ingeniero Electrónico y hace unos años me manejaba bastante bien con los microcontroladores, llevo algún año que por motivos de trabajo lo he abandonado un poco y he empezado este proyecto para volver a ponerme al día


Ethernet te podría servir. SPI e I2C es para distancias muy cortas, normalmente para comunicar chips   instalados en la misma placa.

También podrías usar CAN bus

Ethernet era una de las opciones que he barajado. SPI e I2C lo he descartado por lo de las distancias. Can BUS también era una de las opciones que he estado mirando, aunque llevo muchos años registrado en esta web he vuelto a llegar a ella buscando información sobre este protocolo.

Por lo que comentas, parece que todos los mandos van a estar conectados por cable ¿Es así?
¿Qué distancias máximas va a haber y en qué configuración? (estrella, bus, etc)

Parece que el mando ya está diseñado ¿Qué microcontrolador vas a utilizar?
¿Qué experiencia tienes con los microcontroladores y las comunicaciones? (baja, media, alta, profesional)

Se me olvidó lo más importante ¿Qué presupuesto tienes?

El presupuesto se podría decir que no es problema, como no tengo mucha prisa mes a mes voy comprando material


Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #7 en: 20 de Febrero de 2018, 13:48:12 »
Respuesta rápida:

  • Wifi
  • esp8266
  • MQTT
  • RTC

Respuesta media:

Son 100 los mandos así que puedes usar un punto de acceso wifi que no tenga problema en manejarlos a todos.

La idea es que uses el esp8266 con el firmware NodeMCU (Lua) que ya trae soporte para MQTT. Son 100 nodos más el Nodo del servidor MQTT.

El punto de acceso puede ser al mismo tiempo el servidor MQTT, si usas Raspsberry Pi, Orange Pi o similares. Otro que podría servir también como punto de acceso y servidor MQTT es el AR9331. El AR9331 se usa comúnmente en los Arduinos Yun y traen como Sistema Operativo una versión de OpenWRT (Linux) a la cual le puedes instalar servidores MQTT como mosquitto, y además trae instalado por defecto python, por lo que puedes ejecutar los programas de python desde una SD.

Lo otro es la lógica para determinar quien fue el que oprimió antes el botón y cual fue el botón que presionó. Para eso el mando de control de inicio de pregunta va a mandar un mensaje a todos los nodos a un tópico en común que podría ser /*/question_start en el mensaje tendría el timestamp del servidor principal.

Y también el mando de control de inicio también estaría subscrito al tópico /*/button_pressed.

Así cuando cada nodo envíe el mensaje al tópico /<nodo-uuid>/button_pressed con el mensaje tentativo de

Código: [Seleccionar]
{"server_timestamp_start":xxxxxxxxxx, <- La hora del servidor cuando envió el mensaje
  "node_timestamp_start":xxxxxxxxx,    <- La hora del nodo cuando recibió el mensaje de inicio de pregunta.
  "node_timestamp_response":xxxxxxxxx,    <- La hora en que se envió el mensaje de respuesta
  "button_pressed": z;                   <- el ID del botón que se presionó
  "time_response_us":yyyyy;         <- retardo entra la recepción del mensaje y la detección de flanco (subida o bajada dependiendo del sistema)
}

El sistema sabría diferenciar entre el nodo y cual de ellos tuvo la reacción más rápida. time_response_us se podría cambiar por time_response_ms, ya que el ser humano no tiene reacciones tan rápidas.

Cuando el servidor determine quien fue el que presionó más rápido el botón esté enviaría el mensaje al tópico /<node-uuid>/led donde <node-uuid> es el ID del mando que tuvo la respuesta más rápida, con el mensaje que le permita prender el led.

Para apagar los LEDs de todos los mandos el servidor publicaría al tópico /*/led con el mensaje para apagar todos.


Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #8 en: 20 de Febrero de 2018, 15:39:33 »
Creo que debes empezar por tomar un par de decisiones:


Primera decisión, el medio a utilizar: Cables / Radio / Infrarrojos
Cada uno tiene sus pros y sus contras. Lo mejor es que escojas una tecnología de cada uno y que compares.

Yo en cables te proponía el protocolo 1 wire, que solo necesita 2 cables por cada mando y comunicaciones por UART. Es muy sencillo, barato y el desarrollo necesario no te costará mucho con tu experiencia. Es como conectar 2 micros por uart con Rx y Tx cortocircuitados a un solo hilo y tomar alimentación del micro de la propia señal de comunicaciones. Más sencillo y barato imposible y funciona bastante bien. Aquí un ejemplo:
https://in.mathworks.com/examples/matlab/community/19771-communicate-with-1-wire-reg-devices-on-arduino-reg-hardware
Además te ahorras el mantener baterías cargadas en los mandos.


En ondas hay opciones como wifi (relativamente caro y complejo) y otras más rústicas, sencillas y baratas como el NRF24L01 a 2.4Ghz:
http://www.naylampmechatronics.com/blog/16_Tutorial-b%C3%A1sico-NRF24L01-con-Arduino.html


A los infrarrojos también podrías darles una oportunidad. Aunque al no funcionar a veces, tendrá problemas.



Segunda decisión, el protocolo:
Yo creo que en este caso (pocos datos, muchos terminales) la respuesta es un maestro que hace pooling / muchos esclavos que responden.
Este protocolo debe trabajar muy rápido para que no se note mucho retraso.



Tercera decisión, cómo diferenciar tiempos:
Esta es difícil. Yo pondría un cristal con suficiente precisión (de 32768 khz) para mantener a todos los mandos sincronizados y que puedan enviar más tarde el tiempo exacto en el que se pulsó el botón. Así el protocolo puede ser más lento, pero el tiempo de la pulsación será muy preciso.
Aquí puedo ayudarte para que los mandos hagan un ajuste automático de la frecuencia.



Cuarta decisión, el microcontrolador:
Con un pequeño micro PIC tendrás suficiente y aquí puedes recibir ayuda.
Yo me plantearía también escoger uno de Atmel, para trabajar con entorno Arduino y facilitar mucho el proyecto con sus librerías.


Un saludo.
« Última modificación: 20 de Febrero de 2018, 15:42:25 por Picuino »

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #9 en: 20 de Febrero de 2018, 16:05:09 »
En micros, yo me iría a uno de estos:

PIC16F15323 (muy nuevo. Una maravilla. 0,62 Eur en capsula SOIC)
http://www.microchip.com/wwwproducts/en/PIC16F15323
Program Memory Type Flash
Program Memory (KB) 3.5
CPU Speed (MIPS) 8
RAM Bytes 256
Digital Communication Peripherals 1-UART, 1-SPI, 1-I2C
Capture/Compare/PWM Peripherals 2 Input Capture, 2 CCP,
Timers 1 x 8-bit, 2 x 16-bit
ADC 11 ch, 10-bit
Comparators 2
Temperature Range (C) -40 to 125
Operating Voltage Range (V) 1.8 to 5.5
Pin Count 14
Low Power Yes



Attiny84 (Compatible Arduino. 0,65 Eur en SOIC)
http://www.microchip.com/wwwproducts/en/ATtiny84A
Program Memory Type Flash
Program Memory (KB) 8
CPU Speed (MIPS) 20
RAM Bytes 512
Data EEPROM (bytes) 512
Digital Communication Peripherals 1-SPI, 1-I2C
Capture/Compare/PWM Peripherals 1 Input Capture, 1 CCP, 4PWM
Timers 1 x 8-bit, 1 x 16-bit
Comparators 1
Temperature Range (C) -40 to 85
Operating Voltage Range (V) 1.8 to 5.5
Pin Count 14


Un saludo.
« Última modificación: 21 de Febrero de 2018, 06:00:34 por Picuino, Razón: Corrijo Attiny814 por Attiny84. Enlace correcto. »

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #10 en: 20 de Febrero de 2018, 16:32:37 »

En ondas hay opciones como wifi (relativamente caro y complejo) y otras más rústicas, sencillas y baratas como el NRF24L01 a 2.4Ghz:
http://www.naylampmechatronics.com/blog/16_Tutorial-b%C3%A1sico-NRF24L01-con-Arduino.html

Wifi caro y complejo???

Precios Aliexpress:

esp8266-12E €1,45


la versión nrf24l01
nrf24l01    €0,54
pic16f15323 €0,62

Más circuito RTC y el protocolo que se requiere para que los 100 nodos y el servidor estén sincronizados.

Todo esto te lo resuelve Wifi (802.11) más MQTT. El servidor Mosquitto puede manejar un poco más de 20000 conexiones simultáneas a una tasa de más de 7000 mensajes por segundo.

Así que 100 conexiones simultáneas es muy poco y además el esp8266 con el firmware NodeMCU hace que el uso de MQTT se cosa de niños.

https://nodemcu.readthedocs.io/en/master/en/modules/mqtt/

Mantener sincronizado el reloj de todos los nodos se hace con un protocolo llamado SNTP

https://nodemcu.readthedocs.io/en/master/en/modules/sntp/

GPIO

https://nodemcu.readthedocs.io/en/master/en/modules/gpio/

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #11 en: 20 de Febrero de 2018, 17:26:46 »
No recordaba que el esp8266 se puede programar.
Ha bajado mucho el precio de este módulo. La última vez que compré uno costaban unos 4 o 5 Euros cada uno.

El RTC se puede hacer con el mismo micro y un xtal de 32768Hz que cuesta 0.05€.
Lo que no tengo tan claro es cual será más compleja, porque con wifi tienes soluciones y librerías ya preparadas. Pero con el Attiny también. El entorno Arduino facilita mucho.
Dependerá también de la experiencia de cada uno.


Un saludo.

Desconectado tsk

  • PIC18
  • ****
  • Mensajes: 258
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #12 en: 20 de Febrero de 2018, 20:17:01 »
Usando Arduino probablemente el ATTiny se quede sin RAM a mitad de camino del diseño del protocolo de comunicación y la aplicación, sobre todo con la librería RF24, tan sólo su programa de Getting Started consume 226 bytes y usando la librería RF24Network que usa como base el RF24, ese consumo se incrementa a 659 bytes en RAM y 7048 bytes en ROM.

Hay otras librerías como la NRF24Lite (50 bytes en RAM), pero de todas formas se tiene que programar un protocolo para mantener las cosas trabajando de una forma decente.

Necesita una estructura que le permita, al que va actuar como maestro, mantener la lista de nodos activos. Si suponemos que las direcciones de los nodos van a ser del 0 al 99 se podría tener un arreglo de 100 para almacenar cual esta y cual no está activo, ya aquí van 150 bytes.

Necesitaría implementar algo que le permita evitar las colisiones, ya que cada nodo sólo puede escuchar de forma activa 6 nodos a la vez. Así que un maestro y 100 nodos esclavos sería un enorme problema.

La librería RF24Network usa una topología en árbol, así que si algún nodo intermedio desaparece los nodos subsecuentes no encontrarían el destino al nodo 0.

La librería RF24Mesh es mejor pero el ejemplo base usa 699 bytes en RAM y 10406 bytes en ROM

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #13 en: 21 de Febrero de 2018, 08:34:35 »
El protocolo que puede implementar es simplemente una estrella con  1 maestro central y 100 nodos esclavos.

Hay varias implementaciones posibles, pero no es necesario hacer una red en árbol.

Una posibilidad es que los mandos respondan con datos en el acknowledge cuando el maestro les envía un mensaje a su dirección.
El maestro tiene que cambiar sus canales para ir barriendo a todos los sensores uno a uno. Todos funcionan a la misma frecuencia, pero con direcciones diferentes.
Al iniciar siempre el maestro la comunicación, no hay problemas con la pérdida de datos.

Es un protocolo lento, pero bastante sencillo y para enviar una pulsación de tecla no hace falta más.

Datasheet:
https://www.nordicsemi.com/chi/nordic/content_download/2730/34105/file/nRF24L01_Product_Specification_v2_0.pdf

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re:Proyecto Concurso de preguntas con microcontroladores
« Respuesta #14 en: 21 de Febrero de 2018, 09:41:12 »
Otro protocolo posible que gasta muy poca energía.
El mando se queda en stand-by hasta que se presione un pulsador.
Entonces se pone a la escucha para esperar a que no haya transmisiones.
En ese momento envía su dato al master.
Todos los mandos tienen la misma dirección y frecuencia.
Por último el mando vuelve a stand-by

El orden es el de llegada de datos. No es determinista, pero puede distinguir milisegundos. No creo que plantee problemas.
Si hay muchas colisiones de datos y da problemas, se pueden separar los mandos en varias frecuencias. El maestro puede manejar 2 o más frecuencias con un módulo NRF24 para cada frecuencia.


No he probado ninguna de estas dos soluciones, así que la respuesta de tsk es más segura y sencilla en la programación y más escalable.
El problema es que consume más potencia (80mA frente a 14mA) y es un poco mas cara.


Yo te recomiendo la solución wifi de tsk, pero por mi parte voy a experimentar con el nRF24 que me parece más interesante.


Un saludo.