Pages: [1]   Go Down
Author Topic: Necesito ayuda soy novato en arduino  (Read 201 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola que tal  a todos miren estoy haciendo un control de dos estanques de agua, uno superior y otro inferior(de altura no de tamaño) los cuales son sensados a traves de un sensor ultrasonico y otro diferencial, todo bien  yo asigno q numero en cm3 quiero q tengan , el problema es q cuando cierta condicion activo ya sea un motor o valvula , este corre pero no se detiene cuando la condicion se cumple, por tanto solicito su ayuda pues soy aun un poquittin novato
de ante mano graxx
esto es parte del codigo pero sirve para controlar un estanque espero q me ayuden con mi error
 ojo puse dos condiciones para parar el motor y la valvula (1 por cada uno)

Quote
/* Este programa sirve para controlar y sensar  a traves de arduino dos estanques de liquidos(agua en este caso)
 con sus respectivos sensores(un sensor ultrasonico para el estanque inferior y un sensor de presion diferencial para el estanque superior),
 con los cuales podremos saber en todo momento los niveles de liquido dentro de estos estanques,
 y a traves del motor y la valvula podremos variar el llenado y vaciado de ambos estanques */

int sensorU=A6;
int sensorPD=A8;
int valvula=3;
int motor=6;
float porcen=0;
float porc=0;
int lecturaUL=0;
int lecturaPD=0;
int lecturaM=0;
int lecturaV=0;
float resU=0.07828;
int escaladoV=0;
int escaladoM=0;
int variable;
int Llenado;
int PDlect;

void setup(){
  Serial.begin(9600);
  delay(100);
  pinMode(sensorU, INPUT);
  pinMode(sensorPD, INPUT);
  pinMode(motor, OUTPUT);
  pinMode(valvula, OUTPUT);
  Serial.println("Bienvenido a su programa principal para el control de sus estanques:");
  menu();
}

void loop(){
  lecturaUL=analogRead(sensorU)*resU; // Equivalente del llenado de 80cms
  lecturaPD=analogRead(sensorPD);// Equivalente del llenado de 80cms
  PDlect=map(lecturaPD,163,900,0,80);

  lecturaM= motor;
  lecturaM=lecturaM/4;
  lecturaV=valvula;
  lecturaV=lecturaV/4;
  Serial.println(PDlect);
  delay(500);
  while(Serial.available()==1){
    if (Serial.available()>0){
      variable=Serial.read();


      // COntrol para el llenado del Estanque superior
      if (variable==49)  // Valor en ASCII(1 Decimal es 49 en ASCII)
      {
        Serial.print("Su estanque actualmente esta en ");
        Serial.println(PDlect);
        Serial.println("Ingrese el valor que desea de llenado");

        while(Serial.available()==0){
        } 
        delay(100);
        Llenado=ingreso();

        int variab=Llenado;
        Serial.print("Usted ingreso ");
        Serial.print(variab);
        int dato=Llenado;


        if (variab>80 || variab <0){
          Serial.println("El numero ingresado no es valido, recuerde que el maximo soportado por el estanque es de 80 cms");
          analogWrite(motor,0);
          analogWrite(valvula,0);

        } 

        if(variab==PDlect){
          Serial.println("El numero ingresado corresponde al valor actual de agua en el tanque");
          analogWrite(motor,0);
          analogWrite(valvula,0);
        }


        if(variab > PDlect && variab <=80){ // activa el motor si el valor introducido es mayor al del sensor

          for(int velo = 0 ;  velo <= 255; velo +=5) {   // rango en que variara el el pulso PWM para controlar el ciclo de trabajo del motor
            analogWrite(motor, velo);    //esperara 1 segundo para que se aprecie el ciclo de trabajo   
            delay(500);
            if(PDlect >= variab){ // detiene el motor si el valor introducido es igual o mayor al dato del sensor
              analogWrite(motor,0);
            }
          }
        }
         
           
        if (variab <PDlect && variab >=0){ // activa la valvula si el valor introducido es menor al del sensor
          for(int velo = 0 ;  velo <= 255; velo +=5) {   // rango en que variara el el pulso PWM para controlar el ciclo de trabajo del motor
            analogWrite(valvula, velo);    //esperara 1 segundo para que se aprecie el ciclo de trabajo   
            delay(300);
           while(PDlect<= dato){analogWrite( valvula, 0);} // detiene la valvula si el valor introducido es igual o menor al dato del sensor
                   }
        }
      }
    }
  }
}
void menu(){
  Serial.println("Ingrese el numero 1 para controlar el llenado del Estanque Superior");
  Serial.println("Ingrese el numero 2 para controlar el llenado del Estanque Inferior");
  Serial.println("Ingrese el numero 3 para conocer los valores actuales(en cms y porcentaje) de los Estanques Superior e Inferior");
}

int ingreso(){
  int dato=0;    // variables locales
  int variab=0;     // variables locales
  while (Serial.available()>0)
  {
    dato=Serial.read()-48;
    variab=10*variab+dato;
  } 
  return variab;
}

Logged

Pages: [1]   Go Up
Jump to: