Minor home repair: window shades

2020-09-26 16:20 - General

The freshly repaired blinds in my windows.

I mostly leave my window blinds in the same spot all the time. I know the spot I like. But it's autumn and so I'm opening and closing the window, and sometimes the blinds too, to let fresh air in while it's nice outside. Recently one set of blinds started to sag on one side. I got up on a stool to check, and the hanger was loose on that side. It's been a few weeks, but I've finally repaired that, today.

I first investigated the hangers and found a typical arrangement: A little springy piece of metal in back, released by levering with a screwdriver, holds the back edge of the blinds while the front edge of the hanger clips into a slot on the front. The blinds were a little tricky to move about by myself while standing on a stool, but I got them safely out of the way and looked at the hanger. It was screwed straight into drywall, no anchors. I'm surprised it lasted as long as it did. I got some anchors and installed them: voila, back in place where it belongs.

Finished "Upstairs" Dividers

2020-09-26 16:12 - Making

I live on the back (away from the street) side of my apartment building. So things tend to be pretty quiet, and there's no street lights outside my window. But there is another building, with a hallway with windows and bright fluorescent lights that never turn off. It's not much, but it's enough to be annoying at night.

The partial screening curtain for my sleeping loft.

So a while back, I got some black curtains and a rod to hang them from (which friction fits between the support beams). This basically solves the problem. They're thin but good enough to block most of the light from outside in the "upstairs" sleeping loft where my bed is. But it does leave a section open. I always wanted to fix that. When I first set this up, I considered continuing the curtains straight across to the wall. that would have divided the hallway a bit too much though.

Making the curtain rod clips. The completed curtain rod clips.

After quite a long time I finally came up with an idea I like. I've got a standard curtain rod, intended to bridge across the top of a window. But this spot is a concrete support beam: not easy to screw into for mounting. The solution was some tiny brackets, with enough surface area to simply hot glue to the wall. One of them ripped the paint/plaster off after a day or so, but that was a week ago and they've held fast since, after being re-glued to the bare surface beneath.

My completed screening curtain, including a dip under the suport beam and a turn around the corner.

First I had to do some sewing, to fit the curtain around the support beam. Then it turns the corner and covers the remaining open area on this side. It's a minor change but a great improvement in feel.

Hacking Together A New Home Server

2020-08-25 23:38 - General


Some time last year the server I keep in my Mom's basement (for my remote backups and a few small things for her) went kaput. I don't know how or why because it's my remote server and I don't have easy access to fix it. It was almost exactly a decade old, and not very powerful when it was new (to me, refurbished) and it just wasn't booting at all. It was time to replace it. But since it's primarily a backup server, time was not of the essence. I took the time to figure out how to rebuild it around a Supermicro server-class motherboard, with built in IPMI. A technology that allows completely hands-off remote management of every aspect of the server. Great for a remote backup machine! I slowly bought parts, assembled them all at home and then once it was working well, brought it out to my Mom's at my next visit.

Point being: it introduced me to building a server with real server-class hardware, with built in remote management. I got a taste for it.

Separately I've told the story of how I broke and rebuilt the main server I keep at home, the primary source of the backups to be sent remotely. More recently I figured out that the first-generation AMD Ryzen chip that was in it was not so hot. So much so that AMD accepted an RMA even a couple years later, known design defect. And replaced it. With a more powerful chip. Which seemed nice at first. Turns out, however, it's not. In addition to the problem that was bad enough (not really, the workaround was easy and the occurrence was predictable and rare) to warrant a return and replacement for free, there's a worse problem with these early Ryzen chips: random freezes and reboots. The popular internet theories tend to revolve around bad power management or bad early motherboard support. Or both? This problem happens, ironically enough at idle as opposed to at high load (as the bad-enough-for-return problem did). Which usually means that after a few hours of sitting around doing almost nothing (e.g. overnight!) the machine will freeze, crash, or reboot.

