怎样将SD卡模块连接到Arduino 并使用LM35温度传感器记录温度值

来源: 工程师吴畏 2019-07-31 11:44:00

电路图

首先,将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);

}

0
收藏
0