Getting into FPV with the Tinyhawk III RTF Kit

After being absent from the RC world for some time, I recently took another look at the advances FPV drones have made. The last time, I was mainly into RC helicopters as FPV flight seemed a fiddly and expensive thing to do.

But progress did not stop and nowadays there are multiple options to get a complete FPV kit for 200-300€. I picked the Tinyhawk III RTF kit and here are some impressions of using it and how it compares to alternatives.

Table of Contents

Drone: Tinyhawk III

Coming from RC helicopters it is amazing how durable the drone is. I literally learned flying using stock parts only and keep on flying them as of today.

When getting used to maneuver the drone, I found the default tune in the 3 flight modes Angle, Horizon and Air quite helpful.
In Angle Mode the drone tilt is limited to about 20° so you wont get too fast and you can focus on throttle and momentum control while flying inside.
Switching to Horizon mode is a nice intermediate step. The Angle is no longer limited so you can go fast. This requires you to actively break like in Air mode. However, as the drone still auto levels you can safely fly inside.
After flying Horizon mode inside, going outside and using Air mode was surprisingly easy for me.

In total it took me about 2 Weeks going from bumping into the ceiling and floor on Angle mode to confidently flying Air mode outside.

The only casualty is a small dent in the lower right prop, which I did not bother switching so far.

Goggles: Transporter 2

The part that made me choose this particular RTF Kit are the Googles as they are very well though out.


First, you can adjust the focal-length in 3 steps. This is useful if you are near-sighted or if you want to adjust the FOV from immersive to a tunnel view.

Then, the display resolution of 800×480 px is a good fit for analog FPV, where video is transmitted via NTSC (720×480 px). The internal DVR records precisely this resolution when set to D1 mode. There is also a HD mode, but you will not get anything out of it as the incoming image is the bottleneck.
Speaking of which; the RunCam Nano 4 on the Tinyhawk has a resolution of 800 TVL (800×600 px) which again fits in nicely.

Note that the DVR recording is quite bad as it saves white frames as soon as there is some noise in the image, but it gets the job done if you want to review your flight or need to find the drone.

Ultimately, the detachable display unit can be re-purposed once you decide to upgrade to better Goggles – even though I think one can stick with the Transporter 2 Goggles for a while.

One upgrade you can do straight away though, is replacing the linear antennas by a set of polarized ones. This will reduce interference due to reflected signals in closed spaces. A possible choice here are a pair of Foxeer Lollipops that you can get for about 18€.

Battery and Charger

The weakest part is probably the battery & charger. For starters it only comes with one battery which the bundled charger takes about 90 min to charge (likely at 0.3A). Also, you can only charge two batteries at a time.

Fortunately the required 450mAh HV batteries are quite cheap. If you order a pack of 5 from China you can get them for about 4.5€ per piece. You should do that.

As for upgrading to a better charger, the VIFLY WhoopStor for about 33€ is an affordable option. It can charge up to 6 batteries at up to 0.9A. This allows charging the 450mAh batteries at 2C speeding up charging by 3x compared to the bundled charger. On top, it supports checking the battery voltage as well as storage-charging for when you need some days off from flying.
The only thing it lacks compared to a “big” charger is resistance measurement of the batteries.

WhoopStor (left) and bundled charger (right)

Alternatively, you can get a serious charger, like the ISDT 608AC straight away. But that alone is about 65€ and needs an a serial, balanced charging cable that is about 5€ on top. With this setup you will have to always charge exactly 4 batteries at a time.
Having that charger makes moving to actual 4S in the long run easy though.

Remote: E8 Transmitter

The Transmitter only supports the FrSky D8 and D16 protocols – although there is really no reason to switch it to D16 as there are only 8 channels on the remote and telemetry is shown in your video signal anyway.

More importantly, it is usable as Joystick when connected to the PC, where each channel is reported as a separate axis – so it will work fine with all FPV Simulators.

Also notable: the radio uses a standard 18650 battery that is compatible with other radios and is worth about 10€.

It would have been nice to have a module bay to be able to attach a ELRS module – however none of the comparable RTF kits in the price range offer this. There cost needs to be cut somewhere I guess.