This wasn't obvious right at first, but within a couple weeks became a real problem, every few days I'd find my server hadn't really been running for a while. I did internet research and tried to figure it out. I updated the BIOS which actually removed the primary option that used to help. At one point crashes every few hours were common. I tried buying a brand new motherboard, with a newer chipset and theoretically better support. It was worse: it wouldn't even stay running long enough to boot regularly, much less last for a few hours after that. (So I returned it, which I generally hate to do.)

Long story slightly shorter: I could get it stable, but only by completely turning off power management ("Cool'n'Quiet") in the BIOS and running a busy-loop job just to keep the CPU slightly above idle. (Again, internet theories: it's something about waking up from a completely idle low-power state that fails, so keeping the CPU busy prevents it from going into that low power state.) Just not good enough. And that nice "real server" I had built not to long ago was nagging the back of my mind...


So I had a server that at least didn't crash regularly, but I was no longer happy with it. I decided it was time to build a second "real server". I took more time and put in more planning though, this round. I was mostly set on Supermicro again: first, using the same platform would make things easier in the long haul: same tools and features on both servers. Second: they're pretty common. There's enough used stuff out there to be nice and affordable, too. I looked at a wide range of boards, spanning the X9 (like the one I built last year) to the X11 (newest, as far as I can tell) model lines. The newer models never seemed to hit a better price/performance trade-off so I started looking more closely at the X9 boards. They didn't, as I first suspected, all build around the same class of processors, they varied. Within that bunch, the LGA2011 type socket chips seemed the best, and I made a spreadsheet with a chart:

Which shows the CPU Mark rating for all the LGA2011 processors (that seemed commonly available) compatible with the X9 boards I could find charted against the price (lowest stable/believable price on eBay). There's a few excursions above and below the trend line, but not really far.

What I had to decide was how much performance do I really want? I spent around two years with a Ryzen 5 1600, CPU Mark 12455 (plenty for my needs) and a few months with a Ryzen 7 1700, CPU Mark 14566 (even more!). Very few available processors were in that range. But there are dual processor boards available!

I began trolling eBay for a good deal on either a single powerful chip or a dual processor board that could house two more inexpensive chips. Around this time I learned that there's the extremely standard ATX motherboard size, a larger E-ATX size, and a yet-larger EE-ATX size. The latter is extremely non-standard. I was looking at the X9DRi-LNF4+ board for a while, but it's that EE-ATX size which is really Supermicro-specific and only works (well) in Supermicro's own (expensive) cases. Next I found the very similar X9DRi-F &emdash; same line, slightly less feature packed, and just "E"-ATX. I looked around for a while and found a real auction (not buy-it-now) item on eBay, and I won it! First part selected!

What followed was building the machine around that: picking the CPUs to go with it: two Intel Xeon E5-2650 v2s at 10006 CPU Mark each, 64 GB of ECC memory (4 16GB sticks), a brand new power supply (with two CPU power connectors) and other miscellaneous parts.

Aside: part of the reason I tended towards the dual processor board was the memory. In last year's build I accidentally bought "registered" ECC memory, or RDIMMs. Support for registered memory is mostly limited to servers and a few other "high end" computers. It's not in as much demand, so it can end up cheaper. (That's how I picked it at first: it said ECC and everything else seemed OK and it was the cheapest.) This time I already had the motherboard and I knew it supported registered memory (I think all dual processor boards do, they tend to have more RAM slots and the benefit of the registered memory is it can consume less power (I think), and work better when there are more individual sticks of memory sharing it all.) Either way this time it didn't matter, the prices were all very close, registered or not. Oh well.

Plus a case to put it all in. With hindsight I can now say that it turns out E-ATX isn't a standard, either. At least not to the degree that ATX is. If you buy a motherboard and a case that both say they work with ATX, they're virtually guaranteed to work together. Not so with E-ATX. Not only did I pick this unusual motherboard size, I also have several (redundant) disks that I want to put in the case. And despite picking server class hardware, I want a PC-like tower. All the real (rack mount) server cases I've ever seen have loud fans in them, and this is going to be in my studio apartment, where I sleep.

I looked around for a while and selected the Antec P101 Silent. Looks great. Eight side-load disk trays &emdash; enough to hold all my disks and makes for easy install and replacement. Motherboard compatibility list says "E-ATX". Great. I ordered it. I got it. As soon as I saw it, it became clear that in order to fit an E-ATX motherboard, you need to remove six of the eight drive trays. Not great.

I had patiently and slowly gathered all my parts, but now they didn't all work (together). The seller didn't reveal this fact and neither did the manufacturer, in any part of their pages or the manual. I tried to return it and was initially quoted a $47 return shipping fee, for a $110 or so item. My heart sank. After some thinking, I got the tiniest bit creative with how I filled out the return request form and got it to agree for the seller to pay return shipping. Along the way I selected "store credit" instead of refund. I don't know if that helped, but I felt like it did.

Then UPS and Newegg conspired to hold my refund hostage for over four weeks (July 16 to August 12) before finally accepting and processing the return. By then the replacement model I selected had gone up in price by over $25. Sigh. But I'd been waiting a long time and had already locked up over $100 in store credit so I just went with it. I got a Fractal Design XL R2, which in the meantime I had reached out to confirm it will really fit my motherboard. (Mostly! See below.)

The Build

The last detail is that by now I had learned how not-quite-standard E-ATX was. I had found other hobbyists like me, building machines around similar Supermicro boards, and wanting to use normal PC cases. Some but not all of the mounting holes line up, and in one of the discussions I read somebody called out how important it is, in a vertical tower case, to support the weight of the CPU coolers well. So all this time waiting, I had done nothing, because step one was to custom mount the motherboard into the case, and I needed to wait for the case.

My server motherboard mounted in my PC case, with custom mounting holes.

The board has ten mounting holes. Six of them lined up with factory holes. Four I drilled out myself: Installed the bare board with the six good mounting points, mark where the remaining four holes should go, and then simply drill a hole just big enough to allow the standoff's threads to fit through. Screw the standoff into a standalone nut, rather than the threads built into the case at the factory. Worked great, just had to spend some quality time with a file to get two of the four holes to line up with the rest. Look closely and you can see the four shiny metal nuts in the picture above, on the black background of the case. Look even more closely and you can see five of the much smaller shiny points where the standoffs fit through the factory holes. (The sixth is obscured by the cabling.)

The motherboard is installed!

With the motherboard now securely installed (the screw heads are black and almost disappear in the photo), next was to install the CPUs. Another tiny saga:

The Xeon 2650 v2 CPUs I bought.

The processors I bought were these, as pictured. I thought that blue thing was some sort of special shipping/protective case. So I biased towards listings including them. It's not. Everything's fine now, but I had to wince as I yanked the blue plastic piece off, it was glued on. It's for some (maybe vendor-specific, like for HP?) slightly more specific variant of the CPU socket, that I don't have. Ok. CPUs installed. Good. Next is the CPU coolers.

They didn't fit.

I made my own mounting hole to get the CPU cooler mounts to fit. Close up of the extra hole I made.

I got a pair of CPU coolers made to fit several different CPU sockets, you're meant to pick and choose the right parts (among several available) to fit the socket you're using. There's some pieces labeled either "Intel" or "AMD". And I've got an Intel CPU so the choice seemed obvious, but it was way too big. And the AMD one had two pair of holes, either a little too small or just a little smaller than that. I found the data sheet, which clearly calls out a mounting hole spacing of 80 mm square. Mine aren't square. Turns out there's more than one LGA2011 socket, and I've got the Narrow ILM ("Independent Loading Mechanism"). Which I learned from a page using a very similar board as an example: a smaller form factor socket so that (e.g.) two can fit on a single board!

I can solve this. The AMD piece was almost the right size. So after a little time with a drill and a Dremel, I had added my own extra holes. Each piece ends up tilted just a bit, but by keeping the offset symmetric everything still lines up well enough to work. Phew!

So I'm done, right? Plug in the memory and turn it on! And it doesn't boot. Does display a code on the screen. Which indicates bad memory. After extensive testing I found that one of the four sticks of RAM I bought is no good. At least enough to prevent booting the machine: the other three each as the only installed memory work fine. The fourth: no go. (Still waiting for that replacement, the seller has been very non-helpful, but eBay claims a replacement is on the way. Return shipping is .. unclear.)


Mostly. Here's the new and old machines next to each other. It's hard to capture in one picture, but (to fit the bigger motherboard) the new one is a few inches taller and deeper (and happens to be subtly wider, too).

The new server and its older little brother.

I'm waiting for the last of the memory to arrive (either way it's a big upgrade over what I had before). And there's an additional "Storage Controller Unit" with four more SATA connections that I'd like to use but haven't figured out yet. But otherwise it's set up and working! The story is long without the software-based issues I had switching from an AMD to Intel processor. But it's basically done!


As mentioned, this was mostly assembled from used parts. I spent (including tax and shipping in-line):

Fractal Design Define XL R2 (case)New$189.98
Supermicro X9DRI-F motherboardUsed$160.59
EVGA SuperNOVA 750 GA 220-GA-0750-X1 power supplyNew$151.40
2x Intel Xeon E5-2650 v2 CPUsUsed$114.13
4x 16GB ECC DDR3 DIMMUsed$100.17
2x RAIJINTEK AIDOS CPU CoolerNew$37.00

And I transplanted my existing disks in. Total: $753.27. I'm happy with this; buying a standalone remote management tool is possible, but for some reason they seem to start in the $400 range, used. I got that plus a nicer server upgraded in just about every way.

Dual TV Antennas

2020-06-27 12:19 - General

My two antennas: one in the window and one on the wall.

I mentioned a while back that I was experimenting with setting up a TV antenna to enable me to stop paying for cable yet still have access to some of the shows I enjoy. Since then I've been continuing to think about it. I got a HDHomeRun tuner device and set up Tvheadend on my server. This allows that computer to act as a fully featured DVR. What that means, though, is wanting a stable antenna set up that always works, and gets every channel at the same time.

As I said in my earlier post, I enjoy plenty of the programming on the Quest channel. But of course it's the one that's hardest to receive. It's especially hard to receive without losing reception on plenty of other channels. I started to think about setups to get multiple antennas and combine them with filters, so one would pick up (only) Quest and one would pick up the rest. This is possible, but complicated and expensive. As I was looking into it, I found a great article titled merging feedlines. It made me confident enough to take a shot at a very cheap and easy solution: just feed two antennas into a "splitter" (which can also function just as well as a combiner), and plug that into my tuner.

It works great! I found this one tiny particular area on the wall where Quest comes in strong (really, two or three feet in any direction ruins the signal!), and most of the other channels come in well in plenty of convenient spots, so I hung the second antenna in the corner of the window (normally covered by the blinds) with a couple of binder clips. The first antenna (except for the cord hanging down) is hidden behind a painting and mostly supported by two nails at the bottom.

At this point I've got all the major three-letter broadcast stations, a couple smaller affiliates, and Quest. With a functioning DVR setup, through the computer. I'll continue using it for a while to confirm that I get a consistent and solid signal, that watching those recordings is convenient, etc. But it's starting to feel like I should really divert funds away from the cable company.

My New Office Chair

2020-05-19 21:22 - General

A shot of my "new" "office" chair.

With pandemic and lockdown forcing a work from home scenario, I'm spending a lot more time at my desk in front of my computer. Very shortly after that started, I started feeling a bunch of upper back pain. I was pretty sure it was down to the instant switch from near-100% full time standing desk at work to full days of sitting desk at home. (I've got a really nice desk, but it's a standard desk that isn't set up for standing at.)

I decided to get myself a new nicer chair. It's been a few years since I went almost standing only at the office, but I spent plenty of time working in a chair before that. And my "office" chair at home is both several years old and from the lowest quality tier, before all that wear.

I can confirm that the chair was mostly to blame, because it took a long time for the replacement to come. The old chair has fixed arms, which form part of the support structure for the back. I took them off and flipped them around, so they still held the back up, but they followed the shape from seat to back, rather than rising up to make a potential armrest. Being fixed, they were at a fixed height. One that was much too high. I was scrunching my shoulders to fit around them.

That said, this chair took a full month (ordered April 14, arrived May 15) to show up. I have no idea whether to consider that as awful as it seems, or to give a lot of slack for the current global situation. I definitely don't appreciate the completely opaque communications of the seller. First I reached out because the passed "14 days" long end of the estimate turned out to be 14 business days (which feels intentionally selected for misinterpretation), not passed. Once that date finally slipped, they gave another several-week window for possible delivery, but nothing more.

Now, it was a great deal. I paid $324 (plus $34 for carpet casters), which is well under half of the $900 for a brand new one. It was listed as "open box" but this is clearly a used/refurbished chair &emdash; plenty of light scratches, but all on the sides/bottom, so I can live with it. The price where I bought it has gone up to $374 in the intervening month. Only since then I learned about National Office Interiors and Liquidators, who are currently listing the same chair (but with the full-option arms, mine only raise/lower) for $299 (though only in grey, every other color is $399!). And more honestly listed as condition "used".

