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.
Projekt będzie wykorzystywał układ Termometr z wykorzystaniem czujnika DS18B20.
#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).