电子说
电路图
首先,将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条评论
快来发表一下你的评论吧 !