Our software is both easy-to-use and easy to modify. User-friendliness was a high priority - much more so than similar ad hoc scientific tools. Our graphical interface requires no special skills or technical knowledge to use. By using Oracle standard Java software development idioms and thorough JavaDoc code documentation, we’ve created a codebase that is easily adjustable by anyone with a modicum of Java experience. In addition, these choices allow platform flexibility. The device can be controlled directly using a keyboard and mouse or touch screen, or monitored remotely by PC or Android phone. We have tested our software rigorously at each stage of development, with considerable success. Our tests of color detection, pump actuation, and logical control have been fruitful both individually and as part of the complete software.
Requirements
The first step in our software development process was to establish, broadly, what the software needed to do, and how we would prioritize the features. The Chromastat has a number of sensors, and needs to have controlling logic that takes input from those sensors and makes adjustments to hardware. Communication with multiple types of sensor hardware can be complex and time-consuming. This meant that we wanted to use a platform where there were existing software libraries available for basic input-output operations on the sensors. In addition, we wanted the software to be easy to use. Finally, we wanted the resulting system to be inexpensive and as fully open-source as possible.
Software Requirements List
User direct control of 3 pumps. for each pump:- Dispense (mL)
- Abort dispensing
- Refill
- Progress indicator for dispense progress
- Calibration menu
- Each pump
- Rgb sensor
- User specifies string for what's in the pumps
- Report
- Current temperature
- Current RGB reading (numerical and visual)
- Current turbidity (opacity of fluid)
- Set target for all of the above (temp, rgb, turbidity)
- Lights
- Stirrer
- Bubbler
- Laser
- Store data over time for all sensor readings, store in a table and file
- User entered info persists over sessions (target temp, color, etc.)
- Need way to reset data
Platform
The Raspberry Pi was a natural choice for a central controlling system. It is a credit-card sized PC that runs Raspbian, a special variant of the Linux operating system. It provides a graphical desktop environment that we used to advantage of the considerable community support available to Linux systems. Many bioengineering systems opt for hardware such as the popular Arduino board, but these can be complicated to use and maintain. The Raspberry Pi software we created can be used by anyone without any special training.
Language and Framework
Even after choosing the Raspberry Pi as our hardware, we needed to choose a programming language and software framework for development. We first considered Python. But while Python is widely used in the biological sciences, it is very poorly suited to creating user interfaces in general, and even less well suited to creating graphical interfaces.
Instead, we chose to use Java and the Java Swing framework -- a well-established set of tools that are well-suited to creating graphical user interfaces. The Java Swing UI gave us access to familiar components like windows, dialog boxes, buttons, and slider controls to be used in our software. We opted to use NetBeans IDE as our development environment, because it has a high quality user interface designer that lets us see how the program will look when it runs.
We chose the popular GitHub service as our code management platform, allowing our team members to contribute to our software project and stay up-to-date with everyone else’s contributions. This combination of tools allowed us to develop our software in a highly organized fashion.
Development practices
In our implementation, we chose to follow the standard Java programming practices. This means that our code was thoroughly documented as it was written using the JavaDoc standard. By entering information in the source code as we created the software, we created a highly detailed technical manual for exactly how it works. Following this practice allowed us to generate complete, up-to-date documentation pages as project matured.
Conclusions
On a basic interface level, our software is very easy to use, and intuitive. We have found that most scientific software does not place much emphasis on user experience and usability. It is often almost arcane in its complexity and difficult to use. This is usually done because it saves time, but our philosophy is that it the tools that work the the most easily for the most people are the ones that will serve scientists better and longer, saving time (not to mention frustration!) in the long run.
On the more technical side, our GitHub project allows us to share both our code and documentation as a complete open-source package that anyone can download, use, and modify for their own needs. Anyone with Java skills can use our code, modify or extend it, or use it to build their own version of the Chromastat. It is highly modular and can be used in part very easily - for example, anyone using the same color, light, or temperature sensors we used can download the software control components for use in an entirely different project.
Our software documentation is available at https://uwigem.github.io/uwigem2017/docs/.