Arduino入门了解


Arduino入门到精通

超声波传感器

HC-SR04超声波传感器使用声纳来确定物体的距离,就像蝙蝠一样。它提供了非常好的非接触范围检测,准确度高,读数稳定,易于使用,尺寸从2厘米到400厘米或1英寸到13英尺不等。

其操作不受阳光或黑色材料的影响,尽管在声学上,柔软的材料(如布料等)可能难以检测到。它配有超声波发射器和接收器模块。

image-20250101193100065

image-20250101193110805

技术规格

电源 - + 5V DC
静态电流 - <2mA
工作电流 - 15mA
有效角度 - <15°
测距距离 - 2厘米-400厘米/1英寸-13英尺
分辨率 - 0.3厘米
测量角度 - 30度

必需的组件

你将需要以下组件:

  • 1 × Breadboard 面包板

  • 1 × Arduino Uno R3

  • 1 × 超声波传感器(HC-SR04)

程序

按照电路图进行连接,如下图所示。

image-20250101193124318

草图

在计算机上打开Arduino IDE软件。使用Arduino语言进行编码控制你的电路。通过单击“New”打开一个新的草图文件。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const int pingPin = 7; // Trigger Pin of Ultrasonic Sensor
const int echoPin = 6; // Echo Pin of Ultrasonic Sensor

void setup() {
Serial.begin(9600); // Starting Serial Terminal
}

void loop() {
long duration, inches, cm;
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);
pinMode(echoPin, INPUT);
duration = pulseIn(echoPin, HIGH);
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);
Serial.print(inches);
Serial.print("in, ");
Serial.print(cm);
Serial.print("cm");
Serial.println();
delay(100);
}

long microsecondsToInches(long microseconds) {
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds) {
return microseconds / 29 / 2;
}

代码说明

超声波传感器有四个端子:+5V,Trigger,Echo和GND,连接如下:

· 将+5V引脚连接到Arduino板上的+5v。

· 将Trigger连接到Arduino板上的数字引脚7。

· 将Echo连接到Arduino板上的数字引脚6。

· 将GND连接到Arduino上的GND。

在我们的程序中,我们通过串口显示了传感器测量的距离,单位为英寸和厘米。

结果

你将在Arduino串口监视器上看到传感器测量的距离,单位为英寸和厘米。

LED 闪烁实验

LED 小灯实验是比较基础的实验之一,上一个“ Hello World!”实验里已经利用到了Arduino 自带的LED,这次我们利用其他I/O 口和外接直插LED 灯来完成这个实验,我们需要的实验器材除了每个实验都必须的Arduino 控制器和USB 下载线以外的

实验用到的元器件清单如下:

  1. 红色M5 直插LED*1

img

  1. 220Ω直插电阻*1

img

  1. 面包板*1

img

  1. 面包板跳线*1 扎

img

下一步我们按照下面的小灯实验原理图链接实物图,这里我们使用数字10 接口。使用发光二极管LED 时,要连接限流电阻,这里为220Ω电阻,否则电流过大会烧毁发光二极管。

小灯实验原理图

img

实物图连接图:

img

按照上图链接好电路后,就可以开始编写程序了,我们还是让LED 小灯闪烁,点亮1 秒熄灭1 秒。这个程序很简单与Arduino 自带的例程里的Blink 相似只是将13 数字接口换做10 数字接口。

-———————————————————-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int ledPin = 10; //定义数字10 接口

void setup()

{

pinMode(ledPin, OUTPUT);//定义小灯接口为输出接口

}

void loop()

{

digitalWrite(ledPin, HIGH); //点亮小灯

delay(1000); //延时1 秒

digitalWrite(ledPin, LOW); //熄灭小灯

delay(1000); // 延时1 秒

}

-——————————————————–

下载完程序就可以看到我们的10 口外接小灯在闪烁了,这样我们的

实验现象为LED不停闪烁,间隔大约为一秒。

img

小灯闪烁实验就完成了。谢谢!

按键控制LED实验

I/O 口的意思即为INPUT 接口和OUTPUT 接口,到目前为止我们设计的小灯实验都还只是应用到Arduino 的I/O 口的输出功能,这个实验我们来尝试一下使用Arduino的I/O 口的输入功能即为读取外接设备的输出值,我们用一个按键和一个LED 小灯完成一个输入输出结合使用的实验,让大家能简单了解I/O 的作用。按键开关大家都应该比较了解,属于开关量(数字量)元件,按下时为闭合(导通)状态。完成本实验要

用到的元件如下:

​ 按键开关*1

​ 红色M5 直插LED*1

​ 220Ω电阻*1

​ 10KΩ电阻*1

​ 面包板*1

​ 面包板跳线*1 扎

我们将按键接到数字7 接口,红色小灯接到数字11 接口(Arduino 控制器0-13 数字I/O 接口都可以用来接按键和小灯,但是尽量不选择0 和1 接口,0 和1 接口为接口功能复用,除I/O 口功能外也是串口通信接口,下载程序时属于与PC 机通信故应保持0 和1 接口悬空,所以为避免插拔线的麻烦尽量不选用0 和1 接口),按下面的原理图连接好电路。

