I expect getting the GA and Structural Engineering (SE) drawings to final sign off will consume a great deal of my free time next few weeks. I also will need to start various balls rolling in terms of getting workers and supplies and indeed the mortgage in place by the various due dates. A long eighteen months beckons before us.
I jinxed myself. Silly Niall.
What the first draft of the GA drawings did enable in the past two months is a first draft of the SE drawings, and then everything went on pause because obviously everybody goes on summer holidays apart from us. I expect nothing further to happen until at least September.
This pushes back the likely erection of the timber frame to Spring 2025. This is disappointing. Anyway, here are the draft GA and SE floor plans for your entertainment:
There isn’t a huge amount to say about these, they are pretty much what the architect’s drawings had, and what deviations there have been I’ve since had undone in feedback. I suppose it is interesting that the most pressing weight in the entire building will be between his and hers bathroom sinks in the master bedroom ensuite.
Despite the further slippage to the build date, I suppose there is at least forward progress. Got to look at the sunny side I suppose.
Before I do my usual show and tell of projects I’ve been working on this past two months, I suppose I ought to mention that an epoch has come to a close. Approximately twenty-four years ago while I was living in Madrid, Spain I subscribed to my first Boost C++ libraries mailing list. That was the first step in what became a long road culminating in me digging real deep to get Boost.Outcome past peer review and into the Boost C++ Libraries in 2019. That, in turn, approximately doubled my earning power for my next role and doubled it again for my following role. Without getting that library past peer review and into Boost, I think it safe to say that I could never have afforded to leave renting and get my own home.
However, I think it’s now time to move on from the Boost C++ Libraries so I won’t be participating there going forth apart from continuing to sustain Outcome i.e. I’ve unsubscribed from everything there, and I no longer consider myself having anything to do with Boost going forth.
Casting to a wider picture, I’m also winding down my C++ participation
in general. Serving at WG21 has broken me to be honest, it’s increasingly
‘anything but C++’ for me which is a shame, as it isn’t the language’s
fault. I expect that the Sofia meeting in Summer 2025 will be my last
face to face meeting, thereafter I’ll attend virtually only. I have
ceased progressing all my WG21 papers apart from P1030 std::filesystem::path_view
,
and assuming that makes it in before the C++ 26 IS major feature
deadline (yes, you guessed it, Summer 2025), that will be the only
evidence of seven years of my service at WG21.
I am not remotely alone in moving on – WG21 broke a whole generation of us with our ideas about getting good engineering achieved. A good portion of my generation of C++ programmer at Boost and at WG21 will in fact be moving on like me. It’s funny you know, wind me back twelve years ago and I couldn’t really understand why people moved on as a whole bunch just had after C++ 11 had shipped, but now that C++ 26 will ship soon yeah I totally get it now. The standards process just chews you up if you try to change anything which matters. And then you find yourself asking why am I bothering with all this if it isn’t pleasant, doesn’t benefit me, and I don’t get paid for it?
As you might gather, I’m on the hunt for a new programming language to dig into, one without the baggage and dysfunctionality of C++. I haven’t seen one yet, but I’m hoping a true C++ successor might turn up soon (and no, Rust isn’t that). To preempt people emailing me with their pet languages, this is what I seek from a true C++ successor:
- SIMD orientated, not scalar orientated.
- Stack unwinding resource release.
- Functions default to doing only static memory allocation like for embedded toolchains (i.e. where the linker can precalculate all allocations and reserve space for them at link time), otherwise you are required to supply memory from outside. A function can opt out of this so it can use unbounded dynamic memory allocations, but then only ‘non-deterministic’ functions like it may call it.
- Same as the above, but for thread synchronisation.
- Borrow checker, but not annoying and productivity damaging like Rust’s.
- Superb compatibility with at least two existing major language ecosystems so it isn’t a pain to bridge in existing codebases.
The closest that I am currently aware of is Mojo, but the syntax is too scalar and Python-like for me personally. What I’d really prefer is a syntax which encourages you to write in SIMD friendly terms to the maximum extent possible.
Until my shining knight in systems programming language armour turns up, I intend to move over to WG14 the C programming language where I hope to get modernised signal handling into C, and thence into absolutely everything else. It should keep me busy for a good few more years yet. And I probably will do a circuit of the global C++ conferences as a good bye swan song, say good bye to lots of people, tie everything up nicely.
Taught myself further how to design 3D printable things
As I was looking after my children during my mornings before work throughout these past two months, my productivity has been quite impaired compared to normal. Still, I bit the bullet and invested several more very late evenings these past two months into learning how to design things which can be 3D printed, building on my experience gained in designing the picture frame shown in the last post. I went at things again in MeshMixer and I yielded this by early July:
This is my ‘midi’ case for my Olimex ESP32-POE boards which I’ll be fitting throughout my house (you can find its Thingiverse page here). The midi case can take up to a 3400 mAh battery and an additional breakout board which almost certainly will be an Olimex UEXT extender for my use cases. This is the first thing I ever printed in ABS on my Anycubic Kobra Go 3D printer, and I can testify getting a successful print is indeed a black art on this printer, which isn’t really designed for ABS printing. My printer has a Bowden drive, which pushes and pulls the filament far from the hotend. This introduces ‘bounce’ into retraction cycle, which means filament is left in the hot end, and ABS it tends to singe which then means it clogs and then flow stops. Or if the hotend is too close to the print surface, it can’t extrude quickly enough so it singes and it clogs. Or if the wind is blowing slightly wrong, it singes and blocks. Painful.
As we saw in the commercial print of the house model with a Prusa XL, a direct drive hotend has no such troubles with ABS. But that’s a far more expensive printer than mine, and maybe by varying ABS filament I might find one less finickety than my current ABS filament in my cheap printer.
After the midi case, there was an obvious ‘mini’ case waiting to be extracted:
And then a maxi case, though it has design quirks I’d like to change about it so I haven’t uploaded it to Thingiverse yet:
My maxi case is currently wired up as a prototype for a bedroom in the future house. All available i/o bar one input is fully loaded:
- GPI34 (PINS) is unused (is always pulled up)
- GPI35 (PINS) is wall dimmer switch level shifted down to TTL
- GPI39 (PINS) is external power supply voltage (analogue)
- GPIO13 (UEXT) is I2C-SDA for sensors
- GPIO16 (UEXT) is I2C-SCL for sensors
- GPIO4 (PINS) is blind motor sensor A
- GPI36 (UEXT) is blind motor sensor B
- GPIO0 (PINS) is blind motor PWM forwards
- GPIO1 (PINS) is blind motor PWM backwards
- GPIO2 (UEXT) is LED strip colour R
- GPIO5 (UEXT) is LED strip colour G
- GPIO14 (UEXT) is LED strip colour B
- GPIO15 (PINS) is LED strip colour WW
- GPIO3 (PINS) is ventilation fan driver enable
- GPIO32 (PINS) is ventilation fan forwards
- GPIO33 (PINS) is ventilation fan backwards
Chances are high that LED strip pins R, G and B won’t be wired in in most rooms as those only have warm white downlighters. In fact, chances are high that initially I won’t wire the lighting into the ESP32 boards at all, as it’ll save me time.
The ventilation fan drive I haven’t tested yet, but I shall be testing a €4 inc VAT driver based on what Aliexpress claims is a BTS7960 H-bridge. It claims it can handle 43 amps, the reviews are clear it cannot, but it should handle the max 3 amps we’ll ever demand from it. The BTS7960 can take a max 30v, so I’m a little concerned that back EMF from the 24v bilge pump fan might spike over that. However it would seem that these bilge pumps respond very well to lower voltages, they turn well at 5v and have more than plenty flow in my opinion at 12v (and at 24v, they’re insane) so chances are very high I’ll run them at 12v and make everything easier on myself.
Something a bit mad to consider is that my fresh air ventilation pipes will need 50 mm of insulation each side, so a 100 mm diameter pipe will become 200 mm. The above bilge pump takes a 100 mm pipe, it itself is 135 mm, so it’ll be entirely encased within the insulation and apart from some wires sticking out you’ll never know it was in there. I’m hoping that the motor will tolerate the ~60 C air temperatures, as a bilge pump it should. The plastic is ABS, so should be absolutely fine at 60 C.
You’re likely going to be very curious about the blind motor. This is my solution to paying a lot of money for IKEA Fytur blinds, instead I’m going to motorise a very cheap IKEA Fridans blind using ABS printed parts and a carefully chosen GA12 N20 geared motor with rotation encoder costing €7 inc VAT which is small enough to fit inside the blind’s roller. I won’t say much more about it this post other than I’ve successfully got it to turn from the ESP32 using only the available 5v amperage from the PoE supply without seeing power brownouts, and I can testify it has quite considerable torque and should be able to lift quite a lot of blind. What I haven’t got working yet is getting ESPHome to detect when the motor has stopped turning, and to turn off the power. Free time will fix that, as always.
House model display case
The custom made cases for the commercially printed house model arrived and for the money, they are excellent:
The acrylic upper is fully bonded and forms a single surface. The base of the large model has mahogony laminate strips, while the base of the small model is black acrylic. Including delivery, for under £200 inc VAT. The supplier’s name is LasAcryl Ltd, they’re actually French but of course their English website thinks the only possible currency is Sterling.
The extra height of the case will be used by standing each layer of the house on stilts, with little LED panels inside lighting the house. You’ll thus be able to see all around the inside of the model house whilst standing instead the actual finished house. It may well be a decade before I get to assemble all the parts to create the final display case, or if this build takes even longer I might just get it done before the build starts. We’ll see.
House dashboards, revisited
Last post I mentioned that I didn’t like the e-Ink displays for the future house dashboards, and for £115 inc VAT you could get a portable touchscreen monitor off Amazon. Well, I went ahead and bought one for £98 inc VAT instead:
Apologies for the stock image, it’s because the actual device is already out at the site configured as the TV for the children to watch when we’re out there using the old TV box, old TV remote control and some very old computer speakers (y’see, this is why one should never ever throw anything out!).
And well, for the money, I am impressed! The PoE powered Raspberry Pi Zero 2 described last post will power it without issue (albeit with a bit of tweaking to overdrive the HDMI signals on the Pi). The touchscreen works great and the Pi recognises it. I can display interactive graphs which respond to touch – it ain’t quick because the Pi chugs a bit when rendering 1080p, but it is absolutely functional.
In terms of the device itself, it is surprisingly good for the money. The display isn’t bright, but given that it works from USB power alone and illuminates 15.6 inches, I think it’s as good as is feasible for the five watts available to it or so. As it’s an IPS panel, colour reproduction is very good apart from magenta tending to pink. The 1080p resolution is plenty for this size. Using this display indoors if it’s bright sunshine outside is just about okay, if it’s cloudy outside then it’s plenty bright enough indoors. Its speakers are absolute crap, barely any volume out of them, but I have my old computer speakers for that and it does have a headphone jack. It has half a 75 mm VESA mount on the back, and I’ve already affixed that to a cheap monitor arm, later it will get mounted on the wall in the kitchen.
Oh and there’s one more kicker – yes it responds to VESA brightness commands, so you can dim it and brighten it arbitrarily. If combined with a Time of Flight sensor to detect local motion, you can wake the display if somebody goes near it. Very nice.
What comes next
Many moons ago after testing IRF520N MOSFET based solutions for dimming LED strips, I realise that I had bought poorly and I should have bought IRF540N MOSFETs instead as they should run much cooler. Easily two years ago now I did buy a bunch of four channel IRF540N MOSFET boards, but I’ve never tested them in action. I’d like to get that done, to create peace of mind that this solution will definitely work if asked and they do run cool as the maths had predicted.
I’d like to get that BTS7960 driver tested with my bilge fan at 12v to make sure it definitely works as expected.
And finally, I’d like to get a reference house bedroom ESPHome firmware written and debugged, which includes window blind control.
If I get all those done, I’m sure a further post will appear here. And god help us if the GA and SE designs get finalised as I might actually finally have to pay for some timber frames!
Go to previous entry | Go to next entry | Go back to the archive index | Go back to the latest entries |