Either way, this is a quality chair, and I'm already happy with it.

Making My Own 3.5" → 5.25" HDD Bracket

2020-05-12 22:01 - Making

The brackets, fresh out of the 3D printer. The brackets after cleaning up a bit. Test fit on a spare old drive. Installed!

I haven't used my 3D printer in quite a while. This is the time, it's tough to get things these days. I'll save the long story of many failed attempts and tweaks to get it working again, but I just have done that.

I've had an extra drive in my home server for a while, since I upgraded the main set from a three-drive single parity to four-drive double parity setup. And nowhere good to put it. It's the remote backup for my Mom's files, on the server I keep at her place which is itself the remote backup for my own files. It's been awkwardly perched, upside down, on a piece of cardboard. I've got four unused 5.25" bays in that case, so it should go there!

I found a nice, compact design for brackets to fit a 3.5" drive in a 5.25" bay online and printed a set out. My printer makes "hairy" prints, with fine strands everywhere, due (I think?) largely to its design. And at least while I'm using up the ton of free ABS filament I got, bed adhesion is tough so I tend to print with a brim. First step was quickly cleaning up all that cruft, which is shown in the second picture. They're not pretty (I picked fast rather than high quality print settings), but they'll work.

Next, I drilled out all the holes. Half large enough for a screw to fit cleanly through, so they could screw into the drive. The other half exactly the right size to grab the threads of the screws, the outside holes are for holding the whole thing into the case. I did a test fit (the third picture) and it worked well enough, after a little more adjustment with the hole position. Then it was straightforward to pop the drive in a proper location, and screwed down!