img

img

下面开始编写程序,我们就让按键按下时小灯亮起,根据前面的学习相信这个程序很容易就能编写出来,相对于前面几个实验这个实验的程序中多加了一条条件判断语句,这里我们使用if 语句,Arduino 的程序便写语句是基于C 语言的,所以C 的条件判断语句自然也适用于Arduino,像while、swich 等等。这里根据个人喜好我们习惯

于使用简单易于理解的if 语句给大家做演示例程。

我们分析电路可知当按键按下时,数字7 接口可读出为高电平,这时我们使数字11 口输出高电平可使小灯亮起,程序中我们判断数字7 口是否为低电平,要为低电平使数字11 口输出也为低电平小灯不亮,原理同上。

参考源程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 

int ledpin=11;//定义数字11 接口

int inpin=7;//定义数字7 接口

int val;//定义变量val

void setup()

{

pinMode(ledpin,OUTPUT);//定义小灯接口为输出接口

pinMode(inpin,INPUT);//定义按键接口为输入接口

}

void loop()

{

val=digitalRead(inpin);//读取数字7 口电平值赋给val

if(val==LOW)//检测按键是否按下,按键按下时小灯亮起

{ digitalWrite(ledpin,LOW);}

else

{ digitalWrite(ledpin,HIGH);}

}

