Arduino 数据记录器

ChangeCode
转载
发布时间: 2025-06-10 17:10:09 | 阅读数 0收藏数 0评论数 0
封面
在本教程中,我们将使用 Arduino 制作一个简单的数据记录器。关键是要学习使用 Arduino 捕获信息并打印到终端的基础知识。
1

添加一些组件

您将需要一些基本组件。这些包括:

  1. Arduino 板
  2. 面包板

通过搜索它们并单击并拖动到中间区域来添加它们。

将试验板放在 Arduino 上。这样可以更轻松地在以后查看连接。

2

关于面包板的说明

面包板是快速原型制作的超级有用的设备。我们用它来连接组件。一些需要注意的事情。


  1. 这些点是垂直连接的,但中间的线将此连接与顶部和底部列分开。
  2. 不是从左到右连接的,就像跨行连接一样。这意味着所有组件都应该跨列连接,而不是垂直连接
  3. 如果您需要使用按钮或开关,请将它们连接在中间的中断处。我们将在后面的教程中介绍这一点。


3

添加两个传感器

我们使用的两个传感器是光敏传感器和温度传感器。

这些传感器评估光线和温度。我们使用 Arduino 读取该值并将其显示在 Arduino 上的串行监视器中。

搜索并添加两个传感器。确保它们位于试验板上的列上。在它们之间留出足够的空间,以便于查看它们。

4

光敏传感器

  1. 对于光敏传感器,从 Arduino 上的 5V 引脚添加一根电线,与试验板中部件的右腿位于同一列。将电线颜色更改为红色。
  2. 通过同一列中的引脚将左腿连接到 Arduino 上的 A0 (A-zero) 引脚。这是模拟引脚,我们将使用它来从传感器读取值。将此电线涂成黄色或红色或黑色以外的颜色。
  3. 在电路板上放置一个电阻器 (搜索并单击并拖动)。这样完成了电路并保护了传感器和引脚。
  4. 把它转过来,让它穿过柱子。
  5. 将一条腿连接到面包板上的右腿柱
  6. 将一根电线从电阻器的另一端接地
  7. 将电线颜色更改为黑色。
  8. 仔细检查所有连接。如果某些内容不在正确的位置,则无法正常工作。
5

启动代码

让我们看看这个组件的代码。

首先,查看此步骤中的第三个图像。它包含一些代码和两个函数:

void setup()

void loop()

在 C++ 中,所有函数都提供其返回类型,然后是名称,然后是可用于传入参数的两个圆括号,通常作为变量。在这种情况下,返回类型为 void 或 nothing。名称为 setup,函数不带任何参数。

设置功能在 Arduino 启动时运行一次(当您插入或连接电池时)。

loop 函数从 setup 函数完成的毫秒开始在恒定循环中运行。

您放入 loop 函数的所有内容都将在 Arduino 运行时运行。超出此范围的所有内容仅在调用时运行。就像我们在循环外定义并调用另一个函数一样。

任务

在 Tinkercad 中使用 按钮打开 Code 面板。将 Blocks 下拉列表更改为 Text。同意弹出的警告框。现在,删除此步骤中除第三张图像中的文本之外的所有内容。

变量

首先,我们需要分配一些变量,以便使我们的代码真正高效。

变量就像桶,只能容纳一个对象(C++ 就是我们所说的面向对象)。是的,我们有数组,但这些是特殊变量,我们稍后会讨论它们。当我们分配一个变量时,我们需要告诉它是什么类型,然后给它一个值。它看起来像这样:

int someVar = A0;

所以,我们分配了一个变量并给它指定了 int 类型。 int整数或整数。

"但你没有用整数!“,我听到你说。这是真的。

Arduino 为我们做了一些特殊的事情,因此我们可以将 A0 用作整数,因为在另一个文件中它将 A0 定义为整数,因此我们可以使用 A0 常量来引用这个整数,而无需知道它是什么。如果我们只键入 0,我们将引用位置 0 的数字引脚,这是行不通的。

因此,对于我们的代码,我们将为我们附加的传感器编写一个变量。虽然我建议给它起个简单的名字,但这取决于你。

您的代码应如下所示:

int lightSensor = A0;
void setup() {
}

void loop() {
}

现在,我们告诉 Arduino 如何处理该引脚上的传感器。我们将在 setup 中运行一个函数来设置引脚模式并告诉 Arduino 在哪里查找它。

int lightSensor = A0;
void setup() {
pinMode(lightSensor, INPUT);
}
void loop() {
}

