{"id":13948626,"url":"https://github.com/Open-Acidification/AlkalinityTitrator","last_synced_at":"2025-07-20T10:32:20.715Z","repository":{"id":40954995,"uuid":"235752011","full_name":"Open-Acidification/AlkalinityTitrator","owner":"Open-Acidification","description":"Apparatus to determine total alkalinity in sea water using an open-cell titration","archived":false,"fork":false,"pushed_at":"2023-06-08T23:49:21.000Z","size":2799,"stargazers_count":7,"open_issues_count":20,"forks_count":9,"subscribers_count":4,"default_branch":"main","last_synced_at":"2024-11-25T23:34:05.561Z","etag":null,"topics":["alkalinity-titrator","ocean-acidification","raspberry-pi"],"latest_commit_sha":null,"homepage":"https://open-acidification.github.io/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Open-Acidification.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2020-01-23T08:20:38.000Z","updated_at":"2024-03-26T10:12:50.000Z","dependencies_parsed_at":"2023-09-21T19:29:46.422Z","dependency_job_id":null,"html_url":"https://github.com/Open-Acidification/AlkalinityTitrator","commit_stats":{"total_commits":162,"total_committers":9,"mean_commits":18.0,"dds":0.3950617283950617,"last_synced_commit":"cd38c9d1d3fb12fd12669ec746b7f075616f2a01"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Open-Acidification%2FAlkalinityTitrator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Open-Acidification","download_url":"https://codeload.github.com/Open-Acidification/AlkalinityTitrator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226750395,"owners_count":17676015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alkalinity-titrator","ocean-acidification","raspberry-pi"],"created_at":"2024-08-08T05:01:26.440Z","updated_at":"2024-11-27T16:30:35.134Z","avatar_url":"https://github.com/Open-Acidification.png","language":"Python","funding_links":[],"categories":["Hydrosphere"],"sub_categories":["Ocean Carbon and Temperature"],"readme":"# Alkalinity Titrator Project\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\n## Project motivations\n\nAs CO2 levels increase, the ocean absorbs more CO2 and becomes more acidic. There currently exists a large deficit of data on how this affects wildlife. Alkalinity Titrators are needed for ocean acidification research​. Currently, available models are  expensive ($10,000-$25,000)​. Models on the lower end of the price range are not automated and are therefore time intensive.\n\nThis project aims to make ocean acidification research more widely available by lowering the cost of alkalinity titrators.\n\nThe problems that the alkalinity-titrator seek to fix are as follows:\n\n- Lower the cost of ocean science equipment by using inexpensive, widely-available parts\n- To automate the titration process, saving time and effort when determining total alkalinity\n\nThe titration process used in this project is based on SOP 3b from\n\n```Christian, James Robert, Andrew G. Dickson, and Christopher L. Sabine. Guide to Best Practices for Ocean CO2 Measurements. Sidney, B.C.: North Pacific Marine Science Organization, 2007.```\n\n## Current Development Note\n\nThe most recent development in this project is the implementation of a UI State Machine framework (see the titration/utils/UIState folder for UI states implemented). While the UI State Machine framework has been fully implemented, the actual titration processes and routines have not been integrated with the UI State Machine (see GitHub Issues for further specifications).\n\n## Setup and Installation\n\n### Setting up the Raspberry Pi\n\nRefer to \u003chttps://desertbot.io/blog/headless-raspberry-pi-3-bplus-ssh-wifi-setup\u003e for instructions on setting up the raspberry pi (note: headless setup is not required if a keyboard and monitor are available). Raspbian lite has everything needed, but the desktop version can be downloaded if working with a GUI is preferable.\n\n### Installing software\n\nRun standard updates on the pi:\n\n``` sh\nsudo apt-get update \nsudo apt-get upgrade\n```\n\nThis project utilizes SPI and I2C protocols, both of which often come disabled on the pi. To enable them, run:\n\n``` sh\nsudo raspi-config\n```\n\nand navigate to \"Interfacing Options\"; enable both SPI and I2C.\n\nInstall git:\n\n``` sh\nsudo apt-get install git\n```\n\nClone alkalinity titrator repository to the pi\n\n``` sh\ngit clone https://github.com/Open-Acidification/alkalinity-titrator.git\n```\n\nRun installation script\n\n``` sh\nsudo ./install.sh\n```\n## User Instructions\n\n### Run on Device\n\nTo run (with the UI State Machine integrated)\n\n``` sh\n./run.sh\n```\n\n### Run in Local Environment\n\nTo run in a local environment with mocked devices (with the UI State Machine integrated)\n\n``` sh\n./run_mocked.sh\n```\n\n## Testing\n\nTo perform Pytest tests for the devices and UI states.\n\n``` sh\n./test.sh\n```\n\n## Pins\n\n### Temperature probe ([MAX31865 breakout board](https://learn.adafruit.com/adafruit-max31865-rtd-pt100-amplifier/python-circuitpython))\n\n- PIN 1 (3.3v) to sensor VIN\n- PIN 9 to sensor GND\n- PIN 19/BCM 10 to sensor SDI\n- PIN 21/BCM 21 to sensor SDO\n- PIN 23/BCM 23 to sensor CLK\n- PIN 29/BCM 5 to sensor CS (or use any other free GPIO pin)\n\n### pH probe ([ADS1115 analog converter](https://learn.adafruit.com/adafruit-4-channel-adc-breakouts/python-circuitpython))\n\n- PIN 17 (3.3v) to ADS1115 VDD - Remember the maximum input voltage to any ADC channel cannot exceed this VDD 3V value!\n- PIN 6 to ADS1115 GND\n- PIN 5/BCM 3 SCL to ADS1115 SCL\n- PIN 3/BCM 2 to ADS1115 SDA\n\n## Libraries\n\n1. Circuit Python - \u003chttps://github.com/adafruit/Adafruit_CircuitPython_MAX31865\u003e\n\u003cbr\u003e\nUsed for communicating with the PT1000\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.linkedin.com/in/kadensukachevin/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/26241731?v=4?s=100\" width=\"100px;\" alt=\"Kaden Sukachevin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKaden Sukachevin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kadensu\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kadensu\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/issues?q=author%3Akadensu\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/prestoncarman\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/3517157?v=4?s=100\" width=\"100px;\" alt=\"Preston Carman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePreston Carman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=prestoncarman\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/issues?q=author%3Aprestoncarman\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/KonradMcClure\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/66455502?v=4?s=100\" width=\"100px;\" alt=\"Konrad McClure\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKonrad McClure\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=KonradMcClure\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/Noah-Griffith\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/78978886?v=4?s=100\" width=\"100px;\" alt=\"Noah-Griffith\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNoah-Griffith\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=Noah-Griffith\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/d-cryptic\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/52271502?v=4?s=100\" width=\"100px;\" alt=\"Barun Debnath\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eBarun Debnath\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=d-cryptic\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://kieransukachevin.github.io/first%20portfolio/portfolio.html\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/54186484?v=4?s=100\" width=\"100px;\" alt=\"Kieran Sukachevin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKieran Sukachevin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kieransukachevin\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=kieransukachevin\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/jsoref\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2119212?v=4?s=100\" width=\"100px;\" alt=\"Josh Soref\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJosh Soref\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=jsoref\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/TaylorSmith28\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/83837157?v=4?s=100\" width=\"100px;\" alt=\"TaylorSmith28\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTaylorSmith28\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=TaylorSmith28\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/Open-Acidification/AlkalinityTitrator/commits?author=TaylorSmith28\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e \u003c!-- gitleaks:allow --\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpen-Acidification%2FAlkalinityTitrator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOpen-Acidification%2FAlkalinityTitrator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpen-Acidification%2FAlkalinityTitrator/lists"}