Hey, I want to set up and calibrate a large number of pumps (12x Pio, so 24 pumps in total). Is there a way to speed up/streamline the calibration for multiple pumps?
Hi @Stkral,
There is a way, but what you gain in time, you lose some accuracy. This method isn’t supported out-of-the-box, hence all the little steps that use in-the-box tools.
I’ll present the idea, and then the steps required.
The pump calibration varies the duration the pump is run for, asks for the volume / weight of water expelled, and then fits a line to the data points. That line is actually fixed at (0, 0), since no duration = no volume, and is linear from there. In theory then, you really just need one data point to form a line. We can control the pumps from a single computer (the leader), perform a pump action on each Pioreactor, and record the amount expelled for each pump. Then we can upload this data point to the respective Pioreactor.
-
Let’s say we want to calibrate media pumps first. Attach the 12x media pumps power to the 12x Pioreactor PWM output.
-
Next we will prime all the pumps. Put the “source” and “sink” end of each pump into a container of water, and from the leader, run:
pios run add_media --continuously
to stop, use:
pios kill add_media --name add_media -y
-
Record the weight of 12 vials. This is required to find the delta weight. For each pump, put the pumps “sink” end into a vial. (You may want to add some water to the vial to help balance it).
-
From the leader Pioreactor, run:
pios run add_media --duration 1.5
Again, this will run each pump for 1.5 seconds. Now you need to weigh each vial again to find the delta weight.
-
At this point, you have a data point for each pump. You can continue producing data points, or you can stop and move on to uploading it to Pioreactors pump_calibration routine. See next.
-
On the leader, create a new file we’ll use as a template:
nano pump_calibration.json
and copy-and-paste the following into it:
{ "durations": [0, 0, 1.5], "volumes": [0, 0, vv], "hz": 200.0, "dc": 100.0 }
hit ctrl-x to save and exit.
-
We’ll copy this template to each worker:
pios cp pump_calibration.json -y
-
Next, we need to SSH into each worker. We can SSH from the leader, too:
ssh pioreactor@worker1.local
for example.
-
Once on a worker, we’ll replace the
vv
in the template with the correct value. Suppose the delta weight was 0.46g, so I put in:sed -i 's/vv/0.46/' pump_calibration.json
-
Finally, still on the worker, you can run the following to complete the calibration.
pio run pump_calibration -f ~/pump_calibration.json
Any questions or confusing details about the steps? Happy to help more!
Thanks a lot! One question, if I want to produce multiple datapoints for each pump in this way. What is the template in the pump_calibration.json file so that I can fill in multiple values and durations. I figure that way the calibration will be more robust as compared to one data point each.
Thanks again!
My guess would be:
“durations”: [0, 0, du1, du2, du3],
“volumes”: [0, 0, vv1, vv2, vv3],
Something like that yes!
Note that du1, du2, du3 will likely be the same for all pioreactors, so you can hardcode those.
Hey Cameron, as I understand this will be the calibration only for the add_media pumps (or at least it doesn’t specify which pump it is). I did the first steps in the same way for the waste pumps. How do I also input the calibration for the wastepumps into the pioreactors. Hope you understand the question, otherwise I can elaborate
I figured it out already! I realized that in the calibration ‘menu’ you can choose which pump to calibrate. So I can just make a second nano file for the waste pump and run the last command with that file to use the values for the waste pump.
Hello Cameron!
I wanted to ask a question regarding this higher throughput pumps calibration since I am about to run it myself as well.
My next experiment with our Pioreactors is going to be a turbidostat, so i will need to calibrate for each reactor one normal media pump, one waste pump, and one alternative media pump. However, I will not always run turbidostat experiments, so i might need to use one of the pumps I calibrated as alt media pump as waste media pump, for example. Will I need to re calibrate it again but now as waste pump instead?
Another question, when I calibrate one pump as normal media pump, can I use that calibration file and upload it for the other reactors? or this should not work and I need to calibrate all pumps 1 by 1 anyway?
Thank you so much for the help!
Best,
Aina
Hi @aiseor,
Good questions here.
Will I need to re calibrate it again but now as waste pump instead
Yes, from the software’s POV, you would. However, this seems redundant since you already have a calibration for that pump on your Pioreactor. You can skip most of the wet work by copying the calibration data:
- On the pioreactor with the alt-media pump, you can run
pio run pump_calibration list
to see a list of your calibrations. Find the alt-media pump’s calibrationname
on that list. Suppose it’salt-media-2024-09-18
. - Run
pio run pump_calibration display --name alt-media-2024-09-18
- this will display a sectiondata
. Copy the{....}
text to your clipboard. - On the same Pioreactor, we’ll create a small json file:
nano pump_cal.json
- Paste that into the text-editor, ctrl-x to save and exit.
- Finally, run
pio run pump_calibration -f ~/pump_cal.json
- this will prompt you to create a new calibration (choosewaste
, and some good name), and it will use the data from thepump_cal.json
file instead of running through the pump/measuring exercises.
Does that hep?
This is a common question: can I share pump calibration data between Pioreactors? And the answer is yes, technically, and no, technically
You can certainly use the approach above and copy a json file to each Pioreactor and use it for calibrations, but there will be inaccuracies due to pump differences. Suffice to say, I recommend 1 by 1 for now. However, we are working on making it easier to calibrate many pumps at once!