Speaking of ELRS; you are not really missing out on that with a tinywhoop. D8 still allows you to go for about 1km. The limiting factor will be more likely the tiny RX antenna on the drone and the VTX power. Also, even if you could manage to get that far with the Tinyhawk, retrieving it if it something goes wrong will be a PITA. ELRS really only starts making sense with GPS powered drones, where you got return to home as a failsafe.

I keep hearing that one should go ELRS from the start or you will end up swapping your RX modules on the drones if you only decide to go ELRS later. This is BS as you can just continue using the old remote for the old drones or get a remote that supports both ELRS and D8, like e.g. the Commando 8.

Alternatives

The following alternative Kits that are in a similar price-range and are all brushless, as brushed motors are really not worth the money you save.

EMAX EZ Pilot Pro

This saves you 60$, while you get the same Radio and almost the same Goggles and Drone.
The Goggles have no DVR though and you will not get the nice carrying case.

BETAFPV Cetus Pro

This is also about 60$ cheaper than the Tinyhawk 3. However, the Goggles are way worse: no DVR, fixed focal-length and fixed screen.

What you get here is an easier Angle mode, with altitude-hold and hover-stabilization. The flipside of it is that it is not compatible with the betaflight configurator which is the standard when it comes to tuning the drone – in case you wanted to e.g. configure the OSD content.

Additionally, the drone uses the more modern BT2.0 connector/ batteries. However, the 1S setup does not draw enough Amps for this to make an actual difference. Also, as it is only used on BETAFPV Drones there is less choice of batteries and they are currently more expensive. Then there is the even more modern GNB27 connector at the horizon..
If you prefer Apple products, the above will probably not bother you though.

GEPRC TinyGo

This is a 2S drone, so you get more power, which makes it better outdoors but worse indoors.
Much worse radio; requires 4xAA batteries, has worse gimbals and most importantly does not work as a Joystick when connected to a PC.
Worse Goggles; there is a DVR, but the focal-length is fixed as is the screen.

The deal-breaker is the used FHSS (Futaba) protocol though. This is virtually not used by any other Drone on the market, so you cannot just get another BNF drone to fly with the same radio. And if you upgrade the Radio you will have to go for a multi-protocol version to still be able to fly the drone instead of being able to get the cheaper D8/ D16 only variant.

Where to go next

The following BNF drones are compatible with the Radio and also run on the 450mAh PH2 batteries that you likely piled up while flying.

Happymodel Mobula 7 1S HD

The drone is very similar to the Tinyhawk III, however it comes with the RunCam Split 3 lite. On top of FPV streaming, it can simultaneously record the video as 1080p @ 60fps to a microSD card. The drone provides gyro logging too, so you can further stabilize the results with gyroflow at the PC.
So if you want to produce nicer videos, this is a good upgrade.

Notably, the drone comes with a serial, balanced charging board as discussed in the charger section above.

EMAX Tinyhawk II Freestyle

This is the drone to upgrade to if you prefer to fly outdoors. It is larger and heavier than the Tinyhawk III. Also it is more powerful as it flies on 2S. The latter is realized using the battery connector, so you still can use the 1S batteries.

If you like tinkering, you can also get nicer videos out of it by packing a RunCam Thumb on top. The drone is powerful enough to carry to extra ~12g of weight.
Note, that this requires soldering-on a power connector for the camera to the flight-controller as the cam has no internal power-supply.

Usage with Ubuntu

If you want to use the betaflight-configurator on Ubuntu, make sure that you have permissions to access the USB serial device by being in the dialout group as:

sudo usermod -a -G dialout $USER

The Remote is just plug-and-play (as a USB HID Gamepad) and is correctly recognized by e.g. FPV.SkyDive, which itself nicely runs on Linux through Steam/ Proton.

BlueJay ESC firmware

People online ™ are telling that one can get increased flight-time by replacing the ESC Firmware by BlueJay and enabling the bidirectional DShot protocol.

However, the TH III already comes with the JESC 2.3 48Khz ESC firmware, where the 48Khz part is what matters for flight-time. Therefore, you will not get any benefit here.

Actually, my flight-time decreased by 15% (from 4:44 min to 4:02 min) when switching to bluejay & bidirectional DSHOT300.

Youtube Channels to follow

Unfortunately there are a lot of youtube channels with a wide reach that have no clue what they are talking about. Dudes sitting in a basement that get a commission when something is sold is not a good combination. Here are some channels that are actually good

Computing replaygain for your Music library

TLDR; command at the end of post

