Hola a todos.
Después de leer varios hilos, y especialmente el de hiddenotebook, quien, junto con la ayuda de los moderadores ha hecho un trabajo francamente didáctico, me puse a hacer mi proyecto de riego autónomo.
La principal diferencia es que quiero usar cuatro sensores de humedad independientes, y teniendo en cuenta los problemas de corrosión, me decidí a comprar unos sensores como estos
Después de pelearme mucho tiempo para entender un poco el proceso y hacer las pruebas pertinentes, cuando estoy haciendo el montaje en una pared, me doy cuenta de que estoy teniendo problemas con las entradas analógicas.
-
Cuando pincho el pin de datos en A0, me da valores para A0 y A1.
-
Cuando pincho en A1 me da un valor aparentemente correcto para la citada entrada analógica.
-
Si pincho en A2, no me da ningún valor.
-
Si pincho en A3, me da valores para A0 y A1.
A alguien se le ocurre por qué puede ser??
En las fotos está con un clónico, pero en el montaje de pared está con un Arduino UNO original, y me da el mismo problema.
Gracias por vuestra ayuda
Saludos.
Fotos:
Código utilizado:
#include <SPI.h> //Cargar libreria de comunicacion SPI
#include "Ucglib.h" //Librería TFT 2.2 de ElecFreaks 241*320
Ucglib_ILI9341_18x240x320_SWSPI ucg(/*sclk=*/ 4, /*data=*/ 3, /*cd=*/ 6 , /*cs=*/ 7, /*reset=*/ 5); /*Conexion TFT a Arduino Elec Freaks Shield */
// set all moisture sensors PIN ID
int moisture1 = A0;
int moisture2 = A1;
int moisture3 = A2;
int moisture4 = A3;
// declare moisture values
int moisture1_value = 0;
int moisture2_value = 0;
int moisture3_value = 0;
int moisture4_value = 0;
int hysterisis = 10; // Margen de riego.
void setup() {
//-------------- TFT SETTINGS -----------------------
delay(1000);
ucg.begin(UCG_FONT_MODE_SOLID); //Inicia pantalla
ucg.clearScreen(); //Linmpia pantalla
ucg.setRotate90(); //rota la pantalla
}
void loop() {
//void display(){ // Rutina para mostrar datos en TFT
// ------------- SOIL SENSOR ------------------------
//Comprueba si los sensores dan un determinado valor y riega hasta alcanzar otro valor
//Sensor 1
moisture1_value = analogRead(moisture1);
moisture1_value = map(moisture1_value, 670, 340, 0, 100);//Nos convierte el valor que da la sonda en un valor entre 0 y 100
//Sensor 2
moisture2_value = analogRead(moisture2);
moisture2_value = map(moisture2_value, 670, 340, 0, 100);//Nos convierte el valor que da la sonda en un valor entre 0 y 100
//Sensor 3
moisture3_value = analogRead(moisture3);
moisture3_value = map(moisture1_value, 670, 340, 0, 100);//Nos convierte el valor que da la sonda en un valor entre 0 y 100
//Sensor 4
moisture4_value = analogRead(moisture4);
moisture4_value = map(moisture1_value, 670, 340, 0, 100);//Nos convierte el valor que da la sonda en un valor entre 0 y 100
//Mostrar en display los datos del DHT11
ucg.setFont(ucg_font_timR10_hr);
ucg.setColor(0, 255, 0); //verde
ucg.setFont(ucg_font_ncenB14_hf);
ucg.setColor(255, 255, 255); //blanco
ucg.setPrintPos(1,35);
ucg.print("Ambiente");
ucg.setPrintPos(35,40);
ucg.setScale2x2();//duplica tamaño fuente
ucg.undoScale();
ucg.setPrintPos(115,80);
ucg.print("*C");
ucg.setPrintPos(95,40);
ucg.setScale2x2();
//ucg.print(h);
ucg.undoScale();
ucg.setPrintPos(235,80);
ucg.print("%");
//Mostrar en pantalla los datos de los sensores de suelo
ucg.setPrintPos(60,122);
ucg.print("Humedad macetas (%)");
//Dibuja círculos en la pantalla
ucg.drawCircle(40, 175, 35, UCG_DRAW_ALL);
ucg.drawCircle(120, 175, 35, UCG_DRAW_ALL);
ucg.drawCircle(200, 175, 35, UCG_DRAW_ALL);
ucg.drawCircle(280, 175, 35, UCG_DRAW_ALL);
//Imprime en display los valores de los sensores de tierra
ucg.setPrintPos(9, 95);
ucg.setScale2x2();
if (moisture1_value < 80)
{
ucg.setColor(255, 210, 0); //naranja-amarillo
}
else
{
ucg.setColor(100, 255, 0); //verde
}
if(moisture1_value <= 9) // coloca un cero cuando el valor es menor a nueve
{
ucg.print(' ');
ucg.print(' ');
}
if(moisture1_value > 99) // coloca un cero cuando el valor es menor a nueve
{
ucg.print('9');
ucg.print('9');
}
else
{
ucg.print(moisture1_value);
}
ucg.setPrintPos(49, 95);
if (moisture2_value < 80)
{
ucg.setColor(255,210, 0); //naranja-amarillo
}
else
{
ucg.setColor(100, 255, 0); //verde
}
if(moisture2_value <= 9) // coloca un cero cuando el valor es menor a nueve
{
ucg.print(' ');
ucg.print(' ');
}
if(moisture2_value > 99) // coloca un cero cuando el valor es menor a nueve
{
ucg.print('9');
ucg.print('9');
}
else
{
ucg.print(moisture2_value);
}
ucg.setPrintPos(89, 95);
if (moisture3_value < 80)
{
ucg.setColor(255, 210, 0); //naranja-amarillo
}
else
{
ucg.setColor(100, 255, 0); //verde
}
if(moisture3_value <= 9) // coloca un cero cuando el valor es menor a nueve
{
ucg.print(' ');
ucg.print(' ');
}
if(moisture3_value > 99) // coloca un cero cuando el valor es menor a nueve
{
ucg.print('9');
ucg.print('9');
}
else
{
ucg.print(moisture3_value);
}
ucg.setPrintPos(129, 95);
if (moisture4_value < 80)
{
ucg.setColor(255, 210, 0); //naranja-amarillo
}
else
{
ucg.setColor(100, 255, 0); //verde
}
if(moisture4_value <= 9) // coloca un cero cuando el valor es menor a nueve
{
ucg.print(' ');
ucg.print(' ');
}
if(moisture4_value > 100) // coloca un cero cuando el valor es menor a nueve
{ ucg.print('9');
ucg.print('9'); }
else
{
ucg.print(moisture4_value);
}
ucg.undoScale();
delay(500);
}