一实验原理及器件
1.1 器件
一个迷你垃圾桶、Wemos开发板、超声波模块、SG90舵机
1.2 原理
用超声波模块获得物体间的距离,当它小于这个距离时,舵机转动,开盖并持续一段时间,当距离变大时,关盖。
二、代码
2.1代码实现
代码如下:
#include<Servo.h>
#define Echo D2
#define Trig D8
#define DuoPin D5
Servo myDuoJi;
long getTime()
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);//微秒
digitalWrite(Trig, LOW); //形成一个10微秒的方波
return pulseIn(Echo, HIGH);
}
void initChaoShengBo()
{
pinMode(Echo, INPUT);
pinMode(Trig, OUTPUT);
}
void setup() {
// put your setup code here, to run once:
initChaoShengBo();
myDuoJi.attach(DuoPin);
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
long dis;
dis = getTime() / 58; //获取距离
Serial.print(dis);
Serial.println("cm");
if (dis < 10) {
myDuoJi.write(45);
delay(5000);
} else {
myDuoJi.write(150);
}
}
2.2笔记
2.2.1舵机的初始化
要包含以下这些
#include<Servo.h>//定义头文件
Servo myDuoJi;//定义舵机变量
servo函数类用法
attach | 连接舵机 |
---|---|
read() | 读上一次舵机转动角度 |
write() | 控制舵机转动角度 |
attached() | 检查舵机是否连接控制板上 |
detach() | 断开舵机连接 |
writeMicroseconds() | 更精准的角度控制 |
2.2.2超声波的运用
void initChaoShengBo()//初始化超声波
{
pinMode(Echo, INPUT);//设置为输入引脚
pinMode(Trig, OUTPUT);//设置为输出引脚
}
long getTime()//获取时间
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);//微秒
digitalWrite(Trig, LOW); //形成一个10微秒的方波
return pulseIn(Echo, HIGH);//波传输过程中,Echo一直会维持在高电平,返回这个时间,再除以58可以得到距离
}