Forum Sveta kompjutera

Nazad   Forum Sveta kompjutera > Test Drive > SK LABS

SK LABS Raspberry Pi i drugi SBC (Single-Board Computer), Arduino, hardver, softver, projekti, diskusije...

Odgovor
 
Alatke vezane za temu Vrste prikaza
Stara 1.10.2017, 20:51   #1
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
Određen forumom ZS-042 Real Time Clock (RTC)

Jedan jako zanimljiv modul je na redu da vam predstavim. Reč je o ZS-042 Real Time Clock modulu čiji je zadatak da meri tačno vreme. Modul je uz odgovarajuće biblioteke sposoban da meri sate, minute i sekunde. Takođe je u stanju da razlikuje dane u nedelji, kao i da odbrojava dane, mesece i godine. Prestupnu godinu isto tako prepoznaje kao i različit broj dana u mesecima. Pride, ima ugrađen i senzor za temperaturu pa je pogodan za Data Logging projekte. Može da radi na naponima od 3,3V i 5V a za napajanje interne memorije koristi LIR2032.

Ovaj modul koristi DS3231 clock čip koji bi trebalo da prikazuje tačno vreme do 2100 godine. To teško da će neko od nas doživeti tako da ostaje da verujemo proizvođaču (Dallas Semiconductor). Pomenuti memorijski čip (EEPROM) je AT24C32 sa kapacitetom od 32K. Njemu se može pristupiti preko 32K i SQW pinova. Modul u sebi ima ugrađen punjač za LIR2032 punjivu bateriju i preporuka proizvođača je da se ista koristi ali je ceo sistem urađen malo traljavo gde nakon par godina (?!) rada postoji mogućnost da ista eksplodira. Elektronika za punjenje litijumske baterije je malo kompleksnija od onih par otpronika na ovom modulu. Na netu se može naći da se koristi CR2032 baterija umesto LIR2032 i da se otpornik zadužen da prati punjenje isključi "rezanjem" voda na PCB-u. Ugrađena baterija ima ulogu da napaja RTC kada se modul (projekat u celini) odvoji od računara ili iz nekog drugog razloga dođe do prekida napajanja.



ZS-042 modul je dimenzija 38x22mm a debljina mu je zbog slota za bateriju čak 14mm. Na Arduino (ili kompatibilnu ploču) se povezuje putem I2C protokola, za šta ima izlaze na dve strane. Sa gornje strane su 4 nezalemljena hedera: SCL, SDA, VCC i GND. Sa donje strane ima 6 zalemljenih hedera i to: 32K, SQW, SCL, SDA, VCC i GND. Na master ploču se povezuje uglavnom:
SCL -> SCL (može i A5 za UNO ili D20 za Megu)
SDA -> SDA (može i A4 za Uno ili D21 za Megu)
VCC -> 5V(3,3v)
GND -> GND
Sve ovo na Fritzing šemi ispod.



U sledećem primeru ćemo prikazati vreme i temperaturu na 1602 LCD sa I2C adapterom. Mega je tu da celu priču pokrene. Prvo što nam treba je da preuzmemo odgovarajuću biblioteku a za ovaj modul ćemo koristiti RCBlib koja nema nativnu podršku za temperaturni senzor jer je pisana za Adafruit modul. Neophodnu podršku ćemo dodati editovanjem bibiloteke.
Dekip je offline   Odgovor sa citatom ove poruke
Stara 1.10.2017, 20:52   #2
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
Određen forumom Re: ZS-042 Rael Time Clock (RTC)

Nakon uspešno uvezene RTClib biblioteke potrebno je otvoriti sledeće fajlove u nekom text editoru. Notepad++ je savršen za taj posao. Prvi koji ćemo editovati je RTClib.cpp. Spustamo se do kraja i nakon linije 507 dodajemo sledeće redove:

------------------------------

float RTC_DS3231::getTemperature()
{
uint8_t msb, lsb;
Wire.beginTransmission(DS3231_ADDRESS);
Wire._I2C_WRITE(DS3231_TEMPERATUREREG);
Wire.endTransmission();

Wire.requestFrom(DS3231_ADDRESS, 2);
msb = Wire._I2C_READ();
lsb = Wire._I2C_READ();

// Serial.print("msb=");
// Serial.print(msb,HEX);
// Serial.print(", lsb=");
// Serial.println(lsb,HEX);

return (float) msb + (lsb >> 6) * 0.25f;
}

---------------------------------

Ovim smo dodali getTemperature() funkciju koju ćemo pozvati iz skeča. Sledeći na redu za editovanje je RTClib.h gde imamo par prepravki. Prvo nakon linije 21 definišemo I2C adresu:

