Introduction: Retro Pac-Man Clock

Picture of Retro Pac-Man Clock

Build an interactive Pac-Man bedside clock, with a touch screen, and animated Pac-Man figures.

This cool project is surprisingly simple to make and is a great gift for those nostalgic Pac-Man addicts.

As well as being able to interact with the Pac-Man game, you can record a sound of your choice for the alarm.

Step 1: Gather the Materials

Picture of Gather the Materials

The Retro Pac-Man Clock is made from 5 key modules along with a case that is laser cut from MDF wood.

  1. Arduino Board - Arduino Mega 2560 (Items 1, 2 and 3 can be purchased as one bundled order)
  2. Touch Screen Arduino Shield - 3.2 inch Mega Touch LCD
  3. Expansion Board Shield Touch Screen - 3.2" TFT LCD Display + Touch Screen for Arduino's Mega 2560 (*Note: Avoid Sainsmart see section 4 below)
  4. Real Time Clock module - DS3231 RTC
  5. Voice Recorder Module - ISD1820 Voice Recorder

Enclosed in the instructable is the necessary Arduino code, links to libraries and any special graphics files you will need to build the project.

In the list above there are links to suppliers of parts that are similar to the items used in the prototype. You are free to source the parts from wherever you see fit to ensure costs are minimized.

In addition to these modules, you will require the following components

  1. Panel Pins x 4 for fastening front case to body
  2. Two Part Epoxy Resin for gluing case together
  3. Sandpaper sheets - 4 sheets each of fine and medium grade for sanding wood
  4. Electric Drill with 3mm diameter wood drill bit.
  5. USB Cable 1m length
  6. USB charger (used for the power supply for the clock)
  7. 150mm x 30mm x 3mm MDF or Styrene to build a bracket to hold circuit in place within case
  8. Hot glue gun

Optional Auto Back Light Dimming Components only required if a Bedside Clock

  1. Resistor 270k Ohm
  2. Zener Diode 3.3v 0.5 watt
  3. Resistor 47 Ohm
  4. Light Dependent Resistor (LDR)

Step 2: Build the Case

Picture of Build the Case

The case is made from 9mm and 3mm MDF wood which has been laser cut to shape. Below are files with the dimensions and number of parts required that you can send to a local laser cutter company to do this for you.

1. Front Panel

The front panel is sandwiched between two side rings and glued into place with 5-minute two-part epoxy glue. Be careful not to overdo the glue as it will show if it oozes out the sides.

In addition to this, a small piece of material is glued over the front cover grill to provide a nice effect and also allow the alarm speaker sound to carry out the front of the clock.

Four Panel Pins have been inserted into the corners of the inside of the front panel and glued into place with approx 10mm protruding back into the case. This will be inserted into the back panel so that it can be removed during testing.

2. Back Panel

The back panel consists of five side rings followed by the back case which is sandwiched by the final side ring. Once again and glued into place with 5-minute two-part epoxy glue. Be careful not to overdo the glue as it will show if it oozes out the sides.

Using the hole positions from the front panel pins carefully mark and drill 3mm holes and check the front and back units connect together.

3. Sand and Paint Components
Once you have the front and back units assembled you can choose to paint any colour or just sand lightly by hand and cover with a clear lacquer spray. I chose the latter because I quite liked the stressed wood effect that the laser cutter left after a light sanding. I had to put 3 to 4 coats of clear lacquer spray on the wood to get it sealed as the wood is very porous.

Step 3: Assemble the Electronic Modules

Picture of Assemble the Electronic Modules

The overall circuit contains a Real Time Clock, Arduino Mega, Sound Module, Touch Screen and a Screen Sheild.

1. Real Time Clock

Mount the Realtime clock on the back of the Arduino Mega as in the picture provided. I used a hot glue gun and packing foam to ensure they are not touching and there is some cushioning to absorb movement. In my case, I soldered 2 of the RTC legs directly to the Arduino and used hookup wire to connect 5v and GND to the Arduino.

2. Sound Recording Module

