Digital Window Sticker (Arduino Controlled) using ATMega328 microcontroller
A bumper-sticker sized L.E.D. matrix that displays images in sequence from an SD card, to produce an animated sign or “window sticker.” Arduino controlled! Also includes Windows, Mac, and Linux code for converting .xbm image files into Digital Window Sticker files. Perfect for a shop or home window, or a fun desktop sign!
Step 1 Parts List
Arduino Compatible Bare Bones Board KIT (BBBKit)
Ask for the LM7805 regulator!
Optional, see below…
SEE IMPORTANT NOTE BELOW
See PCB note below
See Header Receptacle note below.
See SD-MMC Card note below.
Low Capacity SD Card (e.g. 512 MB)
9-volt power source
Solder and 22-gauge wire of various colors
The BBB Kit is an Arduino clone produced by moderndevice.com. At $15.00 for a complete Arduino kit, it is one of the least expensive options. I could have cut a few dollars off of the cost by using an alternate Arduino board and a separate supply list for each Arduino component, but the convenience of a single supplier for the Arduino portion of this project was worth the $3 to $5 I may have saved. You should be able to make this project with any Arduino. It can be prototyped on a breadboard as shown below, with a Boarduino, a Bare Bones Board, or other breadboard adaptable Arduino clones. You can also purchase the BBB fully assembled for an additional $10. The owner of moderndevice.com is very helpful and will work with you if you run into problems. Download the BBB assembly instructions and follow them carefully. MAKE SURE to request the LM7805 voltage regulator for the board, or purchase one separately and use it in place of the smaller regulator that he ships by default.
The USB BUB Board plugs into the BBB (Arduino). It has the FTDI USB to serial converter needed to program your BBB Arduino. If you have already have an ICSP programmer, or an Arduino with a ZIF socket for programming the Atmega 328p, it is not necessary to purchase the USB BUB, though it is useful if debugging the microcontroller code, through the Arduino IDE’s Serial Port Monitor.
IMPORTANT NOTE regarding the 2416 Dot Matrix Displays. As you view my construction photos you will notice that my 2416 Dot Matrix Display boards don’t match. One has white (when not powered) L.E.D.s, the other has transparent ones. The transparent set is slightly dimmer than the diffused set. When I contacted Sure Electronics about the problem they agreed to send a replacement board. It arrived just in time to complete this article, and the final photos and introduction video show the matching set. Unfortunately, the new board they sent me uses the dimmer, transparent L.E.D.s. Be sure to let Sure Electronics know that you need a matching set! You may want to order 3 boards just to be safe. Also, the green boards came out recently. I don’t have experience with them, but had they been available when I made my purchase I would have used the green. Finally, remember that Sure Electronics is based in China. Plan on waiting a while for your product to arrive, and arrange for someone to sign for the package. The folks there are easy to work with.
PCBs: If you wish to follow the step-by-step instructions I am providing you will need the Radio Shack printed circuit board, and you will need to trim the ends of it to fit properly in the enclosure. This also means you need a right-angle connector on the 2×8 Shrouded Box Header (that the ribbon cable from the displays plugs into). The right-angle connector is required so that the pins can be bent to bridge the breadboard gap on the Radio Shack PCB. If I were to start from scratch, I’d try using one of the following prototype PCBs, which would also allow you to wire-up a straight 2×8 shrouded box header:
- Prototype PCB with 3-holes per pad, pads spaced .1″
- 103RAW Wireless Prototype PCB with copper traces to each pad which then can be cut, preventing the need for (as many) wires
- Create a custom printed circuit board
If there is enough interest, I will design a circuit board and have them manufactured.Enclosure: The project enclosure is an almost perfect fit. You’ll see in the steps and photos that follow, that my strength is not in cutting plastic enclosures. You will hopefully do much better and provide feedback on better methods. Mine works great, but isn’t great looking. As you will see, the enclosure was something of an after-thought for me. I had an entirely different enclosure planned, but this worked out much better. (More information in following steps.)
Jameco*: Each of the items listed above with an asterisk(*) can be purchased from Jameco, but require a minimum order of 10, so if calculating the cost keep this in mind. (It is always good to have extra parts!)
Header Receptacle:The BBB has 18-pins for the power-supply and Arduino pins to plug into a breadboard. Use the 20-pin header receptacle to plug the BBB into your printed circuit board as shown in the following instructions, with the following variations:
- I did not have a 20-pin header receptacle, but I did have 2 8-pin receptacles. This will work fine. It is a tight fight to get them to align properly, but it works. Just make sure to follow the pictures provided. You’ll notice that 2 of the BBB pins are left unconnected.
- If you use the 20-pin header receptacle, 2-pins will remain unconnected. Mark your board so that when you plug-in the BBB you know where it goes.
- You could also forgo the breadboard pins on the BBB, and the socket on the secondary PCB, and simply run wires directly to the needed locations. This may provide some flexibility with enclosures.
The 2×8 Shrouded header box is for plugging in the ribbon cable from the display matrices. As mentioned above under PCBs, the right-angle version is needed if you have a gap like that on the Radio Shack PCB. You could possible use the same board and cut copper traces to make a straight header box work properly. I purchased my header box from a local supplier (M.C. Howards Electronics in Austin, TX), but they only had a few and I’ve not seen any more in subsequent trips. The link provided above was the first one I found that had a matching part, but I don’t have experience with the company.
SD-MMC Card: Wow, this is an over-priced component if there ever was one. It works great! In fact, don’t bother with any of the Arduino SD card Shields. They all seem to use a resistor network to drop the signal voltage to the 3.3 volts required by the SD card. This will not work with all SD cards. In fact, my card worked for only a few minutes this way, and when I put it back in the PC I had to format it, and then it never worked again with the Arduino until I used the 74HC4050 for the signal level conversion. I had other cards that didn’t work at all without this as well. If you decide to use a different circuit board, and could plan out the fitting in the enclosure better, I would try to solder a much less expensive SD card socket to the board directly, instead of using the costly breakout board. Incidentally, NKC Electronics has the same breakout board listed for much less, but it was unavailable when I last checked. I don’t remember if the breakout board includes header pins. You will need 11. A spare set can be ordered from Jameco: http://www.jameco.com/webapp/wcs/stores/servlet/ProductDisplay?langId=-1&storeId=10001&catalogId=10001&productId=53532, for $0.75.
SD Card Addendum: I’ve commented at length in the comments (below) about alternatives to the relatively expensive SD Card breakout board. In short, the photos below show experiments I’ve done with spare parts on a breadboard, using the alternatives for the SD Card socket. Please read the comments and related Instructables for more information.
As for the SD card itself, smaller is better! The Arduino code provided works only with a FAT16 filesystem, and only reads files from the root directory. That means you have a limit of 512 image files on the card, and the files are only 100 bytes. A very small card will work fine, and a card larger than 2GB probably will not work at all. There are FAT32 libraries for the ATMega328, but in the time I had, it was more work than it was worth to get it working with the Arduino. (More later.)
Finally, use a variety of wires when wiring the PCB. It will make it easier to trace connections. As you will see, I used red, black, green, yellow, and white. I wish I had more colors.
Regarding the 9-volt power supply: A 9 volt battery will work, but you will have strange problems when it begins to diminish. Once the battery voltage (when tested on a meter) drops below 7 volts your display may light up fine, but there will be insufficient current to power the Arduino and the behavior is somewhat unpredictable. A 9 volt wall-wart works great, and the LM7805 on the BBB should be able to handle a 12-volt input, like that from an auto-adapter. (Please use caution though if you put this in a moving vehicle! You alone are responsible for what happens if you distract other drivers! You might even want to consider wiring up an accelerometer and disable the displays when the unit is in motion. The circuit is yours as is the responsibility. I recommend it for a home Window or Desktop, or shop Window, not a moving vehicle! I love the idea of it as a bumper sticker, but not at the risk of anyone’s life or health! In general however this should be much less distracting than most roadside digital signs, and many printed bumper stickers with hard to read text.)
I used the following tools to complete this project:
- A quality, variable wattage soldering iron
- Wire cutters
- Wire strippers
- A multimeter (helpful for testing)
- A large solder-less breadboard, for testing – you may not need this
- A Dremel, with cutting wheels and drill bits (for making openings in the enclosure case)
- A variable speed drill and various drill bits
Step 2 Assemble the BBB Arduino and USB BUB…
Follow the instructions provided by Modern Device to assemble the BBB Arduino.
When assembling the BBB, remember to use an LM7805 voltage regulator in place of the L4931CZ50LDO. The smaller voltage regulator might work just fine, but we are pulling quite a bit of current to power up to 768 L.E.D.s. The optional inductor is not needed for this project. You can follow the instructions on creating a solder bridge if you’d prefer to save the inductor, or if you’d rather not deal with the surface mount component. Nevertheless, it is not difficult to solder and I used it on my board.
If you also purchased the USB-BUB follow the assembly instructions to complete it.
When assembling the USB-BUB, I selected Configuration 2, though in practice I only ever use Configuration 1 (no jumper).
Step 3 Program your Arduino…
Set the USB|EXT jumper on your BBB to the USB side so that we can program it using the USB-BUB without supplying an external power-supply. (Or, supply a 9 volt power supply on the D.C. input jack and keep the jumper on the EXT side.) When this step is completed you want to move the jumper back to the EXT side!
The other jumper with +5v|EXT|+V should be on the +5v side always.
FAT16 Library Installation:
Next, download the FAT16 library and the DigitalWindowSticker.pde file below. The FAT16 library needs to be unzipped/untared into the hardware/libraries directory where your Arduino IDE is located. On my Windows system, I keep the current version of the Arduino IDE in c:\temp\arduino-0017\. Once the FAT16 library is in place there should be a set of files in [c:\temp\arduino-0017\\hardware\libraries\Fat16\. The FAT16 library is also available here: http://code.google.com/p/fat16lib/. It is written by Bill Grieman. A copy of this library that is known to work with the Digital Window Sticker is available in the files below (Fat16.tar.gz or Fat16.zip).
Start the Arduino IDE.
Open the DigitalWindowSticker.pde file using the IDE. There are two ways you can do this:
1) Download and open the file in a text editor, copy the contents to the clipboard, paste the contents into a new sketch in the Arduino IDE, and then save the sketch as DigitalWindowSticker.
2) Download the DigitalWindowSticker.zip or DigitalWindowSticker.tar.gz file and extract the files to the directory containing your sketches. Then open the DigitalWindowSticker sketch in the Arduino IDE.
Next, compile the sketch. If there are any errors, make sure you are using version 0017 of the Arduino IDE, with the Atmega328 board selected (Arduino Duemilanove or Nano w/Atmega328). Also make sure you’ve properly unpacked the FAT16 library, into the hardware/libraries directory, where other Arduino libraries reside.
Program the Arduino:
Plug-in the USB-BUB, and wait for for the drivers to be installed, or coach your system into loading the drivers. In the Arduino IDE, a new COM port should show up under Tools|Serial Port. Select the new port for the USB-BUB.
Plug the USB-BUB into the BBB as shown in the photo in Step 2, and Upload the compiled code from the Arduino IDE.
Prepare for External Power Source:
Now that the Arduino is programmed, move the BBB jumper back to the EXT side (not the USB side) so that it will be powered by the external 9 volt source.
Step 4 Assemble the SD-MMC Card Breakout Board
Simply solder a set of header pins to the SD-MMC card breakout board.
- Uses wires to connect the SD-MMC card breakout board directly to the printed circuit board in the next step. Doing so will give you flexibility with where the SD card socket is located in your enclosure.
- Solder a bare SD card socket to your selected printed circuit board as part of the next step.
Only the following pins are used:
- CS (for SPI access to the SD Card)
- DI (data input for SPI access to the SD Card)
- VCC is the 3.3v power source for the card
- GND is the common ground
- DO is the data output, which can be connected directly to pin 12 of the Arduino
- WP is used to detect a missing card. This will be connected to pin 2 of the Arduino
- COM needs to be connected to GND
Leave a Comment
You must be logged in to post a comment.