If you want a equal loudness for your Music library the go to solution and the de-facto standard is ReplayGain.
If you are using a music streaming service, the provider is typically taking care of that for you – but maybe you want to migrate towards your own streaming solution.

ReplayGain analyses your audio files and stores their deviation from the baseline loudness as a tag. A compatible audio player can then read the tag and correct the playback volume so all you tracks have the same loudness.

Of course things get messy once you look at details like what the baseline loudness should be and how to determine loudness in the first place. Therefore we set the baseline once and for all as 89db and consider even tracks of the same album individually. If you disagree, feel free to branch off reading up the details now.

The next issue is that ReplayGain was born in a time where mp3 was synonymous to digital music, hence the algorithm was first implemented as the mp3gain CLI tool. Nowadays you also need aacgain and vorbisgain to cover all your formats, which is cumbersome to automate.

The larger issue with ReplayGain is that it defines loudness of a track by its peak volume. While a sane choice in theory, in practice the music and advertising industries raced to increase the perceived loudness without raising the peak volume. As broadcasters also used peak volume normalization, one could blow your eardrum with that very special advertisement.
Therefore the EBU R 128 was proposed which at its core is RMS based, meaning it is considering the average volume of the track.

Remember that ReplayGain merely adds a correction value to the tracks? This allows us to compute that correction value based on the R128 algorithm for a better normalization, which is exactly what the <a href="https://github.com/desbma/r128gain">r128gain</a> tool does.
Being written in modern day, r128gain also processes all possible audio files by hooking into ffmpeg as a filter.

So, without further ado, this is the command to normalize your Music library:

# pip3 install r128gain
r128gain -p -r Music/

This will preserve "-p" the file timestamps and recursively "-r" process all files in the given directory.

Trouble shooting

Note that if you previously used mp3gain, your files might contain non-standard lower-case replaygain_* tags, while r128gain will only write REPLAYGAIN_* tags.
To avoid confusing players with different values, you should remove the non-standard tags. This can be automated with eyeD3

eyeD3 -Q --remove-frame RGAD --preserve-file-times --user-text-frame=replaygain_track_gain: --user-text-frame=replaygain_track_peak: --user-text-frame=replaygain_album_gain: --user-text-frame=replaygain_album_peak: Music/

Refer to its documentation for the meaning of the parameters. For RGAD see here.

Header Image: “volume” by christina rutz (CC-BY-2.0)

Updating Gigabyte BIOS on Linux

In this post I want to note some quirks one needs to consider when updating the BIOS of a Gigabyte Mainboard while using Linux.

But first I want to appreciate the support that Gigabyte/ AMD provide. I still get BIOS updates in 2021 for the mid-range B350 chipset originally released in 2017. Also, the ability to update from within Linux was just added to the BIOS along the way. So Kudos for that!

Preparing the update

The easiest way to update the BIOS is doing so from within the UEFI using the Gigabyte Q-Flash utility. I dont recall when exactly it was added, but going through the changelog, it should have been at revision F30.

Having Q-Flash available, you can just download the BIOS update and copy the BIOS image (e.g. AB350NGW.51d in my case) to /bin/efi, which is the EFI partition readable by the BIOS. Next, just reboot into the BIOS and point the Q-Flash utility to that file.

Post-update quirks

Unfortunately, the BIOS update overwrites some important settings. Most notably your Machine Owner Keys (MOK) that are required for Secure Boot are lost.

So after update, change the following settings

  • CSM Support: disabled
  • Secure Boot: enabled
  • Secure Boot Mode: standard

After this you have to re-enroll your MOK again. The easiest way is to re-install the nvidia-dkms-XXX package which triggers the process.

Upon reboot you will be greeted by the EFI menu, where you should select “Enroll MOK” and and enter the code that you chose previously.

You can verify that everything went right by rebooting and running

mokutil --sb-state

Also, if you want to Docker or any kind of Virtualisation, you have to re-enable AMD Secure Virtual Machine (SVM), which is inconveniently buried under

  • M.I.T > Advanced Frequency Settings > Advanced CPU Settings > SVM Mode: enabled

Breaking free of Google

This post will be for those of you that care about privacy – i.e. if you want that information about you is exclusively under your control.
In that context not only Google is to blame, but actually most of the cloud services we know and use today.

