8

I am drafting a pub quiz project, where the Referee gives a signal and multiple players push their buttons. The first to push wins the right to give an answer.

I want all buttons (referee's + X players) to be wireless. Since the best quiz players can click a button within 10ms of the signal, it is very important that there is a very, very little variance in ping between different buttons. I cannot have players shouting "my button is laggy!" On the other hand, I don't want to use more expensive/complex tech than needed.

SO, what would be the optimal wireless tech to use? Please share your experience from similar projects (or just theoretical knowledge :) Here's what I researched so far (correct me if I'm wrong):

  1. Bluetooth 4 LE (as in RFduino) Pros: 3-6ms latency (advertised), low energy Cons: cost, not more than 7 buttons to the device

  2. Wi-fi Pros: 2ms latency (I justed pinged my wi-fi router), dozens of buttons if need be Cons: cost, power-hungry

  3. RF data tranceiver Pros: dunno, cost seems to be a bit smaller Cons: multiple buttons at the same frequency will probably create a lot of noise

  4. Simplest "Radio remote" Pros: zero lag since it's all electromechanical, no data Cons: multiple buttons at the same frequency won't work

So, did I miss anything? I appreciate any guidance.

  • How many buttons in total? – bigjosh Jul 8 '15 at 3:45
  • The smallest possible requirement is 4, the normal case is 8, anything more would be welcome - I'd like it to be very flexible for some crowd entertainment. – Sergey Snegirev Jul 8 '15 at 7:22
  • Human reaction time is over 200ms. See humanbenchmark.com/tests/reactiontime/statistics, – user31481 Aug 8 '17 at 9:57
6

I've used NRF24L01+ chipset 2.4GHz wireless modules with Arduino before, and found them to be great, and super cheap (~$10 for 10 of them on ebay!). They have 3 modes of transmission: 250kbps, 1Mbps, and 2Mbps. The range decreases accordingly with higher bitrate, but the time spent sending a message does too. There are multiple Arduino libraries (e.g. RF24, Mirf, RadioHead) and tutorials for using the modules (see http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01). They also have built-in mesh networking modes which may or may not be of use.

Versions with an RP-SMA antenna connector and an advertised range of up to 1000m are also available for about $5 each. I would recommend using one of these for the referee's button at least, depending on the range you need.

According to Charles Hallard of hallard.me, The non-amplified chips can get 30m line-of-sight range in 250kbps mode, and I have verified this in my own testing.

According to user sporadic on diychristmas.org, sending a 32 byte payload in 250kbps mode takes 1432µs from the start of Tx mode on the transmitter to receiving the full message on receiver. This decreases to 444µs on 1Mbps mode and 283µs on 2Mbps mode.

Given these statistics, they fall well within 2ms latency for triggering, suitable for your application, and they use very little power. It's up to you to work out the best balance of latency, range and expense.

  • Thank you! What if multiple buttons are pressed at the same time? Will they collide and eg block each other out? – Sergey Snegirev Jul 11 '15 at 11:18
  • No, the networking of these chips is very sophisticated for their price, they can negotiate mesh networks and multiple Rx pipes at once happily, and automatically resend if the receiver doesn't acknowledge receipt of a message. – cortices Jul 12 '15 at 2:17
  • 1
    This EE.SE question details how you can have multiple nodes transmit to the same receive address, as in your situation. Then it's simply a matter of taking the sender's address to decide who 'won'. – cortices Jul 12 '15 at 2:18
  • 1
    More helpful examples: arduino-info.wikispaces.com/nRF24L01-RF24-Examples – cortices Jul 12 '15 at 2:22
  • 1
    Just a little heads up, those NRF24L01+ chips with antennas are not original, it might cause issues when you try to communicate between clone and original and if you try to use dynamic payloads or shockburst. Also, that wikispace article is outdated. One should use TMRh20 library instead. – Avamander Sep 5 '15 at 15:03
2

Have you considered using real time clocks? You could synchornise them all ahead of time and then use any wireless protocol. Once a button is pressed, you'll look for the unit that reports the earliest time stamp and then once a window of a few seconds has passed let it know that it won. I'd consider using WIFI (802.11) with ESP8266s, RTCs and take a wireless access point along.

This isn't an answer to low lag wireless but eliminates the need for it.

  • 1
    Good idea, but you don't need a RTC. You can sync Arduinos at start, so millis() - offset gives the same result (+/- some drift) for all Arduinos involved. The offset is the value of local millis() when an Arduino receive the sync signal from master Arduino. For a game that last one or two hours will be enough. – user31481 Aug 9 '17 at 7:14
1

In my humble opinion it might be even cheaper if you use IR or some other type of light, assuming you can ensure line of sight. You can use different wavelengths to ensure separation of the signals.

  • I'm afraid that "line of sight" and "pub quiz" don't go well together. But thanks for suggesting it, I will look into IR tech for other projects. – Sergey Snegirev Jul 8 '15 at 7:23
0

Low low tech solution.

  1. The transmitter sends out its clock signal on command.

  2. The receiver just needs to detect detect the prrsence of that signal.

The whole thing can be rf, or light based - for example one of the led lights can be configured as the transmitter.

Everything should be well within 1ms.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.