Choisir la technologie sans fil pour un décalage le plus faible possible

10

Je rédige un projet de quiz de pub, où l'arbitre donne un signal et plusieurs joueurs poussent leurs boutons. Le premier à pousser gagne le droit de donner une réponse.

Je veux que tous les boutons (arbitre + joueurs X) soient sans fil. Étant donné que les meilleurs joueurs de quiz peuvent cliquer sur un bouton à moins de 10 ms du signal, il est très important qu'il y ait une très, très petite variation de ping entre les différents boutons. Je ne peux pas faire crier "mon bouton est en retard!" D'un autre côté, je ne veux pas utiliser une technologie plus coûteuse / complexe que nécessaire.

Alors, quelle serait la technologie sans fil optimale à utiliser? Veuillez partager votre expérience de projets similaires (ou simplement des connaissances théoriques :) Voici ce que j'ai recherché jusqu'à présent (corrigez-moi si je me trompe):

  1. Bluetooth 4 LE (comme dans RFduino) Pour: latence de 3 à 6 ms (annoncé), faible consommation d'énergie Contre: coût, pas plus de 7 boutons pour l'appareil

  2. Wi-fi Pour: latence de 2 ms (je viens de cingler mon routeur wi-fi), des dizaines de boutons si besoin est Contre: coût, gourmand en énergie

  3. Transceiver de données RF Avantages: ne sais pas, le coût semble être un peu plus petit Inconvénients: plusieurs boutons à la même fréquence créeront probablement beaucoup de bruit

  4. "Radio remote" la plus simple Pour: zéro décalage car tout est électromécanique, pas de données Contre: plusieurs boutons à la même fréquence ne fonctionneront pas

Alors, ai-je raté quelque chose? J'apprécie tout conseil.

Sergey Snegirev
la source
Combien de boutons au total?
bigjosh
1
La plus petite exigence possible est 4, le cas normal est 8, rien de plus serait le bienvenu - je voudrais qu'il soit très flexible pour certains divertissements de foule.
Sergey Snegirev
Le temps de réaction humain est supérieur à 200 ms. Voir humanbenchmark.com/tests/reactiontime/statistics ,
@ user31481 Et alors? Les humains peuvent percevoir une latence inférieure à 2 ms. Voir les liens en annexe: danluu.com/input-lag
Navin

Réponses:

6

J'ai déjà utilisé NRF24L01+des modules sans fil 2,4 GHz avec chipset avec Arduino, et je les ai trouvés excellents et super bon marché (~ 10 $ pour 10 d'entre eux sur ebay!). Ils ont 3 modes de transmission: 250 kbps, 1 Mbps et 2 Mbps. La plage diminue en conséquence avec un débit binaire plus élevé, mais le temps passé à envoyer un message le fait également. Il existe plusieurs bibliothèques Arduino (par exemple RF24, Mirf, RadioHead) et des tutoriels pour utiliser les modules (voir http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01 ). Ils ont également des modes de réseautage maillés intégrés qui peuvent être utiles ou non.

Des versions avec un connecteur d'antenne RP-SMA et une portée annoncée jusqu'à 1000 m sont également disponibles pour environ 5 $ chacune. Je recommanderais d'utiliser l'un de ceux-ci pour le bouton de l'arbitre au moins, selon la portée dont vous avez besoin.

Selon Charles Hallard de hallard.me , les puces non amplifiées peuvent obtenir une portée de 30 m en ligne de vue en mode 250 kbps , et je l'ai vérifié dans mes propres tests.

Selon l'utilisateur sporadique sur diychristmas.org , l' envoi d'une charge utile de 32 octets en mode 250 kbps prend 1432 µs depuis le début du mode Tx sur l'émetteur jusqu'à la réception du message complet sur le récepteur. Cela diminue à 444µs en mode 1Mbps et 283µs en mode 2Mbps .

Compte tenu de ces statistiques, elles tombent bien dans les 2 ms de latence de déclenchement, adaptées à votre application, et elles utilisent très peu d'énergie. C'est à vous de trouver le meilleur équilibre entre latence, plage et dépenses.

cortex
la source
Je vous remercie! Que faire si plusieurs boutons sont enfoncés en même temps? Vont-ils entrer en collision et par exemple se bloquer mutuellement?
Sergey Snegirev
Non, la mise en réseau de ces puces est très sophistiquée pour leur prix, ils peuvent négocier des réseaux maillés et plusieurs canaux Rx à la fois et renvoyer automatiquement si le récepteur n'accuse pas réception d'un message.
cortex
1
Cette question EE.SE détaille comment vous pouvez faire transmettre plusieurs nœuds à la même adresse de réception, comme dans votre situation. Il suffit ensuite de prendre l'adresse de l'expéditeur pour décider qui a «gagné».
cortex
1
Exemples plus utiles: arduino-info.wikispaces.com/nRF24L01-RF24-Examples
cortices
1
Juste un petit coup de tête, ces puces NRF24L01 + avec antennes ne sont pas d'origine, cela peut causer des problèmes lorsque vous essayez de communiquer entre le clone et l'original et si vous essayez d'utiliser des charges utiles dynamiques ou des chocs. De plus, cet article wikispace est obsolète. On devrait plutôt utiliser la bibliothèque TMRh20.
Avamander
3

Avez-vous envisagé d'utiliser des horloges en temps réel? Vous pouvez les synchroniser tous à l'avance, puis utiliser n'importe quel protocole sans fil. Une fois qu'un bouton est enfoncé, vous recherchez l'unité qui signale le premier horodatage, puis une fois qu'une fenêtre de quelques secondes s'est écoulée, faites-lui savoir qu'elle a gagné. J'envisagerais d'utiliser le WIFI (802.11) avec les ESP8266, les RTC et je prendrais un point d'accès sans fil.

Ce n'est pas une réponse au sans fil à faible décalage mais élimine le besoin.

Squats
la source
2
Bonne idée, mais vous n'avez pas besoin d'un RTC. Vous pouvez synchroniser les Arduinos au démarrage, ce qui millis() - offsetdonne le même résultat (+/- une dérive) pour tous les Arduinos impliqués. C'est offsetla valeur de local millis()lorsqu'un Arduino reçoit le signal de synchronisation du maître Arduino. Pour un match qui dure une ou deux heures sera suffisant.
L'utilisation de millis () pour cela peut entraîner une perte de synchronisation des périphériques, car millis () n'augmente pas lorsque les interruptions sont désactivées.
bobsburner
1

À mon humble avis, cela pourrait être encore moins cher si vous utilisez l'IR ou un autre type de lumière, en supposant que vous pouvez assurer la ligne de visée. Vous pouvez utiliser différentes longueurs d'onde pour assurer la séparation des signaux.

Igor Stoppa
la source
1
Je crains que «ligne de vue» et «quiz de pub» ne se marient pas bien ensemble. Mais merci de l'avoir suggéré, je vais me pencher sur la technologie IR pour d'autres projets.
Sergey Snegirev
0

Solution low low tech.

  1. L'émetteur envoie son signal d'horloge sur commande.

  2. Le récepteur a juste besoin de détecter détecter la présence de ce signal.

Le tout peut être radiofréquence ou basé sur la lumière - par exemple, l'une des lumières LED peut être configurée comme émetteur.

Tout devrait être bien à moins de 1 ms.

dannyf
la source