Calibrating multiple pumps quicker?

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.

  1. Let’s say we want to calibrate media pumps first. Attach the 12x media pumps power to the 12x Pioreactor PWM output.

  2. 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
    
  3. 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).

  4. 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.

  5. 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.

  6. 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.

  7. We’ll copy this template to each worker:

    pios cp pump_calibration.json -y
    
  8. Next, we need to SSH into each worker. We can SSH from the leader, too:

    ssh pioreactor@worker1.local
    

    for example.

  9. 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
    
  10. 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.

1 Like

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 :slight_smile:

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.

1 Like

Hello Cameron! :smiley:

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! :smiley:

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:

  1. 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 calibration name on that list. Suppose it’s alt-media-2024-09-18.
  2. Run pio run pump_calibration display --name alt-media-2024-09-18 - this will display a section data. Copy the {....} text to your clipboard.
  3. On the same Pioreactor, we’ll create a small json file:
    nano pump_cal.json
    
  4. Paste that into the text-editor, ctrl-x to save and exit.
  5. Finally, run pio run pump_calibration -f ~/pump_cal.json - this will prompt you to create a new calibration (choose waste, and some good name), and it will use the data from the pump_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 :stuck_out_tongue_closed_eyes:

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!