Still Google will serve us as a nice placeholder as it is the market-leader when it comes to providing free services in exchange for your user-profile that Google in turn uses to sell target advertising. Even if you are fine with that, Google is also infamous for killing services – which might hit the one you rely on eventually.

As the world is moving mobile-first, a prerequisite for replacing a service is that we can easily integrate the replacement with an Android device.
Some might wonder why I chose Android here, given that it is made by Google. See, the problem is not who makes a service/ device, but who controls it. And with Android the main leverage for Google is bundling its services. If you take them away, the device itself is fully under your control – in contrast to Apple/ iOS.

Table of Contents

Now, that we set the stage, lets start with:

Nextcloud

At the heart of our efforts will be Nextcloud. This started as an open-source alternative to Dropbox/ Google Drive, but is nowadays grown into a platform for a plethora of different services.
The main selling-point is that you can just install Nextcloud on your own machine – ensuring that your data stays private. The software being Open-Source also means that it is not under control of a single corporation – in fact Nextcloud was forked from its predecessor Owncloud after a corporation tried to put the screws on its users.

Note, that if you are serious about this, you will need to invest around 500€ to get a machine for hosting that is decently fail-safe. If you rather want to be cheap, you can also just use a RaspberryPi to get away with less than half of that amount. For inspiration, you can take a look on the built I use or on the list of commercial nextcloud device providers.

Files & Photos

By using the Nextcloud Android App, you can directly replace Google Drive/ Dropbox as this is the core functionality of Nextcloud.

Additionally, the App allows you to automatically back-up your Photos/ Videos and free the local storage so you can stop using Google Photos too.

Contacts & Calendar

Nextcloud also supports Contacts and Calendar out of the box. To integrate them with into your Android Device there is the DAVx5 app. This app will function as an additional data provider, so you can just continue using the stock Google Contacts and Calendar apps. Those will, however, stop sending any data to Google.

This is especially useful, if you run a small-business and must ensure that your customer data is private according to the CCPA/ GDPR.

Nextcloud News

An often overlooked part of your privacy is Google News (also part of Google Now). Each time you view an article there, Google can mine your interests and political views – similar to what Facebook does. And by now you should know where these things can lead.

Another drawback here is that the Google Algorithm will create a bubble for you by only showing content coherent with your current world-view.
I still prefer to manually choose the news sources – to create that bubble myself.

To do that, one usual subscribes some Web-feeds using a Feed aggregator like the Feedly service – similar to what Google Reader used to offer, before being killed by Google.

The go-to app here is Nextcloud News combined with the Android App for a pleasant mobile usage.

Music

Most of you are probably just stream music via Spotify/ Youtube Music, but keep in mind that these services merely rent the songs and as such they can arbitrarily disappear from your library.

Therefore, I like to have my own copy of the song. Unfortunately it is very inconvenient to juggle mp3s around for getting the music to various devices.

Google Play Music used to offer best of both worlds for me, where you could upload your own music files and manage your playlists in one place. Additionally, you could make the music available offline by pinning individual playlists on your device.
Unfortunately, that concept did not allow Google to arbitrarily inject ads into my music stream and therefore the service got killed as well.

Nextcloud Music to the rescue! This app picks up your music library via Nextcloud files and allows to stream that via the Browser or the Subsonic API.
This is where the DSub Android Player takes over. As with Play Music, you can either stream the library or pin individual songs/ playlists for offline use. Note: untick the “Authorization Basic headers” box when setting-up Nextcloud Music.

Other

If you clicked on the links above, you probably noticed the F-Droid alternative app store for Android.
Getting your apps there ensures that you are using verified packages and open-source software. You can easily use it alongside with the Play Store. If that is too inconvenient for you, all of the above apps are also available via the Play Store.

Finally, there is the web-browser. If you do not log in with your Google Account, using Chrome is mostly safe. However, I suggest switching to Firefox. See the my original article on that topic for details. In short; the main reason is the availability of extensions. Those allow you to block ads on the mobile web too and use Youtube in the backround.

Header Image: Digital Chains by stanjourdan (CC-BY-SA-2.0)

Mould King 19007 “Arocs” Review

The Lego 42043 “Arocs” is regarded as the best technic set to date by many. It has motorized functions controlled via a gearbox, features a pneumatic arm and also uses an actuator. Furthermore, all axles have a suspension and it features two-axle steering. So no matter what functionality you are interested in, this set probably has it.

