WeMos下实现垃圾桶感应开盖、保持、合盖

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

通过WeMos D1开发板、SG90舵机、超声波模块、蜂鸣器,实现垃圾箱盖子的自动开合。

一、项目软硬件平台及开发环境

1.硬件平台

在这里插入图片描述
特性
1.基于ESP-8266EX
2.Arduino兼容,使用rduino IDE来编程
3.11 x I/O 引脚
4.1 x ADC 引脚(输入范围0-3.3V)
5.板载5V 1A开关电源(高输入电压24V)
工作中:
和stm32模块开发类似,集成度高
STM32方案也更经济便宜

在这里插入图片描述

2.软件平台

在这里插入图片描述

3.安装USB转串口驱动

在这里插入图片描述

4.添加支持,使得WeMos可以在ArduiNo下连接

在这里插入图片描述
4.1检查是否连接完成
在这里插入图片描述

二、驱动演示

1.蜂鸣器

在这里插入图片描述
//基础控制:蜂鸣器叫唤和不叫唤
void setup()
{
pinMode(D5, OUTPUT); //设置引脚为输出引脚
}

void loop()
{
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite

2.Wemos串口通信

串口有关的函数:
在这里插入图片描述
串口与wemos的简单通信:
在这里插入图片描述
在这里插入图片描述
串口控制蜂鸣器代码:
#define BEEP D5

void setup() {
Serial.begin(115200); //初始化串口,设置波特率为115200
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 上电不让蜂鸣器响起
}

void loop()
{
int cmd;
if ( Serial.available() > 0 )
{ //检测串口是否有数据
cmd = Serial.read(); // 读取串口数据
Serial.println(cmd);
if (cmd == 1) { //如果读取的数据是1
digitalWrite(BEEP, LOW); // 蜂鸣器响起
}
else
{
digitalWrite(BEEP, HIGH); // 否则(读取数据非1)蜂鸣器不响
}
}
}

3. SG90舵机

3.1舵机参数及其调用函数
在这里插入图片描述
在这里插入图片描述
3.2舵机开盖测试
#include<Servo.h> //头文件为Servo

#define DUOPIN D5 //把引脚D5命名为DUOPIN

Servo SG90; //把Servo类函数命名为SG90,为C++代码。

void setup() {
SG90.attach(DUOPIN);//调用attach函数,连接舵机,即连接引脚DUOPIN
}

void loop() {
SG90.write(0);//控制舵机转到0°位置
delay(1000);//延时1秒
SG90.write(90);//控制舵机转到90°位置
delay(1000);
}

4.超声波测距

HC-SR04超声波识别模块介绍
在这里插入图片描述
在这里插入图片描述
超声波测距编程实现(距离小于10触发蜂鸣器发出声音):
#define Echo D2
#define Trig D8
#define BEEP D5

long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);

return pulseIn(Echo,HIGH);
}

void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}

void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}

void setup()
{
initChaoShengBo();
initBeep();
Serial.begin(115200);
}

void loop()
{
//获取距离
long dis;
dis = getTime()/58;
Serial.print(dis);
Serial.println(“cm”);
if(dis < 10)
{
digitalWrite(BEEP,LOW);
}
else
{
digitalWrite(BEEP,HIGH);
}
delay(500);
}
在这里插入图片描述

5.蜂鸣器

在这里插入图片描述
在这里插入图片描述
void setup() {
pinMode(D5, OUTPUT); //配置D5为输出端口
}

void loop() {//上电后不断执行loop函数中的代码,应将核心控制代码写入loop
//HIGH,LOW经过了宏定义
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //单位为ms,这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}

5.1通过串口控制蜂鸣器的响与不响

void setup() {
Serial.begin(115200); //串口通信,首先设置波特率
pinMode(D5,OUTPUT); //将D5设置为输出状态
digitalWrite(D5,HIGH); //另D5输出高电平,一上电使得蜂鸣器不响
}

void loop() {

if(Serial.available()>0){ //如果串口来数据了

if(Serial.read()== 1){ //而且到来的数据是数字1
  
  Serial.println("DEE!!!"); 
  digitalWrite(D5,LOW); //D5输出低电平,让蜂鸣器响
  }
  
  else{
    Serial.println("HUSH~"); 
     digitalWrite(D5,HIGH);//D5输出低电平,让蜂鸣器不响
  }
}

}

三、代码实现

1.相关函数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.代码整合

#include<Servo.h>
#define Trig D8
#define Echo D2
#define duoji D5
Servo myduoji;
long init_chaoshengbo()
{
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
long gettime()
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
return pulseIn(Echo, HIGH);
}
void setup()
{
init_chaoshengbo();
myduoji.attach(duoji);
pinMode(duoji, OUTPUT);
}
void loop()
{
long dis;
dis = gettime() / 58;
if (dis < 10)
{
myduoji.write(160);
}
else
{
myduoji.write(30);
}
}

总结

制作完成后可通过移动电源供电使用,当垃圾桶前部指定范围内出现物体时,桶盖自动打开,此时可以将物品放入桶内,延时一定时间后,桶盖自动关闭。若垃圾桶前部指定范围内始终有物体存在,桶盖将保持打开状态。

猜你喜欢

转载自blog.csdn.net/hongliwong/article/details/108899721
今日推荐