ในโพสต์นี้เราจะเชื่อมต่อโมดูลการ์ด SD กับ arduino สำหรับการบันทึกข้อมูล เราจะเห็นภาพรวมของโมดูลการ์ด SD และทำความเข้าใจการกำหนดค่าพินและส่วนประกอบบนบอร์ด ในที่สุดเราจะสร้างวงจรเพื่อบันทึกข้อมูลอุณหภูมิและความชื้นลงในการ์ด SD
บัตร Secure Digital
การ์ด SD หรือการ์ด Secure Digital เป็นประโยชน์สำหรับอุปกรณ์อิเล็กทรอนิกส์สมัยใหม่เนื่องจากมีพื้นที่จัดเก็บข้อมูลความจุสูงในขนาดที่น้อยที่สุด เราได้ใช้การ์ด SD สำหรับการจัดเก็บสื่อในโครงการก่อนหน้านี้ (เครื่องเล่น MP3) ที่นี่เราจะใช้สำหรับการบันทึกข้อมูล
การบันทึกข้อมูลเป็นขั้นตอนพื้นฐานในการบันทึกเหตุการณ์ที่ผ่านมา ตัวอย่างเช่นนักวิทยาศาสตร์และนักวิจัยสามารถตีความการเพิ่มขึ้นของอุณหภูมิโลก
พวกเขาได้ข้อสรุปนี้หลังจากเข้าใจรูปแบบอุณหภูมิที่เพิ่มสูงขึ้นโดยดูข้อมูลในช่วงไม่กี่ทศวรรษที่ผ่านมา การบันทึกข้อมูลเกี่ยวกับเหตุการณ์ปัจจุบันอาจเปิดเผยเกี่ยวกับเหตุการณ์ที่จะเกิดขึ้นในอนาคตด้วย
เนื่องจาก arduino เป็นไมโครคอนโทรลเลอร์ที่ยอดเยี่ยมสำหรับการอ่านข้อมูลเซ็นเซอร์และรองรับโปรโตคอลการสื่อสารต่างๆเพื่ออ่านเซ็นเซอร์และอุปกรณ์ต่อพ่วงอินพุตเอาต์พุตการเชื่อมต่อระหว่างโมดูลการ์ด SD arduino จึงทำให้ชิ้นส่วนของเค้ก
เนื่องจาก arduino ไม่มีพื้นที่เก็บข้อมูลใด ๆ นอกจากพื้นที่จัดเก็บโปรแกรมของตัวเองเราจึงสามารถเพิ่มที่จัดเก็บข้อมูลภายนอกโดยใช้โมดูลที่อธิบายไว้ในบทความนี้
ตอนนี้เรามาดูโมดูลการ์ด SD กัน
รูปภาพโมดูลการ์ด SD:
ด้านข้างของโมดูลและการกำหนดค่าพิน:
มีหมุดหกตัวและรองรับโปรโตคอลการสื่อสาร SPI (Serial peripheral interface) สำหรับ Arduino UNO หมุดสื่อสาร SPI คือ 13, 12, 11 และ 10 สำหรับ Arduino mega หมุด SPI คือ 50, 51, 52 และ 53
โครงการที่เสนอนี้แสดงด้วย Arduino UNO หากคุณมี Arduino รุ่นอื่น ๆ โปรดอ้างอิงอินเทอร์เน็ตสำหรับหมุด SPI
โมดูลประกอบด้วยที่ใส่การ์ดซึ่งเก็บการ์ด SD ไว้ ตัวควบคุม 3.3V มีไว้เพื่อ จำกัด แรงดันไฟฟ้าให้กับการ์ด SD เนื่องจากออกแบบมาให้ทำงานที่ 3.3V ไม่ใช่ 5V
มีวงจรรวม LVC125A บนบอร์ดซึ่งเป็นตัวเปลี่ยนระดับลอจิก หน้าที่ของตัวเปลี่ยนระดับลอจิกคือการลดสัญญาณ 5V จาก arduino เป็นสัญญาณลอจิก 3.3V
ตอนนี้สรุปโมดูลการ์ด SD แล้ว
การใช้โมดูลการ์ด SD เราสามารถจัดเก็บข้อมูลได้ที่นี่เราจะจัดเก็บข้อมูลข้อความ เราจะจัดเก็บข้อมูลอุณหภูมิและความชื้นลงในการ์ด SD นอกจากนี้เรายังใช้โมดูลนาฬิกาแบบเรียลไทม์เพื่อบันทึกเวลาพร้อมกับข้อมูลเซ็นเซอร์ บันทึกข้อมูลทุกๆ 30 วินาที
แผนภาพ:
โมดูล RTC จะติดตามเวลาและบันทึกวันที่และเวลาลงในการ์ด SD
ไฟ LED แสดงข้อผิดพลาดกะพริบอย่างรวดเร็วหากการ์ด SD ล้มเหลวหรือไม่สามารถเริ่มต้นหรือการ์ด SD ไม่ปรากฏ ช่วงเวลาที่เหลือไฟ LED จะดับ
วิธีตั้งเวลาเป็น RTC:
•ดาวน์โหลดห้องสมุดด้านล่าง
•เมื่อตั้งค่าฮาร์ดแวร์เสร็จแล้วให้เชื่อมต่อ arduino กับพีซี
•เปิด arduino IDE
•ไปที่ไฟล์> ตัวอย่าง> DS1307RTC> SetTime
•อัปโหลดรหัสและ RTC จะได้รับการซิงโครไนซ์กับเวลาของคอมพิวเตอร์
•ตอนนี้อัปโหลดรหัสที่ระบุด้านล่าง
โปรดดาวน์โหลดไลบรารี arduino ต่อไปนี้ก่อนอัปโหลดรหัส
DS1307RTC: github.com/PaulStoffregen/DS1307RTC
DHT11 อุณหภูมิและความชื้น: arduino-info.wikispaces.com/file/detail/DHT-lib.zip
โปรแกรม:
//-----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.Girish ----- //
เมื่อวงจรได้รับอนุญาตให้บันทึกข้อมูลในบางครั้งคุณสามารถถอดการ์ด SD ที่เชื่อมต่อกับคอมพิวเตอร์ของคุณได้จะมีไฟล์ TEXT.txt ซึ่งข้อมูลอุณหภูมิและความชื้นทั้งหมดจะถูกบันทึกพร้อมกับเวลาและวันที่ดังที่แสดงด้านล่าง
หมายเหตุ: แนวคิดข้างต้นเป็นตัวอย่างวิธีการเชื่อมต่อและบันทึกข้อมูล การใช้โครงการนี้ขึ้นอยู่กับจินตนาการของคุณคุณสามารถบันทึกข้อมูลเซ็นเซอร์ได้ทุกชนิด
ต้นแบบของผู้แต่ง:
ก่อนหน้านี้: Contactless Sensors - อินฟราเรด, อุณหภูมิ / ความชื้น, Capacitive, Light ถัดไป: วิธีเชื่อมต่อเซ็นเซอร์โฟโตไดโอด IR ในวงจร