Showcase of the functions

Unfortunately, the set went out of production in 2017. So if you want to experience the build today, you have to search for a used set in good conditions. As the model is quite popular, chances are high that you will have to pay more than the original cost.

Fortunately, Mould King released its own version of the “Arocs” which keeps the set alive today. Instead of being a verbatim copy of the set like the Models by Lepin/ King (which are also hard to come by nowadays), Mould King did modify the set in several ways, which we will look at in the following.

Note, that the set is still a copy of the 42043 set, which was designed by Markus Kossmann (see the original license plate). But if you want to literally pay him tribute by buying one of his sets, you will have to get the Liebherr 42100, which is the only one still available today.

Color Scheme

The most obvious change that Mould King did is using a different color scheme. While it feels strange at first if you are used to the original Arocs looks, it is actually quite accurate.

The gray cabin is indeed more common than the white one. It makes sense as this is an off-road vehicle traveling over dust and dirt.
But also the orange loading area exists in reality – even though one still can argue that it looks off there as well.

When we get over this difference, we can turn to some details that are strictly improvements.
The first thing to note here is the all yellow-black pneumatic arm. Mould King uses a yellow gear-rack here, which makes the pneumatic elements neatly blend-in. Furthermore, all pneumatic hoses are black. Although this requires more attention while building, the result looks much better than the red-gray-yellow soup of the original.
Next, the bottom part is now mostly black. The useless yellow bricks are gone and we get black axle-pin connectors instead of original red ones. They overdid it a little here though, by making the wheel-stoppers black as well.

Full remote control

In contrast to the original model, the Mould King version also adds motorized driving to the set. The drive is handled by a single L-Motor, while the steering is handled by a servo motor.

Both motors included in the set support proportional controls, but unfortunately the included battery-box does not handle proportional steering. I used one spare battery box from the excavator instead.

As a nice touch they include a metal universal-joint for the drive-train. This is needed to handle the torque if you decide to hit reverse while the 2.4 kg heavy set is moving forward. The rest of the parts will still ache in pain though.

Due to motorization, the wheels no longer drive the pistons below the cabin. Here, Mould King went totally over the top and included a separate M-Motor to do that. To make room for it, they had to reduce the pistons from 6 in the original to 4.
Note, that you can just skip the motor at Step 170 and use it elsewhere as it is not needed otherwise.

Remaining differences

As this is not a licensed set, there are no Mercedes brandings anywhere. If you are in dire need for some, you can get the shield with the printed logo off the new Zetros set for about 5€.

Furthermore there are no small panels in the front of the cabin – for whatever reasons.

Interested in getting the set? Support this Site by using the following affiliate Link:

Tilted Cabin Fix

Due to the larger depth of the battery box compared to the original, you cannot fully close the cabin. The beams that hold the seats will get in the way. This results in a increased gap at the front radiator region.

Fortunately, this is fairly easy to fix at Step 228:
Only use the Axle-Pin connectors for the L-shaped battery holder to give it some play and place the pin in the middle on the other side. This will move the battery-box by one stud and allows the cabin to fully close.

Mould King 13112 Excavator Review with 6-Channel Remote

After having enjoyed the Forklift by Mould King/ KevinMoo, I got another MOC set; the Link Belt 250X3 Excavator.

The set is based on the MOC-68495 by JurgenKrooshoop, but unfortunately there is no cooperation this time. Therefore, the thing is yellow instead of the red-white scheme used by the MOC, which I would have preferred.

Table of Contents

The MOC creator even rage-quit Rebrickable, when he found out about this set. But don’t worry, he is doing fine and has returned meanwhile. In my opinion he overreacted, as everybody is standing on the shoulders of a giant, namely Lego 8043 as we will discuss below.

A quick function test with the new 6-Channel Remote

Unfortunately MouldKing did not replace the blue technic pins as they did with the Forklift.
However, they did include 2 carbon axles. Those are used to connect the actuator pair that lifts the arm. Technically they are not needed though, as the arm is not that heavy.

While having a similar part count to the Forklift, the Excavator is easier to build. Part of this is that 84 of the parts are used for the tracks, but another part is that this is:

The final form of Lego 8043

