Na slici ispod je spoj Arduino Uno, termistora i SD Card modula koji je zaseban modul sa SD slotom za korištenje SD kartica ili microSD kartice u SD adapteru.
Budući da je na slici iznad korišten zasebani SD card modul koji se spaja preko breadboard-a, posebnu pažnju treba obratiti na spajanje pojedinih pinova SD card modula. Naglašavam da se radi o SD card modulu, jer postoje i microSD slotovi koji dolaze zajedno sa LAN shield-om (mrežna kartica sa RJ45 konektorom). Takav shield se postavi direktno na Arduino zbog čega postoji vrlo mala vjerovatnoća greške pri spajanju.
Na slici lijevo je SD card module (pogled odozgo) na kome su označeni pinovi.
Za pristup podacima na SD kartici je, u sketch, potrebno uključiti biblioteke SPI.h i SD.h
U tabeli ispod je raspored spajanja pinova samostalnog SD card modula na Arduino Uno ploču.
SD card pin |
Arduino pin |
GND |
GND |
5V |
5V |
SDCS |
pin4 |
MOSI |
pin11 |
MISO |
pin12 |
SCK |
pin13 |
Ispod je kôd sketch-a koji, u svakom ciklusu, 5 puta uzastopno pročita analognu vrijednost Arduini pina 1 te na osnovu tih vrijednosti izračuna prosječnu analognu vrijednost i to predstavlja očitanu vrijednost u jednom ciklusu.
Na osnovu analogne vrijednosti napona računa se otpor termistora a nakon toga i vrijednost temperature po Steinhart-Hart metodu. Izmjerena/izračunata temperatura se prikazuje na Serial monitoru i upisuje u file temps.log na SD kartici (kopirajte kompletan kôd ispod u Arduino IDE prozor i upload-ujte ga na Arduino) :
/*
* MJERENJE TEMPERATURE UZ POMOĆ TERMISTORA
* I UPIS IZMJERENIH VRIJEDNOSTI NA SD KARTICU
*
* Autor: Samir Gutić
* URL: http://amicus.ba
* Datum: 16. III 2017.
*
* GND GND
* 5V 5V
* SDCS pin 4
* MOSI pin 11
* MISO pin 12
* SCK pin 13
*
*/
float floatSuma;
float floatProsjek;
float floatOtpor;
float floatTemperatura;
//Vrijeme refreširanja prikaza temperature
#define intOdgoda 3000
//Pin za analogno očitavanje
#define pinAnalogTerm A1
//Vrijednost rednog otpornika u omima
#define redniOtpor 9900
//Broj očitavanja za računanje prosječne vrijednosti
#define intBrCitanja 5
//Otpor na 20.6 stepeni C
#define intTermistorNa25 12080
//Nominalna temperatura
#define intNominalnaTemp 20.6
//Beta koeficijent termistora (obično 3000-4000)
#define intBetaKoeficijent 4016.032
#include <SPI.h>
#include <SD.h>
//Deklaracija dokumenta
File sdDokument;
void setup()
{
//Otvaranje serijske komunikacije i čekanje na otvaranje porta
Serial.begin(9600);
while (!Serial)
{
; //Čekanje na konekciju na serijski port. Potrebno samo za native USB port.
}
//Prikaz informacija na serijski port
Serial.println("Inicijalizacija SD kartice.");
if (!SD.begin(4))
{
Serial.println("Inicijalizacija SD kartice nije uspjela!");
return;
}
Serial.println("Izvrsena je inicijalizacija SD kartice.");
//Spojiti AREF na 3.3V i koristiti za napajanje (manje smetnji nego na 5V)
analogReference(EXTERNAL);
}
void loop()
{
//Očitavanje vrijednosti sa termistora
floatSuma = 0;
for (int i=0; i<intBrCitanja; i++)
{
floatSuma = floatSuma+analogRead(pinAnalogTerm);
delay(10);
}
//Računanje prosječne vrijednosti u zadnjih intBrCitanja očitavanje
floatProsjek = floatSuma/intBrCitanja;
//Konverzija vrijednosti u otpor
floatOtpor = redniOtpor*floatProsjek/(1023-floatProsjek);
// Steinhart-Hart metod računanja
floatTemperatura = floatOtpor / intTermistorNa25; // (R/Ro)
floatTemperatura = log(floatTemperatura); // ln(R/Ro)
floatTemperatura = floatTemperatura/intBetaKoeficijent; // 1/B * ln(R/Ro)
floatTemperatura = floatTemperatura+1.0 / (intNominalnaTemp + 273.15); // + (1/To)
floatTemperatura = 1.0 / floatTemperatura; // Invertovati vrijednost
floatTemperatura = floatTemperatura-273.15; // Konverzija u stepene C
//Prikaz temperature
Serial.print("Temperatura: ");
Serial.print(floatTemperatura);
Serial.println("°C");
Serial.println("--------------------");
//Upis temperature u file temps.log
//Otvaranje dokumenta.
//Dozvoljeno je imati samo jedan otvoren dokument
//Prije otvaranja drugog dokumenta treba zatvoriti prethodno otvoreni
sdDokument = SD.open("temps.log", FILE_WRITE);
//Ako je otvaranje uspjelo, upisati podatke
if (sdDokument)
{
//Prikaz informacija na serijski port
Serial.println("Upis u temps.log");
//Upis vrijednosti varijable
floatTemperatura
u file temps.log na SD kartici sdDokument.print(floatTemperatura);
sdDokument.print(",");
//Zatvoriti otvoreni file
sdDokument.close();
}
else
{
//Ako nije uspjelo otvaranje file-a na SD kartici
Serial.println("Greska pri otvaranju temps.log");
}
delay(intOdgoda);
}
Sketch iznad, u svakom ciklusu otvara file temps.log u modusu za upis, te u njega dopiše vrijednost varijable floatTemperatura i zatvori file. Varijabla floatTemperatura je vrijednost temperature izmjerena u trenutnom ciklusu.
Šema spoja elemenata kreirana u Fritzing programu je na slici ispod.
Na šemi iznad su pinovi SD modula označeni svojim imenima (sa donje strane pločice modula).
Kao što se vidi sa šeme iznad, pin GND SD modula je povezan na Arduino GND, 5V pin SD modula je povezan na 5V Arduino pin, SDCS pin SD modula je povezan na Arduino pin4, MOSI modula SD modula j epovezan na Arduino pin11, MISO pin SD modula je povezan na Arduino pin12 i SCK pin SD modula je povezan na Arduino pin13.
Električna šema spoja je na sljedećoj slici.
AREF spoj, kao što se vidi sa šeme iznad, koristi napon od 3.3V umjesto 5V jer sadrži manje šuma. Taj napon je doveden i na AREF pin i služi kao referentni napon.
Šta je uopšte termistor?
Termistor je otpornik čiji otpor se mijenja sa promjenom temperature. To znači da postoje otpornici čiji otpor opada sa porastom temperatute - NTC otpornici i oni čiji otpor raste sa porastom temperature - PTC otpornici.
Na slici desno su karakteristike promjene otpora oba tipa termistora. Sa karakteristika se jasno vidi da otpor nije linearno odvisan od temperature što znači da ni proračun temperature na osnovu promjene otopra nije linearan.
Međutim, budući da se mjerenje tempreture uglavnom vrši u nekom uskom opsegu, to se za taj opseg koristi linearna aproksimacija stvarne karakteristike. Budući da je, na manjem opsegu temperatura stvarna karakteristika prilično linearna, to je i nastala greška prihvatljiva.
U ovom primjeru je korišten NTC termistor, ali je princip potpuno isti i z aslučaj PTC termistora.
Izmjerene temperature je moguće pratiti u prozoru Serial Monitora. Ispod je prikaz Serial Monitora koji prikazuje kako funkcioniše mjerenje temperature pomoću termistora u AREF spoju.
Potrebne komponente:
1 x Arduino UNO
1 x Breadboard (mala)
1 x SD card module
1x NTC termistor 12.08KΩ na 25ºC
1x otpornik 10KΩ
1 x SD kartica (ili μSD kartica u adapteru formatirana u FAT file sistemu)
Žice za spajanje
Time je Arduino pretvoren u termometar koji izmjerene temperature loguje u file na SD kartici. Dodavanjem LCD display-a je moguće 'uživo' pratiti izmjerenu temperaturu. O tome u članku Termistor termometar i prikaz temperature na LCD display 16x2.