Potrzebuję zaprojektować datalogger do rejestrowania temperatury z czujników DS18B20 (kilkunastu, może kilkudziesięciu).
Logger ma zapisywać dane na karcie SD, musi posiadać zegar RTC, może ale nie musi posiadać wyświetlacz LCD i klawiaturę 4x4 (sądzę, że było by to obsługiwane przez osobny moduł PRO mini sprzężony przez UART). Najważniejsze jest jednak, to że kabel z czujnikami musi być wymienny i jak najtańszy (będzie jednorazowy).
Na razie wymyśliłem sobie to tak, żeby kabel z czujnikami miał we wtyku EEPROM I²C, który przechowywałby liczbę oraz adresy kolejnych czujników na kablu (muszę znać kolejność czujników od "najbliższego" do "najdalszego"). Nie bardzo mam jednak pomysł jak go odczytywać (z uwagi na ograniczoną ilość pamięci RAM).
Kolejny problem to zarządzanie zasilaniem (raz w wariancie bez wyświetlacza i klawiatury, raz z). Nie można użyć zwykłego wyłącznika, przed wyłączeniem zasilania trzeba się upewnić, że plik jest zamknięty i/lub poczekać na koniec zapisu i zamknięcie pliku. Obecnie pilnuję aby wyłączać zasilanie lub wcisnąć reset po zgaśnięciu LEDa, który jest wpięty w linię SCL karty SD.
Obecnie kod wygląda tak (zlepek z przykładów, ale działa, tyle że adresy czujników zapisane są na stałe):
Znalazłem też bibliotekę Sleep_n0m1 ale tak jest chyba lepiej, bo można łatwo dodać wybudzanie przerwaniem sprzętowym (z przycisku), co można by wykorzystać do zamknięcia logu i wyłączenia loggera.
Logger ma zapisywać dane na karcie SD, musi posiadać zegar RTC, może ale nie musi posiadać wyświetlacz LCD i klawiaturę 4x4 (sądzę, że było by to obsługiwane przez osobny moduł PRO mini sprzężony przez UART). Najważniejsze jest jednak, to że kabel z czujnikami musi być wymienny i jak najtańszy (będzie jednorazowy).
Na razie wymyśliłem sobie to tak, żeby kabel z czujnikami miał we wtyku EEPROM I²C, który przechowywałby liczbę oraz adresy kolejnych czujników na kablu (muszę znać kolejność czujników od "najbliższego" do "najdalszego"). Nie bardzo mam jednak pomysł jak go odczytywać (z uwagi na ograniczoną ilość pamięci RAM).
Kolejny problem to zarządzanie zasilaniem (raz w wariancie bez wyświetlacza i klawiatury, raz z). Nie można użyć zwykłego wyłącznika, przed wyłączeniem zasilania trzeba się upewnić, że plik jest zamknięty i/lub poczekać na koniec zapisu i zamknięcie pliku. Obecnie pilnuję aby wyłączać zasilanie lub wcisnąć reset po zgaśnięciu LEDa, który jest wpięty w linię SCL karty SD.
Obecnie kod wygląda tak (zlepek z przykładów, ale działa, tyle że adresy czujników zapisane są na stałe):
Code: c
Znalazłem też bibliotekę Sleep_n0m1 ale tak jest chyba lepiej, bo można łatwo dodać wybudzanie przerwaniem sprzętowym (z przycisku), co można by wykorzystać do zamknięcia logu i wyłączenia loggera.