-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsensores.ino
57 lines (48 loc) · 1.78 KB
/
sensores.ino
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
void solo()
{
ultimoValorSolo = FazLeituraUmidade();
ultimaLeituraSolo = millis();
Serial.print("- Controlando umidade de solo: ");
Serial.print(ultimoValorSolo);
Serial.println("%");
if (ultimoValorSolo >= SOIL_MEASURE_LIMIT && ultimoValorSolo <= SOIL_MEASURE_MAX) {
drawHappyFace();
}
if (ultimoValorSolo >= SOIL_MEASURE_MAX) {
drawHearth();
}
if (ultimoValorSolo < SOIL_MEASURE_LIMIT) {
drawSadFace();
}
}
//Função: faz a leitura do nível de umidade
//Parâmetros: nenhum
//Retorno: umidade percentual (0-100)
//Observação: o ADC do NodeMCU permite até, no máximo, 3.3V. Dessa forma,
// para 3.3V, obtem-se (empiricamente) 978 como leitura de ADC
// @from https://www.filipeflop.com/blog/planta-iot-com-esp8266-nodemcu/
float FazLeituraUmidade(void)
{
int ValorADC;
float UmidadePercentual;
ValorADC = analogRead(SOIL_SENSOR_PIN); //978 -> 3,3V
Serial.print("- Leitura ADC: ");
Serial.println(ValorADC);
//Quanto maior o numero lido do ADC, menor a umidade.
//Sendo assim, calcula-se a porcentagem de umidade por:
//
// Valor lido Umidade percentual
// _ 0 _ 100
// | |
// | |
// - ValorADC - UmidadePercentual
// | |
// | |
// _|_ 978 _|_ 0
//
// (UmidadePercentual-0) / (100-0) = (ValorADC - 978) / (-978)
// Logo:
// UmidadePercentual = 100 * ((978-ValorADC) / 978)
UmidadePercentual = 100 * ((978-(float)ValorADC) / 978);
return UmidadePercentual;
}