In that last picture, you can see one of my main drives, currently tucked into the floppy drive slot, so the mounting holes don't line up well. I might make a second bracket to hold that one, too.

A Tale of Two Processors

2020-05-11 22:44 - General

(The box for) my old and new server CPU(s).

In late 2017 I broke and replaced my server computer at home. It was in a partially working enough state that I could wait a while, so it was mid January of 2018 when I finally bit the bullet and bought parts to assemble a whole new computer (except the drives, which I kept). At the time the best bang for my buck was an AMD Ryzen 5 1600 CPU, along with a compatible motherboard and RAM, and other assorted things.

Having just been through a small nightmare to get the server to work fully again, I was very happy when that was done. There were a few small oddities. It would crash when idle, which turns out to be a strange power management thing. And more rarely it would fail under load as well. It took until just last month for me to realize that segfault under load is a known failure for (early?) Ryzen CPUs.

My old, broken, replaced CPU.

So I contacted AMD, on the 19th. The RMA request was approved and I shipped this, pictured, CPU back to them. The second line of text there UA 1746PGS tells me, among other things, that this was from 2017, week 46. That was a little worrying — only "early" 2017 CPUs are supposed to have this issue. According to rumors online. But I had to take everything apart to get this picture to know that fact, so I was nearly committed anyway. I delayed shipping it until the 27th. It was clear that I'd have to wait for shipping in both directions, and processing in between, with no CPU in my server — which holds all my files! I was seriously thinking about buying a new replacement no matter what, and selling whatever they shipped back to me, later.

