Bomba peristáltica controlada por Arduino: Dosificación

Introducción: los 50 mL que se convirtieron en 67 mL

Necesitaba dosificar exactamente 50 mL de nutriente cada 4 horas en un biorreactor casero. Compré una bomba peristáltica de $25.000 CLP con motor DC de 12 V, la conecté a un relay y la dejé encendida 30 segundos. Resultado: un día dosificó 50 mL, al día siguiente 67 mL, el tercer día 43 mL. El motor DC no tiene velocidad constante: la batería baja, la fricción del tubo cambia, y la gravedad específica del líquido altera el torque necesario.

Una bomba peristáltica funciona por compresión mecánica: rodillos aplastan un tubo flexible contra una pared curva, creando un vacío que aspira fluido y un pistón que lo empuja. El fluido nunca toca la bomba, solo el interior del tubo. Eso la hace ideal para líquidos estériles, corrosivos o sensibles.

Pero la precisión no viene del tubo: viene del motor paso a paso que gira exactamente la cantidad de pasos que le ordenas. Con un NEMA 17 de 200 pasos/vuelta y microstepping 1/16, tienes 3.200 pasos por revolución. Si calibras que una vuelta del rotor expulsa 1,25 mL, dosificar 50 mL requiere exactamente 128.000 pasos. Ni un paso más. En este artículo te explico cómo calcular, calibrar y programar una bomba peristáltica con Arduino para dosificación de ±2 % o mejor.

Bomba peristáltica con motor paso a paso NEMA 17 y Arduino Nano
Cabezal peristáltico de 3 rodillos con tubo silicone 4×7 mm y motor NEMA 17 controlado por Arduino.

Física de la dosificación: caudal = f(velocidad, diámetro, compresión)

El caudal teórico de una bomba peristáltica depende del volumen desplazado por revolución del rotor. Ese volumen no es el volumen del tubo completo: es el volumen entre dos puntos de compresión consecutivos.

Para un cabezal con 3 rodillos y tubo de 4 mm de diámetro interior (ID):

  • Área transversal del tubo: A = π × (2 mm)² = 12,57 mm²
  • Longitud del arco entre rodillos (aprox. 1/3 de la circunferencia del rotor de 30 mm): L ≈ 31 mm
  • Volumen teórico por revolución: V = A × L × n_rodillos ≈ 12,57 × 31 × 3 ≈ 1,17 mL/rev

En la práctica, el tubo no se cierra completamente y hay algo de slip (retorno de fluido). El volumen real suele ser un 70-85 % del teórico. Eso da 0,8-1,0 mL/rev para este cabezal. La única forma de saberlo con precisión es calibrar pesando.

Parámetro Valor típico Impacto en dosificación
Diámetro interior tubo (ID) 2 – 6 mm Determina el caudal base. Doblar el ID cuadruplica el caudal.
Número de rodillos 2 – 4 Más rodillos = pulsación más suave, pero mayor desgaste del tubo.
Velocidad de giro 1 – 300 RPM A mayor velocidad, mayor slip. Precisión óptima: 10-60 RPM.
Viscosidad del fluido 1 – 500 cP Fluidos viscosos (>100 cP) reducen el slip y mejoran precisión.
Presión de descarga 0 – 2 bar Mayor presión = mayor slip. A 1 bar, el caudal puede caer 10-15 %.

Componentes y precios para una dosificadora precisa

Componente Especificación Precio CLP
Cabezal peristáltico + NEMA 17 3 rodillos, rotor Ø 30-40 mm, acople directo $45.000 – $85.000
Solo cabezal peristáltico (sin motor) 3 rodillos, eje Ø 5 mm para NEMA 17 $25.000 – $45.000
Motor paso a paso NEMA 17 200 pasos/vuelta, 1,8°/paso, 0,4 A/fase $8.000 – $15.000
Driver A4988 Microstepping 1/16, 1 A/fase, disipador incluido $3.500 – $6.500
Driver DRV8825 Microstepping 1/32, 2,2 A/fase, menor ruido $5.500 – $9.500
Tubo silicone 4×7 mm (1 m) ID 4 mm, OD 7 mm, grado alimenticio/FDA $3.000 – $5.500
Arduino Nano ATmega328P, 5 V, control de pasos por Timer $8.500 – $14.000
Sensor de flujo YF-S201 1-30 L/min, salida de pulso, calibración por gravedad $8.000 – $12.000
Fuente 12 V 2 A Para alimentar motor paso a paso $6.500 – $12.000
TOTAL aproximado Cabezal + motor + driver + Arduino + fuente $75.000 – $135.000

¿Necesitas componentes para tu dosificadora peristáltica?

En ukrabot.cl tenemos motores paso a paso NEMA 17, drivers A4988/DRV8825, Arduino Nano, tubos silicone grado alimenticio y fuentes 12 V. También vendemos cabezales peristálticos con acople para NEMA 17. Envío a todo Chile.

Calibración: el paso que separa una bomba de una dosificadora

