We’ve been lucky enough to receive a number of contracts over the past couple of years to develop “Internet of Things (IoT)” mobile applications that communicate with a variety physical devices such as pressure-temperature gauges, refrigerant scales, and blower-testing devices.
We’ve just completed a contract with Uniweld Products, a U.S. manufacturing company, that manufacturers welding, HVAC/R, and many other types of meters and gauges. Over the past 3 years, we have been working with Precision Diagnostic Instruments, who is working with Uniweld Products, to develop an Android-based mobile app that does two things:
- Performs HVAC refrigerant charge calculations (subcool and superheat) for over 75 different refrigerants
- Communicates with an HVAC refrigerant charge meter device using BLE (Bluetooth Low Energy).
This device measures subcool and superheat temperatures and pressures from an HVAC unit and displays those values within the app and performs other calculations.
From a software development perspective, this was quite a complex project since it involved three main modules:
- The software user interface
- The BLE (bluetooth) communication interface
- The refrigerant charge calculation engine
Software User Interface
The software user interface was specified by the client. The provided samples of what they were looking for, and we were able to replicate exactly what they requested. There are a number of different screens in the app including:
- The “home” screen is accessed after connecting to the gauge. This screen displays the subcool or superheat information in an easy-to-read format.
This Settings form allows the user customize the app:
The user can select from a number of different refrigerants:
BLE (Bluetooth) Communication Interface
The SmarTech App uses a BroadcastReceiver and ServiceConnection to form bluetooth communication between the Meter and Android Device. The ServiceConnection handles the devices connection to the meter. BroadcastReceiver listens for changes in the bluetooth state and acts accordingly based on the state. The information received from the meter is sent over as a series of bytes that the Android Device is able to read.
The refrigerant charge calculation engine performs superheat and subcool refrigerant charge calculations for 75 different refrigerants. The user inputs the indoor wet-bulb and outdoor dry-bulb temperatures to get the target superheat temperature. Then, the user specifies the suction line temperature and pressure to get the actual superheat temperature. The difference tells the user whether they need to charge or not. Also, if the user selected an azeotropic refrigerant (like R-403A (Bubble)), then it will automatically use the “Dew” version of R-403A for superheat calculations. To perform subcool refrigerant charge calculations for 100+ different refrigerants, the user inputs the indoor wet-bulb and outdoor dry-bulb temperatures to get the target subcool temperature. Then, the user specifies the liquid line temperature and pressure to get the actual subcool temperature. The difference tells the user whether to charge or not. Also, if the user selected an azeotropic refrigerant (like R-403A (Dew)), then it will automatically use the “Bubble” version of R-403A for superheat calculations.
Like many software development projects, this project took far longer to complete than originally anticipated. This was due to a number of reasons including:
- Complexities of Bluetooth communication protocols: The development time of Bluetooth communication functionality with an external measuring device should never be underestimated. The complexity of the protocols along with the idiocyncracies of hardware devices can quadruple the amount of time it takes to develop such an app. Next time, we will budget more time (and money) toward this effort.
- Accommodating all of the different types of Android devices: There are many different types of smartphones and tablets that run the Android operating system. Many of these devices have different screen sizes that need to be accommodated for (including the ability to display in both portrait and landscape modes). When negotiating with a client, it is best to set expectations that the app will only be optimized for 1 or 2 different screen sizes.