Olá, eu coloco na programação vários sensores e eles estão dando interferência entre eles, já estão todos configurados com millis, mesmo assim uma hora um lê outro não.

Gostaria de individualizar cada um, e que todos funcionassem simultaneamente, se alguém puder ajudar agradeço

No valor do sensor de solo o 1023 corresponde a 0% esta invertido a conta ai 85% é 154

# include <dht.h> // Inclui a biblioteca no código para o sensor Dht11
# define sensorsolo A2

int porta_rele1 = 8; //Porta ligada ao pino IN1 do modulo = COOLER
int porta_rele2 = 9; //Porta ligada ao pino IN2 do modulo = LAMPADA
int porta_rele3 = 10; //Porta ligada ao pino IN3 do modulo = BOMBA
int porta_rele4 = 11; //Porta ligada ao pino IN4 do modulo


dht DHT; // Cria um objeto dht
uint32_t timer = 0; // numero inteiro de 32 bit

unsigned long millisTarefa1 = millis(); // Inicia variável de tempo

// Iniciação
void setup() {

Serial.begin(9600); // Inicia comunicação na porta serial
Serial.println (" \n Inicio do projeto \n ");

pinMode(sensorsolo, INPUT); // Define o pino do sensor de solo como entrada

pinMode(porta_rele1, OUTPUT);
pinMode(porta_rele2, OUTPUT); // Define os pinos dos reles como saída
pinMode(porta_rele3, OUTPUT);
pinMode(porta_rele4, OUTPUT);
}

// Laço de repetição
void loop() {

tarefa1(); // Executa tarefa 1

// Programação Dht11
if(millis() - timer>= 2000) // Executa 1 vez a cada 2 segundos
{

DHT.read11(A1); // leitura do dht, ligado no pino A1

Serial.print(DHT.humidity); // Exibe na serial o valor de umidade
Serial.print("% umidade");
Serial.print('\t');

Serial.print( DHT.temperature); // Exibe na serial o valor da temperatura
Serial.println("°C temperatura");

timer = millis(); // Atualiza a referência
}

// Programação sensor de umidade de solo
if (analogRead(sensorsolo) <= 154){ // 85% a 100% de umidade                        0 a 1023
digitalWrite(porta_rele3, LOW); // desliga a bomba                                 1023 ________ 100% 
Serial.println("Bomba desligada");                                         //                     x ________ 85% 
}                                                                                 //    100x = 1023.85          x = 86955‬/100 = 869,5 
else {                                                                                     // 1023 - 869,5 = 154
Serial.println(" Bomba ligada");
digitalWrite(porta_rele3, HIGH); // liga a bomba
}

Serial.print(" Umidade do solo:");
Serial.print(analogRead(sensorsolo));
Serial.print(" ");
}

// programação para lampada
void tarefa1(){
// Verifica se já passou 16h, 57600000 milisegundos
if((millis() - millisTarefa1) < 57600000 ){

digitalWrite(porta_rele2, HIGH); // Acende a lampada pino D9
}
else{

digitalWrite(porta_rele2, LOW); // Desliga a lampada pino D9
}

// Verifica se já passou 24h, 86400000 milisegundos
if((millis() - millisTarefa1) > 86400000){
millisTarefa1 = millis();
}
}

Exibições: 142

As respostas para este tópico estão encerradas.

Respostas a este tópico

olá Vanessa.

      Analisei seu código, e então reorganizei o mesmo, de forma que seja funcional e versátil.

      Mas antes de publicar o mesmo aqui, há alguns pontos que peço sua atenção:

      1)  o "Relé 1"  no seu Sistema referente a um "cooler", mas nunca é acionado. Ele não está realmente sendo usado?  Se ele for usado, então quando e como isso deve ser feito?

      2)  o "Relé 4",  também nunca é acionado. Neste caso, também não está indicado qual a função do mesmo. Então, faço os mesmos questionamentos que fiz para o "Relé 1".

      3)  para o Sensor DHT, vc especificou uma Taxa de Amostragem  a cada 2 segundos, o que está de "bom tamanho" para este modelo de sensor (inclusive para o DHT, não é aconselhável ser menor que 2 segundos).  Mas para o Sensor de Humidade,  vc não especificou  a  Taxa de Amostragem.  Da forma como está no seu código original, ela acaba sendo a mais rápida que o Arduino consegue fazer. Não seria melhor especificar uma Taxa de Amostragem adequada para o Sensor de Humidade ?

      4)  ainda para o Sensor de Humidade:  como ele está sendo usado para ligar/desligar uma Bomba Dágua,  vc não acha que seria melhor usar uma Histerese  para melhor controlar isso?  Caso vc não conheça sobre Histerese,  ela é a forma por exemplo, como é feito o controle liga/desliga de uma geladeira (claro, neste caso a variável de controle  é a temperatura interna da geladeira).  Vc pode também pesquisar na internet sobre isso para entender melhor como é feito um controle com Histerese, pois há muitos exemplos.  Em minha opinião, faz mais sentido vc usar dois pontos de referência da Humidade do Solo para controlar a Bomba (ou seja, usar Histerese).

      5)  acredito que vc esteja usando o Arduino UNO, devido à numeração dos pinos no seu código original. Vc poderia confirmar se é o UNO?

      6)  há diversas Bibliotecas para o DHT  disponíveis por aí.  Poderia informar qual é especificamente a que vc está usando?

      7)  os seus Relés  são realmente acionados por lógica "HIGH"?   Pergunto isso porque a maioria dos módulos com Relés existentes no mercado e que são muito usados com o Arduino,  são acionados por lógica "LOW".  Caso vc não tenha certeza,  post aqui uma foto do seu módulo Relé, de forma que seja possível que eu analise o mesmo (para isso a foto deve ter boa resolução).

      Também implementei uma Simulação no Proteus (uma vez que este é bem popular),  que irei publicar junto com o código.

      Mas tenho que pedir que vc anexe seu código original como um arquivo no tópico,  e ao mesmo tempo remova o código que vc "colou" como texto no tópico.  Há problemas técnicos relacionados a isso, e não é um simples preciosismo nem formalidade do pessoal aqui do site.  A forma de fazer isso está descrito logo no início da página principal do site.

      Fico no aguardo de suas respostas. Logo então,  irei publicar aqui a implementação.

      Abrçs

      Elcids

valeu obrigado foi aqui :)

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço