-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
8d7ad47
commit d0f9c8f
Showing
5 changed files
with
139 additions
and
0 deletions.
There are no files selected for viewing
40 changes: 40 additions & 0 deletions
40
make-blog/source/_posts/Reverse-engineering-the-NEFF-Meatprobe.md
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
--- | ||
title: Reverse engineering the NEFF Meatprobe | ||
date: 2023-09-22 02:53:45 | ||
tags: | ||
--- | ||
I want to get into brewing my own beer, so naturally, i needed a thermometer to moniter the temperature. | ||
I already had a food safe thermometer laying around though... the NEFF Meatprobe, which i got with my oven, but don't use since i'm vegan. | ||
|
||
At first, i simply tried to search "Neff meatprobe pinout", but to no avail. | ||
Additionally, i tried searching for any patents, but that also turned up nothing... time to put in actual work! | ||
I knew it wasen't a PT100 nor a thermocouple, as neither of those modes picked up a rational temperature on my multimeter. | ||
|
||
This left only the NTC Thermistor as an option, as when measuring the resistance between pins, it decreased with temperature increase (thus Negative Temperature Coefficient). | ||
|
||
Next, I simply took measurements of the resistance at 3 different temperatures, as such: | ||
Temperature |Resistance (kΩ) | ||
---|--- | ||
30°C|60 | ||
15.8°C|132 | ||
7°C|235 | ||
|
||
Plugging these into the Steinhart-Hart formula, we get the following β model coefficient of 4863.74K. | ||
To be completely transparent, however, i cheated, i used a [nice calculator](https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator/ntccalculator.html) developed by the Standford Research systems. | ||
This also gives us a very nice visualisation of how accurate we were, comparing the β model coefficient to our observed results: | ||
![Graph of accuracy](/images/Accuracy.png) | ||
|
||
From here, I needed to determine two things, particularly: | ||
- How does each ring corrospond to the three measurement spots? | ||
- What the hell is this plug? | ||
|
||
Let's first determine what plug this uses, having a simple look at it, it's reminicent to a 6.5mm audio jack (to be more specific, a 6.5mm TRS jack, as pointed out by Vdekje): | ||
![Photograph of the plug, no dimensions](/images/non-dimensioned.png) | ||
|
||
Let's take some measurements first, however: | ||
![Same photograph of the plug, but with dimensions](/images/dimensioned.png) | ||
|
||
Here, we can see that it isn't a 6.5mm TRS for a few reasons, namely: | ||
- It isn't as "pointy" at the tip | ||
- It is 6.5mm diameter | ||
That second one might seem counterintuitive, however, it turns out that 6.5mm is a bit of a misnomer, as it's just 6.35mm (converted in europeon countries), which is actually 1/4" in the USA. Totally not confusing at all! |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
<title>STL Processor</title> | ||
</head> | ||
<body> | ||
<input type="file" id="fileInput" accept=".stl" /> | ||
<button onclick="processUploadedFile()">Process STL</button> | ||
|
||
<script> | ||
function formatScientificNotation(number) { | ||
if (!number.includes("e")) { | ||
return number; | ||
} | ||
if (number === "0.0") { | ||
return number; | ||
} | ||
|
||
number = number.replace(/e/g, "*10^{"); | ||
number = number.replace(/{-0/g, "{-"); | ||
number = number.replace(/{0/g, "{"); | ||
number = number.replace(/}\*10{/g, "}*10^"); | ||
number += "}"; | ||
|
||
return number; | ||
} | ||
|
||
function trimLeadingSpaces(str) { | ||
return str.trimLeft(); | ||
} | ||
|
||
function processSTL(stl, outputFileName) { | ||
const lines = stl.split('\n'); | ||
let outputFile = ""; | ||
let faceDimensionsAdded = false; | ||
|
||
for (let i = 0; i < lines.length; i++) { | ||
const trimmedLine = trimLeadingSpaces(lines[i]); | ||
|
||
if (trimmedLine[0] === 'v') { | ||
const match = trimmedLine.match(/vertex\s+(\S+)\s+(\S+)\s+(\S+)/); | ||
if (match) { | ||
if (faceDimensionsAdded) { | ||
outputFile += ", "; | ||
} | ||
|
||
const [_, x, y, z] = match; | ||
outputFile += `(${formatScientificNotation(x)}, ${formatScientificNotation(y)}, ${formatScientificNotation(z)})`; | ||
faceDimensionsAdded = true; | ||
} | ||
} else if (trimmedLine === 'endloop') { | ||
outputFile += "\\right)\n"; | ||
faceDimensionsAdded = false; | ||
} else if (trimmedLine[0] === 'f') { | ||
outputFile += "\\triangle\\left("; | ||
} else if (trimmedLine[0] === '') { | ||
outputFile += "\n"; | ||
} | ||
} | ||
outputFile += "\n"; | ||
|
||
// Create a Blob with the processed content | ||
const blob = new Blob([outputFile], { type: 'text/plain' }); | ||
|
||
// Create a download link | ||
const downloadLink = document.createElement('a'); | ||
downloadLink.href = window.URL.createObjectURL(blob); | ||
downloadLink.download = outputFileName; | ||
|
||
// Append the link to the body and trigger a click | ||
document.body.appendChild(downloadLink); | ||
downloadLink.click(); | ||
|
||
// Remove the link from the body | ||
document.body.removeChild(downloadLink); | ||
} | ||
|
||
function processUploadedFile() { | ||
const fileInput = document.getElementById('fileInput'); | ||
const file = fileInput.files[0]; | ||
|
||
if (!file) { | ||
alert('Please select an STL file.'); | ||
return; | ||
} | ||
|
||
const reader = new FileReader(); | ||
reader.onload = function (event) { | ||
const stlData = event.target.result; | ||
processSTL(stlData, 'output.txt'); | ||
}; | ||
|
||
reader.readAsText(file); | ||
} | ||
</script> | ||
</body> | ||
</html> |