LinkedIn YouTube Facebook
Szukaj

Newsletter

Proszę czekać.

Dziękujemy za zgłoszenie!

Wstecz
Artykuły

[PROJEKT] Rejestrator temperatury – KAmduino UNO, moduł czytnika kart pamięci, zegar RTC i moduł z termometrem LM35DZ

Teraz można przejść do tworzenia kodu realizującego projekt (pliki projektowe znajdują się w sekcji „do pobrania”). Na początku programu należy załączyć odpowiednie biblioteki potrzebne po obsługi zegara RTC oraz czytnika kart pamięci. Dodatkowo uruchamiana jest obsługa zegara RTC oraz deklarowane są zmienne potrzebne do działania programu:

/ Rejestrator temperatury - KAmduino UNO, czytnik kart pamięci, zegar czasu rzeczywistego oraz termometr LM35DZ
// Autor: Patryk Mądry 
// Mikrokontroler 2017 r.

// RTC
#include <Wire.h>
#include "RTClib.h"

// Czytnik kart pamięci 
#include <SPI.h>
#include <SD.h>

RTC_DS1307 rtc; // Uruchomienie zegara RTC

const int chipSelect = 4; 
int licznik =0;

// Czujnik temperatury 
float napiecie = 0; //Zmienna przechowująca zmierzoną temperaturę 
float temperatura = 0; // Zmienna przechowująca zmierzoną temperaturę

Następnie w funkcji setup ustawiana jest prędkość transmisji portu szeregowego oraz sprawdzane jest działanie zegara czasu rzeczywistego. Ponadto, kod ustawia datę początkową dla zegara oraz sprawdza działanie czytnika kart pamięci.

void setup() {
  
  Serial.begin(9600);
  
   // Sprawdzenie czy moduł z RTC jest podłączony 
   if (! rtc.begin()) {
      Serial.println("Nie znaleziono RTC");
   }

   if (! rtc.isrunning()) {
   // Ustawienie początkowej daty i godziny 
   rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Pobranie daty i godziny z komputera PC
   // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0)); // Ręczne ustawienie daty i godziny, tutaj: 21 Stycznia 2014
    
   }

   // Sprawdzenie działania czytnika kart pamięci
   if (!SD.begin(chipSelect)) 
   {
      Serial.println("Card failed, or not present");
      return;
   }


}

W pętli głównej programu następuje pomiar wartości analogowej na porcie A0, następnie przeliczana jest ona na napięcie by ostatecznie uzyskać wartość temperatury w stopniach Celsiusza. Po tym tworzona jest zmienna typu string tekst_do_zapisu. Do niej wpisywane są dane, które potem są dodawane do pliku tekstowego na karcie pamięci. Do zmiennej trafiają informacje o aktualnej godzinie, dacie, stanie licznika oraz zmierzonej wartości temperatury. Poszczególne dane oddzielone są od siebie znakiem spacji (co ułatwia późniejszą analizę w programach typu Excel).

void loop() 
{

  // Pomiar temperatury
  int odczyt = analogRead(A0);
  napiecie = (odczyt * 5.0)/1024.00;
  temperatura = napiecie *100;
  
  String tekst_do_zapisu ="";
  
  DateTime now = rtc.now();

  // Tworzenie tekstu do zapisu na kartę pamieci
  tekst_do_zapisu += String(now.hour());
  tekst_do_zapisu += ':';
  tekst_do_zapisu += String(now.minute());
  tekst_do_zapisu += ':';
  tekst_do_zapisu += String(now.second());
  tekst_do_zapisu += " ";
  tekst_do_zapisu += String(now.day());
  tekst_do_zapisu += '/';
  tekst_do_zapisu += String(now.month());
  tekst_do_zapisu += '/';
  tekst_do_zapisu += String(now.year());
  tekst_do_zapisu += ' ';
  tekst_do_zapisu += String(licznik);
  tekst_do_zapisu += ' ';
  tekst_do_zapisu += String(temperatura); 
  licznik++;

W dalszej części pętli głównej programu otwierany jest plik tekstowy o nazwie temp.txt (jeżeli nie ma go na karcie pamięci, zostanie on utworzony). Następnie sprawdzany jest dostęp do pliku. Jeśli plik jest dostępny, zapisywany jest tekst znajdujący się we wcześniej przygotowanej zmiennej tekst_do_zapisu, następnie plik jest zamykany. Dodatkowo zawartość zmiennej jest przesyłana przez port szeregowy (co umożliwia wyświetlenie w monitorze portu szeregowego). Jeżeli plik temp.txt nie może zostać otworzony, zostanie wyświetlony komunikat „Blad otworzenia pliku „. Na końcu pętli głównej programu znajduje się opóźnienie, które określa co jaki okres czasu dane będą zapisywane na kartę pamięci (w tym przypadku jest to 5 sekund).

  // Otworzenie lub stworzenie pliku o nazwie temp.txt
  File plik = SD.open("temp.txt", FILE_WRITE);

  
  if (plik)
  {
    plik.println(tekst_do_zapisu);
    plik.close();
    Serial.println(tekst_do_zapisu);
  }
  else 
  {
    Serial.println("Blad otworzenia pliku ");
  }
  
  delay(5000); // Czas co ile będzie dokonywany zapis na kartę pamieci
  
 
}

Teraz można wgrać program na płytkę KAmduino UNO. Po wgraniu programu można otworzyć monitor portu szeregowego i po ustawieniu odpowiedniej prędkości transmisji (w tym przypadku 9600) powinno się uzyskać następujący widok:

 

Rys. 5. Monitor portu szeregowego  – informacje, które zostały zapisane na karcie pamięci

Teraz można umieścić układ w miejscu, gdzie chcemy monitorować temperaturę. W celu obejrzenia wyników pomiarów zapisanych na karcie pamięci należy odłączyć układ od zasilania, wyjąć kartę pamięci z modułu czytnika i podpiąć ją do komputera (przy użyciu adaptera np. takiego) w celu odczytania/zgrania plików.

Taki plik z zapisanymi pomiarami można zaimportować np. do Excela (podczas importu należy wybrać jako separator danych znak spacji, dodatkowo należy zamienić kropki na przecinki) w celu analizy pomiarów. W programie Excel można dane oddać dalszej obróbce np. wyznaczyć średnią z pomiarów, wyznaczyć wartości maksymalne, minimalne lub narysować wykres w oparciu o pomiary.

 

Rys. 6. Przykładowy wykres utworzony na podstawie danych zapisanych na karcie pamięci

Tego typu rejestrator danych może znaleźć zastosowanie w wielu sytuacjach. Do układu można dodać więcej czujników np. deszczu, ciśnienia, aby monitować więcej parametrów pogodowych. Zamiast czujnika temperatury można zastosować moduł GPS, aby rejestrować kolejne punkty np. w podróży.

Autor: Patryk Mądry