我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1877|回复: 4

[技术文章] DIY一个Arduino温度数据记录仪

[复制链接]
  • TA的每日心情

    昨天 18:16
  • 签到天数: 99 天

    [LV.6]常住居民II

    3万

    主题

    8253

    回帖

    8万

    积分

    三级逆天

    积分
    81480

    终身成就奖特殊贡献奖原创先锋奖金点子奖优秀斑竹奖宣传大使奖

    发表于 2018-4-12 09:45:26 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

    您需要 登录 才可以下载或查看,没有账号?立即注册

    ×
    我们将使用Arduino开发板制作一个温度数据记录仪,该设备从温度传感器LM35获取温度值,并从DS3231实时时钟模块获取时间。

    在本项目中,我们将使用Arduino开发板制作一个温度数据记录仪,该设备从温度传感器LM35获取温度值,并从DS3231实时时钟模块获取时间。然后我们将使用mini SD卡模块将这些值存储在SD卡文件中。之后,我们从PC访问该文件,并在Microsoft Excel中创建这些数值的图表。

    所需组件

    该项目所需的组件如下

    ● Arduino Uno开发板

    ● DS3231实时时钟模块

    ● mini SD卡模块

    ● LM35温度传感器

    ● 连接导线

    ● 面包板
    电路原理图

    Arduino开发板与DS3231时钟模块的连接方式如下所示

    ● DS3231的GND连接到Arduino的GND

    ● DS3231的VCC连接到Arduino的5V引脚

    ● DS3231的SDA连接到Arduino上的A4

    ● DS3231的SCL连接到Arduino的A5
    Arduino开发板与SD卡模块的连接方式如下所示

    ● mini SD卡模块的CS连接到Arduino的数字引脚10

    ● mini SD卡模块的SCK连接到Arduino的数字插针13

    ● mini SD卡模块的MOSI连接到Arduino的数字引脚11

    ● mini SD卡模块的MISO连接到Arduino的数字引脚12

    ● Mini SD卡模块的VCC连接到Arduino的数字5V

    ● Mini SD卡模块的GND连接到Arduino的数字GND
    Arduino开发板与LM35温度传感器的连接方式如下所示

    ● LM35的VCC引脚连接到Arduino的5V引脚

    ● LM35的OUT引脚连接到Arduino的A0

    ● LM35的GND引脚连接到Arduino的GND
    014ednc20180411

    工作原理

    LM35温度传感器以模拟方式输出信号。我们需要使用ADC转换此输出,以便能够测量温度。 Arduino开发板内置了一个ADC,通过它可以将LM35的输出转换成温度值。

    DS3231时钟模块通过I2C通信连接到Arduino。因此,我们只需要将DS3213上的SCL和SDA引脚与Arduino连接,模块就会开始通信。该模块有一个独立的电池,使得其在即使它没有Arduino供电时也能正常运行。

    然后使用SD卡模块将温度和时间存储在SD卡中。 SD卡模块将打开SD卡并在里面存储数据。之后,我们在PC上打开该文件,并且在Microsoft Excel中使用这些值生成一个图表。

    注意:如果您是第一次使用DS3231模块,则必须先设置时间和数据。要实现这一点,请根据您的时间更改代码中的时间和日期,并上传以下代码:

    时间设定代码

    #include <DS3231.h>

    DS3231 rtc(SDA, SCL);

    void setup()

    {

    rtc.begin();

    rtc.setDOW(WEDNESDAY);

    rtc.setTime(12, 0, 0);

    rtc.setDate(1, 1, 2014);

    }

    void loop()

    {

    }

    代码

    #include <SD.h>

    #include <SPI.h>

    #include <DS3231.h>

    File data_file;

    DS3231 rtc(SDA, SCL);

    const int lm35_pin = A0;

    int temperature;

    int chip_select_pin = 10; //pin 53 for arduino mega 2560

    void setup() {

    Serial.begin(9600);

    rtc.begin();

    pinMode(lm35_pin, INPUT);

    pinMode(chip_select_pin, OUTPUT);

    if (SD.begin())

    {

    Serial.println("Initialization Successful. Ready to use");
    } else

    {

    Serial.println("Initialization failed. Check your pin connections or change your SD card");

    return;
    }

    }

    void loop() {

    temperature = analogRead(lm35_pin);

    temperature = (temperature*500)/1023;

    data_file = SD.open("test.txt", FILE_WRITE);

    if (data_file) {

    Serial.print(rtc.getTimeStr());
    data_file.print(rtc.getTimeStr());

    Serial.print(",");

    data_file.print(",");   

    Serial.println(temperature);

    data_file.println(temperature);

    data_file.close();
    }

    else {

    Serial.println("error opening your SD card file. Try again");
    }

    delay(3000);

    }

    代码说明

    首先,我们包含了mini SD卡模块和DS3231时钟模块所需的库文件。 SD卡模块通过SPI通信连接到Arduino,因此我们包含了SPI库。 之后,我们初始化两个变量以便使用库函数。

    #include <SD.h>

    #include <SPI.h>

    #include <DS3231.h>

    File data_file;

    DS3231 rtc(SDA, SCL);

    在设置函数中,我们开始与SD卡模块进行通信。 如果一切正常,Arduino将在串行监视器上打印输出“Initialization Successful. Ready to use“,否则将打印输出”Initialization failed. Check your pin connections or change your SD card“。

    if (SD.begin())

    {

    Serial.println("Initialization Successful. Ready to use");
    } else

    {

    Serial.println("Initialization failed. Check your pin connections or change your SD card");

    return;
    }

    LM35温度传感器以模拟形式输出信号,因此首先需要将该模拟输出转换为温度。 然后我们打开SD卡文件“test.txt”。 如果没有该名称的文件,那么Arduino将会创建它。 打开文件后,Arduino将打印输出时间和温度。

    temperature = analogRead(lm35_pin);

    temperature = (temperature*500)/1023;

    data_file = SD.open("test.txt", FILE_WRITE);

    if (data_file) {

    Serial.print(rtc.getTimeStr());

    data_file.print(rtc.getTimeStr());

    Serial.print(",");

    data_file.print(",");   

    Serial.println(temperature);

    data_file.println(temperature);

    data_file.close();
    注意:您要选择的文件名必须为8.3格式。 8.3格式的文件名可以类似“data345.txt”,其中“data345”是8个字符串,“.txt”是3个字符的扩展名。 您不能使用比此格式更长的文件名。 如果您是第一次使用该SD卡,建议在使用SD卡之前进行格式化。

    如何在Excel中制作图表

    要在excel中制作一个图表,打开Microsoft excel并转到数据菜单,点击'从文本'按钮并选择SD卡文件。 然后选择分隔符,然后单击下一步,之后选择逗号并完成向导。

    现在,选择所有的数据,然后转到插入菜单,点击'折线图'。 这将会为我们创建出一个图表。
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    364

    回帖

    1

    积分

    1元学习PADS(3期)

    积分
    1

    终身成就奖原创先锋奖

    QQ
    发表于 2018-4-13 08:29:54 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    12

    主题

    172

    回帖

    186

    积分

    二级逆天

    积分
    186

    社区居民社区明星终身成就奖宣传大使奖

    QQ
    发表于 2018-5-16 17:02:54 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    33

    主题

    1427

    回帖

    1862

    积分

    二级逆天

    积分
    1862

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2022-9-4 08:31:25 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    3 天前
  • 签到天数: 133 天

    [LV.7]常住居民III

    0

    主题

    1488

    回帖

    3388

    积分

    二级逆天

    积分
    3388

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2023-11-7 08:07:25 | 显示全部楼层
    回复

    使用道具 举报

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

    本版积分规则

    每日签到,有金币领取。


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    ( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

    平平安安
    TOP
    快速回复 返回顶部 返回列表