Páginas

martes, 26 de marzo de 2013

Módulo Shield PH para Arduino



 

  

 

 

 

 

Módulo Shield PH


Debido a todos los problemas que he tenido con el módulo de PH de AtlasScientific he optado por probar otro que he encontrado por Internet.

Se trata de un shield que se ensambla sobre el Arduino y que tiene ya incorporado el conector BNC para colocar directamente la sonda.




El módulo se ha hecho esperar ya que me lo han tenido que enviar 2 veces para que me llegara y a primera vista parece que ha merecido la pena. Su precio es bastante asequible e incorpora como novedad a parte del conector BNC hembra, un sensor de temperatura.

El acabado de este shield no se ve tan profesional pero si parece dar buen rendimiento, una cosa muy interesante es que trae un pequeño botón que junto con el skecth del desarrollador nos permite calibrar muestro sensor. 




Para ello necesitamos disponer de unos buffer de muestra de 4 y 7 de PH. Yo no dispongo de una muestra buffer de 7 pero tengo una de 6.864 lo cual hará que las mediciones que me den varíen un poquito del valor real. Para calibrar esto seguimos las instrucciones del desarrollador. Pero es tan sencillo poco seguir 3 pasos:


  1. Cargamos el sketch que del de ejemplo que nos da el desarrollador SketchPh y conectamos la sonda de PH en el BNC.
  2. Vertemos en un recipiente pequeño parte de la muestra buffer de 7 y sumergimos la sonda. A continuación pulsamos el botón del shield de PH que pone "CALIBRATE" si tenemos abierto el terminal serial pondrá Calibrando.
  3. Metemos la sonda en otro cacharro con agua limpia y agitamos un poco de forma que se limpie la sonda.
  4. Vertemos en un recipiente pequeño parte de la muestra buffer de 4 y sumergimos la sonda. Y volvemos a pulsar el botón del shield de PH que pone "CALIBRATE" si tenemos abierto el terminal serial pondrá Calibrando



Con esto tendremos el Arduino calibrado para que pueda hacer mediciones de PH con el shield. Y es cuando podemos ajustar mediante software el número de mediciones que ha de hacer para que nos saque la media y así darnos medidas menos oscilantes.


