Pues me auto respondo por si alguien le interesa en un futuro:
Después de realizar varias pruebas, veo que el calentamiento de la placa y del regulador viene por la EthernetShield, cuando conecto la fuente de 9v 1a al jack de alimentación externo la placa de arduino se calienta una barbaridad, y yo achacaba que se quedad colgado por el calor , pero me he dado cuenta de que no se queda colgado por el calor sino que se cuelga el programa por alguna otra razón.
Para el calor he econtrado otra solución que es alimentar el arduino con 5v directamente por la clavija de 5v, saltandome el regulador, dentro de unos días probaré con una fuente de 7v a ver si se calienta menos por el jack.
Pero ahora me encuentro que el programa se cuelga, por alguna razón que desconozco, os pongo el código por si alguien puede encontrar algún motivo.
/*
*
* PROGRAMA PARA LA LECTURA DE SONDA DE HUMEDAD DE SUELO PINO-TECH Y SUBIDA A BASE DE DATOS.
* -> Leemos la sonda de humedad por la entrada analógica A0, y luego subimos la lectura a una base de datos mysql para su
* posterior tratamiento.
* -> Para subir la información utilizamos una web y pasandole los datos mediante una función get y php subimos la información.
*
* La sonda de humedad de pino-tech SoilWatch 10 tiene la siguientes característica:
* - Cable blanco: Salida del sensor, se conecta a la entrada analógica A0.
* - Cable Verde : GND , se conecta a GND DE ARDUINO.
* - Cable Marron: Entrada de alimentación del sensor ( 3.3v o 5v ), segun la documentación es mas estable a 3.3v.
* Antes de instalar la sonda hay que calibrarla, para ello, se realiza una lectura de la misma fuera de la tierra y se lee la salida
* y luego se hace otra lectura dentro del agua y estos valores se guardan en la variable minADC y maxADC respectivamente.
*/
#include <avr/wdt.h>
#include <Ethernet.h>
#include <OneWire.h>
#include <DallasTemperature.h>
/* DECLARACIÓN DE CONSTANTES USADAS DURANTE EL PROGRAMA */
const int analogInPin = A0; // Pin de entrada analógica sensor SoilWatch 10.
const int minADC = 0; // Lectura del sensor al aire.
const int maxADC = 600; // Lectura del sensor sumergido en agua.
const int pinSensorTemp = 7;// Pin digital de la sonda de temperatura DS18B20
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Establecemos la mac de la Shield Ethernet.
char serverName[] = "host.host.es"; // Servidor donde está alojada la web.
int serverPort = 80; //Puerto que usa el servidor web
byte ip[] = {192,168,0,89}; //IP de arduino dentro de la red local
EthernetClient client; // Incializamos el cliente web
/* Declaración de variables usadas durante el programa */
int moistureValue, valorHumedad;
//Estas variables se les asignará un valor fijo temporalmente solo para las pruebas.
float temperaturaSuelo,temperaturaInterior,humedadInterior;
void setup() {
Serial.begin(9600); //Inicializamos la comunicación Serial a 9600 bps
Ethernet.begin(mac,ip); //Inicializamos la ethernet shield
//DS18B20.begin(); //Inicializamos el sensor de temperatura exterior ** Actualmente desconectado. **
delay(1000); //Realizamos un delay de un segundo para que todo se inicie sin problemas.
}
void loop() {
leerHumedad();
leerTemperaturaSuelo();
sendGet(temperaturaInterior,humedadInterior,temperaturaSuelo,0.0,valorHumedad);
}
/*Fucion leerHumdada()
* Valores entrada: Ninguno
* Valores salida: Ninguno
* Descripción: Esta función leerá la sonda Soilwatch y el valor de voltaje lo traduciremos a %. Este valor se almacenará
* en la variable valorHumedad
*/
void leerHumedad(){
Serial.println("Comenzamos con la lectura del sensor de Humedad SW");
//leemos la entrada analogica A0
moistureValue = analogRead(analogInPin);
//cambiamos la lectura a %
valorHumedad = map(moistureValue,minADC,maxADC,0,100);
//mostramos la lectura y su mapeo por el puerto serial
Serial.print("Moisture=");
Serial.print(moistureValue);
Serial.print(" Humedad(%)=");
Serial.println(valorHumedad);
}
/*
* Funcion leerTemperaturaSuelo()
* Valores entrada: Ninguno
* Valores salida: Ninguno
* Descripción: Lee la temperatura y la humedad de la sonda de temperatura DHT21, Y la temperatura de la sonda DS18B20 y guarda
* los valores en las variables temperaturaSuelo, temperaturaInterior, humedadInterior
* **** ESTA FUNCIONA AHORA MISMO NO HACE NADA NO ESTA IMPLEMENTADA AUN ***
*/
void leerTemperaturaSuelo(){
temperaturaSuelo = 25.0;
temperaturaInterior = 30.0;
humedadInterior = 56.0;
}
/*
* Funcion sendGet()
* Valores entrada: temperaturaInterior,humedadInterior,temperaturaSuelo,0.0,valorHumedad
* - temperaturaInterior (float) : actualmente no se controla, se le da un valor fijo
* - humedadInterior (float ): actualmente no se controla, se le da un valor fijo
* - temperaturaSuerlo (float) : actualmente no se conttrola, se le da un valor fijo
* - 0.0
* - valorHumedad: Lectura de la sonda SoilWatch
* Descripción: Se realiza un paso por parametros Get a una web php que introduce los valores en la base de datos.
*/
void sendGet ( float ti, float hi, float tis, float hs, float hsw){
if(client.connect(serverName,serverPort) == 1){
Serial.println("Conectado al servidor");
client.print("GET /datos/indexinterior.php?tmp="); client.print(ti);
client.print("&hmd="); client.print(hi);
client.print("&tmpis=");client.print(tis);
client.print("$hums=");client.print(hs);
client.print("&humsw");client.print(hsw);
client.println(" HTTP:/1.0");
client.println("Host: host.host.es");
client.println();
}else{
Serial.println(" La conexión ha fallado");
Serial.println();
}
while(client.connected() && !client.available()) delay (1); //esperamos los datos
while(client.connected() || client.available()){
char c = client.read(); //obtenemos el buffer ethernet
Serial.print(c); // Mostramos el buffer por el monitor serial.
}
client.stop(); //paramos el cliente.
Serial.println("Cliente desconectado");
}