These are really cool and easy to use. In a similar fashion as above, use foam and hot glue to position the module and the speaker on the back of the Arduino taking care to ensure they are insulated from touching. The Sound Module is triggered by D8 on the Arduino, so this and the power supply need connecting as per the circuit diagram provided.

3. Auto Backlight Dimmer (Optional)
If you intend on using as a bedside clock, then you will likely want to automatically dim the backlight at night so it doesn't affect your sleep. (If not then you can skip this step!)

Unfortunately, the backlight in the TFT screen is hard wired into +3.3v and cannot be adjusted with the Arduino. This means we have to disconnect it and reconnect to a PWM pin on the Arduino to control the Backlight brightness. I wanted to do this with minimal damage to pins or tracks on the components so took the following approach.

Follow the steps below carefully

(a) To achieve this a Light Dependent Resistor (LDR) is positioned at the back of the unit to detect the light. Drill two 3mm holes in the case and push the LDR legs through the holes. Use hot glue on the inside of the cabinet to hold the legs in place. Solder two wires on the inside of the case and connect them as per the circuit diagram. Add a 270k Ohm Resistor to A7 of the Arduino as per the circuit diagram.

(b) Remove the TFT Display, and place it on a firm surface. Identify pin 19 (LED_A) and carefully remove a few millimeters of the plastic at the base of the pin. Bend the pin flat and away from the connector as per the picture above. Check that the TFT Sheild can plug in snugly and that the bent pin does not obstruct the plug or socket.

(c) Solder a 47 Ohm register to the bent over the pin and connect a wire from the resistor to D9 of the Arduino Mega. The Arduino D9 pin can sink up to 40mA so the resistor limits this to less than this. Attach a 3.3v Zener Diode to the same pin (LED_A) and connect this to earth as per the diagram. The purpose of this is to protect the backlight from overvoltage as it will regulate the voltage to 3.3v.

4. TFT Screen and Arduino Shield
Carefully push the 3.2' TFT Touch Screen connectors into the TFT Arduino Shield. Then carefully connect to the top of the Arduino as per the picture provided. The RTC has a battery so will retain the correct time even if power has been removed. The Alarm time is stored in Eeprom on the Arduino which means it will be retained if there is a powercut.

Step 4: Upload the Code and Test the Clock

Picture of Upload the Code and Test the Clock

The Project will require the following files and libraries to be loaded before it will compile and run. The code is unique and built around the capability of the libraries, the hardware, some custom graphics and other projects that I've borrowed from.

Please Note: Development of the code for this project has used IDE v1.06 and some of the required libraries are dated. This means some people are having issues with the new IDE version 1.6 and above when loading code. Therefore in the interests of simplicity, I recommend people use IDE v1.06 and have included the correct version library files in zip files at the bottom of step 4 of the instructable.


1. Arduino IDE

I have been using an earlier version of the Arduino IDE, therefore in the interests of simplicity, I recommend that you download Arduino IDE version 1.06 on your desktop machine before you install the code. You can get his version from here.

2. Libraries

These need to be downloaded and added to the IDE (Integrated Development Environment) that runs on your computer, used to write and upload computer code to the physical board.

  • UTFT.h and URtouch.h located in zip file below
  • Time.h located in zip file below
  • DS1307RTC.h located in zip file below
  • Wire.h and EEPROM.h are already included in IDE V1.06

Credit for UTFT.h and URtouch.h goes to Rinky-Dink Electronics I've included these zip files as it appears the source Website is down.

4. TFT Screen Variations

The vagueries of TFT screens and manufacturers have led to these notes.

(a) Sainsmart - People who have purchased a 3.2' TFT screen that is branded Sainsmart on the back of the TFT device have found they have to modify libraries to resolve display issues. My advice is to avoid these and purchase the same type as displayed in the instructable parts list. If you have purchased a Sainsmart TFT Display already there is a fix below

Edit the file "initlcd.h" and modify the following line from

LCD_Write_COM_DATA(0x01,0x2B3F);

to

LCD_Write_COM_DATA(0x01,0x3B3F);

