Kvalita vody pomocou TDS A PH senzoru - NÁVOD
Napsal: 22. září 2022, 21:37
Ahojte bratovi vyrabam narodeninovy darček nakoľko je akvarista tak pomocou esp mu vyrabam meranie kvality vody.
ČO DOKÁŽE:
TDS je údaj o celkovom množstve rozpustených látok vo vode (minerály, soli, kovy…). S výpisom kvality a upozornením na veľmi špinavu vodu
PH vody (doplnim)
Teplotu vody (s upozornením na nizku a vysokú teplotu
Teplotu a vlhkosť okolia
Lux meter na ovladanie podsvietenia displeja
Tlačidla ovladanie relay druhe bez zadania
Displej s jednotlivými hodnotami
Bateria (indikacia nabijania plneho nabitia vybitia a poškodenie alebo chybajuca bateria)
Relay zatial s nedefinovaným nastavením
Kvalita wifi signalu na displeji
Nakoľko je to ako darček a brat nema HA tak je to bez integracie hodin atď všetko bude fungovať na online mode s webovým rozhraním.
ČO POTREBUJEME:
Základ:
- esp 32 (ja som použil konkretne lolin32 lite s integrovanym obvodom na pripojenie baterie),
- tds senzor (TDS meter v1.0 3.3v)
- dallas teplotny senzor vodovzdorny, (DS18B20)
- ph senzor (PH electrode sensor)
- ads1115 (budem testovať pretože ph senzor používa 5v vstup)
Doplnkové:
- DHT22 modul
- OLED display 128x64 1.3" i2c
- relay 3.3v 230ac 10A
- ldr photodioda
- 18650 bateria
- 2x button
- 1x vypinac mini
- Spotrebne:
- 2x 10k resistor pre i2c zosilnenie
- 2x 1k resistor pre tlačidlá
- 1x 10k resistor pre ldr photodiodu
- 4.7k pre DS18B20 senzor
- 680k a 330k resistory a 0.1uf kondenzator pre citanie adc stavu baterie
- 1M a 1k resistory pre citanie stavu nabijania na ld4085
- prototypovacie dosky
- gpio konektory.
- lan konektor s 2x led + 22ohm odpory pre led
- farebna kabelaz awg28
PRIPOJENIE:
Väčšinu senzorov som odkukal z internetu. Tak ak máte problem so zapojením podľa môjho návodu stači zadať do gooogle .
TDS modul:
Je jednoduchy nakoľko kablovy senzor ide priamo do modulu a z moduku idu 3piny 3.3VDC, GND a analog, ktory priamo pripojime do adc pinu na esp32.
Dallas DS18B20:
Taktiež 3 piny 3.3VDC, GND, a analog pripojiť s 4.7k do VDC a Do gpio pinu nemusi byt adc.
PH:
Doplnim ked mi pride.
Adc citanie stavu baterie pomocou divideru.
Relay 3vdc, gnd, a digitalny pin
Display Pomocou i2c 3.3vdc, gnd a gpio22 a 23 s prepojenim pomocou 10k resistorom do VDC
DHT:
3.3VDC, GND A digital pin
LDR:
3.3Vdc do ldr z ldr do adc a z adc cez 4.7k do GND
Samozrejme tlacidla, bateriu vypinace a dalšie veci nejdem rozpisovať.
FOTO: YAML KOD:
PLÁNOVANÉ:
- Doplniť PH senzor ked pride poštou
- krabičku spodnú zabaliť do čiernej mnatnej fólie
- kalibrovať priamo v akvariu
- doplniť ovladanie relay na konkretny prvok v akvariu (ohrievač, osvetlenie atď)
ČO DOKÁŽE:
TDS je údaj o celkovom množstve rozpustených látok vo vode (minerály, soli, kovy…). S výpisom kvality a upozornením na veľmi špinavu vodu
PH vody (doplnim)
Teplotu vody (s upozornením na nizku a vysokú teplotu
Teplotu a vlhkosť okolia
Lux meter na ovladanie podsvietenia displeja
Tlačidla ovladanie relay druhe bez zadania
Displej s jednotlivými hodnotami
Bateria (indikacia nabijania plneho nabitia vybitia a poškodenie alebo chybajuca bateria)
Relay zatial s nedefinovaným nastavením
Kvalita wifi signalu na displeji
Nakoľko je to ako darček a brat nema HA tak je to bez integracie hodin atď všetko bude fungovať na online mode s webovým rozhraním.
ČO POTREBUJEME:
Základ:
- esp 32 (ja som použil konkretne lolin32 lite s integrovanym obvodom na pripojenie baterie),
- tds senzor (TDS meter v1.0 3.3v)
- dallas teplotny senzor vodovzdorny, (DS18B20)
- ph senzor (PH electrode sensor)
- ads1115 (budem testovať pretože ph senzor používa 5v vstup)
Doplnkové:
- DHT22 modul
- OLED display 128x64 1.3" i2c
- relay 3.3v 230ac 10A
- ldr photodioda
- 18650 bateria
- 2x button
- 1x vypinac mini
- Spotrebne:
- 2x 10k resistor pre i2c zosilnenie
- 2x 1k resistor pre tlačidlá
- 1x 10k resistor pre ldr photodiodu
- 4.7k pre DS18B20 senzor
- 680k a 330k resistory a 0.1uf kondenzator pre citanie adc stavu baterie
- 1M a 1k resistory pre citanie stavu nabijania na ld4085
- prototypovacie dosky
- gpio konektory.
- lan konektor s 2x led + 22ohm odpory pre led
- farebna kabelaz awg28
PRIPOJENIE:
Väčšinu senzorov som odkukal z internetu. Tak ak máte problem so zapojením podľa môjho návodu stači zadať do gooogle .
TDS modul:
Je jednoduchy nakoľko kablovy senzor ide priamo do modulu a z moduku idu 3piny 3.3VDC, GND a analog, ktory priamo pripojime do adc pinu na esp32.
Dallas DS18B20:
Taktiež 3 piny 3.3VDC, GND, a analog pripojiť s 4.7k do VDC a Do gpio pinu nemusi byt adc.
PH:
Doplnim ked mi pride.
Adc citanie stavu baterie pomocou divideru.
Relay 3vdc, gnd, a digitalny pin
Display Pomocou i2c 3.3vdc, gnd a gpio22 a 23 s prepojenim pomocou 10k resistorom do VDC
DHT:
3.3VDC, GND A digital pin
LDR:
3.3Vdc do ldr z ldr do adc a z adc cez 4.7k do GND
Samozrejme tlacidla, bateriu vypinace a dalšie veci nejdem rozpisovať.
FOTO: YAML KOD:
Kód: Vybrat vše
substitutions:
friendly_name: ESP-Aquarium
device_name: esp-aquarium
created_by: "StudioTiiM 2022"
device_description: "measuring the quality of water in the aquarium. A birthday present"
#-------------------------------------------
# Define pins
#-------------------------------------------
battery_state_pin: GPIO13 #connected to lp4054 CHARG PIN
usb_state_pin: GPIO15 # usb connected
led_yellow_pin: GPIO16
led_green_pin: GPIO17
button1_pin: GPIO18 #yellow
button2_pin: GPIO19 #orange
dht_pin: GPIO27 #DHT22 AM2302 Temp and humidity
dallas_pin: GPIO26 #DS18B20 temp
relay_pin: GPIO25 #Relay 3VDC 230V 10A
battery_pin: GPIO39 #VN
tds_pin: GPIO33
ph_pin: GPIO34
ldr_pin: GPIO35
#-------------------------------------------
# ESP main settings
#-------------------------------------------
esphome:
name: esp-aquarium
esp32:
board: lolin_d32
framework:
type: arduino
logger:
api:
ota:
password: !secret ota_pass
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "$device_name Hotspot"
password: "passaquarium"
web_server:
port: 80
captive_portal:
#-------------------------------------------
# DEFINE PIN I2C AND DALLAS TEMPERATURE SENSOR
#-------------------------------------------
i2c:
sda: 22 #purple
scl: 23 #blue
dallas:
- pin: "$dallas_pin"
update_interval: 15s
#-------------------------------------------
# STATUS LED
# Yellow led on lan socket
#-------------------------------------------
status_led:
pin:
number: "$led_yellow_pin"
inverted: true
#-------------------------------------------
# SENSORS
#-------------------------------------------
sensor:
#-------------------------------------------
# Duty cycle - battery state charging
# connected to lp4054 modul CHARGE PIN
# battery charging pin is low, full charge pin is high, no battery high impedance on pin
# connected to mcu whit two resistors 1M to VCC and 1k to GPIO
#-------------------------------------------
- platform: duty_cycle
pin: "$battery_state_pin"
# name: "${friendly_name} Battery2 duty"
id: battery_state
update_interval: 2s
on_value:
if:
condition:
binary_sensor.is_on: usb_state
then:
- if:
condition:
sensor.in_range:
id: battery_state
below: 10
then:
- lambda: id(power_state).publish_state("Charge");
- if:
condition:
sensor.in_range:
id: battery_state
above: 99.9
then:
- lambda: id(power_state).publish_state("Full Charge");
- if:
condition:
sensor.in_range:
id: battery_state
above: 99.0
below: 99.9
then:
- lambda: id(power_state).publish_state("No Battery");
else:
- if:
condition:
binary_sensor.is_off: usb_state
then:
- lambda: id(power_state).publish_state("On Battery");
#-------------------------------------------
# Battery sensor - ADC whit divider units % battery 18650 3.7V,
# divider resistor 330k and 680k whit 0.1uF
# 4.3V battery max voltage out
#-------------------------------------------
- platform: adc
pin: "$battery_pin"
name: "${friendly_name} Battery"
attenuation: 11db
accuracy_decimals: 0
unit_of_measurement: "%"
update_interval: 1s
filters:
- median:
window_size: 7
send_every: 4
send_first_at: 3
- calibrate_linear:
- 1.85 -> 0 #2.7 min voltage
- 2.75 -> 100 #4.15 max voltage
# - filter_out: 0.0
# No value lower than 0
- lambda: 'return max((float)0.0, x);'
# No value greater than 100
- lambda: 'return min((float)100.0, x);'
icon: mdi:battery
id: batlevel
device_class: battery
entity_category: diagnostic
#-------------------------------------------
# Wifi signal component
#-------------------------------------------
- platform: wifi_signal
name: "${friendly_name} Signal"
id: "signal"
update_interval: 360s
#-------------------------------------------
# TDS modul - TDS Meter V1.0
# 1 ppm TDS = 1,56 µS/cm = 0,156 mS/m = 0,00156 mS/cm
# 1 µS/cm = 0,1 mS/m = 0,001 mS/cm = 0,64 ppm TDS
# Agentúra EPA nastavila určité kvalitatívne ukazovatele kvality vody:
# DESTILOVANÁ < 50
# ČISTÁ 50 – 150 ppm – je ideálna čistá voda. Takúto vodu dokážu upraviť domáce osmotické filtre, plus doupraviť uhlíkové filtre.
# PITNÁ 150 – 200 ppm – je považovaná za akceptovateľnú vodu na pitie.
# MINERALIZOVANA200 – 490 ppm – je vysoko mineralizovaná voda.
# ŠPINAVÁ viac ako 500 ppm – je voda maximálne koncentrovaná minerálmi a rozpustenými látkami vo vode.
# max in aquarium 600ppm
#-------------------------------------------
# Raw voltage on pin
- platform: adc
pin: "$tds_pin"
name: "Aquarium tds raw voltage"
id: tds_raw_v
attenuation: 6db
update_interval: 500ms
unit_of_measurement: "V"
icon: "mdi:water-percent"
filters:
- median:
window_size: 8
send_every: 5
send_first_at: 4
internal: true
# Temperature Compensated Voltage
- platform: template
name: "TDS 01 TCV"
id: temp01_comp_v
unit_of_measurement: 'v'
accuracy_decimals: 3
lambda: 'return ((id(tds_raw_v).state) / (1 + (0.02 * ((id(temp_water).state) - 25.0))));'
update_interval: 5s
internal: true
# Temperature Compensated TDS
- platform: template
name: "${friendly_name} Aquarium Water Quality"
id: water_quality_tds
icon: "hass:water-opacity"
unit_of_measurement: 'PPM'
accuracy_decimals: 0
lambda: return (133.42*(id(temp01_comp_v).state)*(id(temp01_comp_v).state)*(id(temp01_comp_v).state) - 255.86*(id(temp01_comp_v).state)*(id(temp01_comp_v).state) + 857.39*(id(temp01_comp_v).state))*0.5;
update_interval: 5s
#-------------------------------------------
# DALLAS temeprature sensor DS18B20
#-------------------------------------------
- platform: dallas
address: 0xde3cc1f64821fd28
name: "${friendly_name} Aquarium Temperature"
id: temp_water
unit_of_measurement: "°C"
#-------------------------------------------
# LDR SENSOR - LIGHT lux whit ldr 4.7k
# full scale 11db
# calibrate whit mobile app lux
#-------------------------------------------
- platform: adc
id: ldr_adc
attenuation: 11db
pin: "$ldr_pin"
name: "${friendly_name} Illuminance"
unit_of_measurement: lux
device_class: illuminance
accuracy_decimals: 0
update_interval: 1.0s
filters:
- median:
window_size: 5
send_every: 4
send_first_at: 3
- calibrate_polynomial:
degree: 5
datapoints:
# Map 0.0 (from sensor) to 0.0 (true value)
- 0.0 -> 0.0
- 0.2 -> 0.0
- 0.5 -> 5
- 0.75 -> 12
- 1.0 -> 50
- 1.5 -> 75
- 1.75 -> 120
- 2.0 -> 200
- 2.25 -> 350
- 2.5 -> 750
- 2.75 -> 1500
- 2.9 -> 2000
- 3.0 -> 2600
- 3.14 -> 3600
# No value lower than 0
- lambda: 'return max((float)0.0, x);'
on_value:
then:
- if:
condition:
lambda: "return id(ldr_adc).state > 10;"
then:
- light.turn_on: displaylight
else:
- light.turn_off: displaylight
#-------------------------------------------
# PH sensor module
#-------------------------------------------
#-------------------------------------------
# DHT22 - Temperature and Humidity
#-------------------------------------------
- platform: dht
model: AM2302
pin: "$dht_pin"
temperature:
name: "${friendly_name} Temperature"
id: temp
humidity:
name: "${friendly_name} Humidity"
id: humidity
# update_interval: 15s
#-------------------------------------------
# BINARY SENSORS
#-------------------------------------------
binary_sensor:
#-------------------------------------------
# USB state - solder onboard charger state led in vcc
# when active usb ON
#-------------------------------------------
- platform: gpio
# name: "${friendly_name} Battery state"
id: usb_state
pin: "$usb_state_pin"
on_state:
then:
component.update: battery_state
#-------------------------------------------
# Button Up
# relay
#-------------------------------------------
- platform: gpio
name: "${friendly_name} Button 1"
pin:
number: "$button1_pin"
id: button_up
filters:
- invert:
- delayed_on: 10ms
on_press:
then:
- switch.template.publish:
id: button_relay
state: !lambda |-
if (id(button_relay).state) {
return false;
} else {
return true;
}
#-------------------------------------------
# Button Down
#-------------------------------------------
- platform: gpio
name: "${friendly_name} Button 2"
pin:
number: "$button2_pin"
id: button_down
filters:
- invert:
- delayed_on: 10ms
#-------------------------------------------
# TEXT SENSORS
#-------------------------------------------
text_sensor:
#-------------------------------------------
# Charger text sensor
#-------------------------------------------
- platform: template
name: "${friendly_name} Power status"
icon: mdi:power-plug
id: power_state
lambda: |-
return {"Loading"};
update_interval: never
#-------------------------------------------
# SWITCHES
#-------------------------------------------
switch:
#-------------------------------------------
# Template Switch
#-------------------------------------------
- platform: template
name: "${friendly_name} Relay"
id: button_relay
optimistic: true
restore_state: on
on_turn_on:
then:
- switch.turn_on:
id: relay
- light.turn_on:
id: green_led_switch
on_turn_off:
then:
- switch.turn_off:
id: relay
- light.turn_off:
id: green_led_switch
#-------------------------------------------
# Switch - relay JQC3F 03VDC-C 250AVC 10A whit optoculer - LOW TRIGGER
#-------------------------------------------
- platform: gpio
name: "${friendly_name} Relay"
pin:
number: "$relay_pin"
inverted: true
id: relay
#-------------------------------------------
# LIGHTS
#-------------------------------------------
light:
#-------------------------------------------
# OLED brightness control
#-------------------------------------------
- platform: monochromatic
name: "${friendly_name} Brightness"
output: oled_bc
id: displaylight
icon: "mdi:monitor"
#-------------------------------------------
# Led green control - charge battery state
#-------------------------------------------
- platform: binary
name: "${friendly_name} Charge Green Led"
output: led_green
id: green_led_switch
#-------------------------------------------
# OUTPUTS - OLED brightness control
#-------------------------------------------
output:
#-------------------------------------------
# OLED brightness control
#-------------------------------------------
- platform: template
id: oled_bc
type: float
write_action:
then:
- lambda: id(oled).set_contrast(state);
min_power: 0.2
max_power: 1.0
#-------------------------------------------
# Led green control - charge battery state
# green led on lan socket
#-------------------------------------------
- platform: gpio
id: led_green
pin: "$led_green_pin"
#-------------------------------------------
# DISPLAY
#-------------------------------------------
display:
- platform: ssd1306_i2c
model: "SH1106 128x64"
id: oled
reset_pin: 18
address: 0x3C
# invert: true
# rotation: 180°
lambda: |-
//--------------------------------------------------------------------------
// START PAGE
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// TITLE TOP
//--------------------------------------------------------------------------
it.print(0, 0, id(font3), TextAlign::TOP_LEFT, "KVALITA VODY");
//--------------------------------------------------------------------------
// WIFI SIGNAL SENSOR - mdi print
//--------------------------------------------------------------------------
if (id(usb_state).state) {
float duty_battery = (id(battery_state).state); //convert state to float
if (duty_battery < 10) {
static int a = 0;
a++;
if ((a % 2) == 0) {
//power plug icon
it.printf(it.get_width() - 4, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F06A5");
}
else {
//empty space
it.printf(it.get_width() - 4, 1, id(font2), TextAlign::TOP_RIGHT, " ");
}
}
else {
//power plug icon
it.printf(it.get_width() - 4, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F06A5");
}
int signal_wifi = int(id(signal).state); //convert state to int
if (signal_wifi < 0 && signal_wifi >= -50) {
it.printf(it.get_width() - 14, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BE");
}
if (signal_wifi < -50 && signal_wifi >= -70) {
it.printf(it.get_width() - 14, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BD");
}
if (signal_wifi < -70 && signal_wifi >= -100) {
it.printf(it.get_width() - 14, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BC");
}
else {
it.printf(it.get_width() -14, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BF");
}
}
else {
int signal_wifi = int(id(signal).state); //convert state to int
if (signal_wifi < 0 && signal_wifi >= -50) {
it.printf(it.get_width() - 7, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BE");
}
if (signal_wifi < -50 && signal_wifi >= -70) {
it.printf(it.get_width() - 7, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BD");
}
if (signal_wifi < -70 && signal_wifi >= -100) {
it.printf(it.get_width() - 7, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BC");
}
else {
it.printf(it.get_width() -7, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F08BF");
}
}
//--------------------------------------------------------------------------
// BATTERY SENSOR - mdi print
//--------------------------------------------------------------------------
float duty_battery = (id(battery_state).state); //convert state to float
if (duty_battery > 99 && duty_battery < 99.8) {
it.printf(it.get_width() + 4, 0, id(fonticon), TextAlign::TOP_RIGHT, "\U000F0083");
}
else {
float bat_level = (id(batlevel).state); //convert batlevel state to float
//>100%
if (bat_level >= 95) {
it.printf(it.get_width() + 4, 0, id(fonticon), TextAlign::TOP_RIGHT, "\U000F0079");
}
//>75%
else if (bat_level < 95 && bat_level >= 75) {
it.printf(it.get_width() + 3, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F0081");
}
//>50%
else if (bat_level < 75 && bat_level >= 50) {
it.printf(it.get_width() + 3, 0, id(fonticon), TextAlign::TOP_RIGHT, "\U000F007F");
}
//>25%
else if (bat_level < 50 && bat_level >= 25) {
it.printf(it.get_width() + 3, 0, id(fonticon), TextAlign::TOP_RIGHT, "\U000F007B");
}
//>0%
else if (bat_level < 25) {
static int i = 0;
i++;
if ((i % 2) == 0)
it.printf(it.get_width() + 4, 0, id(font2), TextAlign::TOP_RIGHT, " ");
else
it.printf(it.get_width() + 3, 1, id(fonticon), TextAlign::TOP_RIGHT, "\U000F008e");
}
else {
it.printf(it.get_width() + 4, 0, id(fonticon), TextAlign::TOP_RIGHT, "\U000F0083");
}
}
//--------------------------------------------------------------------------
// LINE
//--------------------------------------------------------------------------
it.line(0, 14, 128, 14);
//--------------------------------------------------------------------------
// DALLAS TEMPERATURE
//--------------------------------------------------------------------------
float water_temp = (id(temp_water).state); //convert state to float
//<22
if (water_temp <= 22) {
static int z = 0;
z++;
if ((z % 2) == 0) {
it.printf(0, 64, id(font1), TextAlign::BASELINE_LEFT, "%.1f", id(temp_water).state);
it.printf(52, 64, id(font2), TextAlign::BASELINE_LEFT, "°C");
}
else {
it.printf(0, 40, id(font2), TextAlign::BASELINE_LEFT, "LOW");
it.printf(0, 64, id(font2), TextAlign::BASELINE_LEFT, "TEMP");
it.printf(52, 64, id(font2), TextAlign::BASELINE_LEFT, "°C");
}
}
//22-28
else if (water_temp > 22 && water_temp < 28) {
it.printf(0, 64, id(font1), TextAlign::BASELINE_LEFT, "%.0f", id(temp_water).state);
it.printf(52, 64, id(font2), TextAlign::BASELINE_LEFT, "°C");
}
//>=28
else if (water_temp >= 28) {
static int q = 0;
q++;
if ((q % 2) == 0) {
it.printf(0, 64, id(font1), TextAlign::BASELINE_LEFT, "%.1f", id(temp_water).state);
it.printf(52, 64, id(font2), TextAlign::BASELINE_LEFT, "°C");
}
else {
it.printf(0, 64, id(font1), TextAlign::BASELINE_LEFT, "HIGH");
it.printf(52, 64, id(font2), TextAlign::BASELINE_LEFT, "°C");
}
}
//nan
else {
it.printf(0, 40, id(font2), TextAlign::BASELINE_LEFT, "LOAD");
it.printf(0, 64, id(font2), TextAlign::BASELINE_LEFT, "TEMP");
}
//--------------------------------------------------------------------------
// TDS
//--------------------------------------------------------------------------
if (isnan(id(water_quality_tds).state)) {
it.printf(128, 15, id(font2), TextAlign::TOP_RIGHT, "LOAD TDS");
}
else {
it.printf(110, 15, id(font2), TextAlign::TOP_RIGHT, "%.0f", id(water_quality_tds).state);
it.printf(128, 15, id(font4), TextAlign::TOP_RIGHT, "ppm");
}
float water_quality = (id(water_quality_tds).state); //convert state to float
//<50
if (water_quality <= 50) {
it.printf(128, 39, id(font3), TextAlign::TOP_RIGHT, "DESTIL");
}
//50-150
else if (water_quality > 50 && water_quality <= 150) {
it.printf(128, 39, id(font3), TextAlign::TOP_RIGHT, "CISTA");
}
//150-200
else if (water_quality > 150 && water_quality <= 200) {
it.printf(128, 39, id(font3), TextAlign::TOP_RIGHT, "PITNA");
}
//200-490
else if (water_quality > 200 && water_quality <= 490) {
it.printf(128, 39, id(font3), TextAlign::TOP_RIGHT, "MINERAL");
}
//>490
else if (water_quality > 490) {
static int y = 0;
y++;
if ((y % 2) == 0)
it.printf(128, 39, id(font3), TextAlign::TOP_RIGHT, "SPINAVA");
else
it.printf(128, 39, id(font3), TextAlign::TOP_RIGHT, "VYCISTIT");
}
else {
}
//--------------------------------------------------------------------------
// DHT22
//--------------------------------------------------------------------------
if (id(temp).has_state()) {
it.printf(128, 64, id(font3), TextAlign::BASELINE_RIGHT , "%.1fŘ %.0f%%", id(temp).state, id(humidity).state);
}
//--------------------------------------------------------------------------
// END PAGE
//--------------------------------------------------------------------------
#-------------------------------------------
# FONT
#-------------------------------------------
font:
- file: 'materialdesignicons-webfont.ttf'
id: fonticon
size: 14
glyphs: [
"\U000F08BF", # no wifi
"\U000F08BC", # wifi low
"\U000F08BD", # mwifi middle
"\U000F08BE", # wifi high
"\U000F0079", # full
"\U000F0081", # 75
"\U000F007F", # 50
"\U000F007B", # 25
"\U000F0083", # alert
"\U000F008e", # empty
"\U000F0241", # flash
"\U000F0904", # sleep
"\U000F06A5", # power plug
]
- file: 'fonts/steelfish_bd.ttf'
id: font1
size: 48
- file: 'fonts/steelfish_bd.ttf'
id: font2
size: 22
- file: 'fonts/pixeloperator.ttf'
id: font3
size: 14
glyphs:
['&', '@', '!', ',', '.', '"', '%', '(', ')', '+', '-', '_', ':', '°', '0',
'1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E',
'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' ', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z','å', 'ä', 'ö', '/','º','µ','³', 'Ř']
- file: 'fonts/studiotiim.ttf'
id: font4
size: 14
- Doplniť PH senzor ked pride poštou
- krabičku spodnú zabaliť do čiernej mnatnej fólie
- kalibrovať priamo v akvariu
- doplniť ovladanie relay na konkretny prvok v akvariu (ohrievač, osvetlenie atď)