No uses el volumen teórico del tubo. Cada cabezal tiene tolerancias mecánicas, compresión diferente y slip variable. La calibración es obligatoria.

Método de calibración por peso

  1. Llena el tubo con el fluido que vas a dosificar. El aire en el tubo introduce error.
  2. Pon un recipiente en una balanza de precisión (0,01 g o mejor). Tara a cero.
  3. Programa el Arduino para girar exactamente 100 revoluciones (200 × 100 = 20.000 pasos a full step).
  4. Pesa el fluido expulsado. Si son 95,2 g (mL, si densidad ≈ 1), el caudal real es 0,952 mL/rev.
  5. Calcula el factor de calibración: pasos por mL = 20.000 / 95,2 = 210,08 pasos/mL.
  6. Para dosificar 50 mL: 50 × 210,08 = 10.504 pasos.

Repite la calibración con al menos 3 volúmenes distintos (10 mL, 50 mL, 100 mL) y verifica que el error lineal sea <2 %. Si el error no es lineal, el tubo está desgastado o hay aire atrapado.

Código Arduino con calibración y dosificación por volumen

#include <AccelStepper.h>

// Pines del driver A4988
#define STEP_PIN 3
#define DIR_PIN 2
#define ENABLE_PIN 4

// Factor de calibracion: pasos por mL (ajustar tras calibracion)
// Ejemplo: 100 revs = 95,2 g -> 200*100/95,2 = 210,08 pasos/mL
const float PASOS_POR_ML = 210.08;

// Configuracion del motor: DRIVER = control por STEP/DIR
AccelStepper motor(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);

void setup() {
  Serial.begin(115200);
  pinMode(ENABLE_PIN, OUTPUT);
  digitalWrite(ENABLE_PIN, LOW);  // Habilitar driver

  motor.setMaxSpeed(800);         // Pasos/segundo (maximo del A4988)
  motor.setAcceleration(400);     // Suavidad de arranque/parada

  Serial.println("Dosificadora peristaltica lista");
  Serial.println("Comandos: D50 (dosificar 50 mL), C (calibrar 100 revs)");
}

void loop() {
  if (Serial.available()) {
    String cmd = Serial.readStringUntil('\n');
    cmd.trim();

    if (cmd.startsWith("D")) {
      float mL = cmd.substring(1).toFloat();
      if (mL > 0) {
        dosificar(mL);
      }
    }
    else if (cmd == "C") {
      calibrar();
    }
  }
}

void dosificar(float mL) {
  long pasos = (long)(mL * PASOS_POR_ML);
  Serial.print("Dosificando ");
  Serial.print(mL);
  Serial.print(" mL (");
  Serial.print(pasos);
  Serial.println(" pasos)");

  motor.move(pasos);
  while (motor.distanceToGo() != 0) {
    motor.run();
  }

  Serial.println("Dosificacion completa");
}

void calibrar() {
  Serial.println("Calibrando: 100 revoluciones...");
  motor.move(200 * 100);  // 100 revs a full step
  while (motor.distanceToGo() != 0) {
    motor.run();
  }
  Serial.println("Calibracion terminada. Pese el fluido y actualice PASOS_POR_ML.");
}

La librería AccelStepper genera los pulsos de STEP sin bloquear el loop, permitiendo que el Arduino haga otras tareas (leer sensores, atender botones) mientras el motor gira. La aceleración suave evita que el motor pierda pasos al arrancar con carga.

Errores costosos que arruinan la precisión

  • Usar motor DC con relay en vez de paso a paso: un motor DC de 12 V varía su velocidad con la carga, la temperatura y el voltaje de la fuente. A 11,5 V gira 8 % más lento que a 12,5 V. Eso convierte tus 50 mL en 46 o 54 mL sin que lo sepas. El paso a paso no tiene ese problema: cada pulso es un ángulo exacto.
  • No calibrar con el fluido real: la viscosidad afecta el slip. Si calibraste con agua (1 cP) y luego dosificas glicerina (1.400 cP), el caudal cambia un 15-25 %. Siempre calibra con el fluido de proceso o uno de viscosidad similar.
  • Tubo de PVC rígido en vez de silicone flexible: el PVC no recupera su forma tras la compresión. Los rodillos lo aplastan permanentemente, el caudal cae un 50 % en horas y el tubo se rompe. Usa silicone grado alimenticio o farmacéutico. El costo es $3.000/m vs $1.500/m del PVC, pero dura 10× más.
  • Driver A4985 sin disipador térmico: a 1 A/fase, el chip del A4988 alcanza 80-90 °C. Si supera los 150 °C, entra en thermal shutdown y para el motor a mitad de la dosificación. Tu recipiente recibe 30 mL en vez de 50 mL. Pon un disipador de aluminio y ventilación forzada si el duty cycle es alto.
  • No purgar el aire del tubo antes de dosificar: una burbuja de 2 cm de aire en el tubo equivale a ~0,25 mL de error. En una dosificación de 5 mL, eso es un 5 % de error. Antes de cada ciclo, haz una priming: gira el motor lentamente hasta que salga fluido puro sin burbujas.

