Introduction: Still Yet Another Digital Picture Frame (Linux)

Having seen other designs I wanted to try making one of my own. Although not exactly cheap at ~$135 it was a fun project and a I am very happy with the results. It's clean simple and only requires one small wire for power.

Project Costs:
Laptop with 15" screen $50
Frame $20
16GB Compact Flash card $35 - much bigger then necessary
Wireless card Free
Switches and wire $15
Mating and misc. $15

Total $135

DISCLAIMER: This project involves electricity, heat, and confined spaces. I take no responsibility for any death or damages to anyone or anything from attempts to make this project.

Step 1: The Laptop

Trying to find a good laptop for this project was a bit of a stretch. On one hand you want the slowest , least power hungry system while wanting the highest quality screen. After doing some looking online I settled on a Dell Inspiron 5000.

At $3,776 MSRP this laptop didn't come cheap. Much of that cost came from the impressive 15" screen. After scouring cragislist I found the perfect system for only $50. That's like a savings of $3,726 in only 8 years. The only issues were it has the 1440x1050 resolution monitor instead of the rarer 1600x1200 option and it would flicker lightly especially when looking at the color blue.

Pentium III 650MHz
440BX cheapest motherboard
128MB PC100 SDRAM
15" 1400x1050 LCD
ATI Rage Mobility 128 w/8MB SGRAM
20GB 4200rpm hard drive
8x/24x DVD/CDROM drive
Integrated floppy drive

A major bonus about his laptop was that is was the first Pentium III that used Intel SpeedStep. While this might not sound like that big of a deal especially since almost every laptop now has this technology. It allowed me to manually under clock the CPU from 650 MHz to 500 MHz and reducing the CPU power usage from 9 Watts to just over 5 Watts. Since I don't plan on having an active cooling system every bit of power savings equals less heat to have to worry about.

Step 2: Dissasembly

After taking the casing off of the screen I found that if I gently pressed on one spot on the back the flicker would go away. Although this might be annoying using it as a laptop, it was no problem for this project because I later glued a small piece of foam to the back in the right spot applying consistent pressure.

After that I proceeded to disassemble the laptop and remove all of the guts. I don't have any good pictures of this process because I was having so much fun.

I did a couple minor modifications to make the motherboard smaller. Including cutting off the extra couple inches of the PCB that used to have the modem attached to it. Slowly pealing off the aluminum sheet heat sink on the CPU. I also removed the metal cover over where the hard drive was located because it stuck down further then the end of the pcb.

Step 3: The Frame

The frame was probably one of the hardest choices in the whole project. I didn't want to go with a project box because of the size, however it is really difficult to find a frame that is deep enough. I found this one at Hobby Lobby for $20 and although it worked really well I wish it was made out of wood instead of plastic.

Step 4: Getting Started, the First Couple of Layers

After looking at many other peoples projects I decided to use foam to mat the monitor and use foil tape to hold it in place. This turned out to work really well and was stiff enough to hold the screen in place without any worries that it will move or fall out. (since there is no longer any glass)

Once the screen fitted correctly, I had to figure out a way to put the electronics on top safely without putting pressure on the back of the LCD. Also there is a skinny circuit board that provides high voltage power to the back light that sticks up about 3/8 of an inch that I needed to take into account. To do this I cut another layer of foam for it to rest on the edge of the frame without pushing on the screen. Then I used double sided tape to hold the circuit board in the correct location.

Finding the correct foam to was actually a bit of a problem. The only sizes I could find were either to thick or thin. I ended up buying a thicker piece and through a process of squashing it with a rolling pin and heating it in the oven. After a bit of work I was able to get exactly the right thickness.

Step 5: Motherboard Layer

The mount for the motherboard was made out of 1/4 inch plywood that I cut a section out of to allow the monitor ribbon connection through. Using wood screws I attached the motherboard directly to the wood without spacers. Although probably not ideal, it seems to work just fine.

Later I added two 1" x 1" square pieces of wood at the top and bottom to create the correct amount of pressure to hold all of the components firmly in place(when the back is closed). The only problem was it made it extremely difficult to get the board out of the frame again, so I added the drawer handle at the top.

I had thought about mounting the power supply inside of the screen as well. My advice is don't do it. After finally getting the cover off of the power brick because it was to thick with it. I noticed not only was it real scary, but it made a bit of heat and always smelled like burning. Instead I went with the saner method of leaving the power supply on the ground and running the DC connection to the screen.

Step 6: Adding Connections

At the bottom left you can see where I added the appropriate plug for power and the switch. these were a bit tricky because I wanted the power connector to be hidden as much as possible while still allowing for it to be plugged and removed easily. The switch also had to be space perfectly so when the board was in place it would stick out the correct amount out of the frame.

I had also intended on removing the daughter board with the lights and infrared ports that the power switch is located on becauase it was taller then everything else. This would have required me to trace and solder wires directly to the main board, however I had enough space (depth) to leave it as it was and just connect my wires directly to the old power switch.

Since the laptop cord wasn't long enough, I wanted a cable that I could swap out so I could match the walls and not quite so bulky. That is why I used a RCA audio cable to deliver the power to the unit. Although I don't know how much power the cable can handle, since the unit only pulls 26 Watts on startup and 20 Watts while running it shouldn't be an issue.

An interesting side note, I bought a fairly thin 24 foot RCA cable for this project and found that after switching to it my power usage went up over 4 watts. I knew it would add resistance but hadn't expected that much of a difference.



Step 7: Linux

NOTE: This is not intended to be a complete guide to setting up Linux. This is just my recommendations from the lessons I learned from the experience. For the installation I followed the instructions from here. Not only is this a great guide, but also contains many very useful scripts. For example starting the slide show, turning the display on/off, etc.

I chose Damn Small Linux for my OS of choice. The advantages are that is based on Debian/Knoppix and only takes up 50 MB of space. However the Linux component turned out to be much more difficult then I had expected. It wasn't that the install was particularly difficult, but that I kept hitting issues with it not liking compact flash card and not installing the boot loader correctly.

During the install of DSL you have essentially two choices(oversimplifying), either install it to a USB Pendrive / Memory stick, or to an actual hard drive. Because in Memory stick mode it does things quite differently to allow you to run entirely in RAM with without persistent storage, it makes some changes that are difficult when you want to actually install applications. However when I performed the hard drive mode it would attempt to install the boot loader and silently fail. I found that I could make it work by manually creating a Grub config file and installing it to the master boot loader of the device. This process is not a lot of fun and took a lot of trial and error.

Another issue that I came across was everything that I did was very slow and many applications were slow to respond. I was afraid that it was a limitation of the Compact Flash card but it was actually an issue with the way DSL was configured. By default it disables DMA transfers and this turned out to be a huge problem for my little memory card. Once I figured that out and removed "nodma" from the boot loader transfers went from 2MB a second to 20+MB a second!

Step 8: Conclusions and Final Thoughts

Once booted the unit automatically connects to the wireless internet and starts a slide show of all the pictures it can recursively find in a predefined folder. Then controlling the unit is as simple as connecting to it through a ssh connection and running the appropriate scripts.

Since I wasn't too keen on showing off my own photos I wrote a script(hack) that would check every hour and download all the "featured photos" from Picasa Web

Thanks for reading, this is my first Instructable project and I hope you liked it. If you have any questions please post them in the comments and I will try to answer them.

Action shots below:

Step 9: Updated (Picasa Script / Hack)

So a few people have been asking for the script I have been using to download pictures from picasa. The reason why I didn't include it before was It's about as ugly as it gets and will definitely break as soon as picasaweb changes anything with their web page.

The frustration comes from the lack of any feed to their "featured" photos, and instead I had to download their web page, parse out the lines I'm looking for and replace the links to the thumbnails with the actual links. This is made more complicated since the URL's change with each image as well as the server that is hosting the content.

Thankfully they have a system to group images of different resolutions. In my case I prefer to just grab the originals and let the picture frame scale them appropriately. To make things clearer look at the following links

Thumbnail from picasaweb.google.com/lh/explore# currently 144x144 resolution
http://lh5.ggpht.com/_4TrPwfUulu0/Sd0qLrsV_bI/AAAAAAAACTM/yhbSPhcyh8Y/s144-c/kuva%20151.jpg

Same link with a picture scaled to 800x? In this case 800x536.
http://lh5.ggpht.com/_4TrPwfUulu0/Sd0qLrsV_bI/AAAAAAAACTM/yhbSPhcyh8Y/s800/kuva%20151.jpg

Original photo at 1600x1071 resolution.
http://lh5.ggpht.com/_4TrPwfUulu0/Sd0qLrsV_bI/AAAAAAAACTM/yhbSPhcyh8Y/kuva%20151.jpg

In the code I'm using sed to delete "s144-c" from the URL to download the originals but it works just as well to replace it with images of the desired size.

Also I wrote this script with the intention of it running inside of a folder called "picasa" in my home folder. If you wish to put it somewhere else then you will need to update it accordingly.

This script also needs to be called by something else. I have added the following in my personal crontab to run the script every morning at 4am.

computername$ crontab -l
0 4 * * * ~/picasa/download_favorits >> ~/picasa/cront_out.txt

The basic idea is it will attempt to download all 12 images on the page except if it's already there then it will skip it.

I hope that helps explain it, if you have any other questions please feel free to post them in the comments.

#!/bin/bash
#Mike Dahlgren 2009

HOME=~
wget -O $HOME/picasa/explore.html http://picasaweb.google.com/lh/explore#
mkdir -p $HOME/picasa/pics

cat ~/picasa/explore.html | grep 'style="width' | awk '{print $2 " " $6}' | sed 's/s144-c/d/' > $HOME/picasa/pics_list.txt

cd $HOME/picasa/pics

exec < ../pics_list.txt
while read line
do
echo $line
wget -nc $line
done

rm $HOME/picasa/explore.html
rm $HOME/picasa/pics_list.txt