![img](https://xyy9233.oss-cn-beijing.aliyuncs.com/hexoblog/clip_image006.gif)

下载完程序我们本次的小灯配合按键的实验就完成了,本实验的原理很简单,广泛被用于各种电路和电器中,实际生活中大家也不难在各种设备上发现,例如大家的手机当按下任一按键时背光灯就会亮起,这就是典型应用了。

延伸示范:交通红绿灯管控

  1. 三個LED灯和2个按键开关

  2. 按下第一个按键,3个LED(红绿灯按照顺序闪亮)

  3. 按下第二个按键,呈现全绿灯(开放全线通行)

蜂鸣器发声实验

用Arduino 可以完成的互动作品有很多,最常见也最常用的就是声光展示了,前面一直都是在用LED 小灯在做实验,本个实验就让大家的电路发出声音,能够发出声音的最常见的元器件就是蜂鸣器和喇叭了,两者相比较蜂鸣器更简单和易用所以我们本实验采用蜂鸣器。

以下是要准备的元件:

蜂鸣器*1

按键*1

面包板*1

面包板跳线*1 扎

照下面的原理图连接电路,

img

连接电路时要注意一点就是蜂鸣器有正负极之分,下面右侧实物图可看到蜂鸣器有红黑两种接线。连接好电路程序这方面就很简单了,与前面按键控制小灯是实验程序类似,因为蜂鸣器的控制接口也是数字接口输出高低电平就可以控制蜂鸣器的鸣响。

参考源程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
int buzzer=8;//设置控制蜂鸣器的数字IO脚

void setup()

{

pinMode(buzzer,OUTPUT);//设置数字IO脚模式,OUTPUT为辒出

}

void loop()

{

unsigned char i,j;//定义变量

while(1)

{

for(i=0;i<80;i++)//辒出一个频率的声音

{

digitalWrite(buzzer,HIGH);//发声音

delay(1);//延时1ms

digitalWrite(buzzer,LOW);//不发声音

delay(1);//延时ms

}

for(i=0;i<100;i++)//辒出另一个频率癿声音

{

digitalWrite(buzzer,HIGH);//发声音

delay(2);//延时2ms

digitalWrite(buzzer,LOW);//不发声音

delay(2);//延时2ms

}

}

}

下载完程序,蜂鸣器实验就完成了.

简单的电子体温计设计

摘要:

本报告旨在介绍基于 Micro:bit 的蓝牙测温仪的设计和开发,以解决远程测量体温的问题。我们还将提供一个简单的加密协议,以确保数据的安全传输。

引言

随着全球范围内新冠疫情的蔓延,远程测量体温变得尤为重要。本报告介绍了一种使用Micro:bit开发的蓝牙测温仪,使用户能够方便地进行体温测量并将数据传输到远程设备。

蓝牙传输与简单加密协议

为确保数据的安全传输,我们设计了一个简单的加密协议。该协议基于对称加密算法,使用预共享密钥对传输的温度数据进行加密和解密。这样,只有具有正确密钥的接收方才能解密并读取温度数据

模块构成:

image-20250101194605692

功能描述:

​ 左侧为温度传感器,按下按钮a后无线传出加密温度数据进入右侧接收器接收器对数据进行解密后显示结果。当温度小于37℃时滚动显示温度数字。当温度大于 37℃时,传感器会通过蜂鸣器报警并闪烁叹号“”图案,然后显示温度来提示体温超标。

​ 加密方式采取简单的类凯撒加密,体温不涉及高端机密,采用简单加密旨在避免采用直白数据信号被其他信号干扰,提升系统的抗干扰能力。

凯撒加密

凯撒密码(Caesar)加密时会将明文中的每个字母都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。例如,当偏移量是左移3的时候(解密时的密钥就是3):

代码构成:

image-20250101194703350

image-20250101194722377

image-20250101194737327

这是一个非常有趣且实用的Arduino项目。以下是项目实现的详细说明和实现建议,包括硬件需求、步骤以及仿真可能性:


项目概述

项目目标是设计一个系统,通过摄像头进行人脸识别身份验证,绑定办公椅上的压力传感器,检测坐姿或坐立状态,并通过定时提醒用户起身活动。可以将系统用于健康办公管理。


项目实现的主要模块

  1. 人脸识别模块
    • 使用摄像头和人脸识别库进行身份验证。
    • 验证用户是否为预设身份。
  2. 压力传感器模块
    • 使用压力传感器检测用户是否坐在椅子上。
  3. 定时提醒模块
    • 通过Arduino内置计时器或RTC模块,实现定时提醒功能。
  4. 输出提醒模块
    • 通过蜂鸣器、LED灯或者LCD屏,提示用户起身活动。

硬件需求

  1. 主控板
    • ESP32-CAM(带Wi-Fi的摄像头模块,支持简单AI功能)。
    • 或者 Raspberry Pi(如果需要更强大的计算能力)。
  2. 传感器
    • 压力传感器(如FSR402或HX711配合称重传感器)。
  3. 输出设备
    • 蜂鸣器、LED灯或者OLED屏(用于提醒)。
  4. 其他
    • 5V电源模块或USB供电。
    • 面包板、跳线、固定支架等。

软件需求

  1. 开发环境
    • Arduino IDE(适用于ESP32-CAM)。
    • 或者 Raspberry Pi 配合 Python。
  2. 人脸识别软件库
    • ESP32-CAM: 使用OpenCV库的轻量级版本或者ESP-WHO库(官方提供的人脸识别支持)。
    • Raspberry Pi: 使用OpenCV或Dlib实现人脸识别。
  3. 压力数据处理
    • 根据传感器数据调整阈值,判断是否有人坐在椅子上。

项目实现步骤

1. 人脸识别模块

  • 使用ESP32-CAM摄像头捕捉图像。
  • 加载人脸识别库(ESP-WHO)。
  • 将用户的人脸数据注册到设备中,作为预设用户身份。
  • 每次检测时,系统会将当前捕捉到的人脸数据与已注册数据比对,验证身份。

2. 压力传感器模块

  • 将压力传感器安装在椅子座位上。
  • 将传感器的信号连接到Arduino,通过读取传感器电压值判断是否有人坐下。
  • 设置一个阈值,例如超过某个电压值即判断“有人坐下”,否则为空座状态。

3. 定时提醒模块

  • 通过Arduino内置计时器,每次用户入座后,启动计时。
  • 在设定时间(如30分钟)内,检测压力传感器是否一直处于“有人”的状态。
  • 如果时间到达且用户未离开,触发提醒。

4. 输出提醒模块

  • 使用蜂鸣器播放提醒音

仿真方式

您可以在软件环境中模拟项目功能,以下是仿真方式建议:

  1. Tinkercad(适用于简单Arduino项目):
    • Tinkercad支持Arduino仿真,您可以通过压力传感器模块和LED模块模拟检测和提醒功能。
    • 限制:摄像头模块功能有限,无法仿真人脸识别。
  2. ESP32-CAM硬件仿真
    • 使用实际ESP32-CAM模块,编写代码并测试人脸识别功能。
    • 摄像头可以连接到Arduino IDE进行调试。
  3. Raspberry Pi仿真
    • 使用PC或Raspberry Pi加载OpenCV库,通过Python脚本实现人脸识别功能仿真。
    • 您可以用USB摄像头在PC上运行相同的代码进行验证。

代码

1. ESP32-CAM人脸识别代码(ESP-WHO库)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <esp_camera.h>
#include "FDForward.h" // 人脸识别库
#include "fr_forward.h"

void setup() {
Serial.begin(115200);
// 初始化摄像头模块
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
// 其他配置...
esp_camera_init(&config);
Serial.println("摄像头初始化完成");
}

void loop() {
camera_fb_t *fb = esp_camera_fb_get();
if (!fb) {
Serial.println("图像获取失败");
return;
}

// 人脸识别处理
int face_id = recognize_face(fb);
if (face_id >= 0) {
Serial.println("身份验证通过");
// 执行后续操作
} else {
Serial.println("身份验证失败");
}
esp_camera_fb_return(fb);
}

2. 压力传感器读取代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
const int pressurePin = A0;
const int threshold = 300; // 压力阈值
bool isSeated = false;

void setup() {
Serial.begin(9600);
}

void loop() {
int pressureValue = analogRead(pressurePin);
if (pressureValue > threshold) {
if (!isSeated) {
Serial.println("检测到用户入座");
isSeated = true;
// 开始定时提醒
}
} else {
if (isSeated) {
Serial.println("检测到用户离座");
isSeated = false;
}
}
}

文章作者: W3nL0u
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 W3nL0u !
  目录