You will need to restart the IDE and then reload the code to the Arduino.

(b.) TFT Controller Chipset - People who have purchased a 3.2" TFT screen may find they could also have one of two different chipsets "SSD1289" or "ILI9341"

The annoying thing is that it's not easy to distinguish the difference online. The good news is that its easy to fix. If you get a blank screen after loading the code then it's probably because it's an ILI9341 controller. To fix you need to make the following changes to the code.

Edit the code and modify the following line of code from

UTFT myGLCD(SSD1289,38,39,40,41); //Parameters should be adjusted to your Display/Schield model

to

UTFT myGLCD(ILI9341_16,38,39,40,41); //Parameters should be adjusted to your Display/Schield model

Now try reloading the code to the Arduino.

5. Graphics Files

There are a group of bitmap files that I have included below that need to sit in the same subdirectory as the Arduino code when you begin to load into the Arduino. Therefore download the 17 files below and use the IDE to load.

6. Setup the Clock

Once the code has loaded successfully press the center of the screen and this should bring up the setup screen.

Use the menu to set the time and the alarm in 24-hour format.

Press the SAVE button to store the setting.

The RTC has a battery so will retain the correct time even if power has been removed. The Alarm time is stored in EEPROM which means it will be retained if there is a powercut.

7. Testing the Alarm

The Sound module is used to provide the Alarm. The ISD1820 is controlled by the Arduino D8 pin. Sound can be easily added by playing sound into the microphone while simultaneously pushing the record button on the ISD1820. In my case, I recorded the original Pac-Man introduction music from an audio file played through another device.

Once the sound is recorded the recording can be tested by pushing the PLAY-E button which should play the sound through the speaker.

Use the setup menu to set the clock time and the alarm time a few minutes apart. Be sure to "SET" the alarm and push the "SAVE" menu buttons. Once back to the main screen the Alarm should sound when the time occurs.

Turning off the Alarm can be done by pressing the center of the touch screen panel resulting in the Setup Screen.

8. Interacting with the game

The game has been designed to roughly emulate the original rules. The rules are as follows

  • Pac-man can be changed to Ms Pac-man by tapping the Pac-man icon in the setup menu
  • If Pac-Man eats a fruit the Ghost turns blue and can be eaten to score points
  • If Ghost is red and touches Pac-Man then Ghost gets points
  • The user can interact with Pac-Man by touching the LHS, RHS, Top Middle or Bottom Middle of the touch screen to issue commands. Pac-Man will only respond to a direction to go in the opposite direction to the way of travel. i.e if going left can be told to go right. If there is enough interest in the project I can add all directions later.
  • Every minute the fruit resets and any characters that have been eliminated are returned to the game.
  • Game scores reset at 95

When left alone the characters battle out the scores by randomly wandering through the maze. It's fun to watch and interact.

9. Touch Screen Calibration
Some makers have found that the Buttons on the Setup Screen do not align with the TFT touch controls.

In these cases the Touch Screen needs calibration. This can be easily done by using the Touch Screen Calibration code and instructions provided in the URtouch library. Follow these instructions if you observe this issue.

Step 5: Putting It All Together!

Picture of Putting It All Together!

1. Adding External Power

The final step is to add the external power. Using a drill bit, add a hole in the back of the cabinet. Thread the USB cable through the back panel and then attach the USB cable VCC, GND, D+ and D- wires to the base of the Arduino USB Connector as per the circuit diagram. This has two advantages, firstly the USB input to Arduino Mega Boards has over current protection, and secondly you can use the USB cable to upload code changes without having to dismantle the box.

Hot glue the power cable insulation to the back of the Arduino to provide protection from cable tension when assembling front and back panels.

Add a cord grip to the cable by placing a cable tie tightly around the cable on the inside of the case on the power cable 6-8 cm from the Arduino connection. The cable tie should avoid tension on the joints when the USB cable is pulled by butting up against the inside of the case.

2. Mounting the Electronics in the case

Using 3mm thick Styrene or MDF cut out two brackets that are 105mm width x 12mm height. Cut a section out 95mm x 6 mm as per picture above.

