基于Wemos的智能感应开盖垃圾桶——日记

参考:基于Wemos的智能感应开盖垃圾桶——日记
作者:9art0
发布时间:2020-09-24 00:40:59
网址:https://blog.csdn.net/GatoWong/article/details/108759063?spm=1001.2014.3001.5501

1.项目软硬件平台及开发环境

1.1.硬件平台
在这里插入图片描述
1.2.开发环境
在这里插入图片描述
1.3.安装USB转串口驱动在这里插入图片描述

1.4.编辑:使得编程文件仅供Wemos使用
在这里插入图片描述
1.5.查看是否编辑完成
在这里插入图片描述

2.Wemos玩蜂鸣器

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

void setup() {
	pinMode(D5, OUTPUT); //配置D5为输出端口
}

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

3.Wemos串口通信(收发)

在这里插入图片描述
下面学习Wemos几种函数
Serial——串口API(Application Programming Interface,应用程序接口)是一些预先定义的函数。在Wemos里,函数经过高度封装。Serial.xxx类似于C++,一点后加函数即可调用。

3.1.初始化函数
在这里插入图片描述
3.2.串口发送函数在这里插入图片描述
下面进行两个函数的应用

void setup() {
  Serial.begin(115200);
  //打开串口,调用begin函数。begin(speed),speed为设置的波特率。
}

void loop() {
  Serial.println("You are hansome!!!");
  //println,串口输出数据并换行。
}

编码前查看编译环境波特率是否与设定的一致
在这里插入图片描述

使用串口调试软件查看Wemos板的输出情况,记得设置软件的波特率与代码设定的一致
在这里插入图片描述
———————————————————————————————————————
3.3.有数据到来函数
在这里插入图片描述
3.4.串口读取函数
在这里插入图片描述
下面进行两个函数的应用

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

void loop() {
  if(Serial.available()>0){//判断串口缓冲区状态
    
      if(Serial.read()==6){//读取串口数据
        Serial.println("You are handsome!");
        }
        
        else {
        Serial.println("You are not handsome!");
             }
        }
}

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

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输出低电平,让蜂鸣器不响
      }
    }

}

5.模块接线

在这里插入图片描述

6.SG90舵机开盖调试

6.1.舵机参数及其调用函数
在这里插入图片描述

servo库是arduino的舵机函数库
在这里插入图片描述
6.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);
}

6.3.串口控制舵机开盖

#include<Servo.h> //头文件为Servo

#define DUOPIN D5 //把引脚D5命名为DUOPIN//记得不要加分号

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

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

void loop() {
  if(Serial.available()>0){
    
  if(Serial.read()==1){
  SG90.write(0);//控制舵机转到0°位置
  }
 }
 
  if(Serial.read()==0){
  SG90.write(90);//控制舵机转到90°位置
  }
 }
 //别用else,单单用else,会包括除条件以外的所有情况,不会保持开或盖的状态。
 //能保持开或者盖的状态的只有不断循环if函数

7.超声波测距

7.1.超声波模块介绍
在这里插入图片描述

7.2.超声波模块测距原理
全程耗时为接收模块ECHO的高电平持续时间
在这里插入图片描述
在这里插入图片描述
结论:超声波走过1厘米的时间为29.15微秒

7.3.超声波测距代码

#define Echo D2
#define Trig D8

long getTime(){ //long是整型
   digitalWrite(Trig,HIGH);//Trig输出高电平
   delayMicroseconds(10);//维持10微秒
   digitalWrite(Trig,LOW);//Trig降为低电平,引起一次脉冲触发
   return pulseIn(Echo,HIGH);//返回ECHO处于高电平的时间(获取全程耗时)
}

void setup() {
   pinMode(Echo,INPUT);//一开始先回声接收装置打开(进入接收状态input)
   pinMode(Trig,OUTPUT);//发射装置打开(给予触发信号,进入待输出状态ouput)
   Serial.begin(115200);//用到了串口通信
}

void loop() {
  long distance;
  distance=getTime()/58;//因为经过29.15微秒,超声波走过1厘米,物距=声波路程/2
  Serial.print(distance);//打印物距数值
  Serial.println("cm");//打印单位
  delay(500);//等500微秒后进行下一次测距
}

8.项目代码整合

#include<Servo.h> 

#define Echo D2//把引脚D2命名为Echo//记得不要加分号
#define Trig D8//把引脚D8命名为Trig
#define DUOPIN D5//把引脚D5命名为DUOPIN
Servo SG90; //把Servo类函数命名为SG90,为C++代码。

long getTime(){ //long是整型
   digitalWrite(Trig,HIGH);//Trig输出高电平
   delayMicroseconds(10);//维持10微秒
   digitalWrite(Trig,LOW);//Trig降为低电平,引起一次脉冲触发
   return pulseIn(Echo,HIGH);//返回ECHO处于高电平的时间(获取全程耗时)
}

void setup() {
   pinMode(Echo,INPUT);//一开始先回声接收装置打开(进入接收状态input)
   pinMode(Trig,OUTPUT);//发射装置打开(给予触发信号,进入待输出状态ouput)
   SG90.attach(DUOPIN);//调用attach函数,连接舵机,即连接引脚DUOPIN
   Serial.begin(115200);//用到了串口通信
}

void loop() {
  long distance;
  distance=getTime()/58;//因为经过29.15微秒,超声波走过1厘米,物距=声波路程/2
    
  if(distance<10){
  SG90.write(0);//控制舵机转到0°位置
  delay(2000);//延时两秒
  }
 
  else SG90.write(90);//控制舵机转到90°位置

}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值