一、Wemos D1 开发板
1. Wemos D1 的特性
- 基于ESP-8266EX
- Arduino兼容,使用Arduino IDE来编程
- 11个I/O引脚
- 1个ADC引脚(输入范围0-3.3V)
- 板载5V 1A开关电源(高输入电压24V)
注:在烧程序前需要在电脑上安装usb串口驱动
2.Wemos D1 的I/O口研究(驱动蜂鸣器)
蜂鸣器模块有三个接口,VCC–3.3V、GND–接地/、I/O口,蜂鸣器低电平触发。 配置Wemos上的D5口为输出口,当输出低电平时蜂鸣器响,输出高电平时蜂鸣器不响。
代码如下:
void setup() {
pinMode(D5, OUTPUT);
}
void loop() {
digitalWrite(D5, HIGH);
delay(1000);
digitalWrite(D5, LOW);
delay(1000);
}
注:Wemos上电后不断执行loop函数中的代码,我们核心控制代码写入loop。setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,wifi等。
3.Wemos的串口通信
串口是一个有线的传输方式,像usb一样,串口通信可以使电脑和单片机、单片机和单片机之间都可以相互传输数据。比如鼠标的每次点击,鼠标都会发送数据给电脑,从而实现操作。
实现串口通信的几个函数:
通过串口控制蜂鸣器(代码如下):
void setup() {
pinMode(D5, OUTPUT);
Serial.begin(115200);
Serial.println(“start”);
}
void loop() {
int cmd;
if ( Serial.available() > 0 ) {
cmd = Serial.read();
if (cmd == 1) {
digitalWrite(D5, LOW);
}
else {
digitalWrite(D5, HIGH);
}
}
}
4.Wemos和SG90舵机
SG90舵机,重量13克,角度90度-180度 红色电压 ,棕色底线,橘色型号线
使用舵机需要用到如下servo类函数:
测试舵机(代码如下):
#include<Servo.h>
#define DuoPin D5
Servo MyDuoJi;
void setup() {
MyDuoJi.attach(DuoPin);
}
void loop() {
MyDuoJi.write(180);
delay(1000);
MyDuoJi.write(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);
digitalWrite(TrigPin,LOW);
return pulseIn(EchoPin,HIGH);
}
void stup(){
pinMode(TrigPin,OUTPUT);
pinMode(EchoPin,INPUT);
Serial.begin(9600);
}
void loop(){
d=ping()/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);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void InitChaoSheng(){
pinMode(Trig,OUTPUT);
pinMode(Echo,INPUT);
}
void IitDuoJi(){
MyDuoJi.attach(DuoPin);
}
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的串口通信,和几个模块(舵机、超声波模块)的配合。
|