Termometr cyfrowy z zapisem wartości chwilowych na karcie SD


Tomasz Bartuś



2016-09-25
Termometr cyfrowy z zapisem na karcie SD

Wstęp

Układ będzie realizował funkcję pomiaru temperatury w czasie rzeczywistym oraz z określoną częstotliwością będzie zapisywał wartości chwilowe na karcie SD.

Termometr z zapisem pomiarów na kartę SD
Fig. 1. Układ termometru z zapisem pomiarów na kartę SD

Założenia:

  1. układ będzie mierzył temperaturę za pomocą czujnika DS18B20,
  2. wyniki pomiarów, w czasie rzeczywistym mają być wyświetlne na wyświetlaczu znakowym,
  3. wybrane wartości, z określoną częstotliwością mają zostać zapisane na karcie SD,
  4. w trakcie zapisu, na wyświetlaczu ma się pojawiać komunikat informujacy o zapisywaiu danych na kartę.

Wykonanie

Projekt będzie wykorzystywał układ Termometr z wykorzystaniem czujnika DS18B20.

Lista części

  1. platforma prototypowa Arduino (tu Leonardo),
  2. czujnik temperatury DS18B20,
  3. wyświetlacz LCD 16 × 2,
  4. rezystor 4,7k,
  5. potencjometr 10k,
  6. czytnik kart SD,
  7. karta SD (max. 2GB; max. 4-tej klasy),
  8. karta SD,
  9. płytka prototypowa,
  10. przewody.

Schemat ideowy

Termometr z zapisem temperatury na karcie SD

Program

#include <SPI.h>               //Biblioteka obsługi magistrali SPI
#include <SD.h>                //Biblioteka obsługi standardu SD
#include <OneWire.h>           //Biblioteka obsługi magistrali OneWire
#include <DallasTemperature.h> //Biblioteka miernika temperatury
#include <LiquidCrystal.h>     //Biblioteka wyświetlacza ciekłokrystalicznego

#define ONE_WIRE_BUS 2          //Zdefiniowanie pinu transmisji OneWire
#define TEMPERATURE_PRECISION 9 //Zdefiniowanie rozdzielczości bitowej termometru
OneWire oneWire(ONE_WIRE_BUS);  //Pass our oneWire reference to Dallas Temperature. 

DallasTemperature sensors(&oneWire);
LiquidCrystal lcd(4, 5, 6, 7, 8, 9); //Definicja wejść wyświetlacza ciekłokrystalicznego

Sd2Card card;
File plik;

void setup() {
  sensors.begin();  //Inicjacja czujnika temperatury
  lcd.begin(16, 2); //Inicjacja wyświetlacza
  lcd.clear();
  
  Serial.begin(9600);
  while (!Serial) {
    ; //Wait for serial port to connect. Needed for Leonardo only
  }
  Serial.print("Initializing SD card...");
if(SD.begin(10)){
  Serial.println("Błąd inicjalizacji karty SD");
  return;
}
Serial.println("Karta jest gotowa do zapisu..."); 
}

void loop(){
  sensors.requestTemperatures();
  lcd.setCursor(0, 0);
  lcd.print("Temperatura:");
  lcd.setCursor(0, 1);
  lcd.print(sensors.getTempCByIndex(0));
  lcd.setCursor(6, 1);
  lcd.print("st.C");
  delay(1000);
  
  File plik = SD.open("temp.txt", FILE_WRITE);
  if (plik){
      plik.println(sensors.getTempCByIndex(0));  
      lcd.setCursor(11, 1);
      lcd.print("zapis");
      Serial.print("zapis");
      delay(500);                     //Poczekaj 1/2 sek.
      lcd.setCursor(11, 1);
      lcd.print("     ");             //Wyczyść napis "zapis" na wyświetlaczu
      delay(58500);                   //Poczekaj ok. 1 minutę (58500=60000-1000-500)
     }
   plik.close();
}

W wyniku działania programu, na karcie SD tworzony jest plik tekstowy, do którego co minutę zapisywany jest pomiar temperatury (Fig. 3).

Zawartość pliku TEMP.txt
Fig. 3. Przykładowa zawartość utworzonego pliku TEMP.txt

Źródła:

  1. Termometr z wykorzystaniem czujnika DS18B20 i wyświetlacza 2×16,
  2. Kurs Arduino #16: Obsługa kart SD,
 
 

Doktorat

Spis treści
Rozdzialy
Abstrakt [pl]
Abstract [eng]