|
了解使用LM35温度传感器和DS3231模块制作Arduino SD卡数据记录器。
在本篇文章中,您将了解到Arduino SD卡数据记录器的制作过程。我们使用LM35温度传感器获取温度值,并使用DS3231模块获取时间和日期。然后SD卡插入SD卡模块中,在SD卡文件中记录日期、时间和温度。
所需的组件 ● Arduino开发板 ● SD卡模块 ● DS3231S时钟模块 ● LM35温度传感器模块 ● 连接导线 ● 面包板
电路原理图 首先,将SD卡模块连接到Arduino开发板。 SD卡模块通过SPI总线与Arduino配合使用。 Arduino上的SPI引脚是引脚10、11、12和13。
SD卡与Arduino开发板的连接如下: ● 将SD卡模块的CS连接到Arduino的引脚10 ● 将SD卡模块的MOSI连接到Arduino的引脚11 ● 将SD卡模块的MISO连接到Arduino的引脚12 ● 将SD卡模块的SCK连接到Arduino的引脚13 ● 将SD卡模块的VCC连接到Arduino的5V引脚 ● 将SD卡模块的GND连接到Arduino的GND引脚
之后,将DS3231模块与Arduino连接。 DS3231模块通过I2C通信与Arduino配合使用。 Arduino上用于I2C通信的引脚是SDA和SCL。
将DS3231模块与Arduino连接如下: ● 将DS3231的GND连接到Arduino的GND引脚 ● 将DS3231的VCC连接到Arduino的5V引脚 ● 将DS3231的SDA连接到Arduino的A4引脚 ● 将DS3231的SCL连接到Arduino的A5引脚
最后,将LM35传感器与Arduino连接。将LM35的左侧引脚连接到Arduino的5V,中间引脚连接到Arduino的A0,右侧引脚连接到Arduino的地。
代码说明 首先,包括SD卡和DS3231 RTC模块的库。 SD卡通过SPI通信与Arduino配合使用,因此我们需要包含SPI库。 - #include <SD.h>
- #include <SPI.h>
- #include <DS3231.h>
复制代码然后我们初始化一个File类型的对象“sdcard_file”,它将帮助我们使用库的函数。
之后,我们定义了SD卡模块的CS和lm35传感器连接的Ardunio引脚。 - 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 card is ready to use”。 - 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;
- }
复制代码接下来,我们在串行监视器上打印“Date”、“Time”和“Temp”。然后我们打开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
- }
复制代码
在loop()函数中,我们从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来记录传感器的时间、日期和温度。
本篇文章使用的完整代码如下:
main.rar
(660 Bytes, 下载次数: 83)
|