风筝
发表于: 2019-1-25 09:45:26 | 显示全部楼层

了解使用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。

The SPI pins on the Arduino.png

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库。

  1. #include <SD.h>
  2. #include <SPI.h>
  3. #include <DS3231.h>
复制代码

然后我们初始化一个File类型的对象“sdcard_file”,它将帮助我们使用库的函数。


之后,我们定义了SD卡模块的CS和lm35传感器连接的Ardunio引脚。

  1. File sdcard_file;
  2. DS3231  rtc(SDA, SCL);
  3. int CS_pin = 10; // Pin 10 on Arduino Uno
  4. const int sensor_pin = A0;
  5. float temp;  
  6. float output;
复制代码

接下来我们将CS引脚声明为输出,将LM35传感器引脚作为输入。然后我们开始与RTC模块的串行通信。


之后,我们检查SD卡是否正确初始化。如果SD卡已正确初始化,则串行监视器上将打印“SD card is ready to use”。

  1. pinMode(sensor_pin,INPUT);
  2.   pinMode(CS_pin, OUTPUT);
  3.   Serial.begin(9600);
  4.   rtc.begin();
  5.   // SD Card Initialization
  6.   if (SD.begin())
  7.   {
  8.     Serial.println("SD card is ready to use.");
  9.   } else
  10.   {
  11.     Serial.println("SD card initialization failed");
  12.     return;
  13.   }
复制代码

接下来,我们在串行监视器上打印“Date”、“Time”和“Temp”。然后我们打开SD卡文件并在那里打印相同的东西。如果我们命名的文件不存在,它将新建一个。


在那里打印后,我们关闭SD卡,以便保存文件中的数据。

  1. Serial.print("Date  ");   
  2.   Serial.print("      ");
  3.   Serial.print("   Time  ");
  4.   Serial.print("     ");
  5.   Serial.print("   Temp   ");
  6.   Serial.println("     ");
  7.   sdcard_file = SD.open("data.txt", FILE_WRITE);
  8.   if (sdcard_file) {
  9.     sdcard_file.print("Date  ");   
  10.     sdcard_file.print("      ");
  11.     sdcard_file.print("   Time  ");
  12.     sdcard_file.print("     ");
  13.     sdcard_file.print("   Temp   ");
  14.     sdcard_file.println("     ");
  15.     sdcard_file.close(); // close the file
  16.   }
复制代码

loop()函数中,我们从LM35传感器读取数据并计算输出。然后在串行监视器上打印当前日期、当前时间和当前温度。


之后,我们再次打开SD卡文件并打印当前日期、当前时间和当前温度。

  1. output = analogRead(sensor_pin);
  2.   temp =(output*500)/1023;
  3.   Serial.print(rtc.getDateStr());
  4.   Serial.print("     ");
  5.   Serial.print(rtc.getTimeStr());
  6.   Serial.print("      ");
  7.   Serial.println(temp);
  8.   sdcard_file = SD.open("data.txt", FILE_WRITE);
  9.   if (sdcard_file) {   
  10.     sdcard_file.print(rtc.getTimeStr());
  11.     sdcard_file.print("     ");   
  12.     sdcard_file.print(rtc.getTimeStr());
  13.     sdcard_file.print("     ");
  14.     sdcard_file.println(temp);
  15.     sdcard_file.close(); // close the file
  16.   }
  17.   // if the file didn't open, print an error:
  18.   else {
  19.     Serial.println("error opening test.txt");
  20.   }
  21.   delay(3000);
  22. }
复制代码

现在我们实现了一个可以正常运行的数据记录器,它使用Arduino来记录传感器的时间、日期和温度。


本篇文章使用的完整代码如下: main.rar (660 Bytes, 下载次数: 81)

跳转到指定楼层
zhaohongru
发表于: 2019-8-16 10:57:24 | 显示全部楼层

楼主,DS3231的库可以发我一下吗
回复

使用道具 举报

风筝
发表于: 2019-8-16 19:19:07 | 显示全部楼层

zhaohongru 发表于 2019-8-16 10:57
楼主,DS3231的库可以发我一下吗

DS3231库可以从以下网址下载:www.rinkydinkelectronics.com.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-18 23:49 , Processed in 0.135898 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表