I_R_W15_M03 Przykładowe projekty
Karty SD mają wiele zastosowań pozwalających na zapisywanie i prowadzenie rejestru odczytanych danych. Z tego e‑materiału dowiesz się m. in. w jaki sposób wykorzystać zintegrowane czujniki, pozwalające na jednoczesny pomiar zarówno temperatury powietrza, jak i względnej wilgotności.
Poznasz sposoby zapisywania danych na karcie i ich odczytu.
Dowiesz się, jak podpiąć czujnik temperatury i wilgotności DHT22 z płytką Arduino.
Zbudujesz układ, w którym będziesz mierzył temperaturę i wilgotność.
Karty SD pozwalają na zapisywanie i prowadzenie rejestru odczytanych danych. Taki sposób przetwarzania danych stosuje się w urządzeniach, w skład których wchodzą m.in:
moduł GPS do zbierania danych dotyczących położenia,
stacja pogodowa do zapisywania danych na temat temperatury, opadów itp.,
systemy pomiarowe zbierające dane odnośnie odległości, odchyleń itp.
Jedną z najczęściej mierzonych wartości nieelektrycznych we wszystkich dziedzinach elektroniki jest temperatura. Jej pomiary są podstawą regulacji powietrza w pomieszczeniach przez różnego różnego rodzaju systemy grzewcze, klimatyzatory, wentylatory itp., oraz monitorowania warunków panujących na zewnątrz przez stacje pogodowe. Sam pomiar temperatury zazwyczaj jest wystarczający, jednak bardziej skomplikowane systemy wymagają dokładniejszej informacji na temat warunków środowiska. Dobrym rozwiązaniem jest stosowanie zintegrowanych czujników, które umożliwiają jednoczesny pomiar zarówno temperatury powietrza, jak i wilgotności. Należą do nich sensory z serii DHT, w tym niewielki, cyfrowy czujnik temperatury i wilgotności DHT22, którym zajmiemy się nico niżej.
Moduł czytnika kart MicroSD

Moduł ten zawiera wszystkie potrzebne elementy, aby można było komunikować się z kartą microSD poprzez np. Arduino. Karty SD komunikują się poprzez magistralę SPImagistralę SPI. Większość mikrokontrolerów, w tym te wykorzystane w Arduino, posiadają sprzętową kontrolę tego interfejsu.
Stosując kartę SD, należy pamiętać, aby była ona sformatowana w formacie FAT32FAT32.
Specyfikacja
Napięcie zasilania: od 4,5 V do 5,5 V
Wbudowany regulator napięcia: 3,3 V na pinach SPI
Prąd: około 80 mA
Interfejs: SPI
Połączenie z Arduino
MOSI – pin 11 Arduino
MISO – pin 12 Arduino
CLK – pin 13 Arduino
CS – pin 10 Arduino
VCC – 5 V Arduino
GNG – GND Arduino
Program zapisu na kartę
Do poprawnego działania modułu czytnika kart microSD potrzebne są dwie biblioteki – SD oraz SPI.
Biblioteka do obsługi karty SD:
Biblioteka do obsługi komunikacji SPI:
Po pobraniu bibliotek instalujemy je w Arduino IDE.
Na początku dołączamy potrzebne biblioteki do szkicu.
W celu poprawnej inicjalizacji karty SD należy w programie wprowadzić w pętli setup() poniższe komendy. Instrukcja warunkowa if() sprawdza, czy karta jest wykrywana. Jeśli nie, następuje wyświetlenie informacji poprzez port szeregowy i przerwanie wykonywania programu. Jeśli karta zostanie rozpoznana, program nie wejdzie do instrukcji i wyświetli napis znajdujący się poza nią.
W pętli loop() wpisujemy komendy zapisu tekstu na kartę microSD.
Polecenie SD.open otwiera plik o podanej nazwie, a jeśli taki plik nie istnieje, zostanie dzięki temu poleceniu utworzony. Gdy plik jest już otwarty (lub utworzony), program wchodzi do instrukcji warunkowej if(), gdzie następuje wpisanie jej do pliku. Jeśli zaś zostanie zwrócenia wartość false, program wykona instrukcję else.
Po otwarciu plik musi zostać zamknięty - w przeciwnym razie dane nie będą poprawnie wprowadzone.
Kod
Całość kodu wygląda następująco:
Podłącz układ według poniższego schematu, wgraj kod i przetestuj działanie programu.
Co nam będzie potrzebne:
płytka stykowa,
przewody połączeniowe męsko‑żeńskie,
moduł karty microSD,
płytka Arduino Uno,
kabel USB typu A‑B do podłączenia do komputera.