pinMode 函数告诉 Arduino 引脚 (A0) 将用作 INPUT 引脚。注意 camelCaseUsed(注意每个第一个字母都是大写的,因为它有驼峰,因此......骆驼...!对于变量和函数名称。这是一个惯例,最好习惯。

最后,我们使用 analogRead 函数来获取一些数据。

int lightSensor = A0;
void setup() {
pinMode(lightSensor, INPUT);
}
void loop() {
int reading = analogRead(lightSensor);
}

你会看到 we 将读数存储在一个变量中。这很重要,因为我们需要打印它。让我们使用 Serial 库(库是我们可以添加到代码中的代码,只需通过其定义调用它即可使我们的编写速度更快)将其打印到串行监视器。

int lightSensor = A0;
void setup() {
// Set pin modes
pinMode(lightSensor, INPUT);
// Add the serial library
Serial.begin(9600);
}
void loop() {
// Read the sensor
int reading = analogRead(lightSensor);
// Print the value to the monitor
Serial.print("Light: ");
Serial.println(reading);
// delay the next loop by 3 seconds
delay(3000);
}

一些新东西!首先,您将看到以下内容:

// This is a comment

我们使用注释来告诉其他人我们的代码在做什么。您应该经常使用这些。编译器不会读取这些并将其转换为代码。

现在,我们还添加了 Serial 库,其中包含

Serial.begin(9600)

这是一个采用参数的函数示例。您调用了库 Serial,然后运行了一个函数(我们知道它是一个函数,因为有圆括号)并传入一个整数作为参数,将 Serial 函数设置为以 9600 波特运行。不要担心为什么 - 现在只知道它有效。

我们接下来做的是打印到串行监视器。我们使用了两个函数:

// This one prints to the serial with no line break (an enter at the end)
Serial.print("Light: ");
// This one puts in the line break so each time we read and write, it goes on a new line
Serial.println(reading);

重要的是要看到每个都有不同的目的。确保字符串使用双引号,并在冒号后保留空格。这有助于用户的可读性。

最后,我们使用了 delay 函数来减慢我们的循环速度,使其每 3 秒只读取一次。这是以数千秒为单位编写的。将其更改为每 5 秒只读一次。

伟大!我们开始吧!

6

模拟

始终通过运行模拟来检查一切是否正常。对于此电路,您还需要打开模拟器以检查它是否正常工作并检查您的值。

开始模拟并检查串行监视器。通过单击光传感器并使用滑块更改值来更改光传感器的值。您也应该在串行监视器中看到值更改。如果没有,或者当您按下 Start Simulation 按钮时出现错误,请仔细返回并检查您的所有代码。


  1. 将焦点放在将显示给您的红色调试窗口中指示的行上。
  2. 如果您的代码正确,但模拟仍然无法正常工作,请检查您的接线。
  3. 重新加载页面 - 您可能遇到了不相关的系统/服务器错误。
  4. 对着电脑握拳,然后再次检查。所有程序员都这样做。都。这。时间。


7

连接温度传感器

我假设你现在走在正确的轨道上。如图所示,将温度传感器连接起来。请注意 5V 和 GND 线与灯线放置在相同的空间中。这没关系。它就像一个并联电路,不会在模拟器中引起问题。在实际电路中,您应该使用分线板或扩展板来提供更好的电源管理和连接。

现在,让我们更新代码。

温度传感器代码

这有点棘手,但这只是因为我们必须做一些数学运算来转换读数。还不错。

int lightSensor = A0;
int tempSensor = A1;

void setup() {
// Set pin modes
pinMode(lightSensor, INPUT);
// Add the serial library
Serial.begin(9600);
}
void loop() {
// The temp sensor
// Creating two variables on one line - oh efficiency!
// Float var to store a decimal
float voltage, degreesC;

// Read the value of the pin and convert it to a reading from 0 - 5
// Essentially voltage = (5/1023 = 0.004882814);
voltage = (analogRead(tempSensor) * 0.004882814);

// Convert to Degrees C
degreesC = (voltage - 0.5) * 100;

// Print to the serial monitor
Serial.print("Temp: ");
Serial.print(degreesC);
Serial.println("oC");

// Read the sensor
int reading = analogRead(lightSensor);
// Print the value to the monitor
Serial.print("Light: ");
Serial.println(reading);
// delay the next loop by 3 seconds
delay(3000);
}

我对代码进行了一些更新。让我们单独介绍一下它们。

首先,我添加了一行

int tempSensor = A1;

就像 lightSensor 一样,我需要将值存储在变量中,以便以后更容易。如果我必须更改此传感器的位置(例如重新布线),那么我只需更改一行代码,而无需搜索整个代码库以更改 A0 或 A1 等。

然后,我们添加了一行来将读数和温度存储在浮点数中。请注意一行中的两个变量。

float voltage, degreesC;

这真的很有帮助,因为它减少了我必须编写的行数并加快了代码速度。但是,查找错误可能更难。

现在,我们将进行读取并存储它,然后将其转换为我们的输出值。

voltage = (analogRead(tempSensor) * 0.004882814);
degreesC = (voltage - 0.5) * 100;

这两条线看起来很困难,但在第一行中,我们将读数乘以 0.004......因为它将 1023(模拟读数返回此值)转换为 5 个读数。

第二行将该读数乘以 100 以移动小数点。这给了我们温度。整洁!

8

测试和检查

所有事情都按计划进行,您应该有一个有效的电路。通过运行模拟并使用串行监视器进行测试。如果你有错误,请检查。

阅读记录0
点赞0
收藏0
禁止 本文未经作者允许授权,禁止转载
猜你喜欢
评论/提问(已发布 0 条)
评论 评论
收藏 收藏
分享 分享
pdf下载 下载