How

last modified: October 23, 2025

How to Design a Cheap Plant Watering Sensor (Part 6)

Posted on 2017-04-29— Projects

I describe making a small alpha batch of my low-cost plant-watering sensor: ordering parts, prepping and soldering wires, testing PCB assembly with stencils, and solving sealing with epoxy. If you’re interested in practical prototyping tips and lessons learned, please read the full post for photos and detailed steps.

Read this post

How to Design a Cheap Plant Watering Sensor (Part 3)

Posted on 2017-03-03— How and Why

In part three I assemble and test the prototype PCB, set ATtiny13A fuses, and refine user interaction and firmware plans. I cover LED display choices, power measurements and a modular firmware approach. If you’re building a low-cost plant sensor, read the full post for practical steps and diagrams.

Read this post

How to Design a Cheap Plant Watering Sensor (Part 1)

Posted on 2017-02-08— How and Why

I walked through designing a cheap capacitive plant watering sensor, from goals and measurement options to component selection and early prototypes. I explain why I chose a CR2032‑powered op‑amp oscillator, ATtiny MCU and low‑power timer. If you’re curious, read the full post for details and test results.

Read this post

How and Why to Avoid Preprocessor Macros

Posted on 2016-10-24

I explain why preprocessor macros often cause subtle bugs and naming conflicts in C++ and share safer alternatives—const/constexpr variables, #pragma once, enums, and separate implementation files. If you want clearer, type-safe code with unchanged performance, read the full post for practical examples and replacements.

Read this post

How to Debug Time Critical Code using an Oscilloscope

Posted on 2014-11-13— How and Why

I often use a simple oscilloscope trick to debug time-critical code: toggle an I/O line before and after critical sections and observe interrupt timing and execution width. It’s low-effort and revealing — read on for practical steps, examples, and tips to measure and reason about your timing issues.

Read this post

How and Why to use Namespaces

Posted on 2014-10-31— C++, How and Why

I explain how C++ namespaces prevent name conflicts and why they matter, especially in Arduino projects. I walk through practical patterns—prefixing, selective using-declarations, and importing a namespace—with class and global examples. Read the full post for simple, pragmatic examples to keep your code clearer and conflict-free.

Read this post