Scott, our son is now 17 years old. He is a non-verbal autistic. It has become very difficult to keep him occupied and happy. He likes flashing lights and different sounds, but all the toys in his hands don't last two minutes with him.
As parents, we wanted to find out if he could handle colours and understand action-reaction, so I made him this simple LED game. Or as I call it: Scott's Arcade
Although I developed this gaming platform for my son, I realised afterwards that it can do much more and can be used in different areas, whether for movement restrictions, whether congenital or caused by an accident. It can be used in rehabilitation, as the buttons don't require any strength and the games don't put you under any time pressure. This platform can also be useful in old people's homes or where there are intellectual impaired people.
It has various simple play modes, and is theoretically indestructible compared to stuff from the shops. Hopefully. This game is rather intended for children, teenagers or adults with are restricted in their movement or have mental limitations.
I am quite sure that there are a lot of areas of application, and unfortunately I do not know all the problems in this area.
The sensor buttons alone of this project can be used in many different ways
Introduction video
Here is a short video showing how the gaming platform works. I hope you like it. I used text2speech from https://elevenlabs.io/speech-synthesis for this video. Unfortunately English is not my native language and you didn't want to hear my horrible accent :)
I had this idea in my head for a very long time and it took me almost 3 months to realise this project in my free time.
I also tried to document the progress as quickly as possible, but the sequence of when and how I realised something is a bit back and forth. But in the end it all came together and I think you can see this one as a basic idea for other games. For example, a bigger or nicer case, or a higher resolution with more LEDs. For every person with special needs, and the name says it all, you have to build something customised. I hope that this prototype here will inspire the maker community to realise something. Nobody else will do it for us.
Why an LED display? The display of the games should be simple, so why an LCD panel. Firstly, they break too quickly due to vibrations and are a total overkill for simple games. It is also very cheap to build this or similar games. In addition, these materials are easy to obtain and your own ideas can be easily incorporated. Most organisations that work with people with mobility impairments or intellectual disabilities are not always in a good financial position, and all the special equipment is extremely expensive. That's why I try to help people with these ideas. Especially our son
The CAD Design.I still use the old Sketchup 8 for my ideas. The housing design does not play a major role. The main thing is that it should be safe so that nobody can hurt themselves on it. It should also be simple in shape so as not to overwhelm the user, in this case people with special needs.
As you can see, the construction consists of a 50x50x5cm box. A smaller box is then inserted from behind, which is equipped with dividers to separate the individual LEDs from each other. The symbols are kept very simple and consist only of circles and triangles. there is no dotted circle either, but three smiling and three sad smileys. So get to building. All the CAD files can be found here: https://github.com/awall9999/Robust-LED-game/tree/main/Cad%20Files
ElectronicThe game is based on an Arduino nano and WS2812b light emitting diodes. The sound is provided by a DF mini sound module that is controlled serially. The buttons are TTP223 capacitive sensor buttons. you can also use mechanical buttons, but they are not an option. Especially as sensor buttons require no effort to operate, which is a huge advantage for people with various physical limitations
I have also drawn a plan for the correct order of the LEDs and grouping in the programming afterwards.
Thanks to Hacksterio and Pcbway for the voucher so I could have PCB's made. I have designed the PCBs so, that I can also use them for other ideas.
So I created a circuit board with DipTrace. The USB port on the underside is not really necessary, but makes it easier to upload MP3s to the sound module
And here are the nice and shiny PCB's
I have decided in favour of a 7805 voltage regulator. This converts the 12V input voltage into 5V. The 7805 can process up to 1.5A. If all 32 LEDs were to switch to white, I would need over 2.3A. However, this will never happen with these games.
If you have a 5V/2A power supply, you can also omit the 7805 and simply solder in a bridge. You can also replace the 7805 with a DCDC step down converter, as it doesn't get as hot. A diode prevents polarity reversal of the input voltage.
The two jumpers are there to interrupt the serial connection to the MP3 module. This is for debugging and was not yet provided on the Ver1.0.
The gerber files can also be found here. PCBway Custom PCB
The Inner BoxIt is made of 3mm MDF. This was cut with a laser cutter, but it should also work with a saw and a drill. It would just be a longer work step. The side parts are simply inserted into the slots provided and glued with wood glue The other parts are simply plugged together in the shape of a circle after the LEDs have been glued on.Then simply insert the box construction and screw on the cover with the symbols after completion.
The LED stripe I bought is a 5 m long stripe with 150 LEDs. These have a distance of 33mm between the individual LEDs, which was used as an indication of the size of the game
The stripes were glued onto the vertical parts and soldered. The first LED is at the bottom right. The second LED is not used. On one Part we need just 5 LED's.
After connecting them, I wrote a small program to test all the LEDs. As you can see, it works. Led test software https://github.com/awall9999/Robust-LED-game/tree/main/Software/Test-Software
The Main Part First TestThe Led game module, as I call it, is connected to the back of the Game with spacers and wired as shown in the photo. As a joystick I have provisionally built a breadboard with 3 buttons for testing. These are connected to ground via resistors, and when pressed they switch to HIGH, just like the sensor buttons later.
+5V and GND are also available at the 12-pin screw terminals. These come directly from the voltage converter and not from the Arduino. External hardware, such as the buttons, can be powered here
First Testrun of Game 01
Finalisation Of The Main PartThe Gamemodul elektronic is screwed onto the back of the construction using four M3 screws with spacers. Treat all nuts with varnish afterwards so that they cannot come loose again.
The front panel with the sympoles is sprayed black with paint. Then apply double-sided adhesive tape to the back and apply racing paper. This serves as a diffuser. Fix everything with 35mm M3 screws. an again, treat all nuts with varnish afterwards so that they cannot come loose again.
The outer casing must be stable, because young people have a lot of strength and they should not injure themselves or destroy the game. The main panel is made of 400x400x15mm multiplex. The side panels are two times 400x50mm and two times 385x50mm, also 15mm multiplex
The corners were all rounded and the screws were all filled with wood filler.
All plans and measurements can be found on my Github
A frame was made from 4mm plywood and screwed onto the front to hold the plexiglass panels in place
Then everything was sanded, primed, sanded and sprayed with red paint.
Three 50mm holes for the buttons were drilled with a hole cutter, which I should have done before painting. I painted the inside of the frame black with acrylic paint. This way you can't see the glue on the tinted plexiglass pane afterwards
I used 3M double-sided adhesive tape to attach the 4mm plexiglass panel. I think this will hold bombproof.
Spraying the housing red was a good idea at first, but as I have a red button, this turned out to be a mistake afterwards. Red button on red background=invisible :)
So, as is often the case with new ideas, plan B and simply repainted the background.
Why these buttons. Through my own experience with my son, I know that I need a surface that is easy to clean. With mechanical push buttons, "all sorts of things" get into the gaps and the buttons have to be replaced every time. The stereotypical constant pressing of buttons would also cause the best mechanical components to give up, after a few weeks.. There are also ready-made industrially encapsulated sensor buttons, but these are not visible enough for children and teenagers with special needs.
I had tried to operate the buttons with ready to use ttp223 pcb's, but they were too small in terms of the touch surface and enlarging the surface with copper foil caused them to trigger uncontrollably. So I had to design my own PCB, and it works perfectly. The circuit is also based on the ttp223 chip. The side with the components consists mainly of GND and in combination with the front side, which only has lines as a surface, this results in a capacitor that reduces the sensitivity and you really have to touch the button to trigger it. I also had no more unwanted triggers.
And as i already mentioned, sensor buttons do not require any effort to operate, which is a huge advantage for people with various physical limitations
C2(22pf), R1(220R) and the LED are optional. With C2 you can reduce the sensitivity even more, but this is not necessary here. The LED actually only provides visual feedback.
Part list for the touch button:
- 1x IC TTP223 Sot23-6Pin
- 1 x 1206Capacitor 100nF
- 1x 1206 Resistor 220R
- 1x 1206 LED
And here the first test of the big touch button
Here is a short video of how I solder the SMD parts onto my PCB
The Buttons EnclosureThe buttons are made of 50mm plastic pipe plugs. The markings were sanded off the top. Then primed and sanded.
They were then painted with spray paint.
I wanted to use flexible adhesive to fix the pcb inside the housing. But as this is a prototype, I decided to use a slightly more complicated method. This way I can take the buttons completely apart again. As I said, gluing would be enough.
The two yellow and the red buttons are inserted into the 50mm holes in the front panel
Now switch to the back side and start with the game module.
I use 15mm spacers, which I have drilled out a little to secure everything with four screws. As you can see in the pictures, I have already attached the led strip to the screw block provided.
It took me some time to work out how to attach the buttons. In the end, the simplest idea was the best. After I had inserted the touch button electronics together with their holder into the button housing, I simply screwed wood screws through the plastic into the holder structure of the buttons. This keeps the buttons and the electronics firmly in place, but at the same time everything can be taken apart for repairs.
I had not yet planned anything for the loudspeaker, but in order to hear the sound better I decided to drill 5 small holes in the underside of the main construction. With two 4mm pieces of plywood that I laser cut, the speaker was screwed in place. The part with the hole was glued first so that it wouldn't slip.
With a small angle and a piece of wood, I built this construction to fix the 12V socket.
Then wire the whole thing up and we are approaching the final destination. So that the cables don't run around loosely, I fastened them with small pieces of wood. Adhesive won't hold under the permanent stress of use because, as I've already mentioned, the Game will be subjected to a lot, such as banging or stereotypical knocking against it. no adhesive can withstand this in the long term, which is why everything was screwed and sealed.
First of all, some good news. No external libraries are used for this project. So no searching around and reinstalling. The only important thing is that it is an Arduino board with 16Mhz, otherwise the timing for the WS2812b LED's is not correct.
If you are wondering why there are so many INO files in each folder, that's because I use the TABS in the Arduino IDE to work more clearly. Just open any file in the folder and the IDE will open all TABS
It is impossible to explain the programme step by step now, as it is already quite large. However, I have added explanations everywhere in the code itself. The individual games are also in tabs, so you can easily add more games without getting lost in the code. The tab LedControl is for the control of the led strip, therefore no extene lib.
Change Log
Led Game Ver1.1
- Fixed the pin10 issue to switch between menu and autoplay
- Added pin 5 to connect a Piezo for the buttons feedback sound
- Possiblity to change the Sound Volume (int SoundVol = "0-30";)
Led Game Ver1.2
- Bugfix. Clear the Screen before the new start animation starts
- After Power on or Power fail, the games stays in StandBy (so that no one is disturbed in the middle of the night)
- After the last game, the cycle does not start again, but the system goes into standby.
The SoundsThe sound files are all on the micro SD card. They can either be loaded directly onto the card or via the optional USB port.
Important: The DF mini only plays the sound files when the USB connection to the sound module has been disconnected!
A folder with the name 01 must be created in the root of the micro SD card. All MP3s are then copied into this folder. The sound files must be numbered from 001-254.
I have created an index.txt file that describes the sounds. You can use other or more sound files without any problems.
- 001 Bling
- 002 endchoice
- 003 Applause short
- 004 tatatatatata
- 005 Fail
- 006 dot
- 007 succsess
- 008 cartoon move
- 009 coundownS
- 010 countdownL
- 011 end song
- 012 sad end
- 013 Klick
- 014 Poweroff
- 015 moveplayer klick
- 016 Laser01
- 017 ufo incomming
- 018 explosion short
Some of the files I use are from https://freesound.org/, others I have created myself. https://github.com/awall9999/Robust-LED-game/tree/main/SoundFiles/
The DFmini is controlled in the "sound" tab. Here, too, I have dispensed with the external lib. I like to have control over the hardware :) Just call PlayVoice(number of file); and you're done.
In itself, only a string is sent serially to the DF mini. The details are in the data sheet of the module, but here is what the string looks like.
byte DFData[] = {0x7E, 0xFF, 0x06, 0x0F, 0x00, 0x01, 0x01, 0xEF}; //Play sound01 in folder01
Wall MountingThe game is designed for wall mounting. This is so that the special player can always find it in the same place. This also eliminates the risk of it being thrown at someone. Believe me, I know what I'm talking about.
Two wooden bars with a length of 36cm, are screwed to the wall. I have drilled a hole in the next room so that nobody can reach any of the cables. You can install this game in a teenager's room, as in my case, and you don't always have everything under control there. Safety is the most important thing with such installations.
The housing is then pressed against the wall and secured from the sides with screws. Of course, these must not stick out.
Because I use a DF mini MP3 module serially, but this only supports 9600 baud, I had a noticeable delay in the sound output when I pressed the buttons. To get round this, I built a piezo module to allow a aucustic feedback without delay when the button is pressed. It's not the best solution but it works. For the next version, I will use a different sound module. The Pin D5 is used for this item.
I then simply screwed the piezo modol into the main case with two wood screws and spacers.
- 1x BC546 or equal
- 1x piezo speaker
- 1x Resistor 1K
In normal use, you can switch between games via the simple menu. The blue dots then correspond to Game1, Game2... and so on. To make the game skip this menu and bring up all games one after the other, simply connect pin D10 to ground. This makes the game even easier for the player.
These changes are available from version 1.1 of the software https://github.com/awall9999/Robust-LED-game/tree/main/Software
GamesHere is a breakdown of the game screen, with the corresponding resolutions. So that you know which games are feasible.
I have programmed three simple games so far. I deliberately left out a score system because I think 3 smilys are reward enough and easier to understand
Game 1: Catch the dot
Dots fall down slowly from above. You have to try to catch them with the triangular player figure by moving it left and right with the two yellow buttons.
Here is the video of the game Catch the Dot.
Game 2: Guess the colour
A series of coloured dots line up. Then the triangle changes colour while the music is playing. You must now use the yellow buttons to move the triangle to the dot that has the same colour as the triangle. If you think you are right, press the red button.
Game 3 : Shoot the dot
A dot will move across the screen for a while. When it stops, use the yellow buttons to move the triangle to the same position as the dot and shoot it with the red button.
Every time you get it right, you get a round of applause and a green smiley. If not, you get a disappointed red smiley. But that's not bad, next time you'll do better.
For your information, if no button is pressed for 1 minute (default setting), the game switches off. This can be changed in this variable:
unsigned long GoToSleep = 1; //Game enter standby in X minutesF
Comments