Jeśli karta nie znajduje się w module, w monitorze portu szeregowego pojawi się informacja o błędnej inicjalizacji karty.

Film dostępny pod adresem /preview/resource/R16sBzHjxlvIB
Film nawiązujący do treści lekcji. Na filmie przedstawione jest okno COM6. W polu głównym wyświetlają się komunikaty. Komunikat w pierwszym wersie brzmi: „Błąd inicjalizacji karty!”, w następnych wierszach pojawia się kilkukrotnie ten sam komunikat brzmiący „Błąd otwarcia pliku!”.
Jeśli karta znajduje się w module, to w monitorze portu szeregowego pojawi się informacja o poprawnej inicjalizacji i zapisie danych na kartę.

Film dostępny pod adresem /preview/resource/RYKLO3JokdS21
Film nawiązujący do treści lekcji. Na filmie przedstawione jest okno COM6. W polu głównym wyświetlają się komunikaty. Komunikat w pierwszym wersie brzmi: „D!”, w drugim wierszu komunikat brzmi: „Karta została poprawnie zainicjalizowana!”, w następnych wierszach pojawia się kilkukrotnie ten sam komunikat brzmiący „Dane zapisane!”.
Po włożeniu karty do komputera widzimy, że na karcie znajduje się plik TEST.CSV. Po jego otworzeniu możemy zobaczyć zapisane dane.

Film dostępny pod adresem /preview/resource/RslN40djo5vHI
W filmie przedstawiony jest ekran komputera. Użytkownik ma otwarty folder, w którym znajduje się plik o nazwie TEST. Użytkownik otwiera plik TEST, który jest arkuszem kalkulacyjnym. W kolumnie A wpisane są następujące komunikaty: w komórce A 1 „Działa 0”, w komórce A 2 „Działa 1”, w komórce A 3 „Działa 2” i tak dalej.
Czujnik temperatury i wilgotności DHT22

Czujnik DHT22 wyróżnia się wśród podobnych elementów z tej serii głównie pod względem zakresów pomiarowych oraz dokładności wskazań. Jeśli chodzi o temperaturę, jest to zakres od -40Indeks górny OOC do +80Indeks górny OOC i całkiem duża precyzja pomiaru oraz rozdzielczość na poziomie odpowiednio: +/- 0,5Indeks górny OOC i 0,1Indeks górny OOC. Czas reakcji czujnika na nagłe zmiany temperatury to jedynie dwie sekundy, co umożliwia pracę nawet w bardzo dynamicznych systemach sterowania. Czujnik DHT22 działa w pełnym zakresie wilgotności względnej, czyli od 0% RH do 100% RH, zapewniając dokładność +/- 2% RH i rozdzielczość 0,1% RH. Całość (zarówno przetworniki, jak i układ pomiarowy wraz z cyfrowym interfejsem komunikacyjnym) mieści się w niewielkiej, perforowanej obudowie z tworzywa sztucznego o wymiarach zaledwie 20 x 15,1 x 7,7 mm.
Komunikacja z czujnikiem DHT22
Czujnik temperatury i wilgotności DHT22 komunikuje się z nadrzędnym mikrokontrolerem za pomocą jednoliniowego interfejsu szeregowego. Transmisję danych inicjuje master (mikrokontroler), wysyłając sekwencję stanów logicznych: L → H. Wtedy czujnik rozpoczyna nadawanie danych, zaczynając od najstarszego bitu. Ramka ma długość 40 bitów i zawiera następujące pola danych: części całkowitą i ułamkową odczytu wilgotności (po osiem bitów), części całkowitą i ułamkową odczytu temperatury (również po osiem bitów) oraz sumę kontrolną (jeden bajt). Wartości stanów logicznych (bity 0 i 1) są kodowane jako dwufazowe impulsy o zróżnicowanym czasie trwania (stan L przez 50 µs i następujący po nim stan H przez czas 26‑28 µs oznacza logiczne zero; logiczna jedynka jest kodowana przez impuls „H” o czasie trwania 70 µs). Aby na szynie danych nie doszło do kolizji, linia GPIO mikrokontrolera przeznaczona do pracy w roli wejścia/wyjścia danych powinna być skonfigurowana jako wyjście typu otwarty dren (OD).
Specyfikacja
Napięcie zasilania: od 3,3 V do 6 V
Średni pobór prądu: 0,2 mA
Temperatura:
Zakres pomiarowy: -40 do 80 °C
Rozdzielczość: 8 bitów (0,1 °C)
Dokładność: ± 0,5 °C
Czas odpowiedzi: średnio 2 s
Wilgotność:
Zakres pomiarowy: 0 - 100 % RH
Rozdzielczość: 8 bitów (±0,1 % RH)
Dokładność ±2 %RH*
Czas odpowiedzi: średnio 2 s
Połączenie z Arduino
VCC – 5V Arduino
SDA – dowolny pin cyfrowy Arduino
GND – GND Arduino
Program testowy
Do poprawnego działania czujnika potrzebna jest biblioteka DHT.
Biblioteka do obsługi czujnika:
Po pobraniu biblioteki należy ją zainstalować w Arduino IDE.
Najpierw dołączamy bibliotekę DHT.
Następnie tworzymy nowy obiekt.
Definiujemy pin Arduino, do którego wpięty jest czujnik.
W pętli setup() inicjujemy połączenie z monitorem portu szeregowego z prędkością 115200 bodów i wyświetlamy tekst startowy programu.
W pętli loop() sprawdzamy stan sensora i wyświetlamy odpowiedni komunikat.
Ostatnia rzecz, jaką musimy zrobić, to wyświetlić wartości pomiarowe.
Kod
Całość kodu wygląda następująco:
Podłącz układ według poniższego schematu, wgraj kod i przetestuj jego działanie.
Co nam będzie potrzebne:
płytka stykowa,
przewody połączeniowe męsko‑męskie,
czujnik DHT22,
rezystor 4,7 komega,
płytka Arduino Uno,
kabel USB typu A‑B do podłączenia do komputera.

