A lunchroom in my neighborhood has a garden which is quite nice. But when it rains everybody goes inside, and then when the rain shower is over, everybody starts asking if it is OK again to go sit outside again. People running the lunchroom figured it would be nice to have something like a rain map hanging on the wall or something.
A regular monitor in this hip place wouldn't be right, so I thought of putting a screen inside a vintage television instead. Building it was an incredibly fun project. It's really a simple and relatively cheap build, with maximum effect. It went from an idea to a working television set in the lunchroom in two weeks. Building it took me about three days, including sourcing parts and configuring the Raspberry Pi in kiosk mode.
I felt like naming it, so I present to you: Ombrovision! (ombro- being the Greek word for rain)
- Old television (if it looks old enough, you can call it vintage or retro ;-)
- 17" square LCD monitor
- 3 small pieces of rubber
- Long threaded rod with two screws
- Small pieces of wood to hold the monitor in place
- Cardboard mattes
- Monitor power cord
- VGA cable
- Raspberry Pi with Wifi-dongle
- HDMI-to-VGA converter
- Raspberry Pi power supply
- Wago lever clamp connectors
- Power cord and plug
Cost was about 100 euros (~ 110 US dollar), with some parts, like the LCD monitor, sourced for free.
- Wood glue
- Duct tape
- Masking tape (not necessary if you make the matte as sticker)
- Wire stripping tool
- Lasercutter or vinylcutter (utility knife would do too)
Step 1: Out With the Old Tv Parts...
I bought two televisions. Literally from an old lady (actually her son) who had them in her attic. When I saw them, I instantly decided to buy them both, because I think they look awesome and I already loved my project so much I knew I will want to do one again :-)
I decided to use the Philips first. It's a Philips television made in 1958, model number 17TX 210 A/03. It actually has electronics in it with 'Made in Holland' on them. I think that's pretty wild since everything nowadays is made in Asia :-)
Taking it apart was easy. Very much unlike more modern electronic devices, this television was made to be easy to repair. So all it took was unscrewing about 8 screws.
The electronics and the ray tube I took out (may sell them to collectors). This is what I kept (and had to dust off thoroughly):
- rear panel
- bottom panel
- front glass window
- row of buttons
- side grill
- selector knob (in three parts)
- 2 threaded rods
- bunch of screws
If you are going to do something like this, make sure you properly and safely discharge the ray tube, especially if you are going to tinker further with any of the electronics.
The way the old television tubes are fixed in their place inside the case is quite awesome. Instead of a heavy frame, the ray tube is held in place by a thin metal band fastened tight around it. From the back of the wooden case, two threaded rods are pushing against hooks bolted to that metal band. A really quite simple and elegant solution to secure the heavy ray tube, love it. I really wanted to try to fix the replacing monitor the same way.
Step 2: Adding a Matte
The sides of the square monitor would show from under the old metallic television bezel. That was ugly, so to make it look better, I cut a few mattes from black cardboard with a lasercutter. I made the mattes by tracing a picture of the front of the television in Illustrator (see the file below). Making a vinyl sticker to put on the monitor may have been easier, but I couldn't find a working vinyl cutter right away.
I taped the cardboard to the screen using masking tape. Just the corners, so it won't show from behind the original bezel.
Step 3: ... and in With the New Monitor
Well it is not actually new, but it's perfect for this build, because it is square instead of rectangular. Someone gave it to me, and I'm sure you'll be able to source them cheaply, because everyone is replacing their 13, 15 and 17 inch LCD monitor with larger, very wide, shiny ones.
Without the plastic bezel, the monitor would fit much better inside the tv case, so I pried it off with a screwdriver. Very easy to do, without any real risk of damaging the screen. Make sure though you don't tear off the little circuit board which has the buttons for the front of the monitor. Tape a bit of duct tape on the back, so it won't short when it touches the monitor's metal back.
With a Dremel I sawed of a few bits and pieces of the wooden tv interior to make the monitor fit. To position it nicely behind the bezel I stuck a few bits of rubber under the monitor. To secure it, I screwed on a little hook and the pushing method described in the previous step.
I was a little surprised to feel the monitor get quite hot to the touch, especially at the back on the top half. But don't worry, I am told that is normal. We just don't notice that normally, because of the plastic rim and because well... who touches their monitor. I did decide however not to bolt two pieces of wood to the metal back of the monitor, like I had planned, so it can still dissipate heat. Instead of attaching the Pi there, I just let it rest on a piece of wood which I glued onto the sides of the case. The big rotary knob on the side of the tv I fixed to a bit of wood on top of that shelf too. The power and monitor cables are also tied on there, so everything is tidy.
To split the power from mains, I cut up the monitor's power cable and stuck the ends in three plug clamps. I never used Wago clamp connectors before (used wire terminal blocks instead), but they are quite awesome. This way, you can divide power easily and safely.
Step 4: Using a Raspberry Pi to Create a New Television Screen
I used the Raspberry Pi in 'kiosk mode'. It means that when the Pi powers up, it will start a presentation to whatever you want, without a human needed to press any keys.
For this project, I wanted the screen to show a map of incoming rain showers. I used the Dutch weather website Buienradar.nl, but you could do the same with other websites, like Wunderground.com for instance.
After some experimentation I found that Günter Kreidl's kweb is the best browser to run in kiosk mode on the Pi. Others are either less reliable or plain slow. It took me quite a while to figure out the right way to get it to do what I wanted, but the kweb manual (pdf) is a good resource. Not everything is as intuitive as one would hope, but the developer of the kweb browser was a lot of help. Kreidl responds to questions in this forum very quickly.
After installing kweb, you can start a browser from a script, which in turn you have automatically start when the Pi powers up, like so:
sudo nano /etc/rc.local
In that file, add this line above the line that says 'exit 0':
su -l pi -c "xinit ./kiosk"
In your home directory, open a file called kiosk:
sudo nano kiosk
In that file, paste this code:
#!/bin/sh # these lines are here to prevent the screen from going in suspend mode xset s noblank xset s off xset -dpms matchbox-window-manager & kweb -KHCUAJZ+-zgbfkrqi file:///home/pi/splash.png & # start the kweb browser by showing the logo while true do sleep 20 # first show the logo screen for a while xdotool key alt+i type "http://www.buienradar.nl/panorama " & # type in a new url and an enter at the end # the following commands are here to zoom in on the map sleep 20 # wait a while for the map to be loaded xdotool click 2 sleep 2 xdotool key plus sleep 1 xdotool key plus sleep 1 xdotool key plus sleep 1 xdotool key Right sleep 420 # show the weather map for a couple of minutes xdotool key alt+b # go back to the logo screen done
The script does a couple of things:
- make sure the screen does not go in suspend mode
- zoom into the right region on the map
- update the map regularly
- show the logo every now and then
Most things are done using kweb's shortcuts and a tool called xdotool, which simulates mouse clicks and key presses.
You may need to adjust the HDMI settings, so the image will fit the screen without any black bars. For this particular monitor with resolution 1280x1024, these settings work:
You can look up the right settings for your monitor on the Raspberry Pi Foundation's website. Also check that gpu_mem is not too low; something like 128 Mb will be good.
Changing the startup screen to your own logo or text instead is a good idea to personalize your television. My audience loved that touch when I started the Ombrovision for the first time.
Step 5: Closing Up and Ideas for Improvement
The project felt a bit unfinished when I put it in the store, but I wanted to meet the self-imposed deadline. By logging into the Pi through SSH over wifi, it is easy to change things anyway. So after we put it in the cupboard behind the counter, I sat in the lunchroom with a latte macchiato, solving the last errors in my code while already looking at the beautiful television which had just started its new career.
The lunchroom owners and I tweeted and Facebooked the hell out of it of course, and sure enough, even the weather service mentioned it on their accounts. I am quite proud :-)
Ideas for improvement
I want the Pi to shut down the monitor automatically at night and fire it up again a little before opening hours, mostly for conserving energy. The Pi itself does not have to be switched off, as it uses very little electricity.
I would like to wire the row of buttons at the front of the television to the Pi, to be able to
- Switch to a photo presentation (showing staff photos on their birthdays maybe?)
- Tune the screen to football matches being broadcast (big wish of one of the lunchroom owners)
- Enabling sunny day-mode: only showing the logo, a fish tank, your typical fireplace in HD video, or showing a weather forecast from 1958 television
- Turn off the monitor
All in all building an Ombrovision was a very rewarding and educational experience for me. I hope you will find my Instructable of use. Please leave any questions or suggestions in the comments. Thanks!
The television now turns off the monitor at night and reboots in the morning. Use these commands to do it:
crontab -e # open crontab and add the following lines: 0 23 * * * /opt/vc/bin/tvservice -o 0 9 * * * sudo /sbin/shutdown -r now