This is actually the 4th iteration of a (at the time of writing) 10 year old Lego set:

  • It was born in 2010 as the Lego 8043, which is likely modeled after the real-life JCB JS330. The original model used 1123 parts.
  • The MOC creator JurgenKrooshoop, then created the “Ultimate 8043” version, which notably already featured a more powerful XL-Motor, an improved drive-train and simultaneous control of all power functions. This bumped the part count to about 1300.
  • In 2015 he then released another update as MOC-68495. This morphed the appearance into a Link Belt 250X3, replacing the yellow parts with the native red-white color scheme. Here, he generally added casing to the model and slightly increased its size which raised the part count to 1929.
  • Mould King then copied the MOC in 2020, but felt like returning to the original yellow color scheme. They also removed the LED lights and ported the model their own power-functions. This reduced the part count to 1830.

With the last changes, some even think that the Mould King version is a clone of the original Lego set. We can probably conclude here, that all excavators look the same if you take away the color.

But still, when building the Mould King Model, one can tell its Lego 8043 origins – the construction of the tracks and drivetrain and the way the motors are placed will give it away.

So if you skipped the 8043 back then and want to get the building experience today, I would say you get it here – and some nice improvements on top too.

This brings us back to the missing cooperation between the MOC creator and MouldKing.
As I see it, Lego did the heavy lifting with this particular model. However, both JurgenKrooshoop and MouldKing have their fair share in that we can enjoy this great model today.
So if you want to support the MOC creator as well, you can pay him for his instructions.

Manual Errata

Step 292: The Light should face front

Interested in getting the set? Support this Site by using the following affiliate Link:

Mould King 6.0 Power Module

With the 17013 Crane, MouldKing officially released their new 6 channel power module and new joystick controller. Especially the latter is notable as it allows smooth and precise controls instead of the binary 0% or 100% throttle with the standard remote or the fiddly touch-pad of your phone.

As the excavator comes with exactly 6 Motors, I additionally got the new power module and used that instead of the two 4-Channels modules that come by default.
This allows you to control all functions simultaneously with a single remote with joysticks. Take your time to appreciate this.

Unfortunately, there is no nice set that bundles the new power module. It is currently only included with the crane mentioned above, which is pricy and has mixed reviews.
So meanwhile, you will have to get the power module separately for about 20€, because it is totally worth it.

Changes for 6-Channel Battery Box

These are the minor changes you have to do to fit the slightly larger power module inside the excavator.

Steps 393 – 399: Skip

Step 404: Use the 4 spare 3×1 beams instead

Step 405: Only use two Axle-Double-Pin connectors here and make them face outwards. If you have some spare 2×1 technic beams you should use those of course.

Mould King 13106 Forklift Review

I got myself the MouldKing 13106 Forklift, which is based on the MOC 3681 by KevinMoo and wanted to share my impressions with you.

First of all, MouldKing actually improved the set by exclusively using back technic pins instead of the blue ones like in the MOC. Also they are officially cooperating with the MOC designer – so he is likely getting some share of the sales.

The set comes with “New PowerModule 4.0″, which means it supports proportional output. If you use the new joystick controller (like I do in the video) or use the app, you can have smooth controls of the motors and not just binary 0% or 100% throttle as with the standard remote.

As you can see, I actually put on some of the stickers. Some purists never do anything like this, because they argue that after some time the stickers start peeling off and look used. This is certainly a good point if you are building a sports-car – with a Forklift however, I would argue broken stickers add to the looks.

Compared to the original MOC, Mould King removed the lights, but added a pallet similar to the one found in the Lego 42079 Forklift.

Interested in getting the set? Support this Site by using the following affiliate Link:

Manual errata & comments

Generally, I prefer the Mould King manual to the original by Kevin Moo as I like renderings more than photographs. However, its nice to have the original at hand if something looks fishy. While building, I noticed the following:

Step 34: Cable-management is almost completely skipped in the manual. I laid all cables through the opening behind the threads. This keeps them out of the way later. The fiddle through the cables of the motors, that you add at steps 52 & 55.

Step 100: The battery-box position is wrong. It will collide with the bar you added at step 96. To make it fit, just rotate the battery-box by 180°.

Also, the direction of motor A has to be reversed. Press and hold left-shoulder, up and down for 3 seconds for this.

Step 111: The arms that you added in steps 89/ 90 should be oriented upwards to hold the footstep.