In researching what exact replacement I would pick up, I discovered both that Microcenter is open (despite global pandemic), and that they had the best priced option. I came very close to heading there to grab one the weekend before I shipped my CPU away. But I realized: I can go visit them any time. I can be patient, and waste money on a new and extra part only if and when it becomes desperate, without much delay. So I took my server apart and shipped the CPU away.

I had the tracking number, which I watched eagerly. It was delivered on the 1st of May, according to FedEx. On the 4th I get an email that the "return processor has successfully passed the inspection and your replacement product is now approved". It's been a full week, but I guess that's good news. On the 5th I get a message that the replacement was shipped. And that's it. No tracking number.

Today, the 11th, the replacement arrived. To my surprise, it's a Ryzen 7 1700. I paid $200 for my CPU just over two years ago. If I look today, the price seems to be $250 (it might be limited old stock making pricing strange, this is an older model now). The newer/better 5 3600 costs just $130. The replacement costs $320 today (the 3700 is also over $300). It's got a slightly lower base clock speed (3.0 vs 3.2 GHz), but eight instead of six cores. And it came in a retail box with new cooler and everything. I was not expecting an upgrade, but for multiple weeks of doing without my server it's a nice perk to have ended up with.

My Custom (Nintendo) Switch

2020-02-09 12:56 - Gaming

I got a Nintendo switch console just under two years ago. I've been loving it. I've also got a huge collection of other video game consoles, and I've been slowly gathering second spare units as well: nothing lasts forever, and I'd hate to find some time down the road that my (say) Super Nintendo has gone bad and it's really hard to find another replacement.

The extra detail with the Switch is that the original units have a built-in hardware vulnerability which makes them trivially easy to hack and thus run anything you desire. I like to mod all my consoles to run whatever I choose, whenever I can. But these early Switch units are becoming more rare and expensive. I watched eBay for a while and finally caught one at the very end of December.

The front view of my custom Nintendo Switch. The backview of my custom Nintendo Switch.

I knew then that it was used with some minor cosmetic issues. Once I got it in my hands they were even a bit more obvious, so I decided to replace some parts to make it new and pretty again. I replaced the plastic shell with this pictured transparent green version. I'm really happy with it. I also took the time to paint the labels on the buttons in white. The cheap kit came with only nearly invisible embossing on the buttons. That was hard effort but well worth it. I elected to not install the metal plate across the main unit. It serves a minor role in heat dissipation, but I believe things will be fine without it, and it makes the transparent back look extra awesome.

While I had it open anyway, I also installed an internal "RCMX86" chip, which makes the unit automatically boot up in completely open and hackable mode. (Otherwise you need to plug something, like the RCM Loader visible in some of these pictures, in each time you turn it on.)

Installing the mod wires. Continuing to install the mod, tweaking the final wires. RCMX86 mod chip completely installed.

Installing this mod was quite challenging! Look closely next to the mod chip in the final picture and you'll see some tiny gold circles (a group of four is somewhat clear). Those are about one millimeter across. A couple of the connections were to "easy" points like those. Others were to significantly smaller points. Some of the super tiny rectangles you can see on the board are resistors and capacitors. The small ones are probably "0201" or 0.02 by 0.01 inches, 0.6 by 0.3 millimeters -- and the pads on either side are a fraction of that! Somehow I managed to get everything connected and functional, and didn't destroy it along the way!

The worst thing that happened was a slip during re-assembly damaging one of the buttons' (ZL) contacts. It's still functional, but takes a little more force than normal and doesn't "click" like it should. A replacement part is on the way.

My Automatic Heater Controller (Thermostat)

