本系列,是记录自己入门嵌入式领域的学习笔记。
看看能坚持多久。
今天是2023年5月2日
项目需求:超声波传感器控制灯的开关
项目概述
本项目使用 NodeMCU v3 开发板、HC-SR04 超声波传感器和 SG90 舵机来控制灯的开关。当超声波传感器检测到距离小于等于 100cm 的物体时,舵机正方向旋转 50 度并按下开关,当检测距离大于 100cm 时,舵机反方向旋转 50 度并按下开关。但因没有别的物品,未进一步搭建。但本方案是可行的。此外,还可以对添加一个oled屏幕来显示检测距离,或者运用程序在APP端口进行操作。
所需材料
- NodeMCU v3 开发板 x1
- HC-SR04 超声波传感器 x1
- SG90 舵机 x1
- 杜邦线若干
- 面包板 x1
接线方式
请按照以下接线方式将硬件连接好:
- 将 NodeMCU v3 开发板与面包板连接
-
HC-SR04连接方式:
VCC -> NodeMCU 3.3V
Trig -> NodeMCU D1
Echo -> NodeMCU D2
GND -> NodeMCU GND -
SG90连接方式:
VCC -> NodeMCU 5V
GND -> NodeMCU GND
Signal -> NodeMCU D5
代码设计
请使用以下代码实现本项目需求:
#include <Servo.h> // 引入 Servo 库
#define TRIG_PIN D1 // 定义超声波发射引脚
#define ECHO_PIN D2 // 定义超声波接收引脚
#define SERVO_PIN D5 // 定义舵机控制引脚
Servo servo; // 创建一个名为 servo 的 Servo 对象
int distance = 0; // 初始化距离变量
void setup() {
Serial.begin(9600); // 初始化串口通信,波特率为 9600
pinMode(TRIG_PIN, OUTPUT); // 将超声波发射引脚设为输出模式
pinMode(ECHO_PIN, INPUT); // 将超声波接收引脚设为输入模式
servo.attach(SERVO_PIN); // 将舵机控制引脚与 Servo 对象绑定
}
void loop() {
digitalWrite(TRIG_PIN, LOW); // 将超声波发射引脚置为低电平
delayMicroseconds(2); // 延时 2 微秒
digitalWrite(TRIG_PIN, HIGH); // 将超声波发射引脚置为高电平
delayMicroseconds(10); // 延时 10 微秒
digitalWrite(TRIG_PIN, LOW); // 将超声波发射引脚置为低电平
distance = pulseIn(ECHO_PIN, HIGH) / 58.2; // 计算距离(单位:厘米)
Serial.print("Distance: "); // 输出提示信息
Serial.print(distance); // 输出距离值
Serial.println(" cm"); // 输出距离单位
if (distance <= 100) { // 如果距离小于等于 100 厘米
servo.write(50); // 舵机旋转至角度 50 度
} else { // 否则
servo.write(130); // 舵机旋转至角度 130 度
}
delay(500); // 延时 500 毫秒
}