電路圖
首先,將SD卡模塊連接到Arduino。 SD卡模塊通過SPI通信與Arduino配合使用。 Arduino上的SPI引腳是10,11,12和13.
OLED與Arduino的連接如下:
將SD卡模塊的CS連接到Arduino的第10針
將SD卡模塊的MOSI連接到Arduino的第11針
將SD卡模塊的MISO連接到Arduino的第12針
將SD卡模塊的SCK連接到Arduino的第13針
將SD卡模塊的VCC連接到5V Arduino的引腳
將SD卡模塊的GND連接到Arduino的GND引腳
之后,連接DS3231模塊帶有Arduino。 DS3231模塊通過I2C通信與Arduino配合使用。 Arduino上用于I2C通信的引腳是SDA和SCL。
按如下方式將DS3231模塊與Arduino連接:
將DS3231的GND連接到Arduino的GND引腳
將DS3231的VCC連接到Arduino的5V引腳
將OLED的SDA連接到Arduino的A4引腳
連接SCL Arduino的OLED到A5引腳
最后,將LM35傳感器與Arduino連接。將LM35的左引腳連接到Arduino的5V,中間引腳連接到Arduino的A0,左引腳連接到Arduino的地。
代碼說明
首先,包括SD卡和DS3231 RTC模塊的庫。 SD卡通過SPI通信與Arduino配合使用,因此我們已經包含了SPI庫。
#include
#include
#include
然后我們初始化一個File類型的對象“sdcard_file”,它將幫助我們使用這些函數之后,我們定義了連接SD卡模塊的CS引腳和lm35傳感器引腳的引腳。
File sdcard_file;
DS3231 rtc(SDA, SCL);
int CS_pin = 10; // Pin 10 on Arduino Uno
const int sensor_pin = A0;
float temp;
float output;
接下來我們宣布CS引腳作為輸出,LM35傳感器引腳作為輸入。然后我們開始與RTC模塊的串行通信和通信。
之后,我們檢查SD卡是否正確初始化。如果SD卡已正確初始化,則串行監視器上將打印“SD卡已準備就緒”。
pinMode(sensor_pin,INPUT);
pinMode(CS_pin, OUTPUT);
Serial.begin(9600);
rtc.begin();
// SD Card Initialization
if (SD.begin())
{
Serial.println(“SD card is ready to use.”);
} else
{
Serial.println(“SD card initialization failed”);
return;
}
接下來我們打印“日期”,“時間”和“溫度” “在串口顯示器上。然后我們打開SD卡文件并在那里打印相同的東西。如果我們命名的文件不在那里,它將在那里創建。
在那里打印后,我們關閉SD卡,以便保存文件中的數據。
Serial.print(“Date ”);
Serial.print(“ ”);
Serial.print(“ Time ”);
Serial.print(“ ”);
Serial.print(“ Temp ”);
Serial.println(“ ”);
sdcard_file = SD.open(“data.txt”, FILE_WRITE);
if (sdcard_file) {
sdcard_file.print(“Date ”);
sdcard_file.print(“ ”);
sdcard_file.print(“ Time ”);
sdcard_file.print(“ ”);
sdcard_file.print(“ Temp ”);
sdcard_file.println(“ ”);
sdcard_file.close(); // close the file
}
在循環功能中,我們從LM35傳感器讀取并計算輸出。然后我們在串行監視器上打印當前日期,當前時間和當前溫度。
之后,我們再次打開SD卡文件并打印當前日期,當前時間和當前溫度。
output = analogRead(sensor_pin);
temp =(output*500)/1023;
Serial.print(rtc.getDateStr());
Serial.print(“ ”);
Serial.print(rtc.getTimeStr());
Serial.print(“ ”);
Serial.println(temp);
sdcard_file = SD.open(“data.txt”, FILE_WRITE);
if (sdcard_file) {
sdcard_file.print(rtc.getTimeStr());
sdcard_file.print(“ ”);
sdcard_file.print(rtc.getTimeStr());
sdcard_file.print(“ ”);
sdcard_file.println(temp);
sdcard_file.close(); // close the file
}
// if the file didn‘t open, print an error:
else {
Serial.println(“error opening test.txt”);
}
delay(3000);
}
您現在應該有一個正常運行的數據記錄器,它使用Arduino來跟蹤傳感器周圍的時間,日期和溫度。
您將為此項目添加什么?分叉并開發自己的版本。
完整代碼
#include
#include
#include
File sdcard_file;
DS3231 rtc(SDA, SCL);
int CS_pin = 10; // Pin 10 on Arduino Uno
const int sensor_pin = A0;
float temp;
float output;
void setup() {
Serial.begin(9600);
pinMode(sensor_pin,INPUT);
pinMode(CS_pin, OUTPUT);
rtc.begin();
// SD Card Initialization
if (SD.begin())
{
Serial.println(“SD card is ready to use.”);
} else
{
Serial.println(“SD card initialization failed”);
return;
}
Serial.print(“Date ”);
Serial.print(“ ”);
Serial.print(“ Time ”);
Serial.print(“ ”);
Serial.print(“ Temp ”);
Serial.println(“ ”);
sdcard_file = SD.open(“data.txt”, FILE_WRITE);
if (sdcard_file) {
sdcard_file.print(“Date ”);
sdcard_file.print(“ ”);
sdcard_file.print(“ Time ”);
sdcard_file.print(“ ”);
sdcard_file.print(“ Temp ”);
sdcard_file.println(“ ”);
sdcard_file.close(); // close the file
}
// if the file didn’t open, print an error:
else {
Serial.println(“error opening test.txt”);
}
}
void loop() {
output = analogRead(sensor_pin);
temp =(output*500)/1023;
Serial.print(rtc.getDateStr());
Serial.print(“ ”);
Serial.print(rtc.getTimeStr());
Serial.print(“ ”);
Serial.println(temp);
sdcard_file = SD.open(“data.txt”, FILE_WRITE);
if (sdcard_file) {
sdcard_file.print(rtc.getTimeStr());
sdcard_file.print(“ ”);
sdcard_file.print(rtc.getTimeStr());
sdcard_file.print(“ ”);
sdcard_file.println(temp);
sdcard_file.close(); // close the file
}
// if the file didn‘t open, print an error:
else {
Serial.println(“error opening test.txt”);
}
delay(3000);
}
-
SD卡
+關注
關注
2文章
565瀏覽量
63938 -
Arduino
+關注
關注
188文章
6471瀏覽量
187242
發布評論請先 登錄
相關推薦
評論