Liidestav SD-kaardi moodul andmete logimiseks

Proovige Meie Instrumenti Probleemide Kõrvaldamiseks





Selles postituses läheme SD-kaardimoodulile andmete logimiseks arduinoga. Näeme ülevaadet SD-kaardimoodulist ja mõistame selle tihvtide konfiguratsioone ja pardal olevaid komponente. Lõpuks ehitame vooluringi temperatuuri ja niiskuse andmete SD-kaardile registreerimiseks.



Turvaline digitaalkaart

SD-kaart või Secure Digital-kaart on tänapäevase elektroonika jaoks kasulik, kuna see tagab suure mahutavusega ruumi minimaalse suurusega. Oleme eelmises projektis (Mp3-mängija) kasutanud SD-kaarti meediumisalvestuseks. Siin me kasutame seda andmete logimiseks.

Andmete logimine on peamine samm vahejuhtumi varasema esinemise registreerimiseks. Näiteks: teadlased ja teadlased suudavad tõlgendada globaalse temperatuuri tõusu.



Nad jõudsid sellele järeldusele, olles mõistnud temperatuuri tõusu, vaadates viimaste aastakümnete andmeid. Praeguse vahejuhtumi andmete salvestamine võib avaldada ka tulevase juhtumi kohta.

Kuna arduino on andurite andmete lugemiseks suurepärane mikrokontroller ning toetab andurite ja sisendväljundite välisseadmete lugemiseks erinevaid sideprotokolle, tegi SD-kaardimooduli arduino vaheline ühendus tordi.

Kuna arduinol pole muud salvestusruumi peale oma programmi salvestusruumi, võime selles artiklis kirjeldatud mooduli abil lisada välise salvestusruumi.

Vaatame nüüd SD-kaardi moodulit.

SD-kaardi mooduli pilt:

SD-kaardi mooduli pilt:

Mooduli tagumine külg ja tihvti konfiguratsioon:

Mooduli tagumine külg ja tihvti konfiguratsioon:

Seal on kuus tihvti ja see toetab SPI (serial peripheral interface) sideprotokolli. Arduino UNO puhul on SPI sidepistikud 13, 12, 11 ja 10. Arduino mega puhul on SPI tihvtid 50, 51, 52 ja 53.

Kavandatavat projekti illustreerib Arduino UNO, kui teil on mõni muu Arduino mudel, palun vaadake SPI-tihvtide kohta Interneti-ühendust.

Moodul koosneb kaardihoidjast, mis hoiab SD-kaarti paigal. 3,3 V regulaator on ette nähtud pinge piiramiseks SD-kaartidele, kuna see on mõeldud töötama 3,3 V, mitte 5 V pingel.

Selle pardal on integreeritud vooluahel LVC125A, mis on loogika taseme nihutaja. Loogilise taseme nihutaja funktsioon on vähendada 5 V signaale arduinost 3,3 V loogikaks.

Nüüd järeldub SD-kaardi moodul.

SD-kaardimooduli abil saame salvestada mis tahes andmete kuningat, siin salvestame tekstiandmeid. Salvestame temperatuuri ja niiskuse andmeid SD-kaardile. Samuti registreerime aja anduri andmetega reaalajas kella mooduli. See salvestab andmed iga 30 sekundi järel.

Skemaatiline diagramm:

Liidestav SD-kaardi moodul andmete logimiseks

RTC moodul jälgib aega ja logib kuupäeva ja kellaaja SD-kaardile.

Vea LED vilgub kiiresti, kui SD-kaart ebaõnnestub või seda ei õnnestu lähtestada või kui SD-kaarti pole. Ülejäänud aja jääb LED välja.

Kuidas seada RTC aeg:

• Laadige alla teek.
• Pärast riistvara lõpuleviimist ühendage arduino arvutiga.
• Avage arduino IDE
• Valige Fail> Näited> DS1307RTC> SetTime.
• Laadige kood üles ja RTC sünkroonitakse arvuti ajaga.
• Laadige nüüd üles allpool toodud kood.

Enne koodi üleslaadimist laadige alla järgmine arduino teek.

DS1307RTC: github.com/PaulStoffregen/DS1307RTC

DHT11 temp ja niiskus: arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Programm:

