Scoreboard Controller Retrofit

by aidenschramm in Circuits > Microcontrollers

1596 Views, 5 Favorites, 0 Comments

Scoreboard Controller Retrofit

IMG_20210107_100538396_HDR.jpg
capstone

7 segment displays are basically ubiquitous in a variety of electronic devices and microcontroller projects. This instructable details our process of modifying number display with a twist, a vintage Daktronics scoreboard to be jointly controlled by an Arduino and a Raspberry Pi via a web interface. The Arduino directly controls the relay boards with the use of a handful of 74HC595 shift registers communicating with a Raspberry Pi using serial over USB to receive “commands” from the website and its accompanying “API”.

This was our senior capstone project completed during a single semester, and was done by two tired high-school seniors in 2 hour blocks at the break of dawn, so some “uniqueness” may be present.

Supplies

After some testing and experimentation, we ended up using the following:

  • Scoreboard
  • Arduino
  • Raspberry Pi
  • Breadboards
  • Wire
  • 5 16-Channel Relay Boards
  • Real Time Clock (RTC)
  • 74HC595 Shift Registers
  • +12VDC and +5VDC Power supplies
    • *We used laptop power supplies for +12VDC and a step down for +5VDC*
  • Distribution Blocks
  • 12 AWG wire
  • Standoffs

Assembly of Logic Board

wassssd.png
image.A29Y00.png
image.UBA000.png
image.2E1800.png
image.J1F200.png
image.MIMB10.png

To begin assembly, a scoreboard is required. This scoreboard was produced by a local company named Daktronics, and was manufactured in the early 1980’s. It is made entirely of aluminium and was pending recycling before we acquired it. It was saved, stripped down to a shell for cleaning, bulb replacement, a quick paint job and new decals. Boards of this vintage were built in either 13 (5 x 3) or 20 (7 x 4) bulb configurations. The wiring behind them is very straightforward, utilizing only 9 wires to control all the bulbs. Our board utilizes the larger 20 bulb configuration but with lower power 11 watt incandescent bulbs. Any number can be displayed by powering the correct combination of bulbs.

The external control panel accompanying the original logic board was lost, and the latter did not provide the functionality we desired, so it was removed. Ensure that the logic board is smaller than the available space, leaving approximately 1 to 2 inches around the board for cable management. Leave plenty of space on each end of the board for power cables and distribution blocks. We tested the approximate size and placement of each component using extra devices as temporary standins before wiring began.

Measure and trace the relay boards as they will take up the bulk of the available space, and leave roughly equal amounts of space between each for attaching the cables. Measure and space your neutral and 120V distribution blocks appropriately.

On the other side or the board, measure where you will place your Arduino and Raspberry Pi. An RTC module should also be placed nearby, to be used as a timekeeper when the board is powered off. Additionally, depending on the power supply configuration, a voltage step down may be required to provide appropriate voltage to some components. A +12VDC central distribution block is used to power the relay boards, which in turn provide +5VDC power to the breadboards.

Breadboard Layout and Wiring

image.JGF000.png
O9AlmuQ2aXai002HEODCNGfKT_9EhPeGFaZgW1Yy7b7-FPgh7BPh6gPNiAQZr_LHe1TTYuR6qrw6DEQ-6_0Ki780uGaRVLAvqyd2.png

As seen in the photos, there are a lot of wires used to power and control the logic board. To start, we’ll go over the layout of the breadboards. Each breadboard has a few 74HC595 shift registers chained together to simplify the process of programming and addressing each 7 segment digit. Every shift register acts as a single “digit”, which is then outputted in binary form to each segment controlled by the relay boards. As an example, to display the digit “8”, a single shift register would output 11111111. The arduino uses 3 wires to control the shift registers, a data pin, a latch pin, and a clock pin.

Arduino Code

Below is the code we used for the arduino, with brief comments explaining the purpose of the code and configuration. Of note: the naming of the pin definitions, specifically those prefixed with “inning” are responsible for not only controlling the inning, but the clock digits as well. As such, when the rtctime() function is called, the current time and the inning are shifted out.

Web Interface Frontend

image.XR8800.png

The web interface is the least polished portion of this project, though it is indeed functional. Vanilla HTML/JS/CSS sourced from the following codepen by Ender (@pkmn9060) is used as a base, which was haphazardly “adapted” to provide additional functionality as needed.

Below is a github repo containing the files for both the frontend and the backend:

scoreboard-web

Web Interface Backend

The backend is responsible for handling the network requests performed by the javascript and sending the appropriate data to the serial over USB connection to the arduino. This was accomplished using python3 with the flask and serial libraries. Each “API” endpoint corresponds to a single digit “command” sent to the arduino which induces the desired behavior. As an example, when an http GET request is made to “/homeplus”, the message “0” is sent over serial, which is then interpreted into the decimal equivalent of the ascii code, in this case 48.