#2 Logger temperatury [Arduino + czytnik microSD + DS18B20]

W poprzednim artykule dowiedzieliśmy się jak korzystać z DS18B20 i odczytywać z niego temperaturę. W tym artykule postaram się przedstawić Wam proces zapisywania tych danych na karcie microSD, a następnie zmontujemy wszystko w całość i zamkniemy w obudowie tak, aby nasza stacja mogła nam służyć.


Obsługa karty MicroSD

Przy zapisywaniu danych na naszym nośniku przydadzą nam się dwie rzeczy. Jedna dotyczy oprogramowania, a druga kwestii elektroniki. Jest to: biblioteka SD (nie musimy jej pobierać – jest domyślnie wgrana) oraz moduł czytnika microSD wraz ze stabilizatorem napięcia oraz buforem.

Zacznijmy od połączenia całości. Komunikacja z kartami pamięci odbywa się za pomocą magistrali SPI. Stwierdziłem, że najłatwiej będzie jak przygotuję zgrabną tabelkę, w której przedstawię wszystkie informacje:

 GND  Podłączamy do GND w Arduino
 VCC  Podłączamy do +5V w Arduino
 MISO  Dane wyjściowe magistrali SPI. Pin 12
 MOSI  Dane wejściowe magistrali SPI. Pin 11
 SCK  Linia zegarowa. Pin 13
 CS  Wybór urządzenia. Pin 10

Jeżeli podłączyłeś już wszystko według powyższej tabelki możesz przejść do kolejnego etapu – programowania.


Programowanie

Tak jak już przed chwilą wspomniałem podczas programowania skorzystamy z wgranej domyślnie biblioteki SD. Wystarczy tylko wspomnieć o niej na początku kodu.

Zaczniemy od przetestowania całego układu – wgramy poniższy sketch, który utworzy plik tekstowy i wypisze do niego “Odczyt testowy”.

#include <SPI.h>
#include <SD.h>

File plik;

void setup() {
  SD.begin(4);
  plik = SD.open("test.txt", FILE_WRITE);
  plik.println("Odczyt testowy");
  plik.close();
}

void loop() {
}

Sprawdź czy wszystko poszło dobrze i jeżeli rzeczywiście na karcie znajduje się plik test.txt wraz z odpowiednią zawartością przejdź do dalszego etapu.


Zapisywanie odczytów z termometru

Umiemy już obsługiwać i kartę microSD i termometr DS18B20, nie pozostało nam więc nic innego jak połączyć obydwie umiejętności i stworzyć prosty logger temperatury dzięki któremu sprawdzimy jak zmieniały się odczyty na osi czasu.

Zadanie jest banalnie proste – wystarczy połączyć oba programy i układy. Końcowy kod będzie wyglądał tak jak poniżej natomiast jeśli chodzi o układ to myślę, że każdy da sobie radę.

#include <OneWire.h> // dodajemy potrzebne biblioteki
#include <DS18B20.h>
#include <SPI.h>
#include <SD.h>
File plik;
float temperature;
byte address[8] = {0x28, 0xAB, 0xAF, 0x1E, 0x0, 0x0, 0x80, 0x47}; // podajemy odczytany wcześniej adres

#define ONEWIRE_PIN 2 // definiujemy pin do które podłączony jest czujnik, w naszym wypadku pin 2

OneWire onewire(ONEWIRE_PIN);
DS18B20 sensors(&onewire);

void setup() {
  sensors.begin(); // uruchamiamy sensor
  sensors.request(address);
  SD.begin(10); //ustawiamy pin CS na 10
  plik = SD.open("odczyty.txt", FILE_WRITE);
}

void loop() {
  if (sensors.available())   {
    temperature = sensors.readTemperature(address); // odczytujemy temperaturę
    sensors.request(address);
    delay(50);
  }
  
  plik.print(temperature); // wpisujemy odczyt do pliku
  plik.println(" 'C"); // dodajemy znak 'C
  plik.close(); // zamykamy plik (bardzo ważne!)

  delay(20000); // czekamy 20s
}

Tak w moim przypadku prezentuje się całe zmontowane urządzenie.


To już koniec tego króciutkiego poradnika. Chciałbym jeszcze przypomnieć, że jest to przykład zastosowania kart microSD w połączeniu z czujnikami i myślę, że warto zainteresować się połączeniem większej ilości urządzeń i stworzeniu prawdziwej bazy informacji, np. poprzez dodanie innych czujników, takich jak barometr, higrometr itd.

Karol Wojsław

Karol Wojsław - założyciel i redaktor Mechatrobot.pl. Interesuje sie elektroniką oraz informatyką.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.