-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Nicholas Kinar
committed
Apr 16, 2021
0 parents
commit 79570e4
Showing
366 changed files
with
1,280,823 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
# Development of a Sensor and Measurement Platform for Water Quality Observations: Design, Sensor Integration, 3D Printing, and Open-Source Hardware | ||
## by Nicholas J. Kinar, Markus Brinkmann | ||
|
||
*Environmental Monitoring and Assessment* | ||
|
||
## What is it? | ||
|
||
This is the complete Python source code required to reproduce graphs in the paper. The source code also produces data figures and comparisons. | ||
|
||
Electronic and mechanical design files are provided. These files are licensed | ||
using permissive open source licenses as indicated below. | ||
|
||
## Paper Abstract | ||
A measurement and development platform for collecting water quality data (the WaterWatcher) was developed. The platform includes sensors to measure turbidity, total dissolved solids (TDS), and water temperature as variables that are often collected to assess water quality. The design is extensible for research and monitoring purposes, and all design files are provided under open-source permissive licenses for further development. System design and operation are discussed for illustrative purposes. A block diagram indicates elements of mechanical, electrical, and software design for this system. The mechanical assembly used to house circuit boards and sensors is designed using 3D printing for rapid prototyping. The electronic circuit board acts as a carrier for an Arduino 32-bit microcontroller board and an associated cellular module along with a GPS for geolocation of water quality measurements. The cellular module permits data transfer for Internet of Things (IoT) functionality. System operation is set up using a command line interface (CLI) and C++ code that allows for calibration coefficients and human-readable transfer functions to be defined so that sensor voltages are related to physical quantities. Data are cached on a secure digital (SD) card for backup. The circuit was calibrated, and system operation assessed by deployment on an urban reservoir. Biogeochemical cycles were identified in the collected data using spectrogram and semivariogram analyses to validate system operation. As a system with hardware and software released under an open source license, the WaterWatcher platform reduces the time and effort required to build and deploy low-cost water quality measurement sensors and provides an example of the basic hardware design that can be used for measurements of water quality. | ||
|
||
## Code Dependencies | ||
|
||
For paper code to re-create figures. | ||
|
||
* Python 3 | ||
* pipenv | ||
* sh utility for Windows to run shell scripts | ||
|
||
Install the `pipenv` utility using `pip`. | ||
|
||
To download STEP files for the mechanical design (also required): | ||
|
||
* Windows OS and Autodesk Inventor installed and activated | ||
* Windows OS that supports VBScript (most versions of Windows do) | ||
* Chrome desktop browser | ||
* Selenium | ||
* Selenium browser driver installed on the path | ||
* Cmder - <https://cmder.net/> | ||
|
||
To program the microcontroller and to compile the device code, | ||
an Arduino code IDE is required along with the required compilers: | ||
|
||
* Platform.io - <https://platformio.org/> | ||
|
||
## Use | ||
|
||
The shell script `run.sh` in the `paper-code` directory will automatically | ||
create graphs in the paper. | ||
|
||
The shell script `run.sh` in the `mechanical/download-files` directory | ||
will download STEP files and convert the files for use in the mechanical assembly. | ||
As listed above, Windows and a licensed installation of Autodesk Inventor is required for this process. The download can take time; please be patient. | ||
The Chrome browser will be used. The purpose of the | ||
script is to help the user download the files and some manual downloads might | ||
still be necessary. | ||
|
||
The part files are downloaded from McMaster-Carr (<https://www.mcmaster.com/>) | ||
and these downloaded files are for your own use as per the distribution | ||
license provided by McMaster-Carr. | ||
Create an account and log in to the McMaster-Carr website before downloading parts. | ||
|
||
The conversion between STEP and IPT is performed by VBScript and the Inventor API. | ||
This process can only be completed using a Windows machine. If you do not have | ||
access to a Windows machine, please contact the authors. | ||
|
||
When opening the assembly for the first time in Inventor (`assembly-with-lid.iam`) | ||
some benign errors or dialog boxes might appear indicating that files | ||
are not the same as originally referenced. When asked "Do you really want to use the resolved document?" click "Yes." When asked "Would you like to update the assembly now?" click "Yes" and then save the assembly. | ||
|
||
Click on "Accept" if a dialog box indicates that there are errors. When saving the assembly, click on the "Yes to All" button and then "OK." | ||
|
||
If some files are still missing, re-run the shell script `run.sh` to ensure | ||
that everything was downloaded. The `files-download.txt` file with the | ||
download links might have to be modified as required in the `mechanical/download-files` directory. This file is only provided to be potentially useful. | ||
|
||
## FILES | ||
|
||
Bolded entries in the table indicate parent directories. Non-bolded entries indicate subdirectories. | ||
|
||
| Directory | Description | | ||
|----------|:-------------:| | ||
|**data**| Data collected in the context of this project | | ||
|calibration data| Data collected from calibration | | ||
|deployment| Data collected during deployment | | ||
|**electrical-schematic-appendix-b**| Appendix B of the paper | | ||
|**electronic**| Electronic design files | | ||
|bom| Bill-of-Materials (BOM) for PCBs | | ||
|gps-power-pcb| | Electronic design files for GPS power PCB | | ||
|gps-power-pcb-gerber| | Gerber files for GPS power PCB | | ||
|main-pcb| Electronic design files for the main PCB | | ||
|main-pcb-gerber| Gerber files for the main PCB | | ||
|**mechanical**| Mechanical design files | | ||
|bom| Bill-of-Materials for mechanical design| | ||
|download-files| Python script for downloading and converting STEP files| | ||
|inventor| Inventor files for mechanical design| | ||
|**mechanical-diagram-appendix-a**| Appendix A of the paper | | ||
|**paper-code**| Code used to create paper outputs| | ||
|**software**| Code to implement the system | | ||
|v1| Version 1 of the microcontroller software | | ||
|v2| Version 2 of the microcontroller software | | ||
|ww-server| Example code to run on the server that receives data from the WaterWatcher | | ||
|
||
## GERBER FILES README AND MAPPING | ||
|
||
1. The main PCB is a four-layer PCB with nominal stackup. | ||
2. Round up drill size to the next available drill if required. | ||
3. Soldermask on both sides of the PCB. | ||
4. Silkscreen on both sides of the PCB. | ||
5. DFM Now! software can be used for Gerber preview (https://www.numericalinnovations.com/) | ||
6. gerbv also works well as Gerber preview software (http://gerbv.sourceforge.net/) | ||
|
||
| Layer Extension | Layer Description | | ||
|----------|:-------------:| | ||
|.GTO| Top Overlay | | ||
|.GTS| Top Solder | | ||
|.GTL| Top Layer | | ||
|.G1| Layer 2 | | ||
|.G2| Layer 3 | | ||
|.GBL| Bottom Layer | | ||
|.GBS| Bottom Solder | | ||
|.GM1| Mechanical 1 | | ||
|.GPT| Top Pad Master | | ||
|.GPB| Bottom Pad Master| | ||
|.DRR| NC Drill File Report| | ||
|.TXT| NC Drill File| | ||
|
||
## Data DOI | ||
|
||
The data and code are available in this repo. | ||
The data can also be downloaded from Figshare and the DOI is given in the paper. | ||
|
||
## Built With | ||
|
||
* Python 3 | ||
* Altium Designer | ||
* Autodesk Inventor | ||
|
||
Python libraries: | ||
* numpy | ||
* scipy | ||
* matplotlib | ||
* and others... | ||
|
||
## Built @ | ||
|
||
* Smart Water Systems Lab (University of Saskatchewan) | ||
|
||
## License | ||
|
||
The project code is licensed under the GPLv3 License - see the [LICENSE.md](LICENSE.md) file for details. | ||
The GPLv3 License ensures that the code can be freely shared | ||
and used. | ||
|
||
The electronic and mechanical design files as created | ||
by Nicholas J. Kinar in the context of this project are licensed under the CERN | ||
Open Hardware License Version 2 - Strongly Reciprocal. | ||
|
||
All other parts or technologies used for this project are as licensed by the | ||
original license holder. |
Oops, something went wrong.