Ustatnia modyfikacja 9 września 2024 przez Olek
Szykuje się do instalacji małej przydomowej elektrowni wiatrowej. Aby dobrze ją dobrać, trzeba znać warunki, w jakich przyjdzie jej pracować. Dlatego postanowiłem dokonać pomiarów wiatru w docelowym miejscu (i wysokości), na której ma pracować turbina. Co prawda mam już pomiary z ostatnich dwóch lat ze stacji pogodowej. Niestety jest ona umieszczona około 4 metry nad poziomem, a docelowa turbina ma być na wysokości 12 metrów. Jak wiadomo, wzrost prędkości wiatru zwiększa się ze wysokości i dlatego te pomiary mogą być niewiarygodne.
Na znanym chińskim portalu zakupiłem dwa czujniki: prędkości i kierunku wiatru.
Czujniki komunikują się za pomocą magistrali szeregowej 485 i protokołu MODBUS. Jako sterownik posłużył mi esp32 i oprogramowanie zbudowane na znanym już narzędziu ESPHome. Za pomocą WiFi dane z automatu są przekazywane do Home Assistent-a, co pozwala na bieżąco obserwować i rejestrować pomiary. Było trochę problemów ze zmianą adresu jednego z czujników, ale od czego są pasjonaci HA, tym razem z Francji :).
Teraz pozostaje zainstalowanie czujników w docelowym miejscu. Pomysł i materiały są, czekam tylko na odpowiednią pogodę.
Okazuje się, że w moim przypadki to nie takie proste zainstalować na odpowiednim wysokości te czujniki, aby nie uszkodzić opierzenia komina, do którego chciałem przymocować maszt. Jest to tez trochę skomplikowana operacja dla jednej (czy dwóch osób) bez specjalistycznego sprzętu. Mam już co prawda koncepcje, ale aby wyeliminować jakieś błędy i niepotrzebny demontaż z wysokości, postanowiłem zainstalować i przetestować czujniki w łatwiej dostępnym miejscu. I tak zainstalowałem je tymczasowo na tarasie obok mojej obecnej stacji pogodowej. Przy okazji sprawdzę, jak się mają wskazania z obu tych urządzeń.
Kod/konfiguracja ESPHome
esphome: name: wiatr friendly_name: wiatr esp32: board: esp32dev framework: type: arduino # Enable logging logger: # Enable Home Assistant API api: encryption: key: "xxxx" ota: password: "xxxx" wifi: ssid: !secret wifi_ssid password: !secret wifi_password manual_ip: static_ip: 192.168.x.xxx gateway: 192.168.x.x subnet: 255.255.255.0 dns1: 192.168.x.x # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "xxx" password: "xxx" web_server: port: 80 captive_portal: uart: tx_pin: GPIO17 rx_pin: GPIO16 baud_rate: 4800 stop_bits: 1 modbus: # uart_id: uart_0 id: modbus1 flow_control_pin: GPIO04 modbus_controller: - id: wiatr_kierunek address: 1 modbus_id: modbus1 command_throttle: 1000ms setup_priority: -10 update_interval: 1s - id: wiatr_predkosc address: 2 modbus_id: modbus1 command_throttle: 1000ms setup_priority: -10 update_interval: 600ms sensor: - platform: modbus_controller modbus_controller_id: wiatr_kierunek id: wiatr_kierunek_x name: Kierunek wiatru x address: 0x0000 register_type: holding value_type: U_WORD accuracy_decimals: 0 skip_updates: 1 icon: mdi:angle-acute - platform: modbus_controller modbus_controller_id: wiatr_kierunek id: wiatr_kierunek_stopnie name: Kierunek wiatru stopnie address: 0x0001 register_type: holding value_type: U_WORD accuracy_decimals: 0 unit_of_measurement: "°" skip_updates: 1 icon: mdi:compass-outline - platform: modbus_controller modbus_controller_id: wiatr_predkosc id: wiatr_predkosc_x name: Pędkość wiatru x address: 0x0000 register_type: holding value_type: U_WORD accuracy_decimals: 0 skip_updates: 1 icon: mdi:cog-clockwise - platform: template name: Pędkość wiatru m/s id: wiatr_predkosc_ms unit_of_measurement: "m/s" accuracy_decimals: 2 update_interval: 1s icon: mdi:wind-power-outline lambda: return ( (id(wiatr_predkosc_x).state) / (10) ); - platform: template name: Pędkość wiatru km/h id: wiatr_predkosc_kmh unit_of_measurement: km/h accuracy_decimals: 0 update_interval: 1s icon: mdi:wind-power lambda: return ( (id(wiatr_predkosc_ms).state) * (3.6) ); text_sensor: - platform: template name: Kierunek wiatru symbol id: wiatr_kierunek_symbol # unit_of_measurement: compass update_interval: 1s icon: mdi:compass-rose lambda: |- std::string val; switch (int(id(wiatr_kierunek_x).state)) { case 0: val = "N"; break; case 1: val = "NE"; break; case 2: val = "E"; break; case 3: val = "SE"; break; case 4: val = "S"; break; case 5: val = "SW"; break; case 6: val = "W"; break; case 7: val = "NW"; break; default: val = '?'; } return val; # +-----------------+| # | | | | | | # [ EN ] |o o| [GPIO23] [VSPI MOSI] # [ VP ] |o o| [GPIO22] [ I2C SCL ] # [ VN ] |o ESP-WROOM-32 o| [GPIO1 ] [UART O TX] # [RTC_GPIO4] [ADC1 CH6] [GPIO34] |o o| [GPIO3 ] [UART O RX] # [RTC_GPIO5] [ADC1 CH7] [GPIO35] |o o| [GPIO21] [ 12C SDA ] # [RTC_GPIO9] [ TOUCH9 ] [ADC1 CH4] [GPIO32] |o o| [GPIO19] [VSPI MISO] # [RTC_GPIO8] [ TOUCH8 ] [ADC1 CH5] [GPIO33] |o PIN 30 o| [GPIO18] [VSPI CLK ] # [RTC_GPIO6] [ DAC1 ] [ADC2 CH8] [GPIO25] |o #o| [GPIO5 ] [VSPI CSO ] ##### # [RTC_GPI07] [ DAC2 ] [ADC2 CH9] [GPIO26] |o DEVKIT V1 #o| [GPIO17] [UART 2 TX] ##### # [RTC_GPIO17] [ TOUCH7 ] [ADC2 CH7] [GPIO27] |o #o| [GPIO16] [UART 2 RX] ##### #[RTC_GPIO16] [HSPI CLK] [ TOUCH6 ] [ADC2 CH6] [GPIO14] |o o| [GPIO4 ] [ADC2 CHO ] [TOUCHO] [RTC_GPIO10] #[RTC_GPIO15] [HSPI MISO] [TOUCHS ] [ADC2 CH5] [GPIO12] |o o| [GPIO2 ] [ADC2 CH2 ] [TOUCH2] [RTC_GPIO12] #[RTC_GPIO14] [HSPI MOSI] [TOUCH4 ] [ADC2 CH4] [GPIO13] |o o| [GPIO15] [ADC2 CH3 ] [TOUCH3] [HSPI CSO] [RTC_GPIO13] # [ GND ] |o o| [ GND ] # [ VIN ] |o o| [ 3V3 ] # | | # | |usb| | # +------| |-------+ # # # pod adresem 2000 zapisany jest adres urządzenia: def 1; trzeba zmienić dla jednego na inny, w moim przypadku 2 to prędkościomierz # pod adresem 2001 zapisany jest prędkość komunikacji; 1-4800; 2-9800; zostaliśmy przy 4800 #




Wreszcie mierniki doczekały się swojego pierwotnego położenia, czyli 4 metry nad kalenicą dachu.




