wemos实现智能垃圾桶

wemos实现智能垃圾桶

一、编写代码前硬件准备与编译环境介绍
(1)硬件:wemoeD1芯片 在这里插入图片描述
图 1.1
(2)超声波
在这里插入图片描述

(3)蜂鸣器
在这里插入图片描述

(4)软件平台介绍:Arduino
在这里插入图片描述
二、接线
(1)wemos图解
在这里插入图片描述

(2)让蜂鸣器叫
1.蜂鸣器与wemos接线
(蜂鸣器的)VCC—— (wemos的)3.3v
(蜂鸣器的)GND—— (wemos的)GND
(蜂鸣器的)IO—— (wemos的)D5
(注释:——为接线符号,接线时有无线模块的那一侧朝向自己。)
三根线插完之后,最后用USB线让wemos与电脑相连。
图为接通状态
在这里插入图片描述
2.安装驱动
wemos与电脑连接之后,为USB转串口安装驱动,否则电脑识别不了芯片。
在这里插入图片描述
(1)安装驱动软件
1.CH341SER.EXE
在这里插入图片描述
下载地址:http://www.wch.cn/downloads/CH341SER_EXE.html
下载完点击安装即可
如果安装之后还是识别不了,就安装pl2303

下载地址:http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=225&pcid=41

点击红色区域即可下载。

三、编写蜂鸣器代码
(1)打开Arduino
首先要配置才能支持wemos:
点击上方的工具,点击板,选择wemosD1,紧接着鼠标放在工具下面的端口,会自动的显示COM端口,点击COM端口号即可

(2)让蜂鸣器响与不响
D5输出低电平——响
D5输出高电平——不响

让蜂鸣器一直响:

void setup() {
    pinMode(D5,OUTPUT);//1.设置D5为输出引脚
}

void loop() {
     digitalWrite(D5,LOW);//2.低电频响
}

核心的代码要写得到loop里面,因为通电之后,首先执行的是loop里面的代码,不断的执行D5=LOW。

setup函数只调用一次,一般用于硬件相关的初始化,例如:IO口,串口,WIFI等。

让蜂鸣器响一会儿,不响一会儿

void setup() {
    pinMode(D5,OUTPUT);//设置为输出引脚
}

void loop() {
     digitalWrite(D5,LOW);//低电频响
     delay(1000);//1000毫秒等于一秒,响一秒
     digitalWrite(D5,HIGH);//高电频不响
     delay(1000);//不响一秒
}

四、通过串口来实现蜂鸣器响与不响
1. 一些函数的认知:
Serial.begin() 初始化串口
描述:开启串口,通常置于setup()函数中
原型:
1.Serial.begin(speed)
2.Serial.begin(speed,config)
参数:
1.speed:波特率,一般取值9600,115200等
2.config:设置数据位,校验位和停止位。
返回值:无
Serial.println()
描述:串口输出数据并换行
原型:
(1)Serial.println(val)
(2)Serial.println(val,format)
参数:
val:打印的值,任意数据类型
config:输出的数据格式
返回值:返回写入的字节数

void setup() {
  Serial.begin(115200);//初始化串口为115200
}

void loop() {
   Serial.println("helloworld");//串口输出数据
}

编写完代码,点击上传按钮,等待上传成功,则就写入成功,如下图:
在这里插入图片描述

2.wemos通过串口告诉电脑信息
(1)下载工具: 串口调试助手
下址地址:
http://www.ddooo.com/softdown/172410.htm

(2) 打开串口调试助手,设置波特率为115200,端口号设置为之前Arduino设置的COM号,我所设置的COM号为COM5。设置完以上配置,紧接着点击打开串口按钮,接收区就会显示在Arduino平台上打印helloworld的信息了,在疯狂的刷屏。如下图
在这里插入图片描述
到这里串口的发送就实现了。

五、通过电脑发送数据给wemos
1. 一些函数的认知:
Serial.available()
描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数
返回值:可读取的字节数。

Serial.read()
描述:读取串口数据,一次读一个字符,读完后删除已读数据。
返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,为整数类型。
打开串口调试助手点击十六进制发送
通过输入命令来判断输出命令

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);//初始化串口为115200
}

void loop() {
   int cmd;
  // put your main code here, to run repeatedly:
   if(Serial.available()>0)//串口来数据
   {
     cmd=Serial.read();//读取数据
     if(cmd==5)
     {
      Serial.println("wo hen shuai");//如果等于5打印我很帅
     } 
     else
     {
      Serial.println("wo bu shuai");//否则打印不帅
     }
   }
  
}

在这里插入图片描述

在这里插入图片描述
六、通过串口控制蜂鸣器响与不响

#define BBEP D5//设置BEEP 为D5引脚,以后要改变插线只要改变一个D5这个地方就行

void setup() {
  Serial.begin(115200);
  pinMode(BBEP,OUTPUT);//设置D5为输出引脚
  digitalWrite(BBEP,HIGH);//刚接入电源输出高电平不让蜂鸣器响
}

void loop() {
   int cmd;
   if(Serial.available()>0)//串口来数据
   {
     cmd=Serial.read();//读取数据
     if(cmd==1)
     {
      Serial.println(cmd);//收到1的时候,cmd发回给电脑
      digitalWrite(BBEP,LOW);//并且cmd==1的时候输出低电平让蜂鸣器响起来,
     } 
     else
     {
      Serial.println(cmd);
      digitalWrite(BBEP,HIGH);//否则输出高电平蜂鸣器不响
     }
   }
  
}