Po uruchomieniu monitora portu szeregowego należy zmienić prędkość na 115200 bodów. Po zmianie prędkości nasze informacje będą poprawnie wyświetlane.

Film dostępny pod adresem /preview/resource/RB85d1cbvgKNm
Film nawiązujący do treści lekcji. Na filmie przedstawione jest okno COM6. W polu głównym wyświetlają się komunikaty składające się z różnych liczb, liter, znaków. Użytkownik wybiera w prawym dolnym roku jedną z trzech opcji. Od lewej znajdują się następujące listy wyboru: Nowa linia, 9600 baud oraz Wyczyść okno. Użytkownik wybiera środkowe pole, zmieniające parametr z 9600 baud na 115200 baud. Następnie wyświetlają się kolejne komunikaty. W drugim wierszu pojawia się długa przerywana linia, w kolejnych wierszach pojawiają się komunikaty pomiarowe. Od góry są one następujące: „Stan sensora: OK | Wilgotność: 35.00 % | Temperatura: 26.10 st. C”, „Stan sensora: OK | Wilgotność: 35.10 % | Temperatura: 26.10 st. C”, „Stan sensora: OK | Wilgotność: 35.10 % | Temperatura: 26.10 st. C”, „Stan sensora: OK | Wilgotność: 35.20 % | Temperatura: 26.10 st. C” i tak dalej. W dalszych wierszach zauważamy zwiększoną wilgotność, mianowicie: „Stan sensora: OK | Wilgotność: 54.20 % | Temperatura: 26.30 st. C”, a dalej „Stan sensora: OK | Wilgotność: 97.90 % | Temperatura: 26.60 st. C”. Maksymalna wartość wilgotności to „Stan sensora: OK | Wilgotność: 99.90 % | Temperatura: 26.50 st. C”. Po tym pomiarze wilgotność maleje, a ostatni pomiar zawiera też najwyższą zmierzoną temperaturę: „Stan sensora: OK | Wilgotność: 62.10 % | Temperatura: 26.60 st. C”.
Jeśli Arduino nie wykryje czujnika, pojawi się komunikat o braku odpowiedzi.

Film dostępny pod adresem /preview/resource/R1GXM1E4EGJtI
Film nawiązujący do treści lekcji. Na filmie przedstawione jest okno COM6. W polu głównym wyświetla się wielokrotnie w kolejnych wierszach następujący komunikat: „Stan sensora: Koniec czasu oczekiwania – brak odpowiedzi, Wilgotność: minus 999.00 % | Temperatura: minus 999.00 st. C”.
Słownik
odmiana systemu plików FAT, po raz pierwszy zastosowany w systemie operacyjnym Windows 95 OSR2, jego poprzednikiem jest FAT16
(ang. Serial Peripheral Interface) - jeden z trzech najważniejszych interfejsów komunikacyjnych obok I2C oraz UART; jest to interfejs typu full‑duplex, umożliwiający jednoczesne wysyłanie i odbieranie danych; SPI to interfejs synchroniczny, a więc jednym z przewodów przesyłany jest sygnał zegarowy synchronizujący wszystkie układy
typ ośmiobitowych mikrokontrolerów produkowanych przez firmę Atmel