Step 143: Use a black bush instead of the 2-pin-axle beam, so things look symmetrical. This is a leftover from the original MOC, which squashed the IR receiver in there.

Step 156: Attach the levers to the front console at step 173 instead of attaching them to the seat here. After all they are supposed to control the fork and not the backrest.

Step 214: I suggest using gray 2-axles at step 230 instead of the suggested whites. This way the front facing axes will be all gray. For this just use white 2-axles here. Those wont be visible at all anyway.

Step 277: When adding the fork to the lift-arm, make sure that it has as much play as possible. Otherwise the fork will get stuck when moved all the way up.

Interior with fixes at step 143 & step 156

Step 278: Do not fix the threads yet. Wait until the end so you can correctly measure the lowest position of the fork (which gives you the length of the threads).

Step 286: Make sure that the 3-pin pops out towards the 8-axle. This will make joining things at step 288 much easier.

Comparing water filters

Lets say, you want to reduce the water carbonate hardness because you got a shiny coffee machine and descaling that is a time-consuming mess.

If you dont happen to run a coffee-shop, using a water-jug is totally sufficient for this. Unfortunately, while the jug itself is quite cheap, the filters you need will cost you an arm and a leg – similar to how the printer-ink business works.

The setup

Here, we want to look at the different filter options and compare their performance. The contenders are

NamePricing
Brita Classic~15.19 €
PearlCo Classic12.90 €
PearlCo Protect+15.90 €

As said initially, the primary goal of using these filters is to reduce the water carbonate – any other changes, like pH mythology, will not be considered.

To measure the performance in this regard, I am using a digital total dissolved solid meter – just like the one used in the Wikipedia article. To make the measurement robust against environmental variations, I am not only measuring the PPM in the filtered water, but also in the tap water before filtering. The main indicator is then the reduction factor.

Also, you are not using the filter only once, so I repeat the measuring over the course of 37 days. Why 37? Well, most filters are specified for 30 days of usage – but I want to see how much cushion we got there.

So – without further ado – the results:

Results

NameØ PPM reductionØ absolute PPM
Brita Classic31%206
PearlCo Classic24%218
PearlCo Protect+32%191

As motivated above, the difference in absolute PPM can be explained by environmental variation – after all the measurements took place over the course of more than 3 months.

However, we see that the pricing difference is indeed reflected by filtering performance. By paying ~20% more, you get a ~30% higher PPM reduction.

The only thing missing, is the time-series to see beyond 30 days:

As you can see, the filtering performance is continuously declining after a peak at about 10-15 days of use.

And for completeness, the absolute PPM values:

How to generate random points on a sphere

This question often pops up, when you need a random direction vector to place things in 3D or you want to do a particle simulation.

We recall that a 3D unit-sphere (and hence a direction) is parametrized only by two variables; elevation \theta \in [0; \pi] and azimuth \varphi \in [0; 2\,\pi] which can be converted to Cartesian coordinates as

\begin{aligned} x &= \sin\theta \, \cos\varphi \\ y &= \sin\theta \, \sin\varphi \\ z &= \cos\theta \end{aligned}

If one takes the easy way and uniformly samples this parametrization in numpy like

phi = np.random.rand() * 2 * np.pi
theta = np.random.rand() * np.pi

One (i.e. you as you are reading this) ends with something like this:

