SBL4TILT – “Sound Bubble Logger for TILT” Version2.0 (updated July 2021)

(DISCLAIMER: this software is beta software and hence treat it carefully).

SBL4TILT is an Arduino device (ESP32) there monitor your fermentation by sound in regards of yeast activity though motioning CO2 blops pr. minute (BPM). Furthermore it repeats the TILT data of gravity and temperature though Bluetooth connection and hence display this information into Ubidots, Brewersfriend or Brewfather. Last, and unique, it can also control a heating-argent and cooler based on the temeprature reading of the TILT every 6 min.

Hence, this project measure/do:

  1. Measure the activity of the yeast as CO2 escape the fermenter by a digital sound detector giving blops pr. min (BPM) and Sum BLOPs/L.
  2. Repeats temperature and Gravity from TILT into cloud.
  3. Hence, Send all data to the cloud in a easy way (BPM, Sum BLOP(pt)/L, Temperature, Gravity and color of TILT in use). The software sends to Ubidtos, Brewfather and Brewersfreind if you enter the url or Token in captive portal mode.
  4. It can control a 2-channel Relay to control a heat and cool source based on the temperature reading of the TILT every 6 min, hence, slow-working heating actor should be used (I used a 30W reptile heating mat).
  5. The Sum BLOP(pt)/L, can by “one Hydrometer Reading” approach by main fermentation be used to give a second view on the fermentation approach by giving an SG estimate from CO2 relase.

Buidling a “SBL4TILT”

This build is rather eaasy and do not need any soldering as such. It do need good knowledge for mains and hence, all high voltage work should be accomblished by a skilled worker in this area.

Needed parts and Pin/pinout

It needs an ESP32 devkit, Sound Sensor Detecting Module LM393, OLED screen of SSD1306 type (4-pin type of 128×64 pixels can be found in 0.96″ and 1.3″ sizes) and a 2-channel relay. Some 3 pins wires and some 2 pin wires is also needed.

  • Heating: RELAY0_PIN 26 –> int1 on relay
  • Cooling: RELAY1_PIN 25 –> int2 on relay
  • OLED, SDA till PIN 33
  • OLED, SCL till PIN 32
  • Sound sensor is connected on PIN 13
  • use 5v for all components (sound sensor, relay and OLED) by connecting till ESP32 WIN pin
  • connect all till Ground
  • USB Changer of min. 1.0A to give stability as power load is high.
  • slow-working actor/heating agent should be used (e.g. 6min runs).

A “light” version can be done by skipping all in regards of the relay (and OLED.) This version only needs VCC on WIN, ground and GPIO 13 to be attached till the sound sensor. If you new to Arduino this might be the place to start 🙂

Diagram for building SBL4TILT and the light version without any relay.

Relay and warning = beta software

This software is in beta and even I have included all the safety I can think off please treat it carefully. The Relay do turn off if no TILT is found, and the heating part of the relay do turn off before each data treatment to secure the heating is off if it goes down. The Bubble Logger do not support temperatures below 2´C or over 60´C and will turn relay of if set outside this range. If the wifi is unstable, and hence if the logger lose wifi it will restart to secure a new connection, hence, there is build in a behavior of restarting. If you experience any melt-down where the logger get stuck in either heating or cooling mode, please, let me know!

For stability reason only use USB charger with 1.0A or more as else you will see issues (the power drain is high).

Building Sound sensor with “condom” and placement in airlock.

(Fitting the Condom – Water Balloon on the LM393 – fitting in Airlock – Alignment)
The LM393 need a moisture protection, and this is done by a small water balloon, and it should be rather tight around the noose, but still loose as below pictures shows. It needs to sit tight in the airlock making an seal to restrict any water from vaporization. To allow the pressure to equalize a small hole needs to be drilled. Align it so the micorphone is place over the direct hole in the airlock, so the sensor get the direct sound “blop”.
As the sensor got some shapes edges there will flence the balloon and secondly as the microphone rather easily can break off, try steady the sensor by some tape as first picture shows!

Buidling the sensor – Notice the small  a tiny drilled hole at top (pressure equalization).

Besides the water amount of 4-4,5ml and the use of a calibrated censor the foremost important factor is the alignment of the probe, and it need to be pressed all the way down in the s-airlock and aligned directly over the tube-hole and hence get the direct release of C02 sound/pressure-burst. If not fitted precisely you loose BPM and hence the rG estimate goes wrong if you choose to make use of the polynomial approach as second opinion of SG estimation.


Make a brew and Put on the “condom” (small water balloon) on the LM393, se below picture! When the BPM is around 15-30 by hear and see count adjust the potentiometer of the sensor till it reflect this by the logger (simply turn the potentiometer down until it stops lighten green and then fine adjust until you get the same BPM as hear and see count).

This give a high resolution sensor there miss a few and also post some double bubbles, but this is fine as long the avenge BPM do reflect you hear and see count. calibration should give you between 30 and up till 100-150 SBM at high krauzen depending on temperature/yeast/brew size (I brew in 14-25L amounts), etc! This setting is prone to high sounds, but light talking, music, drier and washing machine is ok to have nearby!

