做过的一个小项目,基于Wemos的基础模块,利用超声波模块和舵机实现垃圾箱盖子的自动开合。
一、成果展示
制作完成后可通过移动电源供电使用,当垃圾桶前部指定范围内出现物体时,桶盖自动打开,此时可以将物品放入桶内,延时一定时间后,桶盖自动关闭。若垃圾桶前部指定范围内始终有物体存在,桶盖将保持打开状态。
二、硬件模块
义乌小商品 - - 迷你垃圾桶
WeMos D1开发板、超声波模块、sSG90舵机
三、源代码
#include<Servo.h>
#define Pin_d D5
#define Echo D2
#define Trig D3
Servo Duoji;
long gettime(){
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);//发送的超声波为10hz的方波
return pulseIn(Echo,HIGH);//计算接收的时间
}
void setpin(){
pinMode(Echo,INPUT); //超声波接收设为INPUT
pinMode(Trig,OUTPUT); //超声波发送设为OUTPUT
Duoji.attach(Pin_d); //连接舵机
}
void setup() {
setpin(); //初始化端口
Serial.begin(115200);
}
void loop() {
long far;
far = gettime()/58; //测距,单位为cm
if(far < 10){
Duoji.write(45); //打开盖子
delay(2000);
}
else{
Duoji.write(150);//关闭盖子
}
delay(500);
}
四、笔记
(1)void setup() //初始化
Serial.begin(speed) //波特率设置
pinMode(D5,OUTPUT/INPUT) //设置D5引脚为输出/输入引脚
digitalWrite(D5,HIGH/LOW) //设置D5引脚为高/低电平
delayMicroseconds(1) //延时一微秒us
(2)void loop()
Serial.println(val) //串口输出 打印数据并换行
Serial.available()>0 //检测端口是否有数据
Serial.read() //读取串口数据
(3)Servo类函数 //(伺服)舵机
#include<Servo.h> //定义头文件
Servo Duoji //定义舵机变量名 Duoji
Duoji.attach(D5); //连接舵机到D5引脚
Duoji.write(45); //另舵机旋转45°角
attach() //连接舵机
write() //角度控制
read() //读取上一次舵机转动角度