Place the Circuit on top of the front panel and power on the circuit so you can see the front panel screen, Carefully position the brackets and screen in position and glue into place with Hot Glue.

Carefully do one bracket corner at a time and check the orientation and position of the screen. Let each glue joint cool before moving onto the next.

The outcome is a snug fit with a straight screen which is centered in the cutout hole.

3. Final Assembly

Gently push the Front Panel onto the Back Panel taking care to align the panel pins with each hole and gently pulling the USB power cord to take up the slack in the back panel. The cord grip is useful here and should protect any damage to wiring.

Plug into the USB charger and you're good to go. Enjoy!!

Step 6: DK and Other Themes

Picture of DK and Other Themes

The Retro Pac-Man Clock code can be modified to provide other themes. The USB cable means there is potential for other Makers to develop their own unique themes.

Included is an initial version of Donkey Kong. The clock functions as usual and touch screen control is in place to control Mario.

*** Production Version 3 now released in this Instructable ***

Up, Down, Left and Right controls can be used to change the direction of Mario only by touching the top, Bottom, Left and Right of the screen.

To jump when traveling left or right touch the top of the screen. To activate the setup menu press the centre of the screen.

I hope this provides some inspiration for others to develop further!!

Comments

ajayt7 (author)2017-09-14

Beautiful project

TechKiwiGadgets (author)ajayt72017-09-14

Thanks for the feedback :)

josefn1 (author)2017-08-18

How do I view the time in a 24-hour format?

TechKiwiGadgets (author)josefn12017-08-18

Hi

I haven't included 24Hour Clock Option in the code yet. One other Maker contacted me below in comments and had added the feature to the code.To do this requires resizing the Font Size of the digital readout and modifying the Hour of Day code.

josefn1 (author)TechKiwiGadgets2017-08-20

Is there a chance that it will code for a 24-hour format?

Could you post the code only for clocks, but without PacMan?

TechKiwiGadgets (author)josefn12017-08-20

I'll include in the next release which will be in the next few months.

JeromeS29 (author)2017-08-02

is the shield for the LCD required? why please? thanks and looks great, I have some LCDs already (quite a few different ones actually) is it somewhat easy to use different LCDs with your code?

thanks!

Hi
1. The shield is used to reduce the supply voltage from 5v to 3.3v so the screen is not damaged so is definitely required.

2. The code is written specifically for a 320*240 resolution display that is supported by the UTFT.h and URtouch.h libraries developed by Rinky-Dink Electronics.

The driver files provided in the instructable have a list of supported LCDs with the same resolution so I would suggest you check these to see if yours are on the list.

Some other makers have experimented with various screen sizes which have been somewhat successful in the comments section. My recommendation is to stick with the proposed screen however it's worth investigation options.

Let me know if you need further help.

I have a couple 320*240 lcd touch screens, but the pin layout is completly different than the one you show, it can actually fit onto a regular uno by default, do you have any idea how to make it work? I have mega's so not necessary to make an uno work, this board is similar to the ones i have but not quite it https://www.aliexpress.com/item/2pcs-2-4-inch-TFT-...

i have gotten the screen working with the SPFD5408 driver (adafruit) with a few small changes (invert screen, and colors are inverted but easy enough to fake fix by entering wrong RGB values for colors)

Hey, nice work. It's worth trying various combinations if you already have the screen.

From what I understand, the Arduino UNO does not have enough Flash Memory (32K) to contain the code which is why I used the Arduino Mega which has 256K Flash.

Also worth noting, the current design uses a parallel interface on the TFT screen to draw the screen. Some have managed to get different TFT screen working, however, the interface turned out to be Serial which meant the screen animation was too slow.

If you get another combination working please publish pictures and a video as would be great to see!!

kevinmaker2018 (author)2017-07-28

Cool project.

Thanks

Ridwan6509 made it! (author)2017-05-17

I made it 2 version..thanks

Wow they look amazing!! Nice work. I really like the colors uoube used.

JmanNZ made it! (author)2017-05-06