//-----Program developed by R.Girish-----//
#include
#include
#include
#include
#include
#include
#define DHTxxPIN A0
const int cs = 10
const int LED = 7
dht DHT
int ack
int f
File myFile
void setup()
{
Serial.begin(9600)
pinMode(LED,OUTPUT)
if (!SD.begin(cs))
{
Serial.println('Card failed, or not present')
while(true)
{
digitalWrite(LED, HIGH)
delay(100)
digitalWrite(LED, LOW)
delay(100)
}
}
Serial.println('Initialization done')
}
void loop()
{
myFile = SD.open('TEST.txt', FILE_WRITE)
if(myFile)
{
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
tmElements_t tm
if(!RTC.read(tm))
{
goto A
}
if (RTC.read(tm))
{
Serial.print('TIME:')
if(tm.Hour>12) //24Hrs to 12 Hrs conversion//
{
if(tm.Hour==13)
{
Serial.print('01')
myFile.print('01')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==14)
{
Serial.print('02')
myFile.print('02')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==15)
{
Serial.print('03')
myFile.print('03')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==16)
{
Serial.print('04')
myFile.print('04')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==17)
{
Serial.print('05')
myFile.print('05')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==18)
{
Serial.print('06')
myFile.print('06')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==19)
{
Serial.print('07')
myFile.print('07')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==20)
{
Serial.print('08')
myFile.print('08')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==21)
{
Serial.print('09')
myFile.print('09')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==22)
{
Serial.print('10')
myFile.print('10')
Serial.print(':')
myFile.print(':')
}
if(tm.Hour==23)
{
Serial.print('11')
myFile.print('11')
Serial.print(':')
myFile.print(':')
}
else
{
Serial.print(tm.Hour)
myFile.print(tm.Hour)
Serial.print(':')
myFile.print(':')
}
Serial.print(tm.Minute)
myFile.print(tm.Minute)
Serial.print(':')
myFile.print(':')
Serial.print(tm.Second)
myFile.print(tm.Second)
if(tm.Hour>=12)
{
Serial.print(' PM')
myFile.print( ' PM')
}
if(tm.Hour<12)
{
Serial.print('AM')
myFile.print( ' AM')
}
Serial.print(' DATE:')
myFile.print(' DATE:')
Serial.print(tm.Day)
myFile.print(tm.Day)
Serial.print('/')
myFile.print('/')
Serial.print(tm.Month)
myFile.print(tm.Month)
Serial.print('/')
myFile.print('/')
Serial.println(tmYearToCalendar(tm.Year))
myFile.println(tmYearToCalendar(tm.Year))
Serial.println('----------------------------------------------')
myFile.println('----------------------------------------------')
} else {
A:
if (RTC.chipPresent())
{
Serial.print('RTC stopped!!!')
myFile.print('RTC stopped!!!')
Serial.println(' Run SetTime code')
myFile.println(' Run SetTime code')
} else {
Serial.print('RTC Read error!')
myFile.print('RTC Read error!')
Serial.println(' Check circuitry!')
myFile.println(' Check circuitry!')
}
}
ack=0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack=1
break
}
if(ack==0)
{
f=DHT.temperature*1.8+32
Serial.print('Temperature(C) = ')
myFile.print('Temperature(°C) = ')
Serial.println(DHT.temperature)
myFile.println(DHT.temperature)
Serial.print('Temperature(F) = ')
myFile.print('Temperature(°F) = ')
Serial.print(f)
myFile.print(f)
Serial.print('n')
myFile.println(' ')
Serial.print('Humidity(%) = ')
myFile.print('Humidity(%) = ')
Serial.println(DHT.humidity)
myFile.println(DHT.humidity)
Serial.print('n')
myFile.println(' ')
}
if(ack==1)
{
Serial.println('NO DATA')
myFile.println('NO DATA')
}
for(int i=0 i<30 i++)
{
delay(1000)
}
}
myFile.close()
}
}

// ----- R.Girishi välja töötatud programm ----- //

Kui vooluringil on lubatud mõnda aega andmeid logida, saate eemaldada SD-kaardi arvutiga ühenduse loomiseks. Seal on fail TEXT.txt, kuhu salvestatakse kõik temperatuuri ja niiskuse andmed koos aja ja kuupäevaga, nagu allpool näidatud.

MÄRKUS. Ülaltoodud idee on näide andmete liidestamisest ja salvestamisest. Selle projekti kasutamine sõltub teie kujutlusvõimest, saate salvestada mis tahes tüüpi andurite andmeid.

Autori prototüüp:

Arduinoga liidestatud SD-kaardi mooduli prototüüp




Paari: Kontaktivabad andurid - infrapuna, temperatuuri / niiskuse, mahtuvuslik, valgus Järgmine: Kuidas ühendada IR-fotodioodandurit vooluahelasse