-or physical website visits display-
If you have a blog or any other kind of website then this is for you. It’s a little box that connects to the internet and displays how many visits you have on your website. It’s designed to work independently of your computer, connecting directly to the internet via your router. Mine even steals power from one of the routers USB ports.
Meet the ego box.
By now the name should explain itself: it’s called ‘ego’ because it’s suppose to tickle your ego when you see just how many people visit your site. And ‘box’ because it’s … ammm… all packed in a nice box.
Don’t be fooled by the picture, the box is really small (about 6 x 9 cm / 2.4 x 3.3” footprint to stay technical). No, I didn’t want a large display placed on the wall. I wanted a small box that can find a place anywhere. After all, it’s the displayed number that it is important.
I’ve used the toner transfer to ABS method to make the front panel. Things came out very well except that the whole thing is a little tilted, but in an optimistic way. The top of the box gets its own writing with the things name.
The display consists of 8 digits capable of displaying up to 99.999.999. Sorry, this project is not for those of you with more than 100 million page visits (still, it’s easy to extend it to as many digits as you want).
Update 16th July 2011
Last night I stayed up late to watch this happen:
The technical bit
How does all this work? The whole system consists of two parts. The first part is a small php script that is ran every time someone visits my website. It reads the number stored in a text file, increases it and writes it back. I’ve placed it in the header.php file of my wordpress theme so that it is run every time some page is loaded. See info on script here.
The second part is the box. It’s got an Ethernet interface that connects it to the internet through a router and accesses the text file that contains the number of visits. Then the number is extracted and displayed on the 7 segment display.
Let’s get to the technical details of making all this work.
First of all, a file to hold the number of visits is required. If you are using cpanel the online file manager works easily. I chose to create a separate folder to hold that file. Just create a new folder named, let’s say, counter in the www folder. On your computer create a text file containing just #$$%0 and save it. I’ve named it hits.html. You may also check your website statistics and put the actual visits number so that you may start with the correct value, e.g. #$$%101256. (Update: Initially the file contained just the number, but I chose to include a header #$$% in front of the number to make things better at the microcontroller side). Upload this file to the counter folder. Because the script needs to be able to change the file you need to change its access permissions so that it can be written by the user and readable by the rest of the world(644). Check out below:
Now the script needs to be added. You may use the same file manager. Say you will place it in the header, navigate to /wp_content/themes/your_theme/header.php. Choose to edit it and add the following script in the header file:
$hitfile = $_SERVER['DOCUMENT_ROOT'].”/counter/hits.html”;
$hits = @file_get_contents($hitfile);
$hits = substr($hits, 4)+1;
Just make sure that you have the correct file and location for your counter file(highlighted above). Example below:
This concludes the online part of the counter. Test it and see that the number is correctly increasing. Just navigate to the counter file see that it increases correctly as you access your website. For my website this is located at http://www.electrobob.com/counter/hits.html . This will be the address that the box will read.
As I have mentioned, the box connects to the internet with an Ethernet interface. I’ve used the very popular Microchip ENC28J60 MAC and PHY because it is easy to use. There is plenty of good working software for controlling it already available and this has positively contributed to a quick development. My choice is the stack available at www.tuxgraphics.org written by Guido Socher which provides most of the functions required to access a web page.
The microcontroller of choice is the ATMEGA168. It has just enough pins (the display needs 15) and enough memory for the whole applications. To complete the circuit for this project I’ve added a display and the driving circuitry. I’ve chosen an old fashion 7 segment display because of its visibility and the technological look it gives to the project. Be aware that there was no way for me to capture the real pure red of the display with my camera. The 8 digits display is composed of two KW4-361ASB, 4 digits each.
For the power supply I planned on using 5V from one of the free USB ports of my router. As the whole circuit needs 3.3V, a LM1117-3.3 LDO regulator was used. There is a serial port that I have used for debugging during the development and for loading the software via a bootloader. I ended up not using an external oscillator for the microcontroller, but there is space for one on the PCB. Other than that, the schematic is self explanatory and it can be seen below:
The PCB was designed to fit a certain project box that I had. I managed to make it very compact and single sided. It’s built using my UV exposure box.
The software contains the TCP/IP stack for use with the ENC28J60, a display controller, interrupts, functions for accessing the counter page, processing it etc. The firmware is well documented and it is included in the project archive at the end.
Some things need to be changed and it has to be compiled for usage in your project. For the Ethernet part it needs to be given a MAC address, a local IP address and a gateway address. You will also need to set the URL of your counter file.
There is an option to choose how fast the update is made. I’ve chosen 1 minute which is a reasonable time, but gives you over 40.000 accesses to the counter file per month. I think that this is a rather low load, but you may increase the time.
I’ve put together a small gallery below during the build of the box. First off is the PCB:
Most of the parts mounted:
Soldering the wires on the display:
Transferring the image on the top
half of the case:
And the final box, fully functional. I didn’t mount the back panel to allow for the inside components to be seen:
Finally the software and eagle files can be downloaded from here. The software is licensed under GPL V2 and the eagle files are free for personal use.