This is the state of the "wireless pressure gauge/universal industrial monitor" project as of September 22, 2019.
The main software update is the realization of multi-point reading profiles.
The monitor is nothing but a 12 bit ADC which transforms a voltage into a 12-bit integer value and sends it to the App via Bluetooth at user-defined intervals. The voltage signal itself can come from any voltage source, the only physical requirement is that it is within the allowed limits.
My initial idea was to use the transmitter with industrial sensors alone, and I thought that they were supposed to be devices with linear characteristics, and therefore the only thing that my App would need to do to transform an integer value from the ADC into meaningful physical units (e.g. bar, psi, kg, l/min, volts, amperes, Newtons, etc...) would be to linearly interpolate (and extrapolate) the result from two data-points which would construct the line of best fit, like so:
After performing real-life tests, however, I came to a realization that a lot of sensors, especially more economically priced ones, can output readings that are far from linear, especially at the ends of scale, and therefore ideally I would need more data points to interpolate the final result with greater precision, like so:
Also - since the voltage signal can come from any voltage source, and not necessarily an industrial sensor (like, for example, a non-linear rheostat that works as an angle or position sensor) - the fact that the App can use a number of data points to create an array of segments (currently limited to 90 data points) means that with enough points random line shapes can be approximated, and therefore all sorts of additional applications can be possible.
So, I had to refactor both the app and the firmware for that purpose, and tests that I've done so far show that the multi-point profile system is fully operational.
Other important updates include:
Now the transmitter can be protected with an optional PIN. A user would be able to access a protected transmitter, read the data and the profile, but won't be able to introduce changes without the PIN code. If the PIN is forgotten - it can be reset to a default value by pushing a hardware button on the transmitter while powering it on.
Remote Control Mode
Now the transmitter can also be used as remote control of sorts. The user can power the included voltage booster on and off and regulate the output voltage remotely, which can be used to power a relay, for example.
Power Saving Mode
Visual feedback LEDs are quite powerful, so now there's an option of a power-saving mode which will disable permanent transmission indication, and the LED will blink at short intervals instead of being permanently lit.
Characteristic Count Reduction
I re-wrote the memory management in the firmware, which allowed me to ditch several characteristics form the BLE profile, making it simpler.
Final Board Design
One of the first boards that I built included an extensive solid-state relay multiplexer to mix signals between channels, voltage dividers and what not... I've concluded that this kind of "sophistication" is not really needed. I am re-designing the board and the body so that it contains only the ADC, protection circuits, and a fast connection interface (magnetic snap), and the rest of the signal-conditioning will be done in the "fast attachments". It makes things simpler, cheaper and more robust.
Reverse Polarity Protection
I also realized that since I am using a removable 18650 battery, which is symmetrical, I will probably be the first user to insert the battery "the other way around" and burn something - so the new board definitely gets reverse polarity protection (which is a little tricky for low voltage battery-powered electronics with built-in charging, but I already have a circuit "lined up").
I did connect and test the DS18B20 temperature sensor, and it worked great, but for now this part of the build is "on hold" (this function will be included in a future firmware upgrade).
So, the things are going, and although it feels like I am "eating an elephant", I know for a fact that the amount of bites is finite, so I'll just keep on biting...