HECA z SHT30 a alerty

Hej,
jestem stałym fanem czujnika i postanowiłem zaktualizować moją starą stację opartą o rpi zero, grzałkę, DHT11 i SDS11. Wilgotność od dawna nie działała i pokazywało cały czas 100% RH.
W celu wykorzystania funkcjonalności alert w SHT30 kupiłem HECA. Samą HECA. Po podłaczeniu wszystkiego zdałem sobie sprawę, że fabrycznie SHT30 nie jest ustawiony i musiałbym napisać jakis osobny soft , który ustawiłby limity górny/dolny alertu u mnie.
W manualu wyczytałem, że RH tracking alert i Temp tracking alert z “defaultu” są w pozycji “0”. Zatem grzałka nie powinna wogóle grzać a jest na odwrót grzeje cały czas. Czy tak powinno być?

I jeszcze jedno pytanie aby nie wchodzić za głęboko. Czy podłączając HECA do modułu z NAM moduł sam ustawia te poziomy alertów przy starcie i czy mógłbym to zrobić raz i potem przepiąć układ pod moją malinkę?
dodam że całość mam napisane w pythonie i tam korzystam z bibliotek gotowych do odczytu wartości z BME280 i SHT30. W przypadku tego ostatniego to tylko temperatura i wilgotnośc. Nie ma narzędzi do innych funkcjonalności - jak np ustawienia i zmian poziomu alertu.
Będę wdzięczny za pomoc.

Domyślnie są w pozycji “0”, a pin alert jest HIGH. Więc jak SHT30 jest podłączone, grzałka grzeje. Ustawienie progów może ją wyłączyć.

Linia 44 ma dbać o wilgotność w komorze. Linia 47 ma dbać o to żeby SDS011 miał ciepło przy mrozach.

czy można jakość odpytać sht czy alert jest aktywny ?

screenshot-www-sensirion-com-fileadmin-user_upload-customers-sensirion-Dokumente-2_Humidity_Sensors-Datasheets-Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital-pdf-1614864243872

W teorii.

Dzieki serdeczne. Jedna linia w c+, gdzie obsługa sensiriona SHT30 jest w całości “zbibliotekowana” to niesety ciąg obliczeń w innych językach, gdzi biblioteki ograniczają się do wyciągnięcia temperatury i wilgotności.
Przedstawiam sposób obliczeń i co robiłem aby alerty obsługiwać w pythonie. Kod sprowadził się do tego:

import smbus2
import bme280
#high alert set (63% wilg i 120°C)
bus.write_i2c_block_data(0x44, 0x61,[0x1D,0xA1,0xE2,0x29])
time.sleep(1)
#high alert clear (60% wilg i 119°C)
bus.write_i2c_block_data(0x44, 0x61, [0x16,0x99,0xDF,0x25])
time.sleep(1)
#clear status register
bus.write_i2c_block_data(0x44, 0x30,[0x41])
time.sleep(1)
#periodic measurment init
bus.write_i2c_block_data(0x44, 0x21, [0x30])
time.sleep(1)

dalej każdy pomiar co sekundę sprowadza się do pobrania temperatury i jej przeliczenia:

bus.read_i2c_block_data(0x44, 0xE0, 6) 

Teraz napisze tylko jak dochodzi się do magicznego 0x61,0x1D,0xA1,0xE2,0x29 bo w moim przypadku to było najbardziej problematyczne.
0x611D to adres dla komendy high alert limit set - czyli od jakiej wilgotności/temperatury w górę ma się załączać alert.
Następnie: 63% wilgotności to 41287 i 120 to 61790 zgodnie z wzorami przeliczania podanymi przez Sensirion. To przeliczamy na wersję bitową i mamy odpowiednio: 1010000101000111 i 1111000101011110. Obie wartości “sklejamy razem”. Z tym, że z pierwszego bierzemy 7 bitów pierwszych a z drugiego 9. Te 16 bitów (1010000111100010) dzielimy na 2 odzielne bajty i zamieniamy na HEX. Czyli z tego dostajemy: 0xA1 i 0xE2. Ostatnia wartość to CRC z tych dwóch poprzednich jednak z polimianem 0x31, wartością początkową 0xFF i wartoścą końcową 0x00. Aby to obliczyć posłużyłem się kalkulatorem tutaj: Sunshine's Homepage - Online CRC Calculator Javascript - wartośc uzyskana to 0x29. Proste? jasne, że tak:)
Wszystko liczyłem na piechotę, ponieważ potrzebowałem dwóch wartości na sztywno. Wklejam dla innych, którzy będą mieli ten sam problem. Dodam, że “clear status register” jest potrzebny bo zgodnie z tym co powyżej potwierdziłeś @irukard grzałka przy inicjalizacji od razu załącza alert i trzeba go “odwołać”. Dodatkowo wystawienie komendy z błędnym CRC wystawia błąć error I/O. To nie błąd połączenia I2C tylko odrzucenie komendy przez SHT30. Niech was nie zwiedzie.
Poniżej dokuemntacja, z której korzystałem:
https://www.mouser.com/datasheet/2/682/Sensirion_Humidity_Sensors_SHT3x_Datasheet_digital-971521.pdf
https://www.mouser.com/pdfDocs/Sensirion_Humidity_Sensors_SHT3x_Application_Note_Alert_Mode_DIS.pdf

@irukard tak apropos czy wiesz jak skalibrować BME280?:slight_smile: pomiar do drugiego leżącgo na oknie różni się o 13hPa i 15% RH. W NAM nie ma niestety możliwości offsetowania wartości (wprowadzicie?) i pomyślałem, że może producent daje taką możliwość w firmwarze czujnika co byłoby jakimś rozwiązaniem na tą chwilę?:slight_smile:
Edit: ogarnąłem zmiana wysokości n.p.m. :slight_smile:

1 polubienie

W BME280 są zapisane fabryczne rejestry kalibracyjne. Należy z nich skorzystać i użyć ich wartości do obliczenia skalibrowanego wyniku. Podejrzewam, że zmiana tych wartości będzie rzutowała na kalibrację. Wszystko jest dość ładnie opisane w kodzie przykładowym od Bosch Sensortec.