วันนี้ลองมาต่อใช้งาน SD Card Module เพื่อทำเป็นอุปกรณ์เก็บข้อมูล (log file) กันดีกว่าครับ
SD Card เป็นอุปกรณ์ที่สื่อสารโดยใช้ Serial Peripheral Protocol (SPI) ครับ โดยทั่วไป การสื่อสารแบบ SPI นั้นสามารถใช้สื่อสารระหว่างบอร์ดไมโคคอนโทรลเลอร์กับอุปกรณ์ต่อพ่วงอื่นๆได้พร้อมกันหลายๆชิ้น เช่น ติดต่อ ADC, SD Card Module, Sensors ต่างๆได้ แต่ในตัวอย่างที่จะเขียนด้านล่างนี้จะใช้ติดต่อระหว่าง Board Arduino กับ SD Card เท่านั้นครับ
ดังนั้น Board Arduino จึงทำหน้าที่เป็น Master และ SD Card Module จะเป็น Slave เพียงตัวเดียว และการจะต่อเข้ากับ Board ของ Arduino รุ่นต่างๆ จึงต่อใช้ Port สื่อสารดังต่อไปนี้ครับ
ซึ่งบอร์ด Arduino ต่างๆ ก็จะมี Pin ดังกล่าวรอพร้อมอยู่แล้วครับ แต่จะมีตำแหน่งที่แตกต่างกันนะครับ เวลาจะต่อใช้งานจึงต้องต่อให้ถูกด้วย
สำหรับ Arduino UNO R3 ก็ต่อตามนี้เลยครับ
สำหรับ Arduino MEGA และ MEGA ADK ต้องต่อตามนี้ครับ
หลายคนอาจจะสงสัยว่าทำไมต้องมีไฟเลี้ยงทั้ง 5 และ 3.3 VDC มันเป็นแบบนี้เพราะว่า SD Card module ถูกออกแบบมาให้ใช้ได้กับบอร์ดหลายๆแบบครับ บางบอร์ดใช้ไฟเลี้ยงกับสัญญาณต่างๆ 5 โวลต์ (เช่น UNO R3, Mega, Mega ADK) บางบอร์ดแค่ 3.3 โวลต์ครับ (เช่น DUE หรือ พวก Raspberry PI) การใช้งานแรงกันเกินกว่าพิกัดของบอร์ด อาจทำให้เกิดความเสียหายได้ครับ
แต่สำหรับผู้ใช้ UNO หรือ MEGA ก็ใช้ 5 โวลต์อย่างเดียวก็พอครับ 3.3 โวลต์ จะต่อหรือไม่ก็ไม่ต่างกันครับ
หลังจากต่อเรียบร้อยดังรูปด้านบน หรือจะใช้กับ Prototpy Shield เพื่อให้เรียบร้อยก็ไม่ว่ากันครับ เรามาลอง Sketch ตัวอย่างที่ให้มาพร้อมกับ Arduino IDE กัน ลองเปิดใน Files => Examples => SD => Card Info (ถ้าไม่มีก็ copy ด้านล่างเลยครับ)
/*
#include #include // set up variables using the SD utility library functions: // change this to match your SD shield or module; void setup()
// print the type of card // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
|
ถ้าต่อทุกอย่างถูกต้องจะได้ผลบน Serial monitor ดังนี้ครับ
Initializing SD card...Wiring is correct and a card is present.
Card type: SD1
Volume type is FAT16
Volume size (bytes): 2057764864
Volume size (Kbytes): 2009536
Volume size (Mbytes): 1962
Files found on the card (name, date and size in bytes):
TEST.TXT 2000-01-01 01:00:00 36
DATALOG.TXT 2013-05-25 16:16:54 18834
จะเห็นว่า Card Info Sketch จะเข้าไปหาขนาดของ SD Card ที่ใช้ พร้อมทั้งอ่านชื่อไฟล์ ที่มีในตัว SD card ครับ
เป็นอันว่าเรียบร้อย ต่อสายสัญญานได้ถูกต้อง ปกติผมจะลองใช้ Sketch นี้ในการทดสอบการต่อสายนะครับ ถ้าถูก Sketch ง่ายๆ แค่นี้ก็จะ Run ได้ไม่มีปัญหาครับ
ทีนี้ลองมาดูการต่อกับ Board Arduino MEGA หรือ MEGA ADK กันครับ มีแตกต่างเล็กน้อยครับ
อันดับแรกต่อสายกันก่อน ต่อสายอาจจะมีการหลวมไม่แน่นได้นะครับ จับให้ดี กดให้แน่น เดี่ยวสัญญานไม่ต่อกันครับ
ทีนี้หลังจากต่อแล้วต่อแก้ไข Sketch ที่ให้มาในตัวอย่างเพื่อใช้งานกับ Arduino Mega หรือ Mega ADK อยู่ 2 จุดครับ
จุดแรก
const int chipSelect = 53; // ต้องแก้เป็น pin 53 ตาม diagram ของ board ครับ
จุดที่สอง
pinMode(53, OUTPUT); // เช่นกันครับ แก้เป็น 53 บน Mega ครับ
แค่นี้ก็เรียบร้อย Run Sketch ได้เหมือนกับด้านบนแล้วครับ
อีกนิดนะครับ เท่าที่ผมเคยลองใช้ SD Card module ดูกับ SD card หลายๆ ขนาด ใหญ่สุดเท่าที่ผมมีก็ 8 GB ครับ อ่านได้สบายๆ เล็กกว่านี้ยิ่งไม่มีปัญหา แต่ใหญ่กว่านี้ยังไม่เคยได้ลองครับ ใครลองแล้วก็บอกกันมาได้นะครับ
คราวหน้ามาลองเขียนไฟล์ และอ่านไฟล์จาก SD Card กันครับ
อ่านต่อบทความ SD Card ตอนที่ 2
โดย Mountain "A"
หน้านี้เป็นสารบัญของบทความที่ปรากฏในเว็บของ Arduitronics.com นะครับ จะขอแบ่งออกเป็นหัวข้อตามกลุ่มของสินค้าในร้านดังต่อไปนี้
หน้าที่เข้าชม | 15,375,394 ครั้ง |
ผู้ชมทั้งหมด | 5,878,472 ครั้ง |
เปิดร้าน | 21 พ.ค. 2556 |
ร้านค้าอัพเดท | 6 ก.ย. 2568 |