You are on page 1of 7

#include <SoftwareSerial.

h>
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire ourWire(4); //Se establece el pin 2 como bus OneWire


DallasTemperature sensors(&ourWire); //Se declara una variable u objeto para nuestro sensor

const int analogInPin = A0;


int sensorValue = 0;
unsigned long int avgValue;
float b;
int buf[10],temp;
int Pin_de_medicion = A5; // Pin analogico 5
int R1=100000; // Cambiar por el valor de la resistencia conocida
long lectura; // Lectura en el pin analogico 5
float Tension_de_trabajo = 5.0; // VCC
float Voltaje_R2; // Valor que calculamos
float Resistencia; // Valor que calculamos
float longitud = 0.003 ;
float area = 0.0000000013;
int x = 0;

SoftwareSerial wifi(3, 2); // RX | TX

int x1=0;

void setup()

{ Serial.begin(9600);

wifi.begin(9600);

sensors.begin();
pinMode(13,OUTPUT);

void loop()

while (wifi.available() >0 ) //Esto basicamente revisa si hay datos recibidos o que ya estaban
almacenados en el módulo wifi. Si hay datos (>0), entonces que proceda con el código siguiente.

{char c = wifi.read(); // Se declara una variable de tipo caracter ("c") que va a almacenar el dato leÃ-do
por el módulo.

if (c == 71) // Esto quiere decir, que si el dato que lee es igual a 71 (es decir, la letra G en lenguaje
ASCII) significa que busca detectar un "GET" que envia el navegador cuando intentamos abrirlo

{Serial.println("Se ha enviado la petición"); // Que se imprima en el serial que se ha enviado la petición


correctamente

delay(3000); // Se esperan 3000 milisegundos, o sea, 3 segundos.

webserver(); // Que ejecute la función llamada "webserver"

while(x1==1){

if(wifi.find("+IPD,")) //Se revisa si el servidor recibió datos

{delay(1000); // Espera 1 segundo para recibir esos datos


int connectionId = wifi.read()-48; //esto es porque la función "read" regresa un valor decimal ASCII y
el 0 empieza en 48.

wifi.find("pin="); //Detecta el pin que se presionará con el botón en el código en HTML


'http://192.168.15.151/pin=13'

int pinNumber = (wifi.read()-48)*10; //Este obtiene el primer numero del pin. Por ejemplo, si es el pin
13, entonces el primer numero es 1 y se multiplica por 10, para obtener 10.

pinNumber += (wifi.read()-48); // Aqui se obtiene el segundo numero, si fuera el pin 13, entonces el
segundo número es 3 y se añade al primer numero ^

digitalWrite(pinNumber, !digitalRead(pinNumber)); //Mandar el comando al pin designado

Serial.print("inviertiendo pin ");

Serial.println(pinNumber);

int sensorValue = analogRead(A1);


// print out the value you read:
Serial.println(sensorValue);
delay(2000);
Serial.print("Se ha iniciado la toma de propiedades de la muestra: ");
Serial.println("");
delay(2000);

while(sensorValue!=0) {

sensorValue = analogRead(A1);
// Parte de temperatura:
sensors.requestTemperatures(); //Se envía el comando para leer la temperatura
float temp= sensors.getTempCByIndex(0); //Se obtiene la temperatura en ºC
Serial.println("");
Serial.println("");
Serial.print("La Temperatura es de = ");
Serial.print(temp);
Serial.println(" C");
delay(2000);
// Parte de pH
if (x==0){
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("La medida de pH es de = ");
Serial.println(phValue);
delay(4000);
}
//Parte de conductividad
if (x==1){
// Leemos el valor en el pin A5
lectura=0;
for(int i=0;i<20;i++){
lectura+=analogRead(Pin_de_medicion);
}
lectura=trunc(lectura/20);

// Colculamos el voltaje en la resistencia desconocida


Voltaje_R2=(Tension_de_trabajo/1023.0)*lectura;

// Lo imprimimos en el Monitor Serie

//Calculamos la resistencia desconocida con las fórmulas


// (V1/R1=V2/R2) y (V1=+5V-V2)
Resistencia=-R1*Voltaje_R2/(Tension_de_trabajo-Voltaje_R2);
float resistividad = (Resistencia*area)/longitud;
float conductividad = 1/resistividad;
Serial.print("La conductividad del fluido es de ");
Serial.print(10*conductividad,5);
Serial.print(" microsiemens/centímetro ");
delay(4000);
}
if(x==0){
x=1;
}
else {
x=0;
}

}
}
}
}

void webserver()

{ web("<!DOCTYPE HTML>");

web("<html>"); //una pagina web necesita esto <HTML> y </HTML> es el inicio y fin del documento

web("<head><title>Iniciar mediciones</title>"); //nombre de la pestaña que llevara la pagina

web("<body><h1> <FONT SIZE=\"8\" COLOR=\"blue\"> MEDICIONES DEL AGUA </h1>"); //Titulo del
inicio de la pagina

web(" <BODY BGCOLOR=\"cadetblue\"> ");

web("<a href=\"https://consejofi.fi-
a.unam.mx?ref=images/EscudoFIVectorizadoNegro2008PPNGx5.png\" target=\"_blank\"><img
src=\"https://consejofi.fi-a.unam.mx/images/EscudoFIVectorizadoNegro2008PPNGx5.png\" WIDTH=400
HEIGHT=400 BORDER=50 /></a><br /><br />");

//Cargamos una imagen

web("<input type=\"button\" onclick=\"location.href='http://192.168.100.14/pin=13' \"


value=\"Iniciar/detener mediciones de la muestra\" name=\"boton1\" style='width:250px; height:200px'/>");

x1=1;

int sensorValue = analogRead(A1);


// print out the value you read:
Serial.println(sensorValue);
delay(2000);

}
void web(String text)

{wifi.print("AT+CIPSEND=0,"); //Se establece una longitud de datos, en este caso, un máximo de 2048
bytes (2048 caracteres) que se enviarán a la conexión "0".

wifi.println(text.length());

if (wifi.find(">")) // Si se recibe el mensaje

{Serial.println(text);

wifi.println(text); //mandamos el mensaje por el wifi

delay(10);

while ( wifi.available() > 0 )

{if ( wifi.find("SEND OK") ) //buscamos "ok" y luego salimos

break;