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();
}
}
Tags:
As respostas para este tópico estão encerradas.
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 :)
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por