【雕爺學編程】Arduino動手做(52)---MicroSD卡讀寫模塊5

37款傳感器與模塊的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止37種的。鑑於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流爲目的,這裏準備逐一動手試試多做實驗,不管成功與否,都會記錄下來——小小的進步或是搞不掂的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
實驗五十二:SPI接口Micro SD卡模塊 TF卡讀寫卡器 (帶電平轉換芯片)

Micro SD卡讀寫模塊實驗所需硬件清單
1G與4GTF卡X2
8Ω 0.5W小喇叭X1
Micro SD卡讀卡器X2
Arduino Uno開發板 X1
Micro SD卡讀寫模塊X2
DHT11 溫度溼度模塊X1
杜邦線 若干(備了9條)
LED發光二極管(藍色)X1
Proto Shield原型擴展板(帶mini麪包板)X1

 

 

傳感器模塊實驗所需軟件平臺
代碼編程 Arduino IDE (版本1.8.19)
仿真編程 Linkboy (版本V4.6.3)
圖形編程 Mind+ (版本 V1.7.0 RC2.0)
以及編玩邊學(線上平臺https://ide.codepku.com/?type=Arduino)

 


Arduino – SD庫
自帶的SD庫實現了Arduino對SD卡的讀取和寫入。它基於William Greiman的SdFat 庫進行開發。SD庫在標準SD卡和SDHC卡上支持FAT16和FAT32文件系統模式。

使用SD庫中函數裏參數可以包含以正斜槓/分隔的路徑,例如" directory / filename.txt"。由於工作目錄始終是SD卡的根目錄,因此無論文件名是否包含斜槓,其名稱都指向同一文件(例如," / file.txt"等同於" file.txt")。從1.0版開始,SD庫支持打開多個文件。

開發板與SD卡之間的通信使用SPI,注意:
必須連接SS引腳來選擇SD卡。在UNO上,SS默認是爲引腳D10,在MEGA2560上SS默認爲引腳53,或着您也可以在SD.begin()函數中指定一個SS引腳並與之連接。請注意,在您自定義了SS引腳之後,請設置該引腳爲輸出模式,否則SD庫無法正常工作。

 

實驗接線示意圖
Pin VCC ===> 5V Arduino
Pin GND ===> GND Arduino
Pin MOSI ===> Pin 11 Arduino
Pin MISO ===> Pin 12 Arduino
Pin SCK ===> Pin 13 Arduino
Pin CS ===> Pin 10 Arduino

Arduino在SD卡上創建和刪除文件
(1)Arduino參考開源代碼

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  程序六:Arduino在SD卡上創建和刪除文件
  實驗接線:
  Micro SD      UNO
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>
#include <SD.h>
 
// 創建File實例化對象
File myFile;
 
void setup(){
    // 初始化硬件串口並設置波特率爲9600
    Serial.begin(9600);
    while (!Serial)
    {
        ; //等待串口連接,僅使用本地 USB 端口
    }
 
    Serial.print("正在初始化 SD 卡...");
 
 
    // 檢測是否初始化完成
    if (!SD.begin())
    {
        Serial.println("初始化失敗!");
        return;
    }
    Serial.println("初始化完成。");
 
    // 查看是否存在"example.txt"文件
    if (SD.exists("example.txt"))
    {
        Serial.println("example.txt exists.");
    }
    else
    {
        Serial.println("example.txt 不存在");
    }
 
    // 打開一個新文件,然後立即將其關閉(創建文件)
    Serial.println("創建 example.txt...");
    myFile = SD.open("example.txt", FILE_WRITE);
    myFile.close();
 
    // 檢查該文件是否新建成功
    if (SD.exists("example.txt"))
    {
        Serial.println("有example.txt文件了");
    }
    else
    {
        Serial.println("example.txt 不存在");
    }
 
    //刪除該文件
    Serial.println("移除 example.txt...");
    SD.remove("example.txt");
 
    if (SD.exists("example.txt"))
    {
        Serial.println("example.txt exists.");
    }
    else
    {
        Serial.println("example.txt 不存在。");
    }
}
 
void loop(){
}

  

(2)實驗串口返回情況

帶有 SD 卡和 DHT11 溼度和溫度傳感器的 Arduino 數據記錄器
(1)實驗接線示意圖

Arduino實驗開源代碼

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  程序七:帶有SD卡和DHT11溼度和溫度傳感器的Arduino數據記錄器
  實驗接線:DHT11接D4
  Micro SD      UNO
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SPI.h>    // 包含 SPI 庫(SD 卡需要)
#include <SD.h>     // 包含 SD 庫
#include <DHT.h>    // 包含 DHT 傳感器庫

File dataFile;

#define DHTPIN 4         // DHT11 數據引腳連接到 Arduino 引腳 4
#define DHTTYPE DHT11    // 使用 DHT11 傳感器
DHT dht(DHTPIN, DHTTYPE); // 初始化 DHT 庫

void setup() {
  // 打開串行通信並等待端口打開
  Serial.begin(9600);
  while (!Serial)
    ; // 等待串口連接。僅本機 USB 端口需要
  Serial.print("正在初始化 SD 卡...");
  if (!SD.begin())
  {
    Serial.println("初始化失敗!");
    while (1);
  }
  Serial.println("初始化完成。");
  delay(2000);
  dht.begin();
}

uint16_t line = 1;

void loop() {
  delay(1000);
  // 讀取溼度
  byte RH = dht.readHumidity();
  //以攝氏度讀取溫度
  byte Temp = dht.readTemperature();
  //打開文件DHT11Log.txt
  dataFile = SD.open("DHT11Log.txt", FILE_WRITE);

  // 如果文件打開正常,寫入它:
  if (dataFile)
  {
    Serial.print(line);
    Serial.print(": 溫度 = ");
    Serial.print(Temp);
    Serial.print("°C, 溼度 = ");
    Serial.print(RH);
    Serial.println("%");
    // 將數據寫入 SD 卡文件 (DHT11Log.txt)
    dataFile.print(line++);
    dataFile.print(": 溫度 = ");
    dataFile.print(Temp);
    dataFile.print("°C, 溼度 = ");
    dataFile.print(RH);
    dataFile.println("%");
    dataFile.close();

  }
  // 如果文件沒有打開,打印錯誤
  else
    Serial.println("打開 DHT11Log.txt 出錯");
}

  實驗串口返回情況

Arduino實驗場景圖

播放音頻文件2.wav和3.wav
實驗接線示意圖(這裏CS接D10)

Arduino參考開源代碼

/*
  【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)
  程序八:播放音頻文件2.wav和3.wav
  實驗接線:喇叭接D9
  Micro SD      UNO
  CS-------------10
  MOSI(DI)------11
  MISO(DO)------12
  CLK------------13
*/

#include <SD.h>        //包含SD模塊庫
#include <TMRpcm.h>    //包含揚聲器控制庫

#define SD_ChipSelectPin 10   //將pin10定義爲CS pin

TMRpcm tmrpcm;                //爲揚聲器庫創建一個對象

void setup() {
  //定義揚聲器引腳。揚聲器庫正在使用 pin9。
  tmrpcm.speakerPin = 9;

  // 設置串口
  Serial.begin(9600);
  Serial.println("準備就緒");
  

  //查看卡是否存在並且可以初始化。
  if (!SD.begin(SD_ChipSelectPin)) {
    Serial.println("SD 失敗");
    return;               //如果沒有就不要再做
  }

  //每次arduino上電或重置時都會播放聲音文件“2”
  Serial.println("播放聲音文件2.wav");
  Serial.println(" ");
  tmrpcm.play("2.wav");
}

void loop() {
  if (Serial.available()) {
    //通過串口監視器發送字母a開始播放
    if (Serial.read() == 'a') {
      // 設置音量。數字的範圍可以是 0-7。
      // 此時設置音量爲5。
      tmrpcm.setVolume(5);    // 將音量設置爲 5。

      // 播放文件 3。文件 3 是 Red Light 的音頻。
      Serial.println("字母a");
      Serial.println("播放聲音文件3.wav");
      tmrpcm.play("3.wav");
    }
  }
}

  實驗串口返回情況

 

Arduino實驗場景圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章