所需硬件
weMos D1开发板;
蜂鸣器;
SG90舵机;
代码如下
#include<Servo.h>
#define SERVO D5 //定义舵机信号口为D5脚
#define Echo D2 //定义超声波模块响应信号口为D2脚
#define Trig D8 //定义超声波模块触发信号口为D8脚
#define BUZZER D3 //定义定义蜂鸣器信号口为D3脚
Servo myServo;
long ping() //通过多次调用ping函数得到响应口高电平维持的时间
{
digitalWrite(Trig, HIGH); //在超声波触发信号口写入高电平
delayMicroseconds(10); //延时10微秒
digitalWrite(Trig, LOW); //在超声波触发信号口写入低电平
return pulseIn(Echo, HIGH); //通过pulseIn得到响应口高电平的时间,并返回到ping函数
}
void initUltrasound() //调用一次initUltrasound函数初始化超声波模块
{
pinMode(Echo, INPUT); //初始化超声波模块响应信号口为信号输入口(输入信号到weMos板)
pinMode(Trig, OUTPUT); //初始化超声波模块触发信号口为信号输出口(从weMos板输出信号)
pinMode(BUZZER, OUTPUT); //初始化蜂鸣器模块信号口为输出口(从weMos板输出信号)
myServo.attach(SERVO); //连接舵机(D5脚)
myServo.write(60); //初始化舵机(垃圾桶为闭合状态)
digitalWrite(BUZZER, HIGH); //初始化蜂鸣器为高电平(不响)
delay(1000); //延时1秒,抵消上电
}
void setup()
{
initUltrasound(); //调用initUltrasound函数初始化超声波模块
Serial.begin(115200); //初始化串口,设置波特率为115200
}
void loop()
{
long distance;
distance = ping() / 58; //通过调用ping函数得到的返回值除以58得到距离
Serial.print(distance); //在电脑上打印距离的具体数值
Serial.println("cm");
if (distance < 10) { //如果距离小于10cm
digitalWrite(BUZZER, LOW); //蜂鸣器响
myServo.write(175); //垃圾桶开盖
delay(900); //延时0.9秒
} else { //否则
digitalWrite(BUZZER, HIGH); //蜂鸣器不响
myServo.write(60); //垃圾桶关盖
}
}
当距离垃圾桶小于10cm时,垃圾桶开盖,蜂鸣器响
printf("一个编程小白的第一次实践\n");
软件环境介绍软件环境介绍