In The Beginning…
Ever since the Raspberry Pi came out, I was entranced by the
coolness factor of having a small pocket sized computer that cost just north of
thirty bucks. Hats off to those devoted for making this project a reality and
launching it to the world. The only problem for me at the time of Pi launch, was
the fact that I lived in a Windows world, and to an extent, still am. I had no
rad Linux skills. No formal or informal training. I got my hands on an
installation disc of Mandrake way back in the day when I did call center tech
support. The only way to get that geek cred in that place was to show you knew
your stuff. I took that disc, spun it up in my 32x CD-ROM drive, wiped my
Windows partition (you know, cause this open source stuff comes at a college
student budget), and stepped through the install. After it was all said and
done, Windows was back as soon as it had gone. FAIL. I had similar experiences
with Red Hat and Ubuntu, but I did manage to get wireless working on the former,
but it was too much of a pain to deal with when it was so easy to make it all
work in Windows.
Flash forward to today. I’m still in my Windows world due to
the place I work, but much more comfortable with Linux and even got my LPIC-1
certification. I’ve had my Raspberry Pi which was used to study for the
aforementioned cert and has since been sitting in a lonely dark drawer next to
a twice used wicked looking webcam I got from WGU. This dark and dreary future
was not what I had envisioned for the poor Pi. There are so many cool projects
out there and one that caught my eye was from a guy who had a web server
running off a Raspberry Pi that was powered by the sun and 4AA rechargeable
batteries. How cool does that sound?! I put this on my list of things I must
do. After about a year or so I finally decided to shed some light on this
project (did you see what did there?).
Let’s Get To Work
To kick this thing off, I went back to that old project page
and got some information on power consumption of the Pi. Knowing I’m going to
run this headless, that would save on the load drawing from the battery if I
had attached some sort of touch screen. I tried to figure out the math behind
how long it would run on a full charge before shutting down and going to bed
which lead me to ask, what battery pack should I use? The original idea had AA
batteries which fit the project scope, but I wandered over to my favorite
maker’s page, adafruit.com. Searching the shop, I was happily greeted with my
power answer and a plethora of parts and/or kits for everything Raspberry Pi.
The parts I finally opted for are as follows:
|
PowerBoost 500 Basic with USB connector soldered on. |
When the box showed up safe and sound, I was set. The USB
Solar charger had to have the included capacitor soldered on to the PCB, the
PowerBoost also needed the USB A jack to be soldered on. This was pretty easy
and really one of my first soldering attempts at putting components onto a PCB
(The only other things I’ve soldered were Deans connectors onto batteries).
|
USB/DC/Solar LiIon/LiPo charger with capacitor soldered on. |
Next,
the battery had to have the JST cable soldered on. I left them long just in
case I needed the extra length when fitting this all inside the enclosure. The
last soldering to be done was to solder the two remaining JST cables together
for the link between the charger and the PowerBoost. I did not show the
soldering steps because if I can do it, you can too. Believe me. Finally the
solar panel came with a plug that would not fit the USB charger. Easy fix was
to nip the tip and add the 2.1mm plug.
That’s Great, But Does It Work?
|
Testing the PowerBoost 500 with the battery. |
When a coding project gets near completion, I start looking
at the components and wondering “how did I break this part?” The same holds
true for this one. The PowerBoost and the charger, where I had to actually
solder components to the PCB, were my biggest concern. Batteries I’ve done, but
this seemed to be a more delicate operation. This is the point where I start
testing the theoretically completed parts. So I plugged the battery into the
PowerBoost and was delighted to see the green power LED light up. Does it power
on the Pi? After plugging in the USB cable to both the PowerBoost and the Pi,
the little pocket computer powered on. Success!
Ok, so that’s one part down. What about the solar panel and
charger? Taking the solar panel, battery, and charger outside, I connected it
all together. Again the LEDs that indicate charging came to life! Success x 2!
It may seem pretty basic to a lot of you out there, but it’s small things like
this that amaze me. Also, keep in mind I am the son of someone who has taken
electrical engineering classes, yet still stuck his finger in a light socket to
see if the power was still on.
Putting it all together with all components working should
yield a working solar powered Raspberry Pi, right? I’m usually cynical when it
comes to situations like these and usually expect the worst, so I won’t be
disappointed when that outcomes happens. But today, things just clicked.
Moments like this put a big smile on my face. The Cynicism Demon was slayed.
Now to the next part of this project. Getting the Pi to run headless.
Prep the Pi
Since I used this Raspberry Pi to use as study for the
LPIC-1 exam, a lot of the work was already done. But that was so long ago and
it needed an update. More requirements popped up such as static IP address on
the wlan0 interface and remote desktop. I also ran into the problem of having
forgotten my user pi password since it was setup so long ago and so quickly
neglected, thrown into a locked drawer, and forgotten about. But times change, things
are brought out back into the light. Used for new purposes. First thing’s
first, get wireless working.
For the wifi adapter, I had a very tiny Wi-Fi USB adapter
from Edimax (EW-7811Un) being used in a security lab I setup earlier this year.
When I got this adapter, I envisioned using it for the Pi, so the lab will
suffer a little bit but these are so cheap on Amazon, I’ll be grabbing another
soon. Setting up Wi-Fi was a little more difficult since I didn’t have a mouse
to click on things (one USB for the Edimax and the other for a keyboard).
These are the steps I took to get Wi-Fi working on my
network:
1)
Plug in the Edimax
2)
Power on the Raspberry Pi
3)
Ctrl+Esc and run wpa-gui.
4)
Tab through to the Manage Networks tab and fill
in the blanks for SSID, Authentication, Encryption, and PSK.
5)
Tab to the Current Status tab and try to
Connect. I had to reboot my Pi before it would connect to my access point.
6)
Upon connection, you’ll see the IP address
populate on the Current Status tab.
Once I got connected to the access point and was able to
successfully ping outside of the network it was time for updates. A quick
apt-get command and everything was all set. So static IP shouldn’t be too hard,
right? I spent about thirty minutes to an hour fighting with having the wlan0
interface retaining a static IP. Here are the steps I took to resolve this:
1)
Bring up LXTerminal
2)
Type: sudo nano /etc/network/interfaces
3)
Change the line “iface wlan0 inet dhcp” to read
“iface wlan0 inet manual”
4)
Change the line “iface default inet dhcp” to
read “iface default inet static”
5)
Add these lines after the above line: “address
192.168.xxx.xxx” “netmask 255.255.255.0” and “gateway 192.168.xxx.xxx” where
xxx is your subnet and host octets.
I also checked wpa_supplicant.conf to make sure it all
looked fine (and it did) by using the following command:
Sudo
nano /etc/wpa_supplicant/wpa_supplicant.conf
This shows SSID, PSK, encryption type, etc. Basically
everything you see in wpa_gui. I changed nothing in here. Now, the above
solution is a little weird. Why not just set wlan0 to static? At first I did
and got nowhere fast. The only thing I could ping was the loopback interface
and my static IP address. Couldn’t ping the gateway IP although I did specify
it. The above solution was the only thing I could come up with and make work
after rebooting a few times to make sure it auto connects.
At this point, static IP and wireless are working. Just need
to make remote desktop work. For this project, I do not need to access the
Raspberry Pi desktop from outside of my network. For this feature you may press
your luck with Google. Also, this is for connecting from a Windows based laptop to
the Pi. I’m using xrdp for my remote desktop solution. I had already installed
this feature when studying for the LPIC-1 exam, but here are the steps to
install it:
1)
Bring up LXTerminal.
2)
Type: “sudo apt-get install xrdp”
3)
If it asks for your password, please feed the pi
the password.
4)
This should begin installing your software for
remote deskop, xrdp.
5)
Restart the Pi. This should get the Remote
Desktop Protocol server running.
6)
You can verify this when the Pi boots up by
finding the line: [OK] Starting Remote Desktop Protocol server : xrdp sesman.
My Pi boots directly to the desktop so I have to be quick to find this line
when it boots. If yours boots to command line, you’ll be able to easily find
this line.
Great! RDP is up and running on the Raspberry Pi! Let’s jump
back to the Windows world for a second.
1)
On the Windows laptop, bring up Remote Desktop
Connection and enter in the static IP address we gave the Pi and hit Connect.
You may get a security warning, hit OK since we know you got a nice safe Pi.
2)
You’ll be presented an XRDP login prompt showing
Module, Username, and Password. Leave the module defaulted to sesman-Xvnc and
type in your username and password (the default username is “pi” and the
default password is “raspberry”).
3)
Click OK and peer through the Windows to the
world of Pi.
Now, I had trouble on this part of the process because I
didn’t remember the password I set for the user “pi” so long ago. There are a
couple options to fix this:
1)
From an LXTerminal window, use the “sudo
raspi-config” command to run the starting config and change the password that
way.
2)
From an LXTerminal window, use the “sudo passwd”
command.
I used option 1 which was quick and simple.
That’s about it for prepping the Pi. I haven’t really come
up with what I want to do with the Pi. Should it be a web server, ftp server,
etc.? or should it be used for a surveillance machine, like Ike created. Or
should it be used for weather reports? Time will answer that question. But to
finish out the build, we need to look at fitting all this stuff in a box.
What’s In the Box?!
|
So many drawn diagrams. So much planning. |
I’ve spent a few days looking at how to put all these parts
in the box. I took measurements of the components with calipers. First
observation was pretty obvious: All components including the Pi cannot remain
on the same plane. That means shelves. The box has two M4 bosses that will work
as a starting point for creating two shelves within the box. Bottom shelf will
house the battery, charger, and PowerBoost. Top shelf will house the Pi.
According to the tech specs on adafruit.com, this box has an internal height of
70mm. So there is the first constraint I had to deal with. How should I lay the
planes in the box? I went with a 3.5”x6.5” plane for both top and bottom. These
measurements gave me just enough room to fit the middle 90mm x 167mm space in
the box. I drew out a few diagrams, namely, top down view of the inside of the
box, a side view with components for vertical spacing, and one top down view of
the shelves for placement of the components. Laying out the components was not
too difficult when drawn out on paper (yeah, I guess I’m old school. No CAD
here). Getting stand offs for this project proved a bit of a challenge. I had
some of those jack screws you’d find on the back of a pc or laptop on either
side of the video connection to support the video cable and some screws from
the inside of a laptop. These screws seemed to fit but wouldn’t go all the way
into the jack screw. I threw that idea away and found some nylon stand offs but
would take about twenty days to get to my door step. In the end I used 2-56x3/4
nylon screws, #2 .032”thick washers, 2-56 nylon lock nuts and ¼” #4 nylon
spacers to act as a makeshift standoff. Putting all these together, they fit
well and snug on the small circuit boards.
Next order of business was obtaining the material for the
shelves. I went to the local hardware store and got a sheet of Lexan cut to the
above dimensions. Fit perfectly in the box. Next was to place the PowerBoost
and the LiPo charger to know where to drill holes. All the places were marked
on the Lexan and the drilling began. This was my first time drilling into
polycarbonate. I read a lot on how to drill this stuff so it would not crack.
Everyone agreed to clamp the Lexan to wood and drill with a drill press. I was
not able to get my hands on a drill press, so I was careful to be as vertical
as possible with my trusty drill. Lessons learned on the test pieces of Lexan
showed that slow and steady wins the race here. On to the actual pieces. They
turned out perfect. The circuit boards were screwed in place with the nylon
screws, spacers, and nuts. As they say, measure twice, cut once. This was very
true here. So the first shelf is done, on to the second shelf. Only three holes
needed to be cut for this one: two for the bolts to hold up the shelf and one for
the capacitor on the charger.
|
PowerBoost, Charger, and Battery all layed out in the enclosure. |
If that last hole was not made, the Pi would not
be able to fit inside the box. Taking measurements of the capacitor, I marked
the location where that hole would be drilled. However, something occurred to
me. The capacitor is not perfectly vertical. So I made the hole, but used a
dremel to widen the area where the Lexan and the capacitor kept touching. Easy
fix, but that made the top shelf look a little janky. No one will see it since
the piece will be covered anyway.
Another step that doesn’t really need to be documented but
you’ll notice in the photos, I used a dremel to cut off the top of the bolts
that are used for supporting the Lexan shelves. This was done so I could work
with the shelves a little easier and just set them into the box instead of
putting the shelves on the bolts and screwing everything into place. I’m going
to cap them with locking nuts to prevent any sharp edges and make it look a
little more finished.
Everything at this point was looking great, but another
thing popped into my head. If I continue on with the plan I had in mind, I
would have to take the box apart to turn off the Pi. I need a power switch I
can easily have access to. Back to my layout drawing. I saw the space I needed
for a switch. Again, Adafruit.com to the rescue. I ordered the on/off switch
listed above in the parts list. This switch did not come pre-wired. This was a
good thing for me. That means I get a bonus for learning how to wire up the
switch. Again, I took measurements to get the vertical and horizontal placement
correct on the side of the box. I required a 16mm hole drilled into the side of
this box, but living in an imperial world, I wasn’t able to source a 16mm drill
bit, so I went with a 5/8” bit and milled out the extra .1mm. No big deal, and
the hole looked pretty clean.
|
Testing the external power button. The LED makes it look good! |
I quickly learned how to wire up the switch so the LED would
turn on when the button is depressed and off when not switched on. Back when I
was soldering all those wires together, I had enough length in the wires for
the job. Question now is, can I still use the same wires or do I need to get a
few more inches of wire. Lucky for me, there was just enough wire after cutting
the cable apart from the original plan. I decided to wire up the cable between
the charger and the PowerBoost instead of wiring up the battery directly. I
went this route in case I have to change out my battery in the future, this
could be done with little or no effort. The wiring for the switch goes as
follows: positive wire from the charger goes to the Common terminal, then a
small jumper wire goes from the Normally-Open terminal to the Positive
terminal, then from the Positive terminal, to the PowerBoost, then the negative
wire comes out of the PowerBoost to the Negative terminal on the switch, and
then from the Negative terminal to the charger. This wiring scheme allows the
LED to light up when the push button is in the on position and off while in the
off position.
Quickly, I hooked up all the cables to the appropriate
jacks, screwed the shelves in place, and used some double sided tape to keep
the battery in place and also to keep the Pi case from being knocked around on
the top shelf. Screwed the top cover in place and voila, a solar powered
Raspberry Pi computer!
Praise the Sun!
At this point, I am feeling really good about this project.
How amazing is it when you learn new skills and overcome challenges. I learned
a lot in regards to planning for a project of this scale, making a soldering
job look nice, how a switch is wired up, and more. I haven’t done any long term
testing as to how long the Pi will run into the night when only running on
battery. However, I find it amazing that this pocket computer can inspire so
many people to come up with bright ideas and make them a tangible item. Some of
the notable pages that helped me complete this project are as follows:
·
How
to make a Raspberry Pi solar-powered FTP server
·
Adafruit.com
·
Ike
the Network Guy
·
Raspberry Pi Forums
|
Final product. One solar powered Raspberry Pi! |
Finally, for all you Sun Bro’s out there, Praise the Sun!