Proyecto gotero corrector de PH con bomba peristáltica

Buenas gente!

El proyecto se basa en un medidor de PH para arduino ( EBAY )
el cual toma mediciones del agua, y con IF , comprobar si el PH está muy alto o bajo, tira unas gotitas de PH up o PH down (básicamente tira líquido ácido o alcalino).

El uso va a ser para plantas hidropónicas , las cuales necesitan un PH entre 5.5 en crecimiento y 6.0 en floración. Admiten un margen de error de 0’3-0’5 máximo.

Los materiales que ya tengo:
ARDUINO LEONARDO
MEDIDOR DE PH
BOMBA PERISTÁLTICA x2 (una para PH up y otra PH down)
RELÉS x8 (una tira entera)
PANTALLA I2C
TUBOS de pecera de plástico para las conexiones de líquidos.
CALENTADOR DE PECERA para mantener el agua del tanque a 22ºC. No conecta con arduino, ya tiene su termostato.

CÓDIGOS QUE ME HAN FUNCIONADO:
CÓDIGO DE RIEGO

int RELAYRIEGO = 1; // Coloco RELAY en el pin digital 1
int PERISTALTICA1 =2;  //Coloco la bomba peristáltica 1 en pin digital 2
int PERISTALTICA2 =3;  //Coloco la bomba peristáltica 2 en pin digital 3
int VENTILADOR =4;     // Coloco el ventilador en el pin digital 4

void setup()
{
  Serial.begin(9600);   // Lee a 9600

  pinMode(1, OUTPUT);  // Relay en pin 1 como salida
  pinMode(2, OUTPUT;  // Peristáltica 1 en pin 2 como salida
  pinMode(3, OUTPUT;  // Peristáltica 2 en pin 3 como salida
  pinMode(4, OUTPUT);  // Ventilador en pin 4 como salida

}

 void loop()
{
  digitalWrite(VENTILADOR, LOW);    // se enciende el  ventilador y espera 3 segundos a encender el relé
    delay(3000); 

   digitalWrite(RELAYRIEGO, LOW);    // se enciende el  relé
    delay(3000); 
 
 
   digitalWrite(RELAYRIEGO, HIGH);   // se apaga el relé
    delay(3000);

               // Riegos LOW - HIGH sucesívamente durante todo el día...

   }

CÓDIGO PARA MEDIDOR DE PH: (ya lo he calibrado)

const int analogInPin = A0; int sensorValue = 0;  //meto el pin "Po" del medidor al A0 del arduino 
unsigned long int avgValue; 
float b;
int buf[10],temp;
void setup() {
 Serial.begin(9600);
}
 
void loop() {
 for(int i=0;i<10;i++) 
 { 
  buf[i]=analogRead(analogInPin);
  delay(10);
 }
 for(int i=0;i<9;i++)
 {
  for(int j=i+1;j<10;j++)
  {
   if(buf[i]>buf[j])
   {
    temp=buf[i];
    buf[i]=buf[j];
    buf[j]=temp;
   }
  }
 }
 avgValue=0;
 for(int i=2;i<8;i++)
 avgValue+=buf[i];
 float pHVol=(float)avgValue*5.0/1024/6;
 float phValue = -5.70 * pHVol + 21.34;
 Serial.print("Nivel PH  = ");
 Serial.println(phValue);
 
 delay(2000);
}

El PH me lo mide perfectamente, pero necesito que en función de si está bajo o alto (con función IF), active las peristálticas 1 o 2 durante 300 milisegundos (10 gotitas a 5V). No tengo ni idea de cómo hacerlo.

Alguien me puede ayudar?

Gracias!!!

Hola Sergio, Sigues con este proyecto? Yo estoy pensando en uno similar y tengo varias dudas que quizá ya hayas resuelto tú. Mides también el EC del agua? Dispensas los abonos con bomba peristáltica? Oxigenas el agua? No debes usar aislador para el medidor de pH para que no se distorsionen las medidas?

Tienes los esquemas hechos?

Un saludo, Pablo

Para hacer lo de subir o bajar el ph de la manera que describes es muy sencillo, tienes que estudiar te el ejemplo blink without delay. Y te dejo algo de pseudocódigo.

If(pumpUp == true)
{
If(Millis()  - inicioBombeo > 300){
DigitalWrite(pH.pumpUp, HIGH); 
PumpUp = false; }
}

Lo primero es conocido como una guarda booleana, que solo ejecuta el código si la condición es verdad, una vez que se ejecuta, entra al contador de tiempo, y una vez que el contador expira pone la guarda Bolena en false, evitando que se ejecute otra vez. Hay algunos ajustes que no hice, pero te lo dejo para que lo estudies, estaría bien que subas algunas fotos.

A y como recomendación, busca cómo se conecta la tira de relays con los optoacopladores, no conectes el vcc al Arduino, no conectes el vcc al Arduino!!!!

Alex

No se revive hilos con mas de 4 meses, al interesado !@pblgmz que lea las normas y cree un hilo nuevo dando detalles. La persona que creo este hilo no apareció desde el 2018