To be able to compare from brew to brew of BPM and hence make use of polynomial you should try to hold as many variable the same, e.g. same sensor from brew to brew and foremost have same amount of water in airlock (+ same kind of S-airlock). I use 5 ml.


SBL4TILT_ver2.0 (0 downloads)
  1. Install CP210x USB to UART Bridge VCP Drivers, if not already done. If you played with Arduino IDE and NodeMCU before you most likely have done this before.
  2. Ensure NodeMCU is pugged into USB.
  3. Go to “Devices” (e.g. use win10 search and write “devices”).
  4. Under “Ports” in Devices. Notice this USB port number for “CP210x USB to UART”!
  5. Edit the “Window batch file” named “SETUP_USB_COMX” to reflect the port you using (eg. change the port number ONLY: “esptool.exe --chip esp32 --port COM14 --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0xe000 boot_app0.bin 0x1000 bootloader_dio_80m.bin 0x10000 SBL4TILT_ver2.0.bin 0x8000 SBL4TILT_ver2.0.ino.partitions.bin“)
  6. Hit and run the “Window batch file” named “SETUP_USB_COMX”
  7. Now the iBLOPPPER software get installed.

If something goes wrong you can erase everything after editing accordingly as above by running “Erase_USB_COMX” (esptool.exe -p COM4 -b 115200 erase_flash). 

If updating to new build and/or making use of an ESP32 from earlier project, ensure to erase everything as else you will get instability issues.

Secondly, always pull the power from SBL4TILT after installing before setting it up.


The Bubble Logger got a captive portal mode and hence you log on just as it was a Wifi access point. If the login page do not automatically come up, go to:

It will for 120 seconds go into this “Captive Portal” at power on (or after any failures as lost connection or lost power) where all setting can be done (E.g hence, set Brew Name, SSID+Password, Brew Size, start Temperature, (License, currently not needed), TILT offset temperature/gravity and setting URL of either Brewfather URL/Ubidots Token/Brewersfriend). It light blue when in “Captive Portal” mode (and also blink blue when sending/treating data including detection of a bubble).


  • Connect till the “Bubble Logger CONNECT” SoftAP though either you mobile phone or laptop by Wifi. After connect till access point the Bubble-logger url for the configuration page is:
  • Set the various parameters accordingly (Currently, you need to set SSID+Password every time you enter “Captive Portal” mode, so you need to set SSID+password even you just changed one parameter. A bug we are working on).
  • If you later on wish to change for instance temperature, pull power for 2 sec, and go into portal mode agian and change the temperature (remember to set SSID+password again too).
Screenshot form the interface of the Captive Portal and webserver (right) of SBL4TILT.

Secondly, the Bubble-Logger also got a web server you can follow all data on during brewing, to access this is shown on the OLED screen during start up or you on you need to find the IP either in you routing table or some Network sniffer program. The Web server is on:

You will ofcouse need a Ubidots STEM account and hence the TOKEN (see under API credentials), and for Brewfather you need to enable “Custom Stream” and inset this associated URL into Bubble-logger. I am not good a Brewersfriend, but this is similarly done as Brewfather.

What data is send?

The following data is send till Brewfather:

  • “Blop pr. min” is send as: BPM
  • “Sum BLOPS(pt)/L” is send as: comment
  • “Gravity” is send as: Gravity (G)
  • “Temperature” is send as: Temperature (C)
  • “TILT color” is send as a comment and can be seen under devices.

(Please notice I do not and do not intend to support other than metric numbers. 3rd worlds countries has to add up and follow the scientific rules.)

For Ubidots the above is also send, but also the power-state of relay is send, where the following coding is used.

  • 0 = Relay awaiting.
  • 1 = Relay cooling.
  • 2 = Relay heating.
  • 3 = Relay turned of as something wrong ~ No TILT?
  • 4 = Relay turned of as SetTemp is outside supported range of 2-60´C.

Polynomial option to finetune TILT

SBL4TILT (version2.0) got the option to finetune the SG of TILT by either the inbould offset of SG points, but also the option to make use of a polynomial.

If you during sugar dilutions calibration or brewing see a difference in reported SG vs. measured gravity by hydrometer you can make your own polynomial to try to heighten the precision. The below picture is from Ispindel calibration tool, and here the Hydrometer reading is put in as reading where off the reported SG from TILT is put in as “TILT“.

Take the 2rd or even better the 3rd degree polynomial and shorten it, and then use this in SBL4TILT to give better precession.

The “iBLOPPER/t” support 1st or 2nd and 3rd degree polynomial as the example below:

(875.63 + (9.33*tilt) - (0.212*tilt*tilt) + (0.00175*tilt*tilt*tilt))-(0.1*(temp-20))

The Polynomial can max. hold 200 ciphers, if longer shorten. As the temperature can impact on the angle (e.g when cold crashing), a temperature function of, "SG – (TemperatureCorrectionFactor X (Temperature – 20 °C))" is build in as marked by bold in above. I use a TemperatureCorrectionFactor of 0.1, hence, going from 20C till 10C would impacts 1 SG if not accounted for.