资讯详情

距离感应垃圾桶(Wemos D1 开发板实现)

目录

  • 一、Wemos D1 开发板
    • 1. Wemos D1 的特性
    • 2.Wemos D1 的I/O口腔研究(驱动蜂鸣器)
    • 3.Wemos的串口通信
    • 4.Wemos和SG90舵机
    • 5.Wemos超声波模块
  • 二、项目整合
  • 总结


一、Wemos D1 开发板

1. Wemos D1 的特性

注:在燃烧程序之前,需要在装usb串口驱动

2.Wemos D1 的I/O口腔研究(驱动蜂鸣器)

蜂鸣器模块有三个接口,VCC–3.3V、GND–接地/、I/O低电平触发蜂鸣器。 配置Wemos上的D5口为输出口,输出低电时蜂鸣器响,输出高电时蜂鸣器不响。

代码如下:

void setup() { 
          pinMode(D5, OUTPUT);  // 设置D5引脚是输出引脚 } void loop() { 
          digitalWrite(D5, HIGH);  // 输出高电平,蜂鸣器不响  delay(1000);       // 挂起一秒  digitalWrite(D5, LOW);   // 输出低电平,蜂鸣器响  delay(1000);       // 挂一秒钟(蜂鸣器控制引脚在延迟期间低电平) } 

注:Wemos上电后不断执行loop我们的核心控制代码写入函数中的代码loop。setup函数只调用一次,一般用于硬件相关的初始化,如IO口,串口,wifi等。

3.Wemos的串口通信

串口是一种有线传输方式,如usb同样,串口通信可以使计算机和单片机、单片机和单片机相互传输数据。例如,每次点击鼠标时,鼠标都会向计算机发送数据,以实现操作。

实现串口通信的几个函数:

//Serial.begin() ///打开串口,通常放置在setup()函数中。 //原型:Serial.begin(speed),Serial.begin(speed,config) //参数:speed:比特率,一般取9600、115200等。config:默认设置数据位、效验位和停止位SERIAL_8N1表示8个数据位,无校验位,1个停止位。 //返回值:没有。 
//Serial.println() //串口输出数据并换行。 //原型:Serial.println(val),Serial.println(val,format) //参数:val:任何数据类型的打印值。format:输出数据格式。 //返回值:返回写入的字节数。 
//Serial.available() //判断串口缓冲区的状态,返回从串口缓冲区读取的字节数。 //原型:Serial.available() //参数:没有。 //返回值:可读字节数。 
//Serial.read() //读取串口数据,一次读取一个字符,读取后删除已读数据。 //原型:Serial.read() //参数:没有。 //返回值:返回串口缓冲中的第一个可读字节,当没有可读数据时返回-1,整数类型。 

蜂鸣器(代码如下)由串口控制:

void setup() { 
        
  pinMode(D5, OUTPUT);      // 设置D5引脚为输出引脚
  Serial.begin(115200);     // 初始化串口,设置波特率为115200
  Serial.println(“start”);  // 测试串口是否启动,启动成功就发送start
}
void loop() { 
        
  int cmd;
  if ( Serial.available() > 0 ) { 
          // 检测串口是否有数据
    cmd = Serial.read();           // 读取串口数据
    if (cmd == 1) { 
                        // 如果读取的数据为1
    	digitalWrite(D5, LOW);     // 蜂鸣器响起
    } 
    else { 
        
    	digitalWrite(D5, HIGH);    // 否则(读取数据非1)蜂鸣器不响
    }
  }
}

4.Wemos和SG90舵机

SG90舵机,重量13克,角度90度-180度 红色电压 ,棕色底线,橘色型号线

使用舵机需要用到如下servo类函数:

//attach() 连接舵机(自带库仅9/10脚有效)
//write() 角度控制
//writeMicroseconds() 更精准的角度控制(微米级)
//read() 读上一次舵机转动角度 
//attached() 检测舵机是否连接控制板上
//detach() 断开舵机连接,使接口(9/10脚)可做PWM输出

测试舵机(代码如下):

#include<Servo.h>
#define DuoPin D5 //宏定义D5口
Servo MyDuoJi;              //初始化MyDuoJi为Servo类型 
void setup() { 
        
   MyDuoJi.attach(DuoPin);  // 使D5口连接舵机
}

void loop() { 
        
  MyDuoJi.write(180);       //让舵机旋转180度
  delay(1000);
  MyDuoJi.write(0);         //旋转回0度
  delay(1000);
}

5.Wemos与超声波模块

超声波传感器模块上通常有两个超声波元件,一个用于发射,一个用于接收,电路班上有四个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地)。

HC-SR04主要参数:

  • 工作电压与电流: 5V,15mA
  • 感应距离: 2-400cm
  • 感测角度: 不大于15度
  • 被测物的面积: 不要小于50cm^2并且尽量平整

测试超声波模块(代码如下):

#define TrigPin D8
#define EchoPin D2
unsigned long d;
unsigned long ping(){ 
        
	digitalWrite(TrigPin,HIGH);    // 输出高电压
	delayMicroseconds(10);         // 持续10微秒
	digitalWrite(TrigPin,LOW);     // 输出低电压
	return pulseIn(EchoPin,HIGH);  // 从高脉冲发送出去到高脉冲接收的时间(即声波在空气中一来一回的时间)单位微妙
}
void stup(){ 
        
	pinMode(TrigPin,OUTPUT);
	pinMode(EchoPin,INPUT);
	Serial.begin(9600);  // 打开串口
}
void loop(){ 
        
	d=ping()/58;      // 声波在空气中传播的速度343m/s,也就是29.15微秒/厘米,一来一回除58微秒就可算出距离
	Serial.print(d);  // 打印出距离
	Serial.print("cm");
	Serial.println();
	delay(1000);
}

二、项目整合

代码如下:

#include<Servo.h>
#define DuoPin D5
#define Echo D2
#define Trig D8
Servo MyDuoJi  // 定义新的类型名代替已有类型名

//获取超声波时间
long GetTime(){ 
        
    digitalWrite(Trig,HIGH);
    delayMicroseconds(10);      // 维持10微妙
    digitalWrite(Trig,LOW);
    return pulseIn(Echo,HIGH);  // 返回echo接收高电平的时间
  }

//初始化超声波
void InitChaoSheng(){ 
        
    pinMode(Trig,OUTPUT);
    pinMode(Echo,INPUT); 
  }

//初始化舵机
void IitDuoJi(){ 
        
     MyDuoJi.attach(DuoPin);  // 将舵机与D5串口连接
  }

//初始化串口
void InitChuanKou(){ 
        
    Serial.begin(115200);  // 初始化串口频率
  }
  
void setup() { 
        
  InitChaoSheng();
  InitDuoJi();
  InitChuanKou();
}
void loop() { 
        
  long a;
  a=GetTime()/58;     // 获取超声波测出距离
  Serial.println(a);  // 串口打印出距离
      if(a>10){ 
        
         MyDuoJi.write(80);
      }
      if(a<10){ 
        
         MyDuoJi.write(180);
         delay(2000);
      }
}

总结

超声波测距实现垃圾桶的开合主要通过Wemos的串口通信,和几个模块(舵机、超声波模块)的配合。

标签: 对射光电开关传感器感应开关ex

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台