⚠️ Advertencia: tubo desgastado = contaminación cruzada y error de dosificación

El tubo silicone se desgasta tras 200-500 horas de uso continuo. Los signos son: caudal que cae un 20-30 %, aparición de partículas en el fluido, y grietas visibles en la zona de compresión. En aplicaciones farmacéuticas o de laboratorio, el tubo debe cambiarse cada 100-200 horas según norma USP Class VI. Un tubo roto en medio de una dosificación de ácido puede causar quemaduras químicas y daños al equipo. Programa cambios preventivos.

Normativa y contexto en Chile

  • Ley 19.300 (Bases del Medio Ambiente): si tu dosificadora vierte químicos a un sistema de alcantarillado o suelo, debes controlar el volumen exacto. Un error de dosificación puede constituir infracción si supera los límites de vertimiento establecidos en la Norma de Emisión DS N° 13/2011 MMA.
  • Ley del Consumidor 19.496: si vendes equipos dosificadores (por ejemplo, para cerveza artesanal o productos cosméticos), la precisión del volumen declarado debe ser verificable. Un error sistemático >5 % puede generar reclamos por incumplimiento de especificaciones.
  • Tubos para alimentos: en Chile, los tubos silicone que contactan alimentos o medicamentos deben tener certificación FDA 21 CFR 177.2600 o EU 1935/2004. Los tubos genéricos de ferretería no cumplen y pueden liberar plastificantes.

Conclusión

Una bomba peristáltica controlada por Arduino no es “un motor que gira”. Es un sistema de control de posición donde cada paso del motor corresponde a un volumen calibrado de fluido. Con un NEMA 17, un driver A4988 y la librería AccelStepper, puedes dosificar 50 mL con un error menor al 2 % repetidamente.

La clave está en tres pasos: usar motor paso a paso (no DC), calibrar por peso con el fluido real, y cambiar el tubo silicone antes de que el desgaste arruine la precisión. El costo total del sistema es de $75.000 – $135.000 CLP, comparable a una bomba comercial de dosificación de $200.000+, pero con control total sobre el volumen y la programación.

Si tu aplicación es sensible —nutrientes para cultivos celulares, reactivos químicos, o aditivos para alimentos— no escatimes en el tubo. Un silicone certificado FDA cuesta $3.000/m. Un error de dosificación por tubo de baja calidad puede costarte toda la producción.

Componentes para tu dosificadora peristáltica

Encuentra motores paso a paso NEMA 17, drivers A4988/DRV8825, Arduino Nano, tubos silicone grado alimenticio, fuentes 12 V y cabezales peristálticos en ukrabot.cl. Enviamos a todo Chile con asesoría técnica para proyectos de automatización y laboratorio.

Preguntas frecuentes

¿Puedo usar un servo en vez de un motor paso a paso?

No recomendado. Los servos RC (SG90, MG996R) tienen torque limitado y backlash (juego mecánico) en la reducción. Un servo que se mueve 180° no puede dosificar volúmenes pequeños con precisión porque la resolución angular es de ~1° (200 posiciones en 180°). Un paso a paso con microstepping tiene 3.200 posiciones por vuelta. Además, los servos no mantienen torque constante a baja velocidad. Para dosificación, el paso a paso es superior en todo sentido.

¿Cuánto dura un tubo silicone en una bomba peristáltica?

Con fluidos neutros (agua, buffer salino), un tubo silicone de calidad dura 200-500 horas de uso continuo. Con ácidos fuertes (HCl, H₂SO₄) o solventes orgánicos, la vida se reduce a 50-100 horas. Los signos de reemplazo son: caudal que cae más de 10 %, aparición de partículas en el fluido, o grietas visibles en la zona de compresión. Programa cambios preventivos y ten tubo de repuesto.

¿Puede la bomba peristáltica aspirar (jalar líquido hacia arriba)?

Sí, y es una de sus ventajas. La bomba peristáltica puede generar vacío de hasta 0,7-0,8 bar (7-8 m de columna de agua), permitiendo aspirar desde un recipiente situado por debajo del nivel de la bomba. Sin embargo, la altura de aspiración afecta el caudal: a mayor altura, mayor cavitación y menor precisión. Para dosificación precisa, mantén la entrada de la bomba a menos de 30 cm por debajo del nivel del líquido.

¿Cómo mejoro la precisión si el error es mayor al 5 %?

Primero, verifica que no haya aire en el tubo. Segundo, reduce la velocidad de giro a menos de 60 RPM: a alta velocidad el slip aumenta. Tercero, usa un sensor de flujo (YF-S201 o similar) en lazo cerrado: el Arduino dosifica hasta que el sensor indica que pasaron los mL deseados, corrigiendo el error en tiempo real. Cuarto, cambia el tubo si tiene más de 100 horas de uso. Con estas medidas, puedes bajar el error a ±1 %.

También te puede interesar

Deja un comentario