Long time lurker. First time writer. One of my biggest problems developing Raspberry Pi specific software/hardware is a lack of (physical) portability. All the cyberdeck builds going on are good inspiration, but I'd like a more standard form factor. I'm going with a half pre-made solution: a non-functional Powerbook will donate its case to the cause while also (hopefully) providing a useful Raspberry Pi dev system on the go. Punking my co-workers with a 25 year old computer is a bonus.
Why a Raspberry Pi in an old Powerbook? There are a few reasons.
1. I want a Pi in a portable form factor so I can develop wherever I go. I have a number of Pis running things in my house, and it's just easier to write for a Pi on a Pi.
2. The Powerbook 190 is a chunky case that will hold a lot of hardware. It's also retro chic.
3. It's an excuse to do new things. I know this project will require me to do stuff I haven't done before. That's always good!
No functioning computers were harmed by this project. If I had a working Powerbook 190 I definitely wouldn't be stripping it for its case. A broken wreck from eBay though? Game on.
Since I have the case mostly repaired, and the keyboard works I can start selecting the other parts to go into the system. If the keyboard had been a loss this would be complicated by having to find one that would fit ok into the case, but as it is I'm now mostly dealing with functional parts that won't be seen. The most notable exception here is the display.
The Powerbook 190 came with a 9.5 inch, passive matrix, greyscale display. I'm not even entertaining the possibility of using that. The 190cs came with a generous 10.4 inch color display. Maybe I should have started with one of those, but hey, the price on this one was right. Some cursory searches haven't come up with anything the right size to fit my 190 bezel, but there are options in the 10 inch range. That's only a half inch difference, and depending on the display I might not miss much. But if I need to widen the opening in the bezel, that's not the end of the world.
Currently I'm considering the Pimoroni HDMI 10" IPS LCD Screen Kit. I will admit the price is a bit high for a project like this, but the size is right(ish), the resolution is decent, and -this is key- it's the right aspect ratio. 10.1 inch displays are all over the Internet, but 10 inch displays with a 4:3 aspect ratio are not, and that's what's needed here. Plus, the Powerbook has those fancy display control buttons right on the bezel, which I can re-purpose for the Pimoroni display's menu buttons. The board it comes with won't have them in the right place, but that's easy enough to deal with. OSH Park will already be making some boards for me. What's one more?
I don't have a lot of experience with Arduino. Most of my embedded work has been with AVR microcontrollers in C. So imagine my surprise when I got the Arduino environment up on my system with the Teensy loader and found it has a dedicated preset for HID, including a keyboard. Once I brushed up on how matrices are handled, getting a rough working version was surprisingly easy.
Ignore the ATTiny and associated parts. Every breadboard I own has a strata of different projects on it. The keyboard controller is an ugly pile of jumpers, but after a little bit of debugging every key works as expected. My lazy debounce routine needs work (will likely try out the Bounce library), and it currently only recognizes one modifier key at a time, but it functions. The proof of concept is good enough to start designing the carrier board in KiCad. The Caps Lock LED even still works!
That's enough keyboard talk for now. Time to move on to more fun things, like parts selection.
The keyboard went back together better then I expected. All the keys still work (for now), so it was time to finish the documentation so a working controller can be programmed. I picked up a couple OSH Park edition Teensy 3.2s with a board order a while back. I figured I'd have a use for them eventually. From what I can tell, it's one of the chosen platforms for custom keyboards, so this should be easy, right?
I started looking into what it takes to load up a custom configuration of QMK and was immediately confused. Maybe it's just me, but it seems it's pretty easy to get working on a supported (or community supported) keyboard, but way less straightforward on an arbitrary layout. First things first though. I needed to model the keyboard. The physical layout was relatively easy to reproduce on keyboard-layout-editor.com.
The keys are updated a bit to fit the current decade. Option is now Alt, and Command is listed as Win - more generically known as the GUI key. Delete and Backspace were flipped compared to current keyboards, so I changed it to match in this layout. Return and Enter will both be mapped to Enter in the programming, although the position of Enter is a bit archaic and I may map it to something else eventually. However, I first need to work out the wiring.
I imported the layout into Keyboard Firmware Builder (kbfirmware.com) to see what it would give me. With the wiring reproduced virtually, here's what we get:
Pretty, isn't it? I understand why some of the decisions were made. An old membrane keyboard doesn't exactly include diodes, so the layout is intended to reduce ghosting. Of course that means the layout in QMK will have to be fully customized, a task I have had a hard time finding information about. QMK appears to be very powerful, but for someone new to the scene, the learning curve seems steep, and I haven't been able to find a good walkthrough.
After a bunch of digging, I think QMK sounds great in theory, but it's kind of a lot. I appreciate the support it provides to the custom keyboard community, but it seems needlessly complicated for my purposes. I've done some embedded programming, and think I can do the same thing, but much simpler. This whole project was supposed to be a learning experience, right?
I'm no chemist, but it seems somehow the battery leakage affected the conductivity of some of the traces in the keyboard. Thankfully it was only a problem above the battery compartment, otherwise I would be better off finding a different keyboard that would fit. To fix the traces I had to take the keyboard down the rest of the way, which required cutting the places the membranes were bonded together, but it turned out ok.
I am neither a surgeon nor an artist, and MG Chemicals' silver conductive pen isn't exactly a precision instrument, but the traces work now. That's all I'm looking for in this thing. None of it will be visible anyways, and if the keyboard fails down the line, I'll either repair it again or replace it finally. For now, I have all 76 keys mapped out and ready for the next step. I'll put the matrix spreadsheet up in the files section once it's formatted properly.
While I'm waiting to continue work on the keyboard, I may as well start thinking about how to lay out the internals.
Obviously the Raspberry Pi 4 will take center stage, but it will have to share the case with all the support electronics: LCD driver, USB hub, SSD, keyboard controller, touchpad, and battery/charge controller. There will probably be more, especially if I can fit those parts in efficiently. To that end, I will probably roll my own support board with a USB hub IC, Teensy, and the necessary cable connectors. I'll have to decide if I want to keep the old floppy drive bay covered, or cut that portion out of the support frame.
Because literally none of the external ports on the Powerbook 190 are still in use, with the exception of the barrel connector for power, I'll have to be creative fitting the Pi's connections into the existing holes. It'll probably end up looking like an octopus, with extension cables running to different places on the case. One USB 2.0 port will be reserved for connection to the input devices through the hub, and one USB 3.0 port will be connected to an SSD. Only one of each will be broken out as external connections, along with Ethernet and one HDMI port. I think a 3D printed cover plate will be called for here. Given the concave shape of the port area, a cover place could probably fit right on the outside and only expose the modern ports. This would remove a little of the retro appeal, but give it a much cleaner look.
As you can see, repairs on the case and removal of the battery leakage are ongoing, but it's getting there.
Cutting away the bare minimum from each of the "plastic pop rivets" on the bottom of my Powerbook keyboard revealed the membranes nicely. It turns out the thick traces are indeed for the caps lock LED.
This is as far as I'm planning to take it down. It turns out 1995 Apple made working on this keyboard as hard as modern Apple would. In addition to the destructive removal of the aluminum plate, the membranes are bonded together in two places, so I'd have to cut that part to separate them fully. I hope that won't be necessary.
Some of the pads definitely suffered corrosion from the battery leaking in the case. Very careful application of alcohol cleaned them up ok, but the missing keys still didn't register. After some poking around the affected traces with a meter, it turns out I'm missing some of the matrix because the traces have become magically non-conductive in a couple places.
So how does one go about repairing that? Fortunately, while this is new territory for me, it's hardly a new issue. A quick search returned an eevblog conversation that recommends conductive ink. The good stuff from MG Chemicals isn't cheap, but I'd rather pay a bit more and have a better chance of success. Time to work on something else while Amazon does its thing.
Now that the obligatory Matrix reference is taken care of...
I figured I would see if the matrix on this keyboard could be brute forced without having to take it apart (blue pill). As it turns out, yes it can... to a point. Here's what I have so far:
A quick note on the pin numbers: The spreadsheet uses the numbers as I see them on the breakout boards. Since the membranes are face to face, one of them is technically upside down, making the pin numbering backwards. That's a problem for another day.
The matrix is reasonably logical. I believe pins two and three on the bottom membrane are power and ground for the caps lock LED, but haven't tested that yet. As you can see, I'm missing a few keys still. After going over the potential combinations multiple times (including the supposed LED pins), I still haven't found tilde, F11, F12, enter, return, delete, backspace, R shift, either bracket, pipe, or +/=. Obviously that's a bit of a problem. It's easy enough looking at the spreadsheet to extrapolate where they probably are, but testing hasn't produced those results. Maybe the contacts are dirty or corroded. It would hardly be surprising given the amount of battery leakage on everything. Unfortunately finding out will require taking the keyboard apart, with putting it back together being the harder task given how it's constructed.
The plastic frame is held onto the aluminum base with dozens of plastic studs. Each stud is melted and spread out to form what is essentially a plastic pop rivet. That's all fine and good if you don't need to re-open the finished product, but a bit problematic for re-usability otherwise. I don't see a way around that, however, since I'm missing a bunch of keys from my matrix. It looks like my favorite plastic bonder is going to get some more use.
The keyboard on this Powerbook is basically the only component that appears to be in good shape. Appears. I can't prove that until I figure out the matrix since attempting disassembly to check would destroy it.
The bottom plate of the keyboard is pressed on so each individual plastic mount would have to be removed to get it off. I'm not doing that unless I really have to.
The keyboard has two 1mm pitch ribbon cables coming out of it. One with fifteen conductors and one with thirteen. Information on the Internet about this setup has been pretty sparse, but from what I can tell it should be a simple matrix. That doesn't explain why two of the conductors are thicker (until the connection point), but I'm only going to worry about that if brute forcing the matrix doesn't work. To that end, I've acquired a pair of FPC breakout boards on eBay.
They're 26 pin, and the ribbons are only 16 wide, but they were cheap and more pins will be more versatile for reuse once I'm done figuring out the matrix. The plan is to design a custom board with the FPC connectors and a footprint for a Teensy (among other things) to fit into the case alongside the Pi. Hopefully this matrix gives up its secrets without too much difficulty.
With the case cleaning up nicely, I've started looking at the hinges. Their unwillingness to move is what led to a lot of the damage in the first place. There are two identical hinge assemblies mirror-imaged from each other in this Powerbook.
Even after soaking in penetrating oil, these things will barely rotate with pliers on each half. Clearly this won't do. After disassembling one it appears the spring is far too tight on the shaft. Obviously it needs to create enough friction to hold the screen at whatever angle the user puts it in, but not create too much to be able to move. These springs seem to have gotten tighter as they aged. I'm not a student of metallurgy, so I don't know what forces are at work here, and the question is academic anyways. At this point, I don't know if I should try to file out their inner diameter a little, or maybe 3D print an interference fit replacement. It'll be difficult to get the amount of friction just right, but it's probably doable.
After a bunch of scrubbing with vinegar, the old plastic of my Powerbook is looking better. Add to that my discovery of Loctite plastic bonder and things are shaping up pretty well. Among other plastic repairs, I unscrewed the heat press inserts and surrounding plastic from the hinges and reattached them to the upper case and they're looking good.
I may have to fill around them with more Loctite for a better hold. Will they stand up to repeated stresses? Hard to say yet, but I'm somewhat optimistic. This plastic bonder is some good stuff!