I am searching for a solution to design and program a live auctioneer system that I have been working on. I need to be able to accommodate 12 bidders at one time. I am a novice at Arduino and programming but I am eager to learn. I haven’t bought any components yet, as I wanted to ensure my design and thought process was correct before purchasing anything. What I would like to do is basically make a buzzer system for a live auction for 12 people. The buzzer system will be sending simple keystrokes to a laptop (16+enter for example). The keystrokes will be used to navigate to a specific slide on a PowerPoint presentation. Basically, I made a PowerPoint presentation with many slides, the first 15 slides count down from 15 seconds to start the auction (each slide has a large number in a text box counting down in sequential order…15…14…etc… and it automatically advances to the next slide each second). Then, the 16th slide for example has the text of the leading bidder’s name (let’s say John) in a text box at the top, and the number 10 underneath his name. Then there is a series of 9 slides after that…. Designed to count down from 10 (automatically advancing to the next slide after exactly 1 second) while continuing to display John’s name at the top. Once the timer reaches zero, the slideshow stops and John wins the item he was bidding on. This way throughout the auction, bidders know who is the current leading bidder and how much time until the auctioned item is won. So slide 16 is John’s name then 10 consecutive slides counting down, but slide 26 has Bob’s name, slide 36 has Matt’s name, etc.
What I would like to do for this project is design a wireless system of clickers for bidders to advance to the slide with their name, which will begin the countdown for them to win the auctioned item. If another user clicks their button, it will advance to the slide with their name, and begin counting down. Until someone wins the auction by having their timer run out. Basically, I need the wireless clickers to transmit a keystroke command to the computer (16+enter, or 26+enter, etc) which will navigate to the correct slide for that bidder and begin advancing through their countdown slides from there.
From my research, it seems that the best way to do this would be to have a master receiver and 12 slaves. The slaves would be a single-channel with a single button for each bidder to click in order to make a bid (the bidders would announce their bid price verbally, so the bid price doesn’t need to be transmitted). It seems like the best solution would be to have a polling loop through which the master polls each buzzer (maybe every 10 milliseconds?).
My thought is to use 433 hz transmitters such as garage door openers (maybe like this one https://www.amazon.com/Garage-Wireless-Portable-Transmitter-Compatible/dp/B0B9RJ2QGM?source=ps-sl-shoppingads-lpcontext&ref_=fplfs&psc=1&smid=A1SZW0PPXF0SUN). Each garage door opener would need individual IDs, which I think I could achieve using dip switches inside the stock openers. Each ID would tell the master which bidder buzzed in, and that signal would correspond to a command to the computer to navigate to the correct slide to start the countdown. I think I would just have to use a sniffer to determine the id code of each transmitter, then add that to my code to designate which player corresponds to each transmitter.
It is not particularly essential who buzzed in first. Ties can be more or less ignored because the bid price is what’s going to ultimately determine the winner. And towards the end of the bidding, it’s likely only 2 bidders will be participating and therefore each bidder would be taking turns pushing their buzzers since no one would be buzzing against their own winning bid.
I have a few questions regarding this set up.
Which Arduino would make the most sense to purchase? I would only need one Arduino to serve as the master and house the receiver… correct?
Other than the 433Hz transmitters, an Arduino and a receiver, what other components would I need to purchase?
What am missing? How doable is this design for a novice?
Interesting idea, what happens if the system fails or worse one clicker goes flaky? If you do build this it should be put together on a PCB. Consider the following:
Arduinos were designed for and are are intended for experimentation and learning, often with breadboards and loose wires that eventually break if vibrated. Most important, the boards are not protected against harsh, dirty or electrically noisy environments found in industrial, automotive and other commercial applications. It is unreliable as it is not suitable for industrial, automotive and other commercial operation.
Eventually a PCB would be the plan. But for now this is just a project used to run a small informal auction game for a family event that we do every year. It is a very low stakes event. Previously we were doing bids verbally, but with 12 participants in a room it can get hectic and at times can take a long time to complete the auction. The virtual countdown will keep things moving and make it more fun. If a clicker went flaky or the system stopped working we could to back to the old way of bidding, which would be no big deal really. But I'd really like to implement this project for next year and it gives me the opportunity to learn some electrical engineering and programming.
It seems an Arduino is the perfect platform for testing this out and experimenting with the idea. Is this wrong? Do you think a different platform is more applicable to this project? Is using an Arduino for this project even possible?
This year I ran the PowerPoint presentation manually using a mouse to navigate to each slide by using buttons on each slide which were hyperlinked to the correct slide with each person's name. But if I had a way to wirelessly send commands to the computer (16+enter, for example) then I could participate with everyone else in the auction during the event rather than running it from behind the computer. I also considered hacking a wireless keyboard, using the codes for the particular keystrokes, and making clones for the correct keystrokes connected to a wireless button transmitter. This way each transmitter would communicate with the commercial usb receiver for the keyboard l just like the stock keyboard did... But instead a person would have a single button controller that sends a macro command (16+enter). But... In this scenario I believe I would need 12 arduinos to run each buzzer....
Can I simply apply a delay command, for example 1 second, to the receiver once a signal is received? If another bidder clicks their buzzer for example 300 milliseconds after the previous bidder, their transmission would not be received. But that's ok because there is still 10 seconds before the auction ends... Person 2 can simply click again realizing that their first click didn't register.... and as long as this next button push occurs after the 1 second delay it will be received this next time. Normally a person will click, and announce their bid price ($33!!) verbally anyway, so that should take at least one second for that process to play out in real time.
Is it practical in the real world for 2 transmitters to send a signal simultaneously? Theoretically... Yes, it's possible. But would this really be likely to occur in practice? If two people click at the same time... Would the data to the receiver be corrupted? Would the delay fix this problem?
If two or more are clicked, NEITHER will be registered! A delay only makes the chance of two or more transmissions interfering all the more probably. Do you know why the TV game shows use push buttons that are wired to some type of monitoring system? For the that very reason.
Can two transmitters send a signal simultaneously? 2 or 10 or 100 can send all at the same time with identical results!
You can design all the fixes you want, but as long as two or more can be clicked at the same time, your design can't work.
As a beginner you will have an extremely difficult time making something like this work.
Unless you have a year or so for project development, I suggest to look into classroom "clickers", used for student responses to teacher questions. Those are tried and proven.
I believe your approach could work, but suggest modest steps to test that optimism.
I’d first get a pair of 433 MHz Tx/Rc modules sending and receiving a single brief message reliably and speedily. Say at least 10 per second. Test in the intended location. Switch a few lights and other devices on and off to introduce typical noise.
Then add a second Tx, programmed to send a different message of same length. Add code to your receiver sketch to recognise that. The receiver would, of course, be receiving constantly when switched on.
Then try sending two signals separated by successively shorter intervals, and see how close you can get. While Rx obviously won’t make sense of overlapping transmissions, I don’t see why it shouldn’t identify say those a few hundred ms apart,
BTW, I’d expect individual bidders to keep their buttons pressed to ensure their notification was being repeatedly transmitted.
It is my understanding that each classroom clicker operates on the same frequency. However each of the clickers simply sends a simple signal to the receiver answering the question with the simple code such as either answer a answer b or answer c to the question. I don't believe there is any way to identify each clicker... They dont have unique IDs and the system therefore simply tallies the number of A, B. C answers etc and displays the counts in graphical form for the class. For this reason I don't think this would with in my application.
What if I were to poll each transmitter in sequential order as Robin2 suggests in the discussion post linked below? Except I don't necessarily care who clicked first so I don't need a universal time for all slaves. If I poll each slave in regular intervals of say 25ms then every 300ms each clicker would have a chance to buzz in and bid. Would this work for my application and avoid the interference problem? Would the fact that other participants might also be pushing their buttons still interfere with the others signal? If each slave has a unique ID can the receiver be instructed to ignore the other slaves until it is their turn to be polled?
There are individual packet identifiers associated with each "clicker", "channel clear" checks before transmission, error checking codes in each each packet to allow detection of interference or collisions with other transmissions, multiple transmissions, and some may have ACK/NACK received message verification protocols.
However, implementing and testing your own setup will be an excellent learning experience! The Arduino RadioHead library has all the basic parts required to implement such a system.
This is good to know and very helpful. I clearly misunderstood their design. Thank you. Do you think it is possible to repurpose these kits for my application while taking advantage of the features you explained?... Particularly individual packet identifiers associated with each "clicker", "channel clear" checks before transmission, error checking codes and the ACK/NACK protocols. Clearly this is similar to what I am trying to accomplish.
I have seen cheap sets of classroom clickers on eBay. How would I begin the task of hacking these to be used in my application?
The remotes for these response systems have many buttons. For my application I would at least have to tell the laptop how to translate the code coming from the response system receiver to the laptop... Teaching it to turn an "Answer A" to a "16+enter" command at the very least. Can I plug the receiver directly into an Arduino using USB to capture the information from the clicker response system and code the Arduino using my sketch to then send the correct keystrokes to the laptop? Or can I use a simple receiver attached to my Arduino to receive the code and translate from there while bypassing the need to use the original commercial receiver altogether?
That will absolutely work, but you need to include a wait time for each device to respond. If they don't respond, do not poll that device on subsequent rounds. After a time, you can reinstate that device and try polling it again when it's turn comes round. That also gives you feedback for devices that are not working, if you care to keep track of it.
Additional: You state you want to use 433 mHz devices, but be aware they are limited by law, as to how often they can transmit and that will most likely interfere with your system.
Perfect. Ok. So the general concept can work. Good.
With 433mHz I had come across this problem while researching but I wasn't sure of the specific wording of the law. So clicking 12 garage door remotes hundreds of times in a few hours is a no go I guess...?... That means this frequency is out. Is there a different RF frequency that might be more useful for this application? Preferably something readily commercially available like the garage clickers? The advantage of the garage door openers I was thinking was the simplicity of assigning individual IDs to each transmitter using the dip switches.
Would IR make more sense for this device? Does it matter IR vs RF (excluding the obvious legality problems.) Advantages/disadvantages of each?
If I were to build the transmitters from scratch (rather than buy something like the garage openers) would they each need their own Arduino in order to program unique IDs for each and transmit the signal (whether IR or RF)?
Well, I doubt very much if any garage door openers are foolish enough to operate on that ISM band where there are subject to all kinds of interference.
There are lots of projects using the 2.4gHz band. Look for nRF24L01 devices. They work a whole lot better than the 433 devices.