While the 2D surface of polar coordinates uniformly sampled (left), we observe a bias of sampling density towards the poles when projecting to the Cartesian coordinates (right).
The issue is that the cos mapping of the elevation has an uneven step size in Cartesian space, as you can easily verify: cos^{'}(x) = sin(x).

The solution is to simply sample the elevation in the Cartesian space instead of the spherical space – i.e. sampling z \in [-1; 1]. From that we can get back to our elevation as \theta = \arccos z:

z = 1 - np.random.rand() * 2 # convert rand() range 0..1 to -1..1
theta = np.arccos(z)

As desired, this compensates the spherical coordinates such that we end up with uniform sampling in the Cartesian space:

Custom opening angle

If you want to further restrict the opening angle instead of sampling the full sphere you can also easily extend the above. Here, you must re-map the cos values from [1; -1] to [0; 2] as

cart_range = -np.cos(angle) + 1 # maximal range in cartesian coords
z = 1 - np.random.rand() * cart_range
theta = np.arccos(z)

Optimized computation

If you do not actually need the parameters \theta, \varphi, you can spare some trigonometric functions by using \sin \theta = \sqrt { 1 - z^2} as

\begin{aligned} x &= \sqrt { 1 - z^2} \, \cos\varphi \\ y &= \sqrt { 1 - z^2} \, \sin\varphi \end{aligned}

Self-built NAS for Nextcloud hosting

With Google cutting its unlimited storage and ending the Play Music service, I decided to use my own Nextcloud more seriously.
In part because Google forced all its competitors out of the market, but mostly because I want to be independent of any cloudy services.

The main drawback of my existing Nextcloud setup, that I have written about here, was missing redundancy; the nice thing about putting your stuff in the cloud is that you do not notice if one of the storage devices fails – Google will take care of providing you with a backup copy of your data.

Unfortunately, the Intel NUC based build I used, while offering great power efficiency did not support adding a second HDD to create a fail-safe RAID1 setup. Therefore I had to upgrade.

As I still wanted to keep things power-efficient in a small form-factor, my choice fell on the ASRock DeskMini series. Here, I went with the AMD Variant (A300) in order to avoid paying the toll of spectre mitigations with Intel (resulting in just 80% of baseline performance).

The photos above show you the size difference, which is considerable – yet necessary to cram two 2.5″ SATA drives next to each other.
Here, keep in mind that while the NUC devices have their CPU soldered on, we are getting the standardized STX form-factor with the A300, which means you can replace and upgrade the mainboard and the CPU as you wish, while with a NUC you are basically stuck with what you bought initially.

The full config of the build is as follows and totals at about 270€

  • ASRock DeskMini A300
  • AMD Athlon 3000G
  • 8GB Crucial DDR4-2666 RAM
  • WD Red SA500 NAS 500GB
  • Crucial MX500 500GB

Note, that I deliberately chose SSDs from different vendors to reduce the risk of simultaneous failure.
Also, while the 3000G is not the fastest AMD CPU, it is sufficient to host nextcloud and is still a nice upgrade from the Intel Celeron I used previously.
Furthermore, its 35W TDP nicely fits the constrained cooling options. Note, that you can limit for Ryzen 3/5 CPUs to 35W in the BIOS as well, so there is not need to get their GE variants.
However, for a private server you probably do not need that CPU power anyway, so just go with the Athlon 3000G for half the price.

Unfortunately, the A300 system is not designed for passive cooling and comes with a quite annoying CPU fan. To me the fan coming with the Athlon 3000G was less annoying, so I used that instead.
Anyway, you should set the fan RPM to 0% below 50° C in the BIOS, which results in 800 RPM and is unhearable while keeping the CPU reasonably cool.

Power Consumption

As the machine will run 24/7, power consumption is an important factor.

The 35W TDP gives us a upper limit of what the system will consume on persistent load – however the more interesting measure is the idle consuption as thats the state the system will be most of the time.

As I already tried some builds with different ARM architectures, we have some interesting values to compare to, putting the A300 build in perspective

BuildCPUIdleLoad
Odroid U3Exynos44123.7 W9 W
Gigabyte BRIXIntel N33504.5 W9.6 W
A300Athlon 3000G6.8 W33.6 W

While you can obviously push the system towards 35W by with multiple simultaneous users, the 7.3 W idle consumption is quite nice.
Keep in mind, that the A300 was measured with two SATA drives operating as RAID1. If you only use one you can subtract 1W – at which point it is only 1.5 W away from the considerably weaker NUC system.

You might now wonder, whether the load or the idle measure is closer to the typical consumption. For this I measured the consumption for 30 days, which totaled at 5.23 kWh – or 7.2 Watts.

Currently, the average price for 1 kWh is 0.32€, so the running the server costs about 1.67€/ Month. For comparison, Google One with 200 GB will set you off 2.99 €/ Month.

Power optimizations

To reach that 7.3 W idle, you need to tune some settings though. The most important one and luckily the easiest to fix is using a recent kernel.
If you are on Ubuntu 18.04, update to 20.04 or install the hwe kernel (5.4.0) – it saves you 4 Watts (11.3 to 7.3).

For saving about 0.5 watts, you can downgrade the network interface from 1Gbit to 100Mbit by executing

ethtool -s enp2s0 speed 100 duplex full autoneg on

Additionally, you can use Intels powertop to tune your system settings for power saving as

powertop --auto-tune