我们将使用Arduino开发板制作一个温度数据记录仪,该设备从温度传感器LM35获取温度值,并从DS3231实时时钟模块获取时间。 :`d& |BB
z5?xmffB
在本项目中,我们将使用Arduino开发板制作一个温度数据记录仪,该设备从温度传感器LM35获取温度值,并从DS3231实时时钟模块获取时间。然后我们将使用mini SD卡模块将这些值存储在SD卡文件中。之后,我们从PC访问该文件,并在Microsoft Excel中创建这些数值的图表。 :Q89j4,
UGIyNMY
所需组件 TB9ukLG^<<
V`G]4}
该项目所需的组件如下 h4]yIM`8d
w%kxY5q
● Arduino Uno开发板 <)&;9C
]krOPM/
● DS3231实时时钟模块 E0w>c'kH
hD"Tjd` P
● mini SD卡模块 M!,WU[mP
|[0|j/V%O
● LM35温度传感器 ;s{rJG{inG
Y.ic=<0H
● 连接导线 HyB!8M|
YS&3+Tp
● 面包板 ~"8b\oLW
电路原理图 f"S^:F0
(@]{=q<
Arduino开发板与DS3231时钟模块的连接方式如下所示 8uNq353
r'"H8>UZ%
● DS3231的GND连接到Arduino的GND J 5~bs*a8
8^2Q ~{i
● DS3231的VCC连接到Arduino的5V引脚 hl8[A-d(R
`uY77co6
● DS3231的SDA连接到Arduino上的A4 w18kTa!4@
HI55):Eb
● DS3231的SCL连接到Arduino的A5 ><%z~s
Arduino开发板与SD卡模块的连接方式如下所示 GC.
4~DoqT
● mini SD卡模块的CS连接到Arduino的数字引脚10 2 g,UdG
M,zUg_ @
● mini SD卡模块的SCK连接到Arduino的数字插针13 [+UF]m%W
Y'wQ(6ok
● mini SD卡模块的MOSI连接到Arduino的数字引脚11 f/aSqhAW
YFeF(k!!n
● mini SD卡模块的MISO连接到Arduino的数字引脚12 ry0P\wY}
+TL5yuA
● Mini SD卡模块的VCC连接到Arduino的数字5V SRyAW\*LWU
-Z9e}$q$,
● Mini SD卡模块的GND连接到Arduino的数字GND s"s^rC
Arduino开发板与LM35温度传感器的连接方式如下所示 MqRpG5 .
D}OvD |<-
● LM35的VCC引脚连接到Arduino的5V引脚 n'>`2 s
bejvw?)S.
● LM35的OUT引脚连接到Arduino的A0 w,n&K6<
=c:K(N qL
● LM35的GND引脚连接到Arduino的GND O8qA2@,
014ednc20180411
xj\!Sn2
jt=%oa
工作原理 eT0Yp
{FNmYneh?6
LM35温度传感器以模拟方式输出信号。我们需要使用ADC转换此输出,以便能够测量温度。 Arduino开发板内置了一个ADC,通过它可以将LM35的输出转换成温度值。 0e-M 24,C
u[k0z!p_ c
DS3231时钟模块通过I2C通信连接到Arduino。因此,我们只需要将DS3213上的SCL和SDA引脚与Arduino连接,模块就会开始通信。该模块有一个独立的电池,使得其在即使它没有Arduino供电时也能正常运行。 9mZ[SQf
,t2M ur
然后使用SD卡模块将温度和时间存储在SD卡中。 SD卡模块将打开SD卡并在里面存储数据。之后,我们在PC上打开该文件,并且在Microsoft Excel中使用这些值生成一个图表。 ,6J]oX
k <SFl
注意:如果您是第一次使用DS3231模块,则必须先设置时间和数据。要实现这一点,请根据您的时间更改代码中的时间和日期,并上传以下代码: .'aW~WR
jOV,q%)^,:
时间设定代码 5FKb7
TL'^@Y7X5
#include <DS3231.h> \iVb;7r)9:
:@K1pAh 4
DS3231 rtc(SDA, SCL); F/}(FG<'>I
DC+p
s
void setup() hhRUC&Y%V
Qu]F<H*Y|
{ <a_ytSoG1
3HCH-?U5
rtc.begin(); xO3-I@
U~H]w,^
rtc.setDOW(WEDNESDAY); o y{
{d
*7cc4 wGQ
rtc.setTime(12, 0, 0); \+3amkBe
NFsj
~6F#
rtc.setDate(1, 1, 2014); IHC
{2 ^
@,kR<1
} B bP&-c
`0)'&HbLY
void loop() n3x<L:)
N#C,q&;
{ 'z\$.L
}*Z *wC
} z"D'rHxy
s&.VU|=VQ@
代码 !I)wI~XF)5
a>6@1liT
#include <SD.h> KcPI,.4{
:^bjn3b
#include <SPI.h> ?azi(ja
s[2>r#M
#include <DS3231.h> 8>4@g!9E
]&+,`1_q
File data_file; }LYK:?_/
nI0TvBD
DS3231 rtc(SDA, SCL); +T!7jC(O
Q
6Z,GD
const int lm35_pin = A0; nNj<!}HvV
P80mK-Iyv_
int temperature; V;@kWE>3
n.L/Xp@gc
int chip_select_pin = 10; //pin 53 for arduino mega 2560
Fm-D>PR
E=3UaYr
void setup() { vXI2u;=y
zb_nU7Eg
Serial.begin(9600); 4s_|6{ANS
x%]5Q/|Ur
rtc.begin(); aWg*f*2f
.+#<~Jv
pinMode(lm35_pin, INPUT); VV'*3/I
_@] uHp|
pinMode(chip_select_pin, OUTPUT); =]F;{x
))NiX^)8^
if (SD.begin()) QJ%[6S
%Eq4>o?D
{ :@oy5zib
Ul{{g$
Serial.println("Initialization Successful. Ready to use"); .).}ffhOL
} else L;%_r)
)}3!iDA
{ L!qXt(`
0pW?v:!H
Serial.println("Initialization failed. Check your pin connections or change your SD card"); 7c8A|E0\mF
n,l{1 q
return; 0r/pZ3/
} 5`tMHgQO
1&2X*$]y
} P-Up v6J3
u6#FG9W7
void loop() { xtq='s8e
}<=4A\LZ
temperature = analogRead(lm35_pin); 99/`23YL
rY:A LA
temperature = (temperature*500)/1023; Ms61FmA4
Y(U+s\X
data_file = SD.open("test.txt", FILE_WRITE); ?7k%4~H t
rEfo)jod
if (data_file) { oU[>.Igi
ZIr&_x#e
Serial.print(rtc.getTimeStr()); 9V/:1I0?&0
data_file.print(rtc.getTimeStr()); /9wmc2
ba`V`0p- (
Serial.print(","); @b]?Gg
}<7S%?TY
data_file.print(","); dd>
qy
bsosva+
Serial.println(temperature); 6jaol'{SuH
mSFh*FG
data_file.println(temperature); OF_g0Zu
xhTiOt6l
data_file.close(); 7FBaN7l
} E9]\ I>v
1;FtQnvH
else { fBw"<J{
8p0ZIrD%
Serial.println("error opening your SD card file. Try again"); kuI%0)iZn
} {wq~+O
B{6wf)[O
delay(3000); a?K 3/0G
kaG@T,pH(
} UZD Xv=r|
e{RhMjX<D
代码说明 GFX$vn-/F
\.l8]LH
首先,我们包含了mini SD卡模块和DS3231时钟模块所需的库文件。 SD卡模块通过SPI通信连接到Arduino,因此我们包含了SPI库。 之后,我们初始化两个变量以便使用库函数。 %K/zVYGm&
Hsl0|jy(/
#include <SD.h> H5J1j*P<d
At$[&%}
#include <SPI.h> "MX9h }7
eWw#
T^
#include <DS3231.h> )&pcRFl
5S/YVRXq
File data_file; "'@>cJ=
Z^_-LX:%
DS3231 rtc(SDA, SCL); \YMe&[C:o
d:&=|kKw
在设置函数中,我们开始与SD卡模块进行通信。 如果一切正常,Arduino将在串行监视器上打印输出“Initialization Successful. Ready to use“,否则将打印输出”Initialization failed. Check your pin connections or change your SD card“。 U5!~@XjG>
kh5VuXpe
if (SD.begin()) CA[3R
q!!gn1PT(T
{ WMk;-,S!)
Gw@]w;ed
Serial.println("Initialization Successful. Ready to use"); tmVGJ+gz
} else _i@4R<
gF53[\w^v
{ :rzq[J^
WT_4YM\bz
Serial.println("Initialization failed. Check your pin connections or change your SD card"); 3-6Lbe9H
C;jV)hr6P
return; A(v5VvgZE
} S|pf.l
8%Eemk >G{
LM35温度传感器以模拟形式输出信号,因此首先需要将该模拟输出转换为温度。 然后我们打开SD卡文件“test.txt”。 如果没有该名称的文件,那么Arduino将会创建它。 打开文件后,Arduino将打印输出时间和温度。 Zv|TvlyT"
U
rL|r.
temperature = analogRead(lm35_pin); @{LD_>R
J]4pPDm
temperature = (temperature*500)/1023; XN %tcaY
2R=Fc@MXs
data_file = SD.open("test.txt", FILE_WRITE); ms/!8X$Mz
qS?uMms7w
if (data_file) { b-Xc6f
rjWn>M
Serial.print(rtc.getTimeStr()); ;t\oM7J|
Sece#K2J|
data_file.print(rtc.getTimeStr()); dW#T1mB
u [Dz~
Serial.print(","); !HCuae3_
^jB17z[
data_file.print(","); mO8E-D*3
~/l5ys
Serial.println(temperature); p"tCMB
PHU$<>
data_file.println(temperature); 2Y1y;hCK
MfG8=H2#|
data_file.close(); c5- 56Q
注意:您要选择的文件名必须为8.3格式。 8.3格式的文件名可以类似“data345.txt”,其中“data345”是8个字符串,“.txt”是3个字符的扩展名。 您不能使用比此格式更长的文件名。 如果您是第一次使用该SD卡,建议在使用SD卡之前进行格式化。 GJj} |+|
+rWcfXOHM
如何在Excel中制作图表 /{%p%Q[X
/L^pU-}Z0
要在excel中制作一个图表,打开Microsoft excel并转到数据菜单,点击'从文本'按钮并选择SD卡文件。 然后选择分隔符,然后单击下一步,之后选择逗号并完成向导。 0i4XS*vPv
|y.^F3PE
现在,选择所有的数据,然后转到插入菜单,点击'折线图'。 这将会为我们创建出一个图表。 r$WBEt,B