From 4120078834292bcf5c0ef797f4ae32c2a2a1a406 Mon Sep 17 00:00:00 2001 From: William Floyd Date: Wed, 16 Mar 2022 23:29:58 -0500 Subject: [PATCH] yogurt: Add part 1 block post (force push to use lfs to xcf). --- .../posts/smart-yogurt-maker-part-01/index.md | 250 ++++++++++++++++++ .../media/IMG-20220125-WA0001.jpeg | 3 + .../media/IMG_20220124_174144.jpg | 3 + .../media/IMG_20220124_180143.jpg | 3 + .../media/IMG_20220125_105918.jpg | 3 + .../media/IMG_20220125_105924.jpg | 3 + .../media/IMG_20220125_113949.jpg | 3 + .../media/IMG_20220125_113949_cleaned.jpg | 3 + .../media/IMG_20220125_114006.jpg | 3 + .../media/IMG_20220125_114006_cleaned.jpg | 3 + .../media/IMG_20220125_175809.jpg | 3 + .../media/IMG_20220125_180035.jpg | 3 + .../smart-yogurt-maker-part-01/media/calc.png | 3 + .../media/circuit.svg | 98 +++++++ .../smart-yogurt-maker-part-01/media/log.png | 3 + .../smart-yogurt-maker-part-01/media/src/.env | 0 .../media/src/IMG-20220125-WA0001.jpeg | 3 + .../media/src/IMG-20220125-WA0001.jpeg.hash | 1 + .../media/src/IMG_20220124_174144.jpg | 3 + .../media/src/IMG_20220124_174144.jpg.hash | 1 + .../media/src/IMG_20220124_180143.jpg | 3 + .../media/src/IMG_20220124_180143.jpg.hash | 1 + .../media/src/IMG_20220125_105918.jpg | 3 + .../media/src/IMG_20220125_105918.jpg.hash | 1 + .../media/src/IMG_20220125_105924.jpg | 3 + .../media/src/IMG_20220125_105924.jpg.hash | 1 + .../media/src/IMG_20220125_113949.jpg | 3 + .../media/src/IMG_20220125_113949.jpg.hash | 1 + .../media/src/IMG_20220125_113949_cleaned.jpg | 3 + .../src/IMG_20220125_113949_cleaned.jpg.hash | 1 + .../media/src/IMG_20220125_113949_cleaned.xcf | 3 + .../media/src/IMG_20220125_114006.jpg | 3 + .../media/src/IMG_20220125_114006.jpg.hash | 1 + .../media/src/IMG_20220125_114006_cleaned.jpg | 3 + .../src/IMG_20220125_114006_cleaned.jpg.hash | 1 + .../media/src/IMG_20220125_114006_cleaned.xcf | 3 + .../media/src/IMG_20220125_175809.jpg | 3 + .../media/src/IMG_20220125_175809.jpg.hash | 1 + .../media/src/IMG_20220125_180035.jpg | 3 + .../media/src/IMG_20220125_180035.jpg.hash | 1 + .../media/src/calc.png | 3 + .../media/src/calc.png.hash | 1 + .../media/src/log.png | 3 + .../media/src/log.png.hash | 1 + layouts/shortcodes/mathjax.html | 28 ++ 45 files changed, 473 insertions(+) create mode 100644 content/posts/smart-yogurt-maker-part-01/index.md create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG-20220125-WA0001.jpeg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_174144.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_180143.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105918.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105924.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949_cleaned.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006_cleaned.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_175809.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_180035.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/calc.png create mode 100644 content/posts/smart-yogurt-maker-part-01/media/circuit.svg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/log.png create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/.env create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.xcf create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.xcf create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/calc.png create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/calc.png.hash create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/log.png create mode 100644 content/posts/smart-yogurt-maker-part-01/media/src/log.png.hash create mode 100644 layouts/shortcodes/mathjax.html diff --git a/content/posts/smart-yogurt-maker-part-01/index.md b/content/posts/smart-yogurt-maker-part-01/index.md new file mode 100644 index 0000000..e3e0b3f --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/index.md @@ -0,0 +1,250 @@ +--- +title: "Smart Yogurt Maker Part 1" +date: "2022-01-25" +author: "William Floyd" +featured_image: "media/IMG_20220125_113949_cleaned.jpg" +categories: [ + "Development", + "Hardware", + "Software" +] +tags: [ + "ESPHome", + "Rice Cooker", + "Home Assistant", + "Smart Home", + "Automation", + "Yogurt" +] +--- + +A certain [Rice](/2018/smart-rice-cooker) [Cooker](/2018/dumb-rice-cooker) has been languishing in a box for the last several years - now it is time to revisit it. +It is a tale of Solder, Software, and Streptococcus thermophilus. + +*** + +# "Last time, on Rice Cooker Adventures" + +This story picks up where I left off 3 years ago - the rice cooker has thermistors taped to the bottom of the pot with high temperature fiberglass tape. Specifically, I have 4 of the same thermistor in 2 parallel lines of 2 series resistors, like so. + +![Thermistor Diagram][thermistors] + +This serves to roughly average the resistances, to account for possible hotspots on the pot, while only taking a single ADC pin. + +However, time has not been kind to my memory, and the specific parameters of these thermistors are unknown, so first, it's time to do some testing. + +# Side Quest: Thermistor Calibration + +I have a thermocouple that I can use to verify the temperature of the pot with, so here is the setup: log the resistance through the thermistor bank at close to room temperature, rolling boil, and a middle temperature (during cooldown). These three sample points may then be used to find the parameters of the thermistor exactly. + +From hazy memory (and counting parts in inventory), my suspicion was that I had used a $100k\Omega$ thermistor. +Brand is unknown, but representative datasheets online cite a $\beta$ value of 3950 - let's see how we compare. + +## Wait, what does $\boldsymbol{\beta}$ mean? + +For a more in depth read, look [here](https://www.qtisensing.com/wp-content/uploads/Beta-vs-Steinhart-Hart.pdf), but in summary early studies proposed that for NTC thermistors, the temperature $T$ could be determined given a measured resistance $R$, coefficient $\beta$ and reference resistance $R_0$ and temperature $T_0$, like so: + +$$ +\frac {1}{T}=\frac{1}{T_{0}}+{\frac {1}{\beta}} \ln{\frac {R}{R_{0}}} +$$ + +While this may work for small temperature ranges (approximately $20^\circ \text{C}$ or so), we require a larger range, and so we are instead going to look at the... + +## Steinhart-Hart Equation + +Briefly summarizing [Wikipedia](https://en.wikipedia.org/wiki/Steinhart%E2%80%93Hart_equation), the equation states: + +$$\frac{1}{T}=A+B\cdot\ln\{\left(R\right)}+C(\ln \left(R\right))^{3}$$ + +Which, when using 3 sample points, results in: + +$$ +\begin{bmatrix} + 1 & \ln R_1 & \ln^3 R_1 \\\\ + 1 & \ln R_2 & \ln^3 R_2 \\\\ + 1 & \ln R_3 & \ln^3 R_3 +\end{bmatrix}\begin{bmatrix} + A \\ + B \\ + C +\end{bmatrix} = \begin{bmatrix} + \frac{1}{T_1} \\\\ + \frac{1}{T_2} \\\\ + \frac{1}{T_3} +\end{bmatrix} +$$ + +In my case, I found the points of reference using a setup like so: + +![Measuring water temperature and thermistor resistance](media/IMG_20220124_174144.jpg) + +Do note that in order to reach a full boil (and $100^\circ \text{C}$ on the thermocouple), the lid of the rice cooker was attached. + +While I could show the calculations, and they wouldn't be difficult, I'll be honest: I used an [online calculator](https://www.thinksrs.com/downloads/programs/therm%20calc/ntccalibrator/ntccalculator.html). + +![Calculator results](media/calc.png) + +Using the measurements: + +$$ +\begin{array}{|l|l|} +\hline \mathbf{R}(\boldsymbol{\Omega}) & \mathbf{T}\left({ }^{\circ} \mathbf{C}\right) \\\\ +\hline 81 \mathrm{k} & 33 \\\\ +\hline 21.3 \mathrm{k} & 66 \\\\ +\hline 6.4 \mathrm{k} & 100 \\\\ +\hline +\end{array} +$$ + +Yielded + +$$ +\begin{aligned} +A &= 1.032978070 \cdot 10^{-3}\\\\ +B &= 1.733021623 \cdot 10^{-4}\\\\ +C &= 1.902682261 \cdot 10^{-7}\\\\ +\hline +R_{(25^\circ \text{C})} &= 117072.68 \Omega \\\\ +\beta_\text{calculated} &= 4202.76 \text{K} +\end{aligned} +$$ + +As we can see then, the actual $\beta$ value is larger than predicted ($3950\text{K}$ predicted vs. $4203\text{K}$ actual), as is the reference resistance ($100\text{k}\Omega$ predicted vs. $117\text{k}\Omega$ actual). +In fact, neither of these are even in the commonly stated "$\pm 1 \\%$" range. +Good thing we're calibrating, hey? + +# "Back to our regularly scheduled programming" + +How to use this data then? +Being short on time, I opted to take the easy way out, and use the wonderful [ESPHome](https://esphome.io/), as I already use Home Assistant. +As it turns out, they already have us covered, with a [NTC Sensor component](https://esphome.io/components/sensor/ntc.html) already built in. +This, coupled with a [resistance](https://esphome.io/components/sensor/resistance.html) and [ADC](https://esphome.io/components/sensor/adc.html) sensor allow using a voltage divider to measure the resistance of the thermistor. + +You know those calculations and equations we did above? +Unnecessary, all of it. +ESPHome supports doing Steinhart-Hart calculations itself, and only needs the three sample points. + +In the meantime, a Wemos D1 Mini on a breadboard is ready to go (they're cheap and chearful). +I wire it up with a $6.8\text{k}\Omega$ resistor (what I had handy), and away I went. +The circuit looks something like this, where the two trailing wires connect to the thermistor bank: + +![Wired breadboard](media/IMG_20220125_114006_cleaned.jpg) + +To prevent confusion, here is my final working config, then I'll explain. + +```yaml +sensor: + - platform: ntc + sensor: resistance_sensor + calibration: + - 81.0kOhm -> 33°C + - 21.3kOhm -> 66°C + - 6.4kOhm -> 100°C + name: Rice Cooker Temperature + unit_of_measurement: °C + + - platform: resistance + id: resistance_sensor + sensor: source_sensor + configuration: DOWNSTREAM + resistor: 6.96kOhm + reference_voltage: 3.306V + name: Resistance Sensor + + - platform: adc + id: source_sensor + pin: A0 + name: Voltage Sensor + filters: + - multiply: 3.2 + update_interval: 1s +``` + +# Calibrate all the things + +## Series Resistor +Easy, measuring mine I found it to be $6.96\text{k}\Omega$, certainly different from the $6.8\text{k}\Omega$ it's meant to be. +Throw that in the config. + +## Reference Voltage +This is also easy enough, measure the $3.3\text{V}$ pin off the D1 mini. +Mine came out to be $3.306\text{V}$, respectably close to rated! +That goes in the config too. + +## Multiply Filter +As it turns out, the D1 mini has an internal voltage divider to convert the $3.3\text{V}$ of the input voltage down to the $1\text{V}$ the ADC is rated for. +This is nice, as it protects the ADC, but it must be accounted for. +But there's a catch - on my board this wasn't quite right - the voltage read was still slightly wrong. +I could try manually tuning this, but there is an easier way. +Instead, I measured the actual voltage ($3.306\text{V}$), and compared it to the voltage being read. + +Say there was no error, then we would say $V_\text{actual}=V_\text{measured}$, and if there is an error of a multiple difference between the two, we can say $V_\text{actual}=m\cdot V_\text{measured}$. Thus, to find this multiplier, we say: + +$$ +m = \frac{V_\text{actual}}{V_\text{measured}} +$$ + +Using this method, I find my multiplier to be $3.2$, not $3.3$. + +With that, the board is finally reading the correct voltage, the correct resistance, and the correct temperature. + +# "You're so controlling!" + +Given that I have Home Assistant, automating it becomes easy. + +I'm currently using a [Tasmota](https://tasmota.github.io/docs/) flashed smart outlet to control the power to the heating element of the rice cooker (for reference, it pulls up to $400\text{W}$ at full load). +In future, I would like to condense all functionality into a relay controlled directly by the ESP8266, to allow greater safety in case of network issues or even local PID tuning. + +I am also using a [PID controller for Home Assistant](https://github.com/soloam/ha-pid-controller). +It seems to work fine, I am just bad at PID tuning, so results may vary depending on hardware, amount of mass in the cooker, ambient temperatures, etc. +That being said, a simple automation to turn the heater on when the PID response goes high and turn off when not high yields acceptable results. + +From fiddling with the settings, I currently am using the following parameters: + +$$ +\begin{aligned} +P &= 60 \\\\ +I &= 5.6 \\\\ +D &= 6.7 \\\\ +\end{aligned} +$$ + +Further tuning is required, but this held well overnight - mostly... + +![First overnight test](media/log.png) + +I did change the set point from $105^\circ\text{F}$ to $107^\circ\text{F}$ halfway through, as well as tweaked some of the PID tuning. +The concerning spike at 9:00 is marked by a momentary loss of connection with the ESP board - my automation failed to account for a loss of connection and so allowed the heat to continue rising. +Thankfully, this was a short-lived event, but it is concerning nonetheless, and will require testing of my automation to prove that power loss tends towards a "safer" outcome. +Do note that "safer" means no dead yogurt culture - the safety features of the rice cooker remain unchanged and functional. + +# The proof is in the... yogurt? + +So how did it do? +I am notoriously _not_ picky when it comes to food, but I think it turned out great! +Filling the rice cooker about halfway with whole milk, I heated it to $180^\circ \text{F}$ for a few minutes (I read I ought to go for longer...), cooled to about $110^\circ \text{F}$, then added a liberal few spoonfuls (think 1/5 volume of milk) of plain Dannon yogurt. +I let it proof in the rice cooker for 7.5 hours, with the lid sealed. + +![First batch, still warm](media/IMG_20220125_105918.jpg) + +I put the whole rice cooker in the fridge to cool, with the lid sealed. +Trying it later that same evening, I quite enjoyed it. +I'll start my next batch from this one, and hopefully it'll be even better. + +![Spoonful of the good stuff](media/IMG_20220125_180035.jpg) + +# "Next time, on Rice Cooker Adventures" + +Now that I have a temperature controllable rice-cooker, and the ability to remotely start, stop, and modify set points, I may try other foods. +For now, I need to: + +* solder a perfboard version of the circuit +* add a relay to control the cooker directly +* ensure the outlet will turn off if the ESP8266 loses connection +* PID tune the setup for the most common scenario (steady $107^\circ \text{F}$ with the lid shut) + +First though, I'm gonna go eat some fresh yogurt... + +[thermistors]: media/circuit.svg "Thermistor Diagram]" + +{{< mathjax >}} \ No newline at end of file diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG-20220125-WA0001.jpeg b/content/posts/smart-yogurt-maker-part-01/media/IMG-20220125-WA0001.jpeg new file mode 100644 index 0000000..00cbcd6 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG-20220125-WA0001.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b16af600f8f8ee3259c70060b5893c1979ade38064aa3c09f6ce54c43e91bd77 +size 63394 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_174144.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_174144.jpg new file mode 100644 index 0000000..362ce1d --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_174144.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07e23f7d7e256ad0f44f08f6f50ecab7b2c0d44426a6955f7384d0a9dfeea313 +size 110591 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_180143.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_180143.jpg new file mode 100644 index 0000000..6a49665 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220124_180143.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9077fb676a7bc4a22f75da8c85ec1337bdde031508dd9959cc8d2168dc5e3046 +size 104384 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105918.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105918.jpg new file mode 100644 index 0000000..f8c740a --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105918.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2fecc99f7bf51d35f5efce1083c2c2756d2190273858230459cb261fd6e294c +size 100508 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105924.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105924.jpg new file mode 100644 index 0000000..54f569a --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_105924.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:624a92c72c8f42fbd464cefe0d3d10a91175e3c9764a75a4059712c9cad7db04 +size 58150 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949.jpg new file mode 100644 index 0000000..0ab5a04 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b628f16a3faef2d36121191b0c91e6d422a10d214d906df888b8a00d81ff4f90 +size 33189 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949_cleaned.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949_cleaned.jpg new file mode 100644 index 0000000..2ea288f --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_113949_cleaned.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d8dbba87e3607187083257ada00c466c13ffb253f65be0f32dc5c49be29e523d +size 46840 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006.jpg new file mode 100644 index 0000000..ac3d9ca --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffabd7969dc2f0a85aa7f2798d2b7431ab34e2e05c1676a9dcd6311c53764d0d +size 44376 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006_cleaned.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006_cleaned.jpg new file mode 100644 index 0000000..df62f42 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_114006_cleaned.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f7b02ecbab4e94167f4d7011954a677581cb166d5f402fb6f0c3ac024c960e7 +size 60728 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_175809.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_175809.jpg new file mode 100644 index 0000000..3483b46 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_175809.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c067561633f76774b5f24a76d73905030332c3e5925f67b235f6de2f54381d19 +size 69297 diff --git a/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_180035.jpg b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_180035.jpg new file mode 100644 index 0000000..2835976 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/IMG_20220125_180035.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7659e569335479d9546dc4ac7956781d3a4d391a6bceb3acbdb702a10d2b182 +size 63765 diff --git a/content/posts/smart-yogurt-maker-part-01/media/calc.png b/content/posts/smart-yogurt-maker-part-01/media/calc.png new file mode 100644 index 0000000..20bab9d --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/calc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d036c858fda239d081ddb59370ad49f41f0c7e08f8f85df43e3b9888d8af285 +size 65374 diff --git a/content/posts/smart-yogurt-maker-part-01/media/circuit.svg b/content/posts/smart-yogurt-maker-part-01/media/circuit.svg new file mode 100644 index 0000000..554b0cb --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/circuit.svg @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/content/posts/smart-yogurt-maker-part-01/media/log.png b/content/posts/smart-yogurt-maker-part-01/media/log.png new file mode 100644 index 0000000..5f65922 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/log.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:595fc4b6963f1926e4cc3d11aa22d49fa40414c0f2deccc23310e3ea2dfe6e01 +size 30075 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/.env b/content/posts/smart-yogurt-maker-part-01/media/src/.env new file mode 100644 index 0000000..e69de29 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg new file mode 100644 index 0000000..0739aa4 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e82571ae1460142dea8d6c2064164adeec31ec28b6e878712cda379334267798 +size 1119651 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg.hash new file mode 100644 index 0000000..3c195b2 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG-20220125-WA0001.jpeg.hash @@ -0,0 +1 @@ +350414652e48b1502c92d53cae3f8a8a diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg new file mode 100644 index 0000000..b5e0ed4 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c5a112c6e5ad89f413021b01f349551f6bc9282931f23fe047bca73d772fc9f +size 3749053 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg.hash new file mode 100644 index 0000000..eddd578 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_174144.jpg.hash @@ -0,0 +1 @@ +3ffd8f056e06cb258bfc412cda49c453 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg new file mode 100644 index 0000000..2a548e3 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80a6ac438cf22b5d3ac0e8c3fa4b12b099de4fbc93db55ce112b020cb52bde9c +size 3921991 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg.hash new file mode 100644 index 0000000..27e2e66 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220124_180143.jpg.hash @@ -0,0 +1 @@ +73535fefabedc24d7a9628a9832edc84 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg new file mode 100644 index 0000000..9e497cc --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6792d78f1cac303e631dd138745b065f69fe4b12f3495528b3cc720005de1afb +size 3622409 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg.hash new file mode 100644 index 0000000..59c0e01 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105918.jpg.hash @@ -0,0 +1 @@ +d971cb31c8c70b313ef7777c2e18f180 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg new file mode 100644 index 0000000..225a251 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4751f8b7ef4080a6cc3715ecacfa815bc8de2cb562942435e11d3ef0f8324d4a +size 3127791 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg.hash new file mode 100644 index 0000000..9589240 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_105924.jpg.hash @@ -0,0 +1 @@ +c01a86e33e628effde4cb073b2d4e788 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg new file mode 100644 index 0000000..1e48867 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0c64301ab3b3610c612d68c385c5a75ea58a7894c980095de7e69c5b35a2874 +size 1330323 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg.hash new file mode 100644 index 0000000..e8cf551 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949.jpg.hash @@ -0,0 +1 @@ +586e44b3168e8350d97d49a524187ee1 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg new file mode 100644 index 0000000..97af040 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbc4f4d817846a118c0ca71e41620ec74beb57ef5dec07e81358d22223b1e274 +size 492688 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg.hash new file mode 100644 index 0000000..c0a9f13 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.jpg.hash @@ -0,0 +1 @@ +871f28fb15205ad180e9050e8d56feb1 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.xcf b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.xcf new file mode 100644 index 0000000..e114da9 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_113949_cleaned.xcf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:518e76e58765a5675c00b80d895b46c6ba381f36e13de094eede426fc1c0a0e9 +size 44138820 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg new file mode 100644 index 0000000..637582d --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98e5e57a2025f5e123d1ff3f1bd2136d08ed9c7bbc466c0be7ca81b9224b74fd +size 1580217 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg.hash new file mode 100644 index 0000000..1b08f34 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006.jpg.hash @@ -0,0 +1 @@ +9f353e96551de67df144c31d8fae0edf diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg new file mode 100644 index 0000000..644c92b --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30223d076de7e2d3618de0bba2a9f048b3b53ac71a6b8002c6c58af30928d008 +size 820400 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg.hash new file mode 100644 index 0000000..80804d3 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.jpg.hash @@ -0,0 +1 @@ +29f2466883105eb032f60bb9fdfbf077 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.xcf b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.xcf new file mode 100644 index 0000000..b92a658 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_114006_cleaned.xcf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12e6a34d2cc7667896eddbed3bb6b8f0b72f196436100ab230a2b9b444d94a94 +size 73969362 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg new file mode 100644 index 0000000..ce33cd7 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93245771707ccd9fc1401378b9e54cdf32398d3af00604f264c7e1285d6235b3 +size 2684471 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg.hash new file mode 100644 index 0000000..b0d3fe7 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_175809.jpg.hash @@ -0,0 +1 @@ +9ec9803782dbd1372555907b9e596198 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg new file mode 100644 index 0000000..34f30c8 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eafba2a26dfa2583c64c83a19d0dc41065c27cfa0948da30198f1a971ae9ded8 +size 2462354 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg.hash b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg.hash new file mode 100644 index 0000000..efde55a --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/IMG_20220125_180035.jpg.hash @@ -0,0 +1 @@ +a617dc66c55fe5979218f3fe7df43599 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/calc.png b/content/posts/smart-yogurt-maker-part-01/media/src/calc.png new file mode 100644 index 0000000..9e72b28 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/calc.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85235ab14c3e374e9899a630034caa4e0da008b0080e457fe4cf37e276beace7 +size 109203 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/calc.png.hash b/content/posts/smart-yogurt-maker-part-01/media/src/calc.png.hash new file mode 100644 index 0000000..e21330f --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/calc.png.hash @@ -0,0 +1 @@ +944f12a1110fa607994bb5b84e64dbbd diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/log.png b/content/posts/smart-yogurt-maker-part-01/media/src/log.png new file mode 100644 index 0000000..df86173 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/log.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:625fc61f999b4421473663672f819e20b9212f556fc8439efd3f852c29ab2292 +size 46079 diff --git a/content/posts/smart-yogurt-maker-part-01/media/src/log.png.hash b/content/posts/smart-yogurt-maker-part-01/media/src/log.png.hash new file mode 100644 index 0000000..4d41ea0 --- /dev/null +++ b/content/posts/smart-yogurt-maker-part-01/media/src/log.png.hash @@ -0,0 +1 @@ +ed3ce82d285ceb1c021ff0d6f01ada81 diff --git a/layouts/shortcodes/mathjax.html b/layouts/shortcodes/mathjax.html new file mode 100644 index 0000000..82c1e6e --- /dev/null +++ b/layouts/shortcodes/mathjax.html @@ -0,0 +1,28 @@ + \ No newline at end of file