Bioreactor pump controlled by 0-10V signal. It's is possible?

Hi Arduiners.

I'm planning to build a feeding pump for bioreactors, as the original one isn't very cheap.

The kind of pump that i have is driven by an 24VAC motor. I have power suply (220 to 24VAC) and several types of relays (SSR's and normal ones) for open/close the power circuit.

The biorreactor controller (DCU) has an analog output of 0-10V for adjusting the external pump speed. These type of pumps works by open/close the relay several times (Like a microwave oven relay) depending on the setpoint (0%, the pump is off, 50% pump its half the time off and half on, 100% is on, motor speed its not regulable).

So, i need a way to correlate the 0-10V signal with a 0-100% output for open the relay the time I need. I was thinking of using Arduino in order to PWM the 0-10V signal and use de pulse width for spacing the openings of the relay, but i thinks its not possible as the frequency is to high and the relay cannot stand that (I'll need a veeeeery slow PWM with less than 0,5Hz or something like that)

In addition, i'm newbie to arduino and to the coding thing in general, so, i'm missing somenthing or its that really impossible??I thought it would be easier.....

Thanks in advance !!!!!

P.S. I Know that i would need to convert the input signal from 0-10V to 0-5V, but i think that a divider wolud do the trick.

You've described a situation that is the classic x-y problem

The controller outputs 0-10vdc. Did this variable voltage somehow control a 24vac motor or is this motor something you just decided to use? Are you keeping the controller in the system?

What is the role for an Arduino?

Hi, thanks for the reply

Basically, it's due that i have all the 24VAC stuff. The 24VAC motor comes with the adequate pump head and it's meant to be used with this bioreactors, because the motor need to be capable to overcome the resistance of the tubing even at low setpoints (No variable speed, but variable time).

In the commercial pump, the 0-10V signal control the pump speed but i dont know how (The pump has very complicated electronics to do otrher things that i dont need)

The role of the arduino would be to trasnform 0-10V input into PMW output in order to open the relay several seconds depending on the voltage of the input. I dont know if tis possible. I wolud like to include the arduino inside the pump case.

Best Regards

Still very confusing!

Are you keeping the original controller and relay? Or are you replacing the relay? Or are you replacing the 0-10 volt signal?

Why not control the relay ( use a solid state relay) with the Arduino directly? Just set the on-time period with a pot.

Paul

Hi Paul

I'm sorry i'm not explaining myself very well.

I have a DCU (Digital Control Unit) that control a lot of things in the biorreactor (pH, ºC, pO2, Stirrer, etc...) and has an analog 0-10V in order to control an external pump. This signal ranges from 0 to 10V depending on the setpoint stablish in the DCU, but its dynamic! The controller, using complex mathematics, adjust the setpoint depending on the several sensor readings.

What i need it's a way to translate the 0-10V signal to 0-100% pump setpoint in order to build an external pump myself. I have the signals, i have relays and a proper pump head driven by a 24VAC motor (Its the original pump head)

I know that the DCU operates in this way (From a 0-10V to 0-100% Open/close relay, i heard the clics), but i dont know how to do the same, and it's because of that i think an arduino could do the conversion. The 0-10V signal would acts as a potentiometer o somenthing like that.

Thanks.

Got it, I think. You just want to add a second pump to the existing system. Probably said that in the beginning, but I missed it.

First, base your program on what is in the first entry in the project guidance part of the forum: Demonstration code for several things at the same time.

Please identify your relay. Your system would be SO much easier if you used a solid state relay to control the pump.

Your first attempt at programming should be to be able to turn the relay on and off for a specific time period, perhaps once per second. Don't worry about the 0-10 volt signal right now.

Paul

Thanks Paul

I will start mounting the SSR and the pump and try to open the circuit as you say with the Arduino. I will need a couple of days probably until I have time to have time to setup the stuff , learn to code and all the other things, but I'll update the thread asap, i"'ll keep you posted.

Thanks for the advice.

Paul_KD7HB:
Got it, I think. You just want to add a second pump to the existing system. Probably said that in the beginning, but I missed it.

First, base your program on what is in the first entry in the project guidance part of the forum: Demonstration code for several things at the same time.

Please identify your relay. Your system would be SO much easier if you used a solid state relay to control the pump.

Your first attempt at programming should be to be able to turn the relay on and off for a specific time period, perhaps once per second. Don't worry about the 0-10 volt signal right now.

Paul

Hi!!

Finally i managed to assemble a functional pump. I get an SSR and a piece of code form steeman.be:8080 (Now down, but i have the code):

// constants won't change. Used here to set pin numbers:
const int ledPin =  9;      // the number of the LED pin

const int START = 0;
const int IN_PULSE = 1;
const int PULSE_ENDED = 2;

// Variables will change:
int cycleState = START;
int potValue = 0;

// the follow variables are type long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long period = 1023 * 5; // pulse period is ~10 seconds (in milliseconds)
long cycleStart = 0;


// the setup routine runs once when you press reset:
void setup() {
  // set the digital pin as output:
  pinMode(ledPin, OUTPUT);   
  
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}


// the loop routine runs over and over again forever:
void loop() {
  
  switch ( cycleState ) {
    case START:
      cycleStart = millis();

      // read the input on analog pin 0:
      potValue = analogRead(A0);
//      Serial.println(potValue); 

      if ( potValue > 0 ) {
        // rising edge of pulse
        digitalWrite(ledPin, HIGH);
      } // else no need to set the pin high, duty cycle is 0%
      
      cycleState = IN_PULSE;

      Serial.println(""); 
      Serial.print("START, potvalue: "); 
      Serial.print(potValue); 
      Serial.print(", duty: "); 
      Serial.print(potValue * 0.09765625); // scale back from 0-1024 to 0-100%
      Serial.print("%, cycleStart: "); 
      Serial.println(cycleStart); 
      
      break;

    case IN_PULSE:      
      // if the set point is reached, end the high period of the PWM pulse
      if ( millis() >= cycleStart + potValue * period / 1024 ) {

        if ( potValue < 1023 ) {
          // falling edge of pulse
          digitalWrite(ledPin, LOW);
        } // else no need to set the pin low, duty cycle is 100%
      
        cycleState = PULSE_ENDED;

        Serial.print("IN_PULSE, millis: "); 
        Serial.println( millis() ); 
      }
        
      break;
      
    case PULSE_ENDED:
      // if end of PWM period, reset for next period
      if ( millis() >= cycleStart + period ) {
        cycleState = START;

        Serial.print("PULSE_ENDED, millis: "); 
        Serial.println( millis() ); 
      }
      
      break;
  } // end case

} // end loop

It was meant to action a resistance for heating water regulated by a potentiometer, but it was directly applicable to my case. I connect the DCU analogic 0-10V (Acting like a potmeter) output to the Arduino and that did the trick. The motor was 24 VAC, so i use a 220-24V transformer from other stuff (I know is overkill for that, but is what i have) This video shows the operation:

After the success, I made a fancy 3D printed case for the pump, xD, the bad news are that i doesn´t learn too much programing......

Thanks buds!!