Thank you for a sharing your great project. (I built it)

One small note the RTC modules are designed for rechargeable batteries and most of us will be using CR2032 these NOT rechargeable and as such should not be charged. The CR2032 will last years anyway. see the pics below to remove the diode to prevent charging the non rechargeable batteries

Regards

Jman

TechKiwiGadgets (author)JmanNZ2017-05-07

Awesome nice work. Can you please post a picture of your clock here for others to see?

TechKiwiGadgets (author)JmanNZ2017-05-06

Thanks Ill put a note in to remind others :)

TechKiwiGadgets (author)2017-05-07

DK version with game play has been added in section 6

https://www.youtube.com/watch?v=wsrWozDJLpc

tronicgr (author)TechKiwiGadgets2017-05-07

Thanks for the demo gameplay. I think you placed a wrong video link in section 6 though... ;)

TechKiwiGadgets (author)tronicgr2017-05-07

Thanks updated

TechKiwiGadgets (author)2017-05-06

DK beta version of clock now available in last step of Instructable

tronicgr (author)TechKiwiGadgets2017-05-06

This layout is even better than pacman...! I think you should make the character jump when you touch the screen, so you can jump over the barels ;)

TechKiwiGadgets (author)tronicgr2017-05-06

Thanks. Current Beta you can Jump!! Just tap top of screen :)

HydrogenCore (author)2017-03-15

Hello, Can I connect the screen directly to the Arduino Mega? remove the Expansion board shield? Thanks

The display works at 3v and the Arduino at 5v so the screen will end up being damaged. However you can do so if you use resisters to drop the voltage. The problem is it creates a whole lot of wiring and soldering so thats why I recommend the shield.

tronicgr (author)TechKiwiGadgets2017-03-15

I found this tft that I think its perfect for the retro pacman clock... no need for shield, it has level shifting chips on it already and plugs directly on the ATmega2560: http://www.ebay.com/itm/272219211370

It even breaks out some unused pins! :)

NeilS25 (author)tronicgr2017-04-15

I have found the solution for the touch portion, use this library

https://github.com/adafruit/Touch-Screen-Library

with these DEFINES

//Portrait

#define YP A2 //

#define XM A3 // X=0, Y=0,

#define YM A0 // Bottom left hand corner

#define XP A1 //

//Landscape

//#define YP A3 //

//#define XM A0 // X=0, Y=0,

//#define YM A1 // Bottom left hand corner

//#define XP A2 //

tronicgr (author)NeilS252017-05-02

Thanks for the solution for the touch. Its for this screen here right? http://www.ebay.com/itm/272219211370

What did you use for the UTFT setting?

"UTFT myGLCD(ILIxxxx_16,38,39,40,41); "

I tried all the known models from UTFT, but the screen was staying black (only backlight was on).

I just hope this is not just a defective screen...

NeilS25 (author)tronicgr2017-05-02

The UTFT_Demo_480x320 works as is.

it uses,

UTFT myGLCD(CTE32HR,38,39,40,41);

This is what worked for me.

tronicgr (author)NeilS252017-05-03

Ok, I had bad screen... I replaced the R1 on the bottom of the PCB of the screen with a 10 Ohm resistor and now I can see the image of the pacman clock. I still cannot setup correctly the touch. I used the Adafruit touch library and corrected all the references to pass the values of the library to the main code but now every time I touch the touch screen it resets the arduino... hmm... May I ask you for the code with the changes you did for the touch to work? My email is " tronicgr at gmail . com "

Thanks

Thanos

NeilS25 (author)tronicgr2017-04-14

I have this screen and the screen works well but so for I can't get the touch to work and can't find any info on the screen.

They sent me the UTFT library but say they have no other info.

Any help would be much appricated.

DanL147 (author)tronicgr2017-04-06

Have you been able to locate any documentation or pinout or even model number for this display? I was trying to determine if there was a way to accomplish the backlight dimming for this display, but have no documentation to go off of.

HydrogenCore (author)tronicgr2017-03-17

This one got different resolution. Are you able to adjust the code? Is so please share. Thanks.

