Posted
about 2 years
ago
by
Pavel Rojtberg
I got myself the MouldKing Forklift MOC set and wanted to share my findings with you.
The set comes with “New PowerModule 4.0″, which means it supports continuous output. If you get the new joystick controller or use the app, you can have
... [More]
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 used stickers add to the looks.
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 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.
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-bar. This will make joining things at step 288 much easier.
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
I got myself the MouldKing Forklift MOC set and wanted to share my findings with you.
The set comes with “New PowerModule 4.0″, which means it supports continuous output. If you get the new joystick controller or use the app, you get
... [More]
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 used stickers add to the looks.
Building comments
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 motor position is wrong. It will collide with the bar you added at step 96. To make it fit, just rotate the motor 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 214: I suggest using gray 2-axes at step 230 instead of the used whites. This way the front facing axes will be all gray. For this just use white 2-axes 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.
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-bar. This will make joining things at step 288 much easier.
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
I got myself the MouldKing Forklift MOC set and wanted to share my findings with you.
The set comes with PowerModule 4.0. In contrast to the “New PowerModule 4.0″ this one is not step-less. So even when using a joystick controller or the
... [More]
app, there is only either 0% or 100% throttle. This renders the app pretty much useless, unless you want to play with the basic “programming” options it offers.
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 used stickers add to the looks.
Building comments
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 motor position is wrong. It will collide with the bar you added at step 96. To make it fit, just rotate the motor 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 214: I suggest using gray 2-axes at step 230 instead of the used whites. This way the front facing axes will be all gray. For this just use white 2-axes 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.
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-bar. This will make joining things at step 288 much easier.
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
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
... [More]
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 continuous 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.
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.
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
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
... [More]
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:
Get this model on Amazon
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 ch-stcyr47.store , 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.
0 0 [Less]
|
Posted
about 2 years
ago
by
Enrique Ocaña González
This is the last post on the instrumenting source code series. I hope you to find the tricks below as useful as the previous ones.
In this post I show some more useful debugging tricks. Don’t forget to have a look at the other posts of the
... [More]
series:
GStreamer WebKit debugging tricks using GDB (1/2)
GStreamer WebKit debugging tricks using GDB (2/2)
GStreamer WebKit debugging by instrumenting source code (1/3)
GStreamer WebKit debugging by instrumenting source code (2/3)
Finding memory leaks in a RefCounted subclass
The source code shown below must be placed in the .h where the class to be debugged is defined. It’s written in a way that doesn’t need to rebuild RefCounted.h, so it saves a lot of build time. It logs all refs, unrefs and adoptPtrs, so that any anomaly in the refcounting can be traced and investigated later. To use it, just make your class inherit from LoggedRefCounted instead of RefCounted.
Example output:
void WTF::adopted(WTF::LoggedRefCounted*) [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1
void WTF::adopted(WTF::LoggedRefCounted*) [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1
^^^ Two adopts, this is not good.
void WTF::LoggedRefCounted::ref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1 --> ...
void WTF::LoggedRefCounted::ref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount ... --> 2
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 2 --> ...
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount ... --> 1
void WTF::adopted(WTF::LoggedRefCounted*) [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1 --> ...
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1 --> ...
^^^ Two recursive derefs, not good either.
#include "Logging.h"
namespace WTF {
template class LoggedRefCounted : public WTF::RefCounted {
WTF_MAKE_NONCOPYABLE(LoggedRefCounted); WTF_MAKE_FAST_ALLOCATED;
public:
void ref() {
printf("%s: this=%p, refCount %d --> ...\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
WTF::RefCounted::ref();
printf("%s: this=%p, refCount ... --> %d\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
}
void deref() {
printf("%s: this=%p, refCount %d --> ...\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
WTF::RefCounted::deref();
printf("%s: this=%p, refCount ... --> %d\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
}
protected:
LoggedRefCounted() { }
~LoggedRefCounted() { }
};
template inline void adopted(WTF::LoggedRefCounted* object)
{
printf("%s: this=%p, refCount %d\n", __PRETTY_FUNCTION__, object, (object)?object->refCount():0); fflush(stdout);
adopted(static_cast(object));
}
} // Namespace WTF
Pause WebProcess on launch
WebProcessMainGtk and WebProcessMainWPE will sleep for 30 seconds if a special environment variable is defined:
export WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH=1
It only works #if ENABLE(DEVELOPER_MODE), so you might want to remove those ifdefs if you’re building in Release mode.
Log tracers
In big pipelines (e.g. playbin) it can be very hard to find what element is replying to a query or handling an event. Even using gdb can be extremely tedious due to the very high level of recursion. My coworker Alicia commented that using log tracers is more helpful in this case.
GST_TRACERS=log enables additional GST_TRACE() calls all accross GStreamer. The following example logs entries and exits into the query function.
GST_TRACERS=log GST_DEBUG='query:TRACE'
The names of the logging categories are somewhat inconsistent:
log (the log tracer itself)
GST_BUFFER
GST_BUFFER_LIST
GST_EVENT
GST_MESSAGE
GST_STATES
GST_PADS
GST_ELEMENT_PADS
GST_ELEMENT_FACTORY
query
bin
The log tracer code is in subprojects/gstreamer/plugins/tracers/gstlog.c.
0 0 [Less]
|
Posted
about 2 years
ago
by
Enrique Ocaña González
This is the last post on the instrumenting source code series. I hope you to find the tricks below as useful as the previous ones.
In this post I show some more useful debugging tricks. Don’t forget to have a look at the other posts of the
... [More]
series:
GStreamer WebKit debugging tricks using GDB (1/2)
GStreamer WebKit debugging tricks using GDB (2/2)
GStreamer WebKit debugging by instrumenting source code (1/3)
GStreamer WebKit debugging by instrumenting source code (2/3)
Finding memory leaks in a RefCounted subclass
The source code shown below must be placed in the .h where the class to be debugged is defined. It’s written in a way that doesn’t need to rebuild RefCounted.h, so it saves a lot of build time. It logs all refs, unrefs and adoptPtrs, so that any anomaly in the refcounting can be traced and investigated later. To use it, just make your class inherit from LoggedRefCounted instead of RefCounted.
Example output:
void WTF::adopted(WTF::LoggedRefCounted*) [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1
void WTF::adopted(WTF::LoggedRefCounted*) [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1
^^^ Two adopts, this is not good.
void WTF::LoggedRefCounted::ref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1 --> ...
void WTF::LoggedRefCounted::ref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount ... --> 2
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 2 --> ...
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount ... --> 1
void WTF::adopted(WTF::LoggedRefCounted*) [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1 --> ...
void WTF::LoggedRefCounted::deref() [with T = WebCore::MediaSourceClientGStreamerMSE]: this=0x673c07a4, refCount 1 --> ...
^^^ Two recursive derefs, not good either.
#include "Logging.h"
namespace WTF {
template class LoggedRefCounted : public WTF::RefCounted {
WTF_MAKE_NONCOPYABLE(LoggedRefCounted); WTF_MAKE_FAST_ALLOCATED;
public:
void ref() {
printf("%s: this=%p, refCount %d --> ...\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
WTF::RefCounted::ref();
printf("%s: this=%p, refCount ... --> %d\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
}
void deref() {
printf("%s: this=%p, refCount %d --> ...\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
WTF::RefCounted::deref();
printf("%s: this=%p, refCount ... --> %d\n", __PRETTY_FUNCTION__, this, WTF::RefCounted::refCount()); fflush(stdout);
}
protected:
LoggedRefCounted() { }
~LoggedRefCounted() { }
};
template inline void adopted(WTF::LoggedRefCounted* object)
{
printf("%s: this=%p, refCount %d\n", __PRETTY_FUNCTION__, object, (object)?object->refCount():0); fflush(stdout);
adopted(static_cast(object));
}
} // Namespace WTF
Pause WebProcess on launch
WebProcessMainGtk and WebProcessMainWPE will sleep for 30 seconds if a special environment variable is defined:
export WEBKIT2_PAUSE_WEB_PROCESS_ON_LAUNCH=1
It only works #if ENABLE(DEVELOPER_MODE), so you might want to remove those ifdefs if you’re building in Release mode.
Log tracers
In big pipelines (e.g. playbin) it can be very hard to find what element is replying to a query or handling an event. Even using gdb can be extremely tedious due to the very high level of recursion. My coworker Alicia commented that using log tracers is more helpful in this case.
GST_TRACERS=log enables additional GST_TRACE() calls all accross GStreamer. The following example logs entries and exits into the query function.
GST_TRACERS=log GST_DEBUG='query:TRACE'
The names of the logging categories are somewhat inconsistent:
log (the log tracer itself)
GST_BUFFER
GST_BUFFER_LIST
GST_EVENT
GST_MESSAGE
GST_STATES
GST_PADS
GST_ELEMENT_PADS
GST_ELEMENT_FACTORY
query
bin
The log tracer code is in subprojects/gstreamer/plugins/tracers/gstlog.c.
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
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.
... [More]
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
Name
Pricing
Brita Classic
~15.19 €
PearlCo Classic
12.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 Classic
31%
206
PearlCo Classic
24%
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:
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
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.
... [More]
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
Name
Pricing
Brita Classic
~15.19 €
PearlCo Classic
12.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 onlinemedikament.online , 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 Classic
31%
206
PearlCo Classic
24%
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:
0 0 [Less]
|
Posted
about 2 years
ago
by
Pavel Rojtberg
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.
... [More]
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
Name
Pricing
Brita Classic
~15.19 €
PearlCo Classic
12.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 Classic
31%
206
PearlCo Classic
24%
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:
0 0 [Less]
|