2020-02-05 21:03 - Making

Lots of New York apartments are actually too hot in the winter. Steam radiators are common, and they don't offer much control. There's strict laws about lower temperature bounds, but none for upper bounds. And most significant: the building usually shares one control everywhere, but the heat reaches different parts of it differently, and the cold seeps in differently.

In my current place, it's also too hot in the winter. I think that uneven-across-the-building issue is the real one for me. I've heard that other parts of the building are too cold. My heat comes from a forced hot water system, which the building controls. I suppose I'm closer to the feed than other apartments. I've only got standard plumbing style cut-off valves. I can totally disable the heat, but then it often gets too cold. I can enable it, but then it often gets too hot. For a few years I've been hoping to make something to help fix this. The video above is my solution!

I actually got a "test valve" some time ago to play with, when starting this project. My test valve didn't work at all for the project, but I lucked out: the test valve's handle is permanently attached, but my real valve's handle is attached with a hex nut, it's removable. The first part of the project was the handle replacement. It's the round smoky plastic bit. It has a hole in the center that's just the right shape (an eight millimeter hole, but with two sides squared off at six millimeters) to turn the valve. It's got eight small holes around the edges and one late addition hole for a screw to hit the valve's end stops.

Those eight holes are for screws, to attach to the large black 3D printed gear. This is a 180-tooth monster built to fit a GT2 timing belt, as are commonly used in 3D printers. It's big for mechanical advantage. I started with a 30 and 60 tooth pulley (for three and six times advantage). They weren't enough so I got a 20 and a 16 tooth gear, and ended up with the 16 tooth gear, for a slightly greater than ten times mechanical advantage. A straight GT2 belt section was cut to the right length, and belt clamps and tensioner springs turn that into exactly the right size belt for this contraption. The big gear is these two parts screwed together for two reasons. First, it would take a long time to 3D print the whole thing as one part. More importantly: the quarter-inch acrylic plastic is strong enough to turn the valve, but a 3D printed part is not!

That's all connecting my big gear to the small pulley on the end of a stepper motor. This is the first real motorized project I've put together myself, and I was not at all confident. When I spotted the uStepper S product on Kickstarter, I knew it was perfect for this. It's a clever combination of stepper driver, Arduino, and hall effect sensor (which uses a simple magnet stuck to the stepper motor's shaft!) to give it closed-loop control abilities.

The stepper is screwed into another acrylic sheet. It's in slotted holes, which gives me some room to adjust the length. This mounting sheet is mostly zip-tied to the copper heating pipes. But it's also screwed down into the floor, through a brace piece of scrap plywood, to keep it in place left/right. Otherwise the tension of the belt would pull it loose!

So there's a simple control loop running on the uStepper, which accepts commands over serial. It's wired into an ESP8266, which has WiFi connectivity. It monitors the temperature sensors I've already got, and sends commands to open and close the valve based on the current temperature. Simple, now that the mechanicals are all there to support it!

I've gotten this working reliably only recently. My problem is the end stops. Even though I have closed loop control, that only gives me relative data about motion, none about absolute position. The uStepper libraries have a convenient "move to end" feature, but it turns out my system is too mushy. I've got tensioner springs on the belt, which can thus stretch a bit. And worse (I think!) the end stop I've got is just a screw in some plastic, and it's longer than the original steel handle part. It flexes a bit when it reaches the end stop, before it pushes hard enough to actually stop the stepper. When it closes (clockwise motion), you can see a big jump backwards as it stops. (There's a smaller one when it stops going the other direction, I believe this to just be the slack from the springs. I never actually open the valve all the way, it's not necessary and why stress the system more than necessary?) The built in "move to end" feature sees that as constant motion: some of it forwards, some of it backwards, but it doesn't distinguish! I had to write my own routine to detect both a lack of forward motion or backwards motion as the end condition, and then the stepper stops turning.

Now I should finally be able to keep myself comfy over the winter! But even more so in the late fall and early spring, when the building has the heat on, but it's not nearly as necessary.