秋栈博客

七月

基于Wemos开发板的智能感应垃圾桶项目

5
2021-11-18

物料准备

迷你垃圾桶

wemos开发板

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方案也更经济便宜

SG90舵机

超声波模块

开发环境:Arduino

Arduino开发环境,和keil对比 优点: 集成很多开发库如串口,网络,sg90等 各种硬件开发接口,迅捷开发 自带串口调试工具 缺点: 程序编译速度慢

舵机模块设计

示例代码参考
#define PIN_SERVO D5
Servo myservo;
myservo.attach(PIN_SERVO);
myservo.write(30);

超声波模块设计

先来看一下超声波的测距原理,来设计一个根据感应距离实现开盖动作的函数。
long getTime() {
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);     //发送一个10微秒的脉冲
  digitalWrite(Trig, LOW);
  return pulseIn(Echo, HIGH);  //根据传输过程的高电平计算获取波传输的时间再返回
}
void loop() {
  long distance;
  distance = getTime() / 58;  //获取距离再除以声波走过的两倍距离
  if (distance < 10) {
    MyMontor.write(1);    //根据感应距离操作舵机从而打开盖子
    delay(2000);       //延迟两秒再关闭盖子
  } else {
    MyMontor.write(180);
  }
}
上面遗对58的详解:

项目成功演示

[video width="720" height="1280" mp4="https://159.75.81.167/wp-content/uploads/2021/11/1637217669374344.mp4"][/video]

整合代码

#include
#define Montor D5
#define Echo D2
#define Trig D8

Servo MyMontor;

long getTime() {
  digitalWrite(Trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  return pulseIn(Echo, HIGH);
}

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

void setup() {
  MyMontor.attach(Montor);
  initUltrasound();
  Serial.begin(115200);
}

void loop() {
  long distance;
  distance = getTime() / 58;
  if (distance < 10) {
    MyMontor.write(1);
    delay(2000);
  } else {
    MyMontor.write(180);
  }
}
  • 0