tronicgr (author)HydrogenCore2017-03-17

Thats the plan, as soon i have revised code for the larger screen working I'll share it on thingiverse remix files, follow that for updates as soon its ready. :)

http://www.thingiverse.com/thing:2183736

TechKiwiGadgets (author)tronicgr2017-03-15

sounds like its worth checking out

Thank you! I'm glad I asked...

TechKiwiGadgets (author)2017-05-02

Calling all those who have made a unit. If you are interested in testing a Donkey Kong version please message me and I will send beta code.

NeilS25 (author)TechKiwiGadgets2017-05-02

Sounds cool, I'm interested.

malimaks (author)2017-04-16

TechKiwiGadgets great project and thanks for share. I build clock
and I have one queston regarding time. Is it possible ti show 24 hour
time instead 12 hour (am/pm).

Thanks in advance and best regards.

Robert

TechKiwiGadgets (author)malimaks2017-04-16

hi

Nice work. Please post a picture so we can see the result. Yes the code can be modified to show 24 hours time. I will add that to the list of suggested enhancements and if a few more ask for it I'll include.

Ps. Do me a favour and press the vote Button at top of instructable screen for this instructable in the microcontroller contest!!

malimaks made it! (author)TechKiwiGadgets2017-04-18

hi,
manny thanks for reply. I already voted in contest.
Also I try to change sketch for showing 24 hour time format. Now i testing this change and for now is ok.
Also i will make 2 clock. One with your design, and one like old pacman cabinet game. When I finish I will post photos.

Best regards.

TechKiwiGadgets (author)malimaks2017-04-18

nice work!! Looking forward to see the pics of the pacman cabinet style. Great idea

mikl_moi made it! (author)2017-04-14

hello

Thank you for your work, it's great.

I have everything installed, the display works (ILI9341), but the touch screen does not work.

I checked the wiring, the only thing I did not put is the zener and resistance.

I did not put the ldr.

I changed the library for the ILI9341 because I had the white screen.

Can you help me to make the touchscreen work.

thank you

thank you

NeilS25 (author)mikl_moi2017-04-14

Did you run the URTouch_Calibration sketch in the examples and update the URTouchCD.h file.

I had trouble till I did this step.

mikl_moi (author)NeilS252017-04-15

I've tested with URTouch_Calibration sketch, the result is :

first line 0000000

second line 00000000

third line is always the same value, i've testing 15 x at different point off the screen and always same result

i think that my touch screen is ko

TechKiwiGadgets (author)mikl_moi2017-04-15

Couple things to try.

1. Check there are no physical wires/connections to D0-D7 on the Arduino or TFT shield. I had a problem with one unit where D3 had been used on a previous project which is the interrupt pin for Touch screen.
2. Remove Che TFT shield and check if pins are clean and not bent.
3. Remove external power. Try a few different USB ports to power Arduino.

tronicgr (author)mikl_moi2017-04-14

I had trouble too making the touch work, when i had it plugged in a computer usb port. When i used a wall usb charger the touch works fine.

Must be the voltage issue, PC usb is 4.95v while wall usb chargers are 5.2v

mikl_moi (author)tronicgr2017-04-15

i've tested with external power supply 9 v on black power connector.

don't work

TechKiwiGadgets (author)mikl_moi2017-04-14

Nice work, well done!!

Sure thing happy to help.Others have used this model with no issues.

Just out of interest pull the USB port out and push back in to reset the hardware.

Ive noticed after a code load sometimes the touch screen doesn't initiate.

If there are still issues direct message me and I will help out.

TechKiwi

DanL147 made it! (author)2017-04-13

I just finished my clock in black. (Notice the Ms Pacman.)

About This Instructable

65,830views

577favorites

License:

Bio: Crazy about technology and the possibilities it can bring. I love the challenge of building unique things. My goal is to make technology fun, relevant ... More »
More by TechKiwiGadgets:Eco Friendly Metal Detector - ArduinoRetro Pac-Man ClockInteractive LED Shoes - Arduino
Add instructable to: