Configuring BFGMiner on CentOS

I recently got a BitCoin ASIC miner. The wait was extreme – 7 months. But it arrived.

I decided to use my CentOS home server to run the mining software. These are the steps I followed and got it working. The following commands should run as root or use sudo when needed. For reference, I used the “$” prompt for normal user commands and the “#” prompt for commands that need to run as root.

First install a bunch of required packages:

# yum install -y wget gcc make unzip uthash libcurl libcurl-devel

Then download and install jansson:

$ wget http://www.digip.org/jansson/releases/jansson-2.4.tar.gz
$ tar -zxf jansson-2.4.tar.gz
$ cd jansson-2.4/
$ ./configure --prefix=/usr/
$ make clean
$ make
# make install

Then download and install bfgminer:

$ wget http://luke.dashjr.org/programs/bitcoin/files/bfgminer/3.4.0/bfgminer-3.4.0.zip
$ unzip bfgminer-3.4.0.zip
$ cd bfgminer-3.4.0
$ ./configure --prefix=/usr/
$ make clean
$ make
# make install

Reload the libraries:

# ldconfig

Test to make sure the miner is in your path and does the pre-check:

$ bfgminer --help

Now, plug in the miner and make sure it registers as a USB device

$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 007: ID 0403:6014 Future Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

Now clean the modules and make sure the new module gets loaded (this is specific to the BFL miner I have):

# modprobe -r
# modprobe ftdi_sio vendor=0x403 product=0x6014

Now if you start bfgminer with the correct options, it should detect and start processing blocks:

$ bfgminer -o stratum+tcp://somepool:port -u MyUserName -p NotMyPass

One note – if you want to run this tool as a regular user (and you should). Add the user to the “dialout” group. That group has access to the /dev/ttyUSB0 (or equivilant) device.

I then start a “screen” session, run the miner and disconnect. It allows me to check on it later on, but does not require me to keep an active session open or leave myself logged into the console.

Posted in Random Rants | Comments Off

1-Wire for Temperature Monitoring – Part 3

This is the final post on configuring 1-Wire for temperature monitoring. In Part 1 I got all of the wiring figured out.  Part 2 was all about gathering the data into a log format.

This post is about getting that data stored and then rendered into a graphical format.

The first thing I did was slightly refactor my gathering. I wrote a bash script that queries the sensors in order and logs them to the same log file as before, but also puts that data into a round-robin database (RRD).  That way later on I can graph the data any way I want.

The big requirement before this script is run is to have existing RRD files. I used a Perl script to create these RRD files. This script would need to be updated for each sensor:

#!/usr/bin/perl -w

use Time::Local;
use RRDp;

# Create the database
RRDp::start "/usr/bin/rrdtool";
RRDp::cmd "create Living_Room.rrd \
-b 1373820664
-s 60 \
DS:temp:GAUGE:180:U:U  \
RRA:AVERAGE:0.5:1:10080 \
RRA:AVERAGE:0.5:5:4032 \
RRA:AVERAGE:0.5:30:1344 \
RRA:AVERAGE:0.5:120:21900 \
RRA:MIN:0.5:1:10080 \
RRA:MIN:0.5:5:4032 \
RRA:MIN:0.5:30:1344 \
RRA:MIN:0.5:120:21900 \
RRA:MAX:0.5:1:10080 \
RRA:MAX:0.5:5:4032 \
RRA:MAX:0.5:30:1344 \
RRA:MAX:0.5:120:21900 \
" ;
RRDp::end;

Building that specification for the RRD is a bit of a dark-art. Here is the best way I can explain the options.

  • The “-b 1373820664″ is the earliest data point allowed into the RRD. It is in epoch form. I did this because I wanted to back-fill my log data. This is optional if you are starting your graph from scratch.
  • The “-s 60″ option is the data interval time in seconds. The “DS:temp:GAUGE:180:U:U” is the data point to be entered – “temp” is a label on that data point so it can be easily queried later on.
  • The RRA blocks are repeated for AVERAGE, MIN, and MAX so I will only describe one. “RRA:AVERAGE:0.5:1:10080″ tells the RRD to keep 10080 data rows with 1 step. Each step is 1 minute. This ends up being 7 full days of data. “RRA:AVERAGE:0.5:5:4032″ is similar in that it keeps 4032 data rows, but this time with a step of 5. This ends up being 14 days of data on a 5 minute interval. “RRA:AVERAGE:0.5:30:1344″ keeps 28 days of data on a 30 minute interval. And “RRA:AVERAGE:0.5:120:21900″ keeps 1825 days of data (about 5 years) with a 2 hour interval.

All of this data will be stored in a file that is 879K. Not bad for 5 years of data.

Here is the new digitemp_gather script. This script runs every minute via a cronjob:

#!/bin/bash

DIGITEMP=/usr/bin/digitemp
DIGITEMP_OPTS="-q -a"
DIGITEMP_CONF="-c /etc/digitemprc"

LOGFILE=/var/log/temperatures
RRD_PATH=/var/lib/rrd

#
# Function to call digitemp with a given sensor ID and location.
# Generates a log message in $LOGFILE
#
function ProcessSensor {
  sensor_id=$1
  sensor_location=$2

  cur_date=$(date +"%Y/%m/%d %H:%M:%S")
  dateEpoch=$(date -d "$cur_date" +%s)
  cur_temp=$(/usr/bin/digitemp -t $sensor_id -q -c /etc/digitemprc -o%.2F)
  echo $cur_date $sensor_location F: $cur_temp >> $LOGFILE

  rrdtool update $RRD_PATH/$sensor_location.rrd $dateEpoch:$cur_temp
}

ProcessSensor 0 Attic
ProcessSensor 1 Garage
ProcessSensor 2 Living_Room
ProcessSensor 3 Master_Bedroom

Now your cronjob is filling your RRD and it also continues to update the log file. It is not useful to graph data until you have at least 15 or 30 minutes worth of data- so time for a break.

Assuming you now have a bunch of data stored in your RRDs, it is pretty easy to extract that data with rrdtool and graph it as a PNG. This script creates the graphs in a temporary directory and I run it every 15 minutes. In my case, the last step is to copy the graphs to my web host so I can see them wherever I am.

#!/bin/bash

RRD_PATH=/var/lib/rrd
GRAPHS_DIR=/tmp/digitemp_graphs

#
# Function that builds graphs for a specific sensor on a given interval
#
# Usage: CreateGraph Sensor_Name Interval
# Example: CreateGraph Living_Room hour
#
function CreateGraph {
  sensor_name=$1
  time_length=$2
  png_file=$sensor_name
  png_file+="_$time_length"
  png_file+=".png"

rrdtool graph $GRAPHS_DIR/$png_file \
-h 80 -w 600 \
--start -1$time_length --end now \
-t "$sensor_name :: last $time_length" \
--lazy \
-v "degrees F" \
--slope-mode \
DEF:temp=$RRD_PATH/$sensor_name.rrd:temp:AVERAGE \
DEF:min=$RRD_PATH/$sensor_name.rrd:temp:MIN \
DEF:max=$RRD_PATH/$sensor_name.rrd:temp:MAX \
LINE1:temp#0000FF \
GPRINT:temp:AVERAGE:"Avg\\: %6.1lf" \
GPRINT:temp:MAX:"Max\\: %6.1lf" \
GPRINT:temp:MIN:"Min\\: %6.1lf" \
GPRINT:temp:LAST:"Current\\: %6.1lf degrees F\\n" \
> /dev/null

}
# Remove all of the existing graphs and recreate the graphs directory
if [ -e $GRAPHS_DIR ] ; then
  /bin/rm -rf $GRAPHS_DIR
fi
mkdir $GRAPHS_DIR

# Build all of the graphs
CreateGraph Attic hour
CreateGraph Attic day
CreateGraph Attic week
CreateGraph Garage hour
CreateGraph Garage day
CreateGraph Garage week
CreateGraph Living_Room hour
CreateGraph Living_Room day
CreateGraph Living_Room week
CreateGraph Master_Bedroom hour
CreateGraph Master_Bedroom day
CreateGraph Master_Bedroom week

# Copy the graphs to my webhost
scp -q $GRAPHS_DIR/*.png hosting.example.org:/var/www/temp-graphs
Posted in Geek Out, Home Improvement | Comments Off

1-Wire for Temperature Monitoring – Part 2

This is a continuation post documenting my installation of a 1-Wire Temperature monitoring system in my house. Part 1 can be found here.

Ultimately I want to monitor 5 different sensors in and around my house. However because I don’t feel like climbing around in my attic when it is well north of 100 degrees, I am only going to hook up four.

In my last post, I documented the process of hooking up a weatherproof sensor to a RJ-11 jack. While that works and will work well, I previously wired RJ-45 jacks for ethernet so I switched to that size wherever I could.

Next problem I had to solve is how to distribute the 1-Wire system to multiple plugs. I found this Leviton 1×9 Structured Telephone Module which is typically used to distribute phone services up to 9 plugs. Since 1-wire uses three wires, this will work great. It is a $20 part, but well worth it.

I wired up three RJ-45 plugs into about 18″ of four-wire phone wire and then punched the wires down into the telephone module. I could then use my Ethernet panel to connect the USB sensor and the two internal sensors. I then punched down one of the weatherproof sensors into the same block. Lastly, I soldered a final sensor to a longer length of four wire phone cord. I ran that cable up into my attic and zip tied it to an attic brace. After I punched it into the block and plugged my two internal sensors in, I was set to test the system.

First up is to run the initialization:

stevet@neon:$ sudo /usr/bin/digitemp_DS2490 -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Found DS2490 device #1 at 001/019
Turning off all DS2409 Couplers
.....
Searching the 1-Wire LAN
28C092C80400000E : DS18B20 Temperature Sensor
2881D1C8040000EB : DS18B20 Temperature Sensor
28355AD90400003C : DS18B20 Temperature Sensor
287B69C7040000BD : DS18B20 Temperature Sensor
ROM #0 : 28C092C80400000E
ROM #1 : 2881D1C8040000EB
ROM #2 : 28355AD90400003C
ROM #3 : 287B69C7040000BD
Wrote .digitemprc
stevet@neon:$

Four sensors! Awesome. Now how hot is it at all of these sensors:

stevet@neon:$ sudo /usr/bin/digitemp_DS2490 -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Found DS2490 device #1 at 001/019
2013/07/14 13:07:31 Sensor 0 F: 110.53
2013/07/14 13:07:32 Sensor 1 F: 91.51
2013/07/14 13:07:33 Sensor 2 F: 78.69
2013/07/14 13:07:34 Sensor 3 F: 79.93
stevet@neon:$

A bit warm in my attic. But every sensor worked.

In my last post I created a /etc/digitemprc file that is used as part of my cronjob. That config needs to be modified with the current sensors. Just like the last post, I used the .digitemprc file created by the initialization and changed the log format.

Because I added three sensors and the order has changed, my digitemp_rename script needs to be updated as well. Here is the new version. Very similar to before, but it handles the new sensors:

#!/bin/bash

sed -e "s/Sensor 0/Attic/" -e "s/#0 : 28C092C80400000E//" \
-e "s/Sensor 1/Garage/" -e "s/#1 : 2881D1C8040000EB//" \
-e "s/Sensor 2/Living_Room/" -e "s/#2 : 28355AD90400003C//" \
-e "s/Sensor 3/Master_Bedroom/" -e "s/#3 : 287B69C7040000BD//"

While I was doing all of this work, I disabled the crontab. It would error out while sensors were disconnected and moving around anyway. I cleared the log file and re-enabled the cronjob to run every minute.

After a few minutes, this is what my log looks like:

2013/07/14 13:08:02 Attic F: 110.53
2013/07/14 13:08:03 Garage F: 91.51
2013/07/14 13:08:04 Living_Room F: 78.69
2013/07/14 13:08:05 Master_Bedroom F: 79.93
2013/07/14 13:09:02 Attic F: 110.75
2013/07/14 13:09:03 Garage F: 91.51
2013/07/14 13:09:04 Living_Room F: 78.69
2013/07/14 13:09:05 Master_Bedroom F: 79.93
2013/07/14 13:10:02 Attic F: 110.86
2013/07/14 13:10:03 Garage F: 91.51
2013/07/14 13:10:05 Living_Room F: 78.57
2013/07/14 13:10:06 Master_Bedroom F: 79.81

Everything looks good from a logging perspective.

Part 3 is to graph the data that I am gathering and see how things look visually over time.

Posted in Geek Out, Home Improvement | Comments Off

1-Wire for Temperature Monitoring

I have an older house with not so good insulation and windows. It gets too hot in the summer and too cold in the winter. My furnace and AC have to work extra hard to maintain a decent environment.

Before I begin spending a lot of money on upgrades, I wanted to get a baseline of the environment.

1-Wire is a fairly simple system that lets you monitor temperature with various sensors spread around the house. It also has support to monitor humidity, but I am only doing temperature for now.

First thing you need is a One-Wire adapter for your computer. I picked up a USB model that I am hooking up to my linux server. It is model DS9490R that I got from Hobby Boards for about $40 shipped. I picked up 10 waterproof DS18B20 sensors from a Chinese seller on eBay for about $20 shipped.

The DSR9490R has a six pin RJ-11 connector, but the sensors have just three wires. I picked up some four-wire telephone wire and some empty RJ-11 plugs at Home Depot and then it was time to start wiring.

It took me quite a while to figure out the pin-out. There seemed to be a bunch of conflicting info so I did a bunch of test crimps and patch wiring. There are three important wires that matter, voltage, data, and ground. On the sensors voltage is red, data is yellow (on some it is white), and ground is black. For the RJ-11 connector, the layout is voltage on pin 1, the data feed is on pin 3, and the ground feed is on pin 4. If you look at the top of a RJ-11 connector with catch on top and the opening pointing away from you, the pins go from 1 to 6 from left to right.

I could not get the waterproof sensor wires to fit and crimp into the RJ-11 plugs I had, so I took three short lengths of wire stripped from a phone cord to make a tail that is a couple inches long. I then wound and soldered the sensor wires to the tail.

Now I have a sensor that will plug into the USB adapter. Time to test it!

There are two main ways to read data from the sensors. DigiTemp and OWFS. To start and debug I decided to use DigiTemp.

First up, install digitemp. I am on a CentOS box so I used this command:

stevet@neon:$ sudo yum install -y digitemp

Then I plugged in my USB adapter and checked /var/log/messages to make sure it connected. I started a tail and left it running:

stevet@neon:$ tail -f /var/log/messages

Then I plugged in the sensor to the USB adapter. If there is a wiring problem, you may see the USB device get disconnected. If so, check that your wiring is going into the correct pins. If it looks good, time to detect your sensor.

stevet@neon:$ /usr/bin/digitemp_DS2490 -i
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Found DS2490 device #1 at 001/016
Turning off all DS2409 Couplers
..
Searching the 1-Wire LAN
287B69C7040000BD : DS18B20 Temperature Sensor
ROM #0 : 287B69C7040000BD
Wrote .digitemprc
stevet@neon:$

Look a sensor! Now run a query and make sure the sensor is giving back a temperature:

stevet@neon:~$ sudo /usr/bin/digitemp_DS2490 -a
DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Found DS2490 device #1 at 001/016
Jul 13 18:03:53 Sensor 0 C: 25.94 F: 78.69
stevet@neon:$

It is 25.94 Celsius and 78.69 Fahrenheit at my desk. Nice!

Now it is time to log this data over time. First, we want to copy the DigiTemp config file to a standard location so we can script the data gathering.

stevet@neon:~$ sudo cp .digitemprc /etc/digitemprc

If you look at that config file – you will see the one sensor listed along with the log format. The log format is OK, but it can be better. I commented out the exiting log format and added this one:

# LOG_FORMAT "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F"
LOG_FORMAT "%Y/%m/%d %H:%M:%S Sensor %s F: %.2F"

Sensor 0 is not a very clear sensor name. This sensor will be in my living room, so I wrote a small script to change the output from DigiTemp to be even more human friendly

#!/bin/bash

sed -e "s/Sensor 0/Living_Room/" -e "s/#10 : 287B69C7040000BD//"

Then I setup a cron job that runs as root. This job runs every minute and takes the output from digitemp, does the rename, and writes it to a log file. It looks like this in my crontab:

* * * * * /usr/bin/digitemp_DS2490 -q -a -c /etc/digitemprc | /home/stevet/bin/digitemp_rename | sort >> /var/log/temperatures

Now let it run for a few minutes and your temperatures log file should begin to add lines of data. It will looks something like:

stevet@neon:~$ tail /var/log/temperatures
2013/07/13 18:08:02 12 Living Room F: 79.14
2013/07/13 18:09:02 12 Living Room F: 79.25
2013/07/13 18:10:02 12 Living Room F: 79.36
2013/07/13 18:11:02 12 Living Room F: 79.47
2013/07/13 18:12:02 12 Living Room F: 79.47
stevet@neon:~$

You now are gathering specific sensor data and putting it into a log file to be processed later.

In Part 2, I will add a bunch of sensors to the 1-wire system and show how they all are logged. In Part 3, I will detail how I graphed that data so I can visually see the temperature changes.

Posted in Geek Out, Home Improvement | Comments Off

Knock Down Cutting Grid with Sawhorses

When I was building the Garage Cabinet (which I am still happy with), I realized I needed a method to cut down large stock like plywood without using the bed of my pickup.

Awhile back I ran across this page which had some renderings and pictures of exactly what I wanted to do. It referenced two other pages (here and here) with some extra details.

The plan was to build two sawhorses that could come apart for storage and portability along with a wood grid that could hold a 4′x8′ sheet of plywood while it was being cut with a circular saw.

In the cabinet build I came across a deal at Home Depot where a sheet of 3/4″ A/C plywood was $24. How can you pass that up? I picked up another sheet- which is all I would need for this project.

What is A/C plywood? One side is rated “A” grade which is the top grade without knots or defects while the other side is “C” grade which will have knots and filled in defects. This is for sawhorses- any grade would be fine but these sheets are solid and straight and cheep- so that is what I used.

Side One:

Side Two:

My cutting guide and list. It is basically all 4″ strips of plywood.

I didn’t do much in the way of plans this time. I am using the two detailed diagrams from the Wood Working Tips side linked above.

The first part was to cut all the strips. I set up the guide on my circular saw and went to town. The result is a lot of long thin plywood strips.

I then sized all of the pieces needed for the sawhorse legs. The legs are 35″ long, the long braces are 21″, and the short braces are 11″.

Once that was out of the way, I set-up my chop saw to do a 15 degree cut. I put a stop block in a jig because basically every piece needed to be chopped at the end to 15 degrees.

Then it is time for some assembly. Gorilla glue and 1 1/4″ screws all around. You will note that there is a vertical piece of scrap at the top. That is a spacer to ensure the stretcher will fit later on.

And the first sawhorse leg is done.

Repeat the same process three more times, and now we have four sawhorse legs.

Then I made up some 2″x4″ cleats and attached them to the stretchers. This is what it looks like with the stretcher in place.

I repeated the process on the second stretcher and now I have two completed knock down sawhorses.

After I had an interview this morning, (it went very well, thank you for asking) I got cracking on the grid. The grid consists of two 8′ long rails, two 4′ long stretchers and the two saw horse stretchers made earlier. They will fit together with notches creating half-lap joints.

Here is the first of the sawhorse stretchers with the notch cut out and some layout marks for notches in one of the grid stretchers.

One I had cut the sawhorse and grid stretchers I realized I could make a small grid if I didn’t need to use the whole thing. Nice.

Here is the full size grid all put together.

This grid is sturdy and large enough to hold basically any plywood or normal stock that I would come across. Given a sheet of plywood, this could also work as the frame for a portable workbench as well.

It fully collapses and can get pushed right up on the wall of my garage. I will probably figure out some way to hang it off the floor as well- but not today. Today I take a drink of cool water and enjoy my handy work. Then I get the broom and clean up…

Posted in Home Improvement | Comments Off

Garage Storage – Final Day

This is the final post about a storage cabinet that I built and mounted in my garage. You can read about Day 1, Day 2, Day 3, or Day 4 in some of my previous posts.

So, I actually broke the last day into two parts- one part where I mounted the hinges and doors and one where I hung the cabinet. But hey, total time was like 45 minutes so it is one day and one post.

The first thing to do was mount the doors onto the cabinet with some piano hinges. You can see the process here. Pretty simple to do- but there are a lot of screws. 30 per side in fact.

I just repeated the process on the other side and both doors were hung.

Here is the final cabinet set up on my work bench. I will be putting it up on the wall above that bench.

Earlier today, my buddy Scott came over and we hung the cabinet. It really was a two person job because of the awkwardness of the cabinet- especially with the doors mounted.

To mount it, I located the studs- 24″ on center in my garage and mounted a 2″x4″ level on the wall to rest the cabinet on.

We hoisted the cabinet onto the brace and I drove six screws through the cabinet and into the studs.

After removing the brace and putting the shelves in we did a little staging by putting some hangers on the peg board and putting a few items into and on the cabinet.

Here is what is looks like all finished.


The last step was to install two magnetic catches. I installed them on the interior vertical support at the very bottom. This keeps the doors closed and gives a much nicer appearance to the cabinet.

I am pretty happy with how it came out. As with any project there are a few things I would fix and improve. I would like to spend some more time on the doors so they are a bit cleaner and stronger. But generally this worked out excellent as a cabinet.

Posted in Home Improvement | Comments Off

Garage Storage – Day 4

The ongoing project of adding a cabinet to my garage for storage.

See Day 1, Day 2, and Day 3 to catch-up.

A really short day today- unless I decide to get re-motivated in the heat of the afternoon.

I wanted to complete the door assemblies today. Which basically comes down to fitting two peg board panels and sizing the rails and stiles on the 2nd door.

Here is the first panel sized to fit. Note the handy pocket screw joinery.

The is the first door completed. It looks pretty good doesn’t it?

And finally here are both doors propped up in front of the cabinet.

The only thing I wish I could do different at this point is have shorter pocket screws. I had some 1″ screws which are not long enough and I had 2 1/2″ screws which either began to poke through or actually did come through the face of the stiles. I am going to see if anyone in town has shorter pocket screws in stock (Woodcraft maybe?).

All that is left if the hinge hardware and the door handles. Then it is time to be hung.

Posted in Home Improvement | Comments Off

Garage Storage – Day 3

I didn’t get much done today, but things are shaping up nicely.

To catch up, you can read Part 1 and Part 2.

The goal for today was to fit the back panel and begin the doors and I made good progress on those two things.

First thing was to cut some 1/2″ plywood to be the back panel. The 1/2″ was not perfectly flat- but a little weight and some mild persuasion got it into position.

I used Gorilla Glue and more 1 1/4″ screws to attach the panel.

Once that was done, I did a little more fitting on the shelves. They were a bit proud of the external frame, so I shorted them a touch and they both fit excellent now. The hammer and paint can give some scale to this project. This cabinet will hold a lot of stuff.

On to the doors. The first step was to rough cut the rails and stiles. I used 1″ x 4″ select pine for these pieces.

After I got everything to a rough length, it was time to make things the right width. I wanted 3″ rails and stiles. So I pulled out my 10″ table top table saw and sized all of my pieces.

Next was the slot for the panel. The width of this saw blade is almost exactly the thickness of the pegboard. I set up my fence and a rigged up stop and did a pass in each direction on each of my rails and stiles. Running it both directions centers the slot. Note to self: invest in a feather board or two and get a fence that does not suck (which might mean a new table saw really).

Here are my rails and stiles cut to rough length with the panel slot all done.

After all of that work I needed to do some cleanup. The table saw generated a ton (not literally) of saw dust. This pile was just what collected under the saw itself. There was at least an equal sized pile on the floor right below the bench as well.

I began to size and assemble the doors today, but I did not feel like cutting the peg board this afternoon so I stopped. I have one of the stiles connected to two rails and got some measurements for the panel. I should be able to get the panel cut tomorrow morning and then one door will be built. Repeat the process on the other side and then I just need to hang the doors.

While I can still move this cabinet around by myself, I will be needing some assistance to hang it. I’ll drag one of my friends over to the house this weekend to complete the project.

Posted in Home Improvement | Comments Off

Garage Storage – Day 2

Note: This is a continuation of Garage Storage – Day 1
It is going to be another scorcher here in Austin. High expected to be about 101 or 102. That makes working in the garage brutal. But at least, I am not working in the sun.

I started today off by cutting the dados on the side pieces. Four total. It went really smoothly and the cabinet is coming together nicely.

Once I had the top and bottom fit into the dados, I was able to measure and fit the center support. I am pretty happy with how this is coming out now. It is big enough to hold a lot of stuff, but not so huge as to make it a pain to move around or install.

Next up are the holes for the shelf pins. My buddy Scott gave me this fantastic jig to create this holes easily and repeatably. I took a little time to setup the jig to get the depth right and off I went.

The one thing to remember here is to use a single reference to work from. All of my holes were referenced from the top of the cabinet. If you are not careful you might end up with holes that do not line up front to back or side to side.

Once that was complete it was time to do final assembly.

I pre-drilled some pilot holes and used #6 1 1/4″ course drywall screws. I made a swap from the 2″ screws I bought because they would be overkill and I might have split the wood. I then used some Gorilla Glue in the dados and put four screws in each end.

I then fit the center support in and used four screws on each end there as well. This is one sturdy cabinet.

While the glue dries I measured and fit the shelves. In this case they are about 23 1/4″ long. I cut and dry fit two shelves and I think I am done for the day.

I did want to fit the back plywood, but it is really hot this afternoon and I need to do some studying for my VMware exam.

Tomorrow I will do the back board and then begin the doors. I am really looking forward to the doors because I get to use my table saw and my pocket screw jig.

If I keep doing these kinds of projects (and I hope to), I am going to need to get a set of real saw horses and a work surface that is at least 4′x4′. Given that setup I should be able to move it around and take it down to park the cars.

Posted in Home Improvement | Comments Off

Garage Storage – Part 1

I have ended up with some free time, so I thought I could be constructive with my time (bad pun intended).

Recently I was watching Ask This Old House and they had a really nice garage storage unit that included adjustable shelves and peg board for door inserts. I found the episode listed on their website but they did not include any plans or sketches. Only one small picture and my inaccurate memory.

I wanted to do something very similar with some alterations. I wanted the cabinet to be 14″ deep total which will fit nicely above my work bench. I wanted to use shelf pins which I have a fantastic router jig for. Lastly, they did not use dados for the fixed shelves, and I thought that might be a better design. I liked the peg board panel based doors so I decided to do that as well.

My design is pretty simple. A 3/4″ plywood box with a fixed vertical support in the middle. The dimensions will be about 48″ wide x 32″ high x 14″ deep. That depth does not include the doors.

After I completed the basic design, I went off the home center to pick up what I would need. Here is the shopping list and what I paid for the pieces:

  • 3/4″ x 4′ x 8′ Plywood AC grade – $24 (a fantastic price)
  • 1/2″ x 4′ x 4′ Plywood BC grade – $18
  • 3 – 8ft x 1″x4″ Select Pine – $19.50 ($6.50ea)
  • 4′ x 8′ White Peg Board – $17 (they did not have 4′x4′ and the two 2′x4′ would have been $16)
  • Box of 2″ Screws – $6.50
  • 2 – Door Pulls/Handles – $6 ($3ea)
  • 2 – 30″ Piano Hinges – $15 ($7.50ea)
  • Shelf Pins – $2
  • 2 – Magnetic door catches – $1.50 ($0.75ea)

Now it was time to cut up some plywood!

I used the bed of my pickup as my plywood cutting station. It is just at 100 here in Austin, so I think my next project will be to build a plywood cutting center.

In plans I marked some of the plywood pieces as being 14″(s) meaning they should be short of 14″ to take in account the 1/2″ plywood. As you know 1/2″ plywood does not measure 1/2″. In this case it measures 7/16″. So all of my 14″(s) pieces are actually 13 9/16″.

This is all of the pieces cut to width. The left and right panels are also cut to length but the rest will need to be trimmed to fit.

The final step for the day was to setup my dado jig. I have a set of plywood router bits where the 3/4″ bit is actually 22/32″. I wanted the dado to be just about 1/4″ deep so I set my plunge router to that and fit the straight edge guide. I intentionally made the first dado deep in on a scrap piece do I could do multiple passes if needed. Turns out the depth is great and the fit is excellent.

I then set the guide to be much closer to the end of my sample board – just about the width of a metal ruler I have on hand and ran a 2nd dado pass. This will be where the dados are on the project.

That ends Day 1.

Tomorrow I will cut the dados on the side pieces. and fit the top and bottom panels. I will then size the top and bottom if needed to make the adjustable shelves fit. I will then size and fit the vertical support. If that goes well, I will also setup and drill all the shelf pin holes. After that I will need to size the back board (which is 1/2″ plywood). When everything is fit together I will glue and screw everything to become a completed cabinet. Then onto the doors…

Posted in Home Improvement | Comments Off