Ajuda a acrescentar sensor


#1

boas pessoal

estou aki com um codigo k esta kase lá lol… https://hastebin.com/azaqekoxub.cpp

entao é o seguinte… tenho um vaso com morangueiros k passao mais sede k eu…

entao para k isso nao aconteça… esp8266 , sensor de humidade no solo e uma bomba submersivel dentro de um deposito de agua ( o vaso esta na varanda e nao tenho agua canalisada la ) ate aki esta funcionar com o codigo corretamente…

mas agora keria por um sensor no deposito k desliga-se a bomba em caso de falta de agua… ( para k a bomba nao fike a trabalhar em seco…)

ate k deve ser facil soluçao mas nao estou a ver como …ideias??

abrço juca


#2

Boas Juca
Dei uma olhadela no codigo, tudo ok, mas tenho umas duvidas para dar uma ajuda.
Para já, porque o uso de um ESP8266, se não estás a usar o recurso wifi? Será algo para implementar?
Segunda duvida: Já tens ideia qual o sensor que pretendes usar?
Terceira duvida: Precisas de ter informação sobre o nivel de agua no deposito no codigo para teres informação num led a indicar nivel baixo de agua, ou apenas queres que a bomba não funcione a seco?


#3

boas DRaven

1º o esp sim a ideia mais tarde é por mqtt para receber o nivel de humidade
2º ainda nao sei bem kal… por isso ideias precisa-se talves um button … ( pensei em fazer duas astes de inox em paralelo uma ha outra até ao nivel desejado… a agua baichando do nivel nao toca nas pontas de inox e corta a passagem da corrente simulando o button
3º a ideia principal é nao gripar a bomba se nao tiver agua…

abrço


#4

Eu tenho alguns destes sensores em utilização ha ja 2 anos sem problemas.
Se o deposito for de plastico, facilmente fazes um furo na laterar à altura desejada para quando a boia do sensor fique para baixo, desligue a bomba antes de a bomba ficar a seco.
Não esquecer de usar uma resistencia pull_up no sensor.

no codigo ficaria algo como:

int sensornivel = 14;

void setup() {
pinMode(sensornivel, INPUT);
}

void loop() {
(…)
if(sensorValue<450 ){
if(sensornivel == 0) { // valor logico 0 significa nivel OK, logico 1 significa nivel baixo
digitalWrite(bomba, HIGH); // Atribui nível lógico alto ao pino bomba , acendendo-o

  digitalWrite(ledblue, LOW); // Atribui nível lógico baixo ao pino do LED, apagando-o

  digitalWrite(ledred, LOW); // Atribui nível lógico baixo ao pino do LED, apagando-o

}
(…)
}

Espero que seja uma ajuda


#5

a ideia é mesmo esta lol …mas a bomba nao esta a ligar …
o k erei feito mal no if(sensorValue<450 ) https://hastebin.com/livivuwidu.cpp


#6

Bom dia

O erro veio da minha parte do codigo, esqueci-me da parte da leitura do sensor

em vez de:
if(sensornivel == 0) {

(estavas a comparar a variavel sensornivel que tem o valor 12 com o 0, e não a leitura do sensornivel do pino 12)

escreve:
if(digitalRead(sensornivel) == 0) {

o sensor ficará ligado entre o ground e o pino 12


#7

bom dia

esta impecavel amigo…OBRIGADO pela ajuda
mas tive de acrescentar um “else” apos a tua instruçao para k se faltar a agua no deposito e a rega esteija a regar… a bomba para

if(sensorValue<450 ){
if(digitalRead(sensornivel) == 0)
{ digitalWrite(bomba, HIGH); // Atribui nível lógico alto ao pino bomba , acendendo-o
}else { // se falhar a agua no deposito a bomba para
digitalWrite(bomba, LOW);
}
digitalWrite(ledblue, LOW); // Atribui nível lógico baixo ao pino do LED, apagando-o

digitalWrite(ledred, LOW); // Atribui nível lógico baixo ao pino do LED, apagando-o
delay(5000); // atraso para k regue maais alguns segundos apos agua no sensor


#8

Exacto, faltou-me pensar nessa situação de falhar a agua a meio da rega.
Mas está tudo a funcionar, é o que conta.
Continuação de bons projetos.


#9

Boa noite…
DRaven já agora…e se não for abuso…:sunglasses:
O k tenho errado no código para k na página serial apareça o valor % …como está aparece de 0 a 1024


#10

Serial.print("humidade_Real - " );
int sensorValue = analogRead(A0);
int sensorValueReal = map(sensorValue, 0, 100, 0, 1024);
Serial.println(sensorValue);

Neste bloco de código, a 3ª linha não tem qualquer funcionalidade. Estás a converter valores entre 0 e 100 para ficar entre 0 e 1024 (na realidade o valor maximo é 1023, ou seja 1024 valores, conta-se o 0), quando a leitura do sensor ultrapassa largamente os 100.
Se queres ver os valores do sensor em valores de 0 a 100 em %, podes fazer o seguinte:

Serial.print(“Humidade Real: “); //Imprime a frase: Humidade Real:
int sensorValue = analogRead(A0); //Variavel com a leitura do sensor de humidade
int sensorValueReal = map(sensorValue, 0, 1023, 0, 100); //converte a leitura do sensor para valor entre 0 e 100
Serial.print(sensorValueReal); //Imprime o valor entre 0 e 100
Serial.println(”%”); //Imprime o simbolo: %

O código completo com alguns extras :grin:
https://hastebin.com/uzojifijax.cpp