DIY irrigation system for fun

This post is about my irrigation system built last spring. I thought I can create a smarter sprinkler computer than the stock ones. The design constraints were roughly these:

  • ~250 m2 of lawn as subject for sprinkler irrigation
  • ~100 bushes as subject for drip irrigation
  • Fortunately the site is horizontal, but
    • Unfortunately is divided into two halves by a sidewalk
  • Cost efficiency, as usual 🙂

The result after one year is fortunately the green lawn, as expected:


Read more ›

Reverse engineering my Fiber-To-The_Home device.

This time I wrote a blogpost on Check it out here.

Debugging and contributing on Alpine Linux

In one of my previous posts I explained my renewed router / home server. One task of the box is to serve video/audio content on DLNA. One of the easy selection in this area is minidlna to do the streaming. So I grabbed the first working minidlna docker container, which in practice Alpine Linux based and started to use that.

Our happiness was not instant using the new configuration. Minidlna was never rock-solid, but in this setup it definitely crashed from time to time. As I inspected it crashed every single time when something added to the media library, in practice when the download completed. After checking minidlna issues, I have not found anything useful, so decided to locate the exact problem.

Read more ›

Automatic hot water circulator

After moving to a new place, I’ve found new challenges to solve here and there. One such unresolved thing was the hot water circulation control. In this post I present one possible solution which is according to the user’s behavior.

The problem

This is a tiny project to control a water pump. In a typical domestic hot water system, there is a common problem that the water gets cold in the pipes if some faucets are too far. So you have to waste a lot of water (and time 🙂 ) until you get the hot water, if is was not used recently.

The base of the solution is to build also a returning pipe between the last faucet and the boiler or hot water tank, where a pump can circulate the returning water, so that keeping the pipes hot.

Read more ›

C++ on AVR

Hi all,

[disclaimer] Comparing to others here, this post assume you are familiar with the C++ language on a basic level.

I would like to share my thoughts about the topic in the subject: using C++ programming language for AVRs. Nowadays I am dealing with C++ during my daily work (on x86) and I was happy when I saw that avr-gcc actually can compile C++ code as well (avr-g++). So that in one of my recent AVR (atmega) projects I tried this new (at least to me :)) stuff. I will share some code design principles which I use often.

There are only a few reading available in the topic out there: link, link.

The warnings can be disappointing because you can not use a lot of cool stuff from the language constructs. Basically these are NOT available:

  • exceptions at all
  • missing new/delete, meaning you can not create object dynamically (technically there is no real heap in the AVR, I think this is the real reason)
  • no STL (you can not create dynamic size containers like vector or map)
  • possible performance drawbacks: codesize, implicit first parameter for the member functions (this), searching in the vtable in case of virtual functions takes time, etc

Looks like a painful list. Is there any remaining stuff which is still useful? I think yes. You can still design your code with true OO architecture. You can create interfaces through inheritance, encapsulate data into objects which can manage themselves, using templates(!), etc.

I’ve found a book which is about howto use C as an OO language. Respect for the people who can do it that way. Really :). I think you pretty much lose the type safety, and have to create for example the *this pointer explicitly as a function parameter for your methods. So the drawbacks are more or less reproduced by hand. If you don’t have the choice to use C++, than it is OK. I’ve read somewhere that the AVR community is pretty lucky as they have GCC which has very nice optimalization capabilities, so C++ code can be still very compact. Read more ›

linux based router reloaded


It’s been a long time since I set up my mini-itx based router/download machine. It got a few unavoidable HW upgrade (power supply, new HDD) but the performance of that is remained. From SW point of view however, it has a lot more load and responsibility. The HD age with the smart TVs are here, so that the machine is not anymore a basic router/NAS, but something like a HTPC. I use minidlna to stream the content towards our smart TVs. Now the performance of the famous Intel Atom 230 is over unfortunately. The 100Mb/s internet is also a reality now and if the content is downloaded at max speed to the encrypted HDDs, it consumes the CPU entirely and the stream basically starts to lag. Of course it is possible to limit the CPU usage or the downloading bandwidth for rtorrent, but that would be a workaround only. Read more ›

Project: Grass Head [time lapse video]


Last week we started to foster a grasshead. After the first day I remembered a cool project which can remotely trigger any DSLR camera which have IR or wired remote shutter option. I have a Pentax K200D which is a regular camera with such a 2.5mm jack based shutter trigger. This DIY trigger is great for a lot project. Some time ago I decided to build it to capture some lightning without observing the thunder during a whole night. Of course I’ve never built it 🙂 .

So I decided to create a time lapse video of the grasshead while the grass is growing. Needless to say that the linked project is an overkill to achieve this and I had only one day before the grass started to grow as it was already sprinkled 🙂 . So the quick and dirty solution was selected, which is a small AVR and a solid state relay, nothing more. The selected time interval was one picture in every half hour. Rendering into a 15fps movie, one day will take 3.3 sec.

Read more ›

C++ library for my LED cube

In the last two years I was mainly interrested in exploring C++. One result of my learning is the subject of this post. I started to reimplement the snake game using C++11 for the LED cube. Later I divided the code into two sections. The general part became a base library for creating games or animations. The snake specific code is now only an application, which is based on the general library part. Later, the famous 2048 game was also implemented on top of the library.

Read more ›

[UPDATED] Mastech MAS-345 digital multimeter Windows GUI


I had some time to improve my software for my MASTECH MAS-345 multimeter. Now it has a lot of features, such as:

  • save/load to an own binary format
  • export to excel own binary format (reloadable)
  • graph (had to change the platform to .NET 4.0)
  • comment and color all measurement
  • check for update (notifies when a more recent version is available)

Here is the screenshot:

Now it’ under GPL.

Read more ›

Exploring Nokia 3310 LCD


This project is a general purpose library implementation for the famous Nokia 3310 LCD (PCD8544). Almost everybody has old phones like 3310 at home. If not, you can buy it for a few dollars, which is pretty cheap I think for at least for a graphic LCD. The display can be controlled easily on several AVR pins.

Read more ›