I write for a living, and spend most of my work day sitting in front of my desktop computer while churning out articles. I built FeatherQuill because I wanted a a satisfying typing experience even when I'm out and about. This is a dedicated, distraction-free word processor in the style of a laptop. It's most important features are an extremely long battery life (34+ hours of typing), a mechanical keyboard, and a quick boot-up time
FeatherQuill is built around a Raspberry Pi Zero W, which was chosen for its low power consumption. That is running DietPi in order to keep the OS as lightweight as possible. When turned on, it will automatically load a simple terminal-based word processor called WordGrinder. The time it takes to go from power on to typing is about 20-25 seconds.
The battery pack is made of eight 18650 lithium-ion batteries, each of which has a capacity of 3100mAh. The total capacity is enough to last 34+ hours while typing. A dedicated hardware switch lets you turn off the LCD for a "standby" mode. In standby the Raspberry Pi will continue to run as normal and the battery pack can last more than 83 hours.
Step 1: Power Consumption and Battery LifeFor this project, battery life was the most important factor to me. My goal was to be able to take FeatherQuill with me on a weekend trip and have enough batter life to write for a couple of full days without needing to recharge it. I think I've achieved that. Below are the various measurements I took and conclusions I came to regarding battery life. Keep in mind that 18650 battery cells come in various capacities, and the models I used for this project are 3100mAh each.
Measurements:
LCD Only: 1.7W (5V 340mA)
LCD Only (Backlight Off): 1.2W (5V 240mA)
Everything On (No Keyboard LEDs): 2.7W (5V 540mA)
Keyboard Disconnected: 2.3W (5V 460mA)
USB Hub Disconnected: 2.3W (5V 460mA)
Raspi Only: 0.6W (5V 120mA)
Raspi + Keyboard: 1.35W or 1.05W ? (5V 270mA - 210mA, average: 240mA)
Everything Connected (Backlight Off): 2.2W (5V 440mA)
Conclusions:
Raspi: 120mA
Keyboard: 80mA LCD
(minus backlight): 240mA
LCD backlight: 100mA
LCD total: 340mA
USB Hub: No power used
Normal Use: 5V 540mA Standby
(Backlight Off): 5V 440mA
Standby (LCD Off Entirely): Readings inconsistent, but 5V ~220mA
Battery Life with 8 x 18650 3.7V 3100mAh cell battery pack (total: 24, 800mAh):
Normal Use: 34 Hours Standby
(Backlight Off): 41.5 Hours
Standby (LCD Off Entirely): 83.5 Hours
Additional Information and Explanations:
Measurements were taken using a cheap energy monitor and probably aren't completely accurate or precise. But the readings are consistent enough that we can assume they're "close enough" for our purposes.
Everything runs at 5V (nominal). Power for testing was coming from a standard USB wall wart power supply. Power for the actual build will be coming from an 18650 LiPo battery pack via a LiPo charging/booster board.
These measurments were taken while running DietPi (not the Raspberry Pi OS) with both WiFi and Bluetooth disabled. Bluetooth utilities/services were entirely removed.
The DietPi "Power Save" CPU setting does not seem to have any effect at all.
Bootup process consumes more power, as CPU turbo is on. Increases by about 40mA during boot.
Boot time, from power to WordGrinder, is about 20 seconds.
WordGrinder itself does not seem to consume any additional power.
The LCD power consumption is surprising. Typically, the backlight is responsible for most of the power consumption. In this case, however, the backlight is responsible for less than 1/3rd of the power consumption. To extend "standby" battery life, a switch will be required to disconnect power to the LCD entirely.
The keyboard also draws more power than anticipated. Even with Bluetooth disconnected with the built-in hardswitch, the battery disconnected (to avoid using power for charging), and LEDs turned off, it still consumes 80mA. The keyboard's LEDs have a serious effect on power consumption. All LEDs on at max brightness increases power consumption by 130mA (for a total of 210mA). All LEDs on at minimum brightness increases power consumption by 40mA. The more conservative LED effects, at minimum brightness, can consume anywhere from practically nothing to around 20mA. Those a good choice if effects are desired, as they only decrease "Normal Use" battery life by about 1.5 hours.
The LiPo battery board will likely consume some power itself and won't have perfect efficiency, so battery life in the "real world" could be less than the theoretical numbers listed above.
Step 2: CAD DesignTo ensure that typing was comfortable, I needed a mechanical keyboard. This model is 60%, so it omits the number pad and doubles-up many keys with layers. The primary portion of the keyboard is the same size and layout as a typical keyboard. A small LCD was chosen to keep the power consumption down.
I started by sketching out a basic design and then proceeded to CAD modeling in Autodesk Fusion 360. I had to go through several revisions to make the case as compact as possible while ensuring everything fit. A number of tweaks were made throughout the process. Some of those are not reflected in the photos as I made modifications after printing, but are present in the STL files
My 3D printer is of an average size, so the each part had to be divided into two pieces so that they would fit on the bed. The halves are joined by M3 heat set inserts and M3 screws, with Gorilla Glue in the seam to increase the strength.
Only the keyboard and batteries are housed in the bottom half of the case. All of the other components are in the top/lid.
The case is designed so that the keyboard is at angle when the lid is opened, to increase the comfort of typing. Small magnets are used to keep the lid closed. Those aren't as strong as I would like and I will probably design some kind of latch in the future.
Step 3: 3D Printing the CaseI didn't original intend to go with this cotton candy color scheme, but I kept running out of filament and so this is what I ended up with. You can print the parts in whatever color and material you like. I used PLA, but would recommend using PETG if possible. PETG is stronger and isn't as prone to deformation in heat.
You will need to use supports for all of the parts. I also highly recommend using Cura's "Fuzzy" settings at a low value (Thickness: 0.1, Density: 10). This will give the surfaces of the parts a nice textured finish that is great for hiding layer lines.
After printing your parts, you will want to use a soldering iron to get your heat set inserts hot. Then you can just push them into the larger holes. They'll melt the plastic as they go in, and then will be held in place firmly once the plastic cools.
The two bottom parts will need to be glued together first. Get one half of the seam wet with water and then add a thin layer of Gorilla Glue to the other half of the seam. Then screw in the two M3 screws tightly. Use clamps to hold the two parts together and wipe away the excess glue. Leave the clamps in place for 24 hours to ensure the glue is fully cured. Then insert the bearings into the holes.
You'll repeat this process with the top parts, but need to insert them into the bearings before gluing/screwing the parts together. You won't be able to disassemble the two parts after they are put together.
Step 4: Modifying LCD and KeyboardThis LCD is designed to be a touchscreen (functionality we aren't using) and has a female pin header on the back to connect to the Raspberry Pi's GPIO pins. That header dramatically increases the thickness of the LCD panel, so it has to go. I couldn't get access to safely desolder it, so I just cut it right off with a Dremel. Obviously, this voids your LCD warranty...
The keyboard has a similar issue, thanks to a switch for the Bluetooth chip. We aren't using Bluetooth and it dramatically increases power consumption. After removing the keyboard from it's case (screws are hidden under keys), you can use hot air or a soldering iron to simply detach that switch.
Step 5: Setting Up DietPi and WordGrinderInstead of using the Raspberry Pi OS, I chose to use DietPi. It's more lightweight and boots faster. It also offers a few customization options that can help reduce power consumption (like easily turning off the wireless adapter). If you'd prefer, you can use the Raspberry Pi OS—even the full desktop version if you want.
Detailed installation instructions for DietPi are available here: https://dietpi.com/docs/user-guide_installation/
You can then install WordGrinder:
sudo apt-get install wordgrinder
If you want it to automatically launch WordGrinder, simply add the "wordgrinder" command to your.bashrc file.
The WiFi adapter can be disabled through the DietPi configuration tool. Everything else works pretty much exactly the same as with a Raspberry Pi. I'd suggest googling guides on disabling Bluetooth and increasing terminal font size (if it is too small for you).
Step 6: Soldering Battery PackBefore proceeding with this section, I have to give you a disclaimer:
Li-ion batteries are potentially dangerous! They can catch fire or explode! I am not even the slightest bit liable if you kill yourself or burn down your house. Don't take my word for how to safely do this—do your research!
Okay, with that out of the way, this is how I put together the battery pack. It's recommended that you spot weld the battery connections, but I didn't have a spot welder and so I solder them instead.
Before you do anything else, you have to make sure that your batteries all have an identical voltage. If they don't, they'll basically try to charge each other to balance out the voltage with bad results.
Begin by scuffing up the terminals on each end of your batteries. I used a Dremel with a sandpaper bit to do that. Then put them in place in case to get the spacing right. Make sure they are all facing the same direction! We are wiring these in parallel, so all of the positive terminals will be connected and all of the negative terminals will be connected. Use a little bit of hot glue between the batteries to keep the spacing (but don't glue them to the case).
Coat each terminal in a thin layer of flux and then place nickel strips on top to connect the terminals. I used 1.5 strips per side. Use the largest tip your soldering iron can accept and turn the heat up as high as it will go. Then heat each terminal and the nickel strip simultaneously while applying a liberal amount of solder. The goal is to avoid overheating the batteries by making contact with the soldering iron for as little time as possible. Just make sure your solder is flowing properly over the terminal and nickel strip, and then remove heat.
Once your two sets of four batteries are soldered with their nickel strips, you can use wire (18AWG or higher) to connect the two together—again: positive to positive and negative to negative. Then solder two longer lengths of wire to the terminals at one end of your battery pack and feed them through the opening. Those are what will supply power to the LiPo charging board.
Step 7: Assembling ElectronicsThis setup should be fairly straightforward. Put the keyboard in place and use the original screws to attach it to the supports. On the opposite side (in the battery compartment), plug in the USB-C cable and feed it through the opening going to the lid.
On the top, the LCD should fit snuggly into place (make sure the backlight switch is on!). The USB-C extender is screwed into place using the supplied screws. The LiPo charging board is held in place with hot glue. Position it to make sure the button can be pressed and that the screen is visible through the window in the LCD cover. The Raspberry Pi fits onto the tabs and a bit of hot glue will secure it.
A USB cable can be run from the right LiPo board output to the Raspberry Pi. We don't have room for the USB plug on the left output, which is used for the LCD. Cut the USB-A end off of a cable and remove the shielding. You only need the red (positive) and black (negative) wires. The positive wire will run through the top two terminals of the switch. Then your negative and positive wires will need to be soldered onto the left USB output on the LiPo board. The far left pin is positive and the far right pin is ground (negative).
Then just use hot glue to hold all of your wires in place so that they are as "flat" as possible and don't push out on the LCD cover.
Step 8: Final AssemblyNow all you have to do is screw the LCD covers onto the top—there are tabs at the top for the cover to fit under to hold the LCD in place—and the battery covers onto the bottom.
Double-pressing the LiPo board button will turn power on. Holding it down will turn power off. The switch lets you control power to the LCD independently and is great for saving power when you're not actually typing. Be sure to read the keyboard's manual to learn how to control the various LED effects. I recommend using the minimum brightness and one of the more subtle effects to conserve battery.
After saving a document for the first time, WordGrinder will autosave after that. WordGrinder has a simple interface, but many shortcuts. Read through its documents to learn more about how it works. Files can be transferred to an external computer over an SSH connection—just toggle the WiFi adapter back on when you need to transfer documents.
That's it! If you liked this project, please consider voting for it in the "Battery Powered" contest. I put a lot of work into designing FeatherQuill and have an idea to design a similar device with 2-3 times the battery. Follow me on here to keep up to date with my projects!
Comments