运行程序并且打开串口助手,在收发区输入1或0,对蜂鸣器进行控制

让蜂鸣器响在这里插入图片描述
让蜂鸣器不响
在这里插入图片描述

七、 通过wemos控制SG90舵机
在这里插入图片描述

SG90舵机的GND连接到wemos的GND(哪个GND都可以)
SG90舵机的PWM为信号线(橘色)连接到连接到wemos的D5
SG90舵机的5V连接到连接到wemos的3.3v
(备注)SG90舵机:红色的为正极,棕色的为负极,橙色为信号线

八、wemos控制SG90舵机
(一)舵机连接并且让舵机转动(实现1秒前为0度,1秒后为180度)

#include   <Servo.h>
#define   DuoPIN D5 //1.舵机的引脚
Servo   myDuoJi;  //2.设置舵机的类
void setup() {
   myDuoJi.attach(DuoPIN);//3.舵机的连接
}
void loop() {
   myDuoJi.write(90);//4.初始为0度  
   delay(1000);// 5.  1s以后   
   myDuoJi.write(180);  
   delay(1000);//7、1s以后为180度   

}

(二)通过串口进行开盖和关盖

#include   <Servo.h>
#define   DuoPIN D5 //1.舵机的引脚
Servo   myDuoJi;  //2.设置舵机的类(Servo 后面的名字自己起的)
void setup() {
   myDuoJi.attach(DuoPIN);//3.(1)舵机的连接
   Serial.begin(115200);//4.(2)开启串口
}
void loop() {
   int  cmd;
   if(Serial.available()>0)//(3)串口是否有数据
   {
          cmd=Serial.read();//(4)读取指令
           if(cmd==1)
          {
            myDuoJi.write(90);//(5)开盖
           }
           if(cmd==0)
           {
              myDuoJi.write(180);//(6)关盖
           }
    }
}

接着打开串口调试助手设置波特率为115200,点击十六进制发送,在发送区中输入1或者0再点击手动发送进行开关盖。
注释:servo.h库文件,它是Arduino控制舵机的标准库之一。

九、超声波测距

  #define  Echo D2
//1.定义两个引脚
#define  Trig D8
long    getTime()//四:波在空气中运行的时间
{
     digitalWrite(Trig,HIGH);
     delayMicroseconds(10);   //10微秒高电平
     digitalWrite(Trig,LOW);//10微秒后低电平 
     return pulseIn(Echo,HIGH);//获取时间
 }

void  initChaoShengBo()//二、初始化引脚
{
   pinMode(Echo,INPUT);//1.定义输入引脚
   pinMode(Trig,OUTPUT);//2..定义输出引脚
}


void setup() {
    initChaoShengBo();//一、初始化超声波
    Serial.begin(115200);//启动串口
}

void loop() {//三、
    long  dis;//定义距离
    dis = getTime()/58;
    Serial.print(dis);//获取距离
    Serial.println(“cm”);//打印距离
    delay(500);//每隔500ms打印一次距离
}

在这里插入图片描述

十、超声波与蜂鸣器连接

#define  Echo D2
//1.定义两个引脚
#define  Trig D8
#define  BEEP D5 //蜂鸣器
long    getTime()//四:波在空气中运行的时间
{
     digitalWrite(Trig,HIGH);
     delayMicroseconds(10);   //10微秒高电平
     digitalWrite(Trig,LOW);//10微秒后低电平
     
     return pulseIn(Echo,HIGH);//获取时间
 }
void  initChaoShengBo()//二、
{
   pinMode(Echo,INPUT);//1.定义输入引脚
   pinMode(Trig,OUTPUT);//2..定义输出引脚
}



void setup() {
    initChaoShengBo();//一、初始化超声波
    pinMode(BEEP,OUTPUT);//五、给蜂鸣器供电
    digitalWrite(BEEP,HIGH);//六、防止蜂鸣器刚通电的时候叫
    Serial.begin(115200);//启动串口
}

void loop() {//三、
    long  dis;
    dis = getTime()/58;
    Serial.print(dis);//获取距离
    Serial.println("cm");//打印距离
      if(dis<10)//七、
      {
        digitalWrite(BEEP,LOW);//小于10cm发声
       }
       else
       {
        digitalWrite(BEEP,HIGH);
        }
        delay(1000);//每隔一秒打印一次距离
}

十一、代码整合

#include   <Servo.h>
#define   DuoPIN D5 //1.舵机的引脚
#define   Echo   D2//1.定义两个引脚
#define   Trig   D8 
Servo myDuoJi;
long    getTime()//波在空气中运行的时间
{
     digitalWrite(Trig,HIGH);
     delayMicroseconds(10);   //10微秒高电平
     digitalWrite(Trig,LOW);//10微秒后低电平
     
     return pulseIn(Echo,HIGH);//获取时间
 }
void  initChaoShengBo()//超声波的初始化
{
   pinMode(Echo,INPUT);//定义输入引脚
   pinMode(Trig,OUTPUT);//定义输出引脚
}



void setup() {//1.一上电调用setup函数一次

     initChaoShengBo();//2.超声波的初始化
     myDuoJi.attach(DuoPIN);//3.舵机的连接
    Serial.begin(115200);//没用到,但作为调试
}

void loop() {//4.不断的获取距离
    long  dis;
    dis = getTime()/58;
    if(dis<=10)
          {
            myDuoJi.write(90);//5.小于10cm转90开盖
            delay(1000);//6.   2秒的延时
           }
        else
           {
              myDuoJi.write(180);//7.关盖转180
           }
   
}

——@上官可编程

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值