-----------------------------------------

#define DS3231_TEMPERATUREREG 0x11

------------------------------------------

Nakon linije 106 dodajemo sledeću liniju:

-----------------------------------

static float getTemperature(); // in Celcius degree

----------------------------------

Snimamo sve i ako smo uspešno otkucali sve bez grešaka u kucanju pozivanjem rtc.getTemperature() funkcije u okviru skeča bi trebalo da dobijem očitanu vrednost temperature u celzijusima. Dodao sam i DHT22 radi upoređivanja temperature a znamo da je taj modul pouzdan i precizan.



Kada je sve spremno i povezano a baterija na svom mestu, podešavamo tačno vreme. To radimo tako što pod File->Examples->RTClib biramo ds3231 koji nakon uploada postavlja vreme sa našeg računara. Nakon toga ide skeč ispod:

-------------------------------------

#include <Wire.h>
#include <RTClib.h>
#include <DHT.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#define DHTpin 7
LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3,POSITIVE);
DHT dht;
char daysOfTheWeek[7][12] = {"Nedelja", "Ponedeljak", "Utorak", "Sreda", "Cetvrtak", "Petak", "Subota"};
RTC_DS3231 rtc;
void setup() {
Serial.begin(9600);
Wire.begin();
rtc.begin();
dht.setup(DHTpin);
lcd.begin(16,2);
lcd.backlight();

}

void loop() {
float temp1=dht.getTemperature();
float temp2=rtc.getTemperature();
Serial.print(temp1);
Serial.println(" temp C - DHT");
DateTime now = rtc.now();
Serial.print(temp2);
Serial.println(" temp C - RTC");
Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.println();

lcd.setCursor(0,0);
lcd.print(temp1);
lcd.print(" temp C - DHT");
lcd.print(temp2);
lcd.print(" temp C - RTC");
lcd.setCursor(0,1);
lcd.print(now.day(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
lcd.print("(");
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(")");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
lcd.scrollDisplayLeft();

delay(1000);

}

-------------------------------------

Nakon dodavanja neophodnih biblioteka, definišemo pin 7 koji nam treba za DHT modul. Konfigurišemo I2C LCD-a i pravimo dht i rtc objekte. U setup funkciji pokrećemo LCD, DHT i RTC. U loop-u prikupljamo očitavanja temperature i sve to prikladno ispisujemo na serijal monitoru i LCD ekranu.

video


Možemo da zaključimo da ZS-042 modul nije baš najprecizniji u smislu da "žuri" za oko jedan stepen Celzijusa a što se može korigovati u okviru skeča. To naravno u vezi temperaturnih očitavanja. Vreme je očekivano bilo tačno a najispravnije bi bilo ispratiti vreme nakon nekoliko meseci i tada videti eventualna neslaganja.
Dekip je offline   Odgovor sa citatom ove poruke
Stara 2.10.2017, 8:59   #3
Dekip
V.I.P. Recenzent
 
Član od: 8.11.2008.
Lokacija: XV535
Poruke: 3.198
Zahvalnice: 767
Zahvaljeno 1.024 puta na 568 poruka
Određen forumom Re: ZS-042 Real Time Clock (RTC)

Ostadoh vam dužan slike kako to sve izgleda.

Dekip je offline   Odgovor sa citatom ove poruke
Odgovor

Bookmarks sajtovi

Alatke vezane za temu
Vrste prikaza

Vaš status
Ne možete postavljati teme
Ne možete odgovarati na poruke
Ne možete slati priloge uz poruke
Ne možete prepravljati svoje poruke

BB kod: uključeno
Smajliji: uključeno
[IMG] kod: uključeno
HTML kod: isključeno


Slične teme
tema temu započeo forum Odgovora Poslednja poruka
Pebble Time smartwatch NjegovaWisost Opisi, recenzije i testovi 10 20.9.2016 20:40
Netflix vs. Popcorn Time Radojevicuros22 otpaTci 1 19.2.2016 6:00
Problem Real Player!!!! Deki Aplikativni softver 19 18.2.2013 10:42
Wireless Internet, Vista, Real player, Dell Inspirion ShonEPFC Kvarovi 4 4.11.2008 7:13
EEPROM Memorije Oliver Kvarovi 3 12.4.2006 14:07


Sva vremena su po Griniču +2 h. Sada je 10:21.


Powered by vBulletin® verzija 3.8.7
Copyright ©2000–2024, vBulletin Solutions, Inc.
Hosted by Beograd.com