void loop()
{

    //delay(100);

    int x;
    int sampleSize = 500;  -  Valor a cambiar 

    float avgMeasuredPH= 0;
    float avgRoomTempMeasuredPH =0;
    float avgTemp = 0;
    float avgPHVolts =0;
    float avgVoltsPerPH =0;



Aquí os dejo el enlace del desarrollador: Reza's Blog donde además podreis comprarlo. 

lunes, 18 de marzo de 2013

Controlar funcionamiento de un Arduino con otro



 

  

 

 

 

 

Controlar funcionamiento de un Arduino con otro.


Para afrontar un proyecto grande con Arduino hay un tema que nos puede preocupar, sobretodo si este proyecto va a controlar algun dispositivo que puede ser crítico. Y es la posibilidad de que nuestro Arduino se nos quede bloqueado.

Esto se puede deber a varios motivos, se quede sin memoría, sobrecalentamiento, etc ... lo que hay que tener presente principalmente es que no se llegue a este estremo teniendo una programación correcta y haciendo un buen número de pruebas y trazas de funcionamiento. 

Si pese a este trabajo vemos que puede ser crítico que se nos pueda quedar bloqueado nuestro Arduino, por ejemplo si controla una bomba de agua, un termostato de la calefacción, etc ... lo que podemos implementar es una especie de alta disponibilidad muy simple. En realidad no es alta disponibilidad pero sí un mecanismo de seguridad de forma que si nuestro Arduino se queda bloqueado es reinicido.

Para llevar a cambo esta implementación existen varias opciones pero la que yo he adoptado es la de poner un Arduino más simple y pequeño de manera que testee en que estado se encuentra nuestro Arduino principal y en caso de que no responda lo reinicie.

Esto que en teoría puede parecer complicado, es muy sencillo y facild e implementar. Para este ejemplo he utilizado 2 Arduino Nano. Los conectamos de la siguiente manera:




Arduino Master
Arduino Esclavo
5V
5V
GND
GND
D5
RST
D2
D2
D10
D10


El mecanismo de testeo es sencicllo, el Arduino Master envía una señal por una salida digital, y espera un tiempo a que el Arduino Esclavo responda por otra salida digital. Este algoritmo es simple, se puede mejorar pidiendole al Arduino Esclavo varíe la señal de respuesta en función de la señal de entrada, eso ya queda a gusto de cada uno.



Uan vez tngamos los 2 Arduinos convenientemente conectados, cargamos en cada uno de ellos los sketch que les correspondan:


// Monitorización Arduinos ***MASTER***     
        
// Conectamos los Arduino entre si:        
// GND   -> GND        
// 5V    -> 5V        
// D5    -> RST
// D2    -> D2
// D10   -> D10
// Podemos utilizar otras salidas digitales distintas        
// http://arubia45.blogspot.com.es/       

// Constates, definición de las entradas/salidas
const int myReset = 5;
const int myRead  = 2;
const int myWrite = 10;

// Tiempo de Espera de la Respuesta
const int Valor_Espera = 100;

void setup() {                
   pinMode(myReset, OUTPUT);   
   pinMode(myRead, INPUT);
   pinMode(myWrite, OUTPUT);
   Serial.begin(9600);  
   digitalWrite(myWrite, LOW);
   digitalWrite(myReset, HIGH);
}

// Función de Reset
void resetea() {
   Serial.println("Enviar Reset");
   digitalWrite(myReset, LOW);  
   digitalWrite(myReset, HIGH);
}

int i;
void loop() {
  delay(1000);     
  digitalWrite(myWrite, HIGH);
  Serial.print ("Esperando respuesta");
  for (i=1; i < Valor_Espera; i++) {
    Serial.print(".");
    delay(100);
    if (digitalRead(myRead)== HIGH) {
      Serial.println("Recibido");
      break;
    }
  }
  Serial.println(i);
  if (i== Valor_Espera)
    resetea();
  else
    digitalWrite(myWrite, LOW);
}



// Monitorización Arduinos ***ESCLAVO***     
        
// Conectamos los Arduino entre si:        
// GND   -> GND        
// 5V    -> 5V        
// RST   -> D5
// D2    -> D2
// D10   -> D10
// Podemos utilizar otras salidas digitales distintas        
// http://arubia45.blogspot.com.es/       

// Constates, definición de las entradas/salidas
const int myRead  = 10;
const int myWrite = 2;

void setup() {                
   pinMode(myRead, INPUT);
   pinMode(myWrite, OUTPUT);
   Serial.begin(9600);  
   digitalWrite(myWrite, LOW);
}

void loop() {
  delay(100);     
  if (digitalRead(myRead)== HIGH) {
    delay (200);
    Serial.println ("Enviando respuesta");
    digitalWrite(myWrite, HIGH);
    delay(200);
    digitalWrite(myWrite, LOW);
  }
  else
    Serial.println ("No recibiendo");
 

Hay que tener en cuenta que hemos conectado las tierras GND y la alimentación 5V por lo que sólo habrá que alimentar a uno de ellos por USB para que funcione o bien utilizar otro tipo de alimentación externa pero siempre común.

Ejemplo Master 

Ejemplo Esclavo 

lunes, 4 de marzo de 2013

Proyecto Acuario Presentación

  

 

 

 

 

Proyecto Acuario Presentación


Hoy os voy a presentar mi proyecto más complejo y que hace unos pocos días puse en funcionamiento, a falta de la resolución de un problema con el sensor de PH.

Consiste en el Gestor de Acuario, en muchas páginas hay muchos diseños diferentes, yo empecé viendo distintos de ellos pero al final decidí empezar de cero yo mismo.

Lo que perseguia en un principio es controlar el PH, la temperatura y los horarios de las luces de mi acuario. Al final el resultado ha sido más complejo.

Voy a ir relatando poco a  poco mis progresos integrando los distintos componentes, muchos de ellos ya los he presentado en este blog. En un  principio partimos de los siguientes componentes mínimos:

- Un Arduino Mega (Empecé con un Arduino Nano pero se me quedó insuficiente por el tema de la memoría).

- Una pantalla LCD 20x04 I2C
- Un componente Reloj DS1307  I2C
- Dos sensores de temperatura DS18S20 resistentes al agua (con cable)
- Un sensor de PH, un conector BNC y una sonda PH BNC. 
- Una placa de Relay 5V de 4 canales.
- Un shield ethernet basado en el chip W5100 con lector microSD
- Una sonda de nivel de líquido.
- Una fuente de alimentación externa al Arduino.

Todos estos componentes son independientes para su funcionamiento por lo que muchos de ellos son opcionales y se puede ampliar el Gestor con otros distintos.

En principio el interface para interactuar con el Gestor iba a ser el LCD pero al final vi mucho más útil utilizar una conexión ethernet y mediante una web poder trabajar.

El problema que ha retrasado la puesta en funcionamiento el Gestor ha sido el sensor de PH ya que en los primeros modelos estaba utilizando el  de Atlas Scientific pero debido a su alto costo y su poca fiabilidad me estoy planteando utilizar un shield nuevo con muy buena pinta y más económico.