项目一、基于WeMos的感应开盖式垃圾桶

1、硬件平台介绍WeMos D1
特性:
1.基于ESP-8266EX
2.Arduino兼容,使用Arduino IDE来编程
3.11个I/O引脚
4.1个ADC引脚(输入范围0-3.3V)
5.板载5V 1A开关电源(高输入电压24V)
在这里插入图片描述
2、软件平台开发环境介绍
Arduino开发环境,和keil对比
优点:集成很多开发库如串口、网络、SG90等
各种硬件开发接口,迅捷开发
自带串口调试工具
缺点:程序编译速度慢
3、Wemos的I/O口研究–驱动蜂鸣器
在这里插入图片描述
VCC–Wemos 3.3V
GND–Wemos GND
I/O ----Wemos D5
蜂鸣器工作特点:
1.响 D5配置成输出端口,D5输出低电平
2.不响 D5配置成输出端口,D5输出高电平

**Arduino开发环境
上电后不断执行loop函数中的代码,我们核心控制代码写入loop
setup函数只调用一次,一般用于硬件相关的初始化,比如IO口,串口,WIFI等。

void setup(){
	pinMode(D5, OUTPUT);//设置引脚为输出引脚
}
void loop(){
	digitalWrite(D5, LOW);//D5配置成低电平。蜂鸣器响
	delay(1000);          //延时1秒
	digitalWrite(D5, HIGH);//D5配置成高电平。蜂鸣器不响
	delay(1000);         //延时1秒
}//整体效果,蜂鸣器响一秒,不响一秒。

4、串口通信

1)Serial.begin()
*描述:开启串口,置于setup()函数中,
*原型:Serial.begin(speed)
      Serial.begin(speed,config)
*参数:speed,波特率,一般设置为9600,115200
      config 设置数据位、校验位和停止位,默认SERIAL_8N1表示8个数据位、无校验位、1个停止位
*返回值:无
2)Serial.println()
*描述:串口输出数据并换行
*原型:Serial.println(val) 例如Serial.println("kangxiansen handsome");
*参数:val打印的值
*返回值:返回写入的字节数
3)Serial.available()
*描述:判断串口缓冲区的状态,返回从串口缓冲区读取的字节数
*原型:Serial.available()
*参数:无
*返回值:可读取的字节数
4)Serial.read()
*描述:读取串口数据,一次读一个字符,读完删除已读数据
*原型:Serial.read()
*参数:无
*返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型
void setup(){
	Serial.begin(115200);//波特率,设置为115200
}
void loop(){
	int cmd;
	
	if(Serail.available() > 0){//判断串口缓冲区的状态,有数据来
		cmd = Serial.read();   //读取串口数据,串口数据赋值给cmd变量
		if(cmd == 1){          //判断cmd变量是否为1
			Serial.println("kangxiansen handsome");
		}else{
			Serial.println("kangxiansen rich");
		}
	}
}

5、硬件 SG90舵机
硬件资料:
型号 SG90
角度90度 -180度通用
接线红色(正极)—Wemos 3.3V
棕色(GND)—Wemos GND
橙色(信号线)—Wemos D5
技术数据:工作电压4.8V-6V(接线3.3V,可以实现开盖缓慢效果)
在这里插入图片描述
在这里插入图片描述

#include <Servo.h>
#define DuojiPIN D5 //定义D5端口为DuojiPIN
Servo myDuoJi:
void setup(){
	myDuoJi.attach(DuojiPIN);//连接舵机
}
void loop(){
	myDuoJi.write(90);//改变舵机角度
	delay(1000);
	myDuoJi.write(180);
	delay(1000);
}

6、超声波测距
硬件资料:
4个引脚:VCC(正极)—Wemos 5V
Trig(触发)-----Wemos D8
Echo(回应)----Wemos D2
GND(接地)-----Wemos GND
工作电压:5V、15mA
感测距离:2-400cm
感测角度:不大于15度
具有温度补偿电路
*程序从“响应”脚位的高电平脉冲持续时间,换算出被测物的距离。
在这里插入图片描述
在这里插入图片描述
**注意,超声波测距要除以58
声音在干燥、摄氏 20度的空气中的传播速度大约为343米/秒,合34,300厘米/秒,34,300除以1,000,000厘米/微秒即为:0.0343厘米/微秒,再换一个角度,1/(0.0343 厘米/微秒),即:29.15 微秒/厘米,但是发送后到接收到回波,声音走过的是2倍的距离呀。所以实际距离就是1厘米,对应58.3微秒。实际上整个测距过程是测的发出声波到收到回波的时间,你的程序的distance实际上是时间us。所以换成距离cm,要除以58。当然除以58.3可能更精确

#include <Servo.h>

#define DuoJiPIN D5
#define Echo D2
#define Trig D8
Servo myDuoJi;

long getTime(){               //获取发出声波到收到回波的时间
	digitalWrite(Trig, HIGH);//触发信号
	delayMicroseconds(10);  //10微妙方波
	digitalWrite(Trig, LOW);

	return pulseIn(Echo, HIGH);//返回值:发出声波到收到回波的时间
}
void setup(){                //初始化
	pinMode(Echo, INPUT);    //超声波初始化
	pinMode(Trig, OUTPUT);
	myDuoJi.attach(DuoJiPIN);//舵机初始化
}

void loop(){
	long dis;
	dis = getTime()/58; //发出声波到收到回波的时间,换成距离cm,要除以58
	if(dis < 10){      //超声波距离小于10cm就启动舵机
		myDuoJi.write(90);//调整舵机角度
		delay(2000);
	}else{
		myDuoJi.write(180);//调整舵机角度
	}
}
好的,以下是代码: ``` #define TRIGGER_PIN D1 // 定义超声波模块的控制引脚 #define ECHO_PIN D2 // 定义超声波模块的测距引脚 #define LED_PIN D5 // 定义LED的控制引脚 void setup() { pinMode(TRIGGER_PIN, OUTPUT); // 设置超声波模块的控制引脚为输出模式 pinMode(ECHO_PIN, INPUT); // 设置超声波模块的测距引脚为输入模式 pinMode(LED_PIN, OUTPUT); // 设置LED的控制引脚为输出模式 Serial.begin(9600); // 初始化串口通信,用于输出测距结果 } void loop() { digitalWrite(TRIGGER_PIN, LOW); // 给超声波模块的控制引脚发送低电平信号 delayMicroseconds(2); // 延迟2微秒 digitalWrite(TRIGGER_PIN, HIGH); // 给超声波模块的控制引脚发送高电平信号 delayMicroseconds(10); // 延迟10微秒 digitalWrite(TRIGGER_PIN, LOW); // 给超声波模块的控制引脚发送低电平信号 long duration = pulseIn(ECHO_PIN, HIGH); // 读取超声波模块返回的脉冲信号的持续时间 float distance = duration * 0.034 / 2; // 根据声波在空气中的传播速度计算出距离,单位为厘米 if (distance < 10) { // 如果距离小于10厘米 digitalWrite(LED_PIN, HIGH); // 点亮LED } else { // 如果距离大于等于10厘米 digitalWrite(LED_PIN, LOW); // 熄灭LED } Serial.print("Distance: "); // 输出距离 Serial.print(distance); Serial.println(" cm"); delay(500); // 延迟500毫秒,避免频繁读取超声波模块返回的脉冲信号 } ``` 在这段代码中,我们使用 `pulseIn()` 函数读取超声波模块返回的脉冲信号的持续时间,然后根据声波在空气中的传播速度计算出距离。如果距离小于10厘米,则点亮LED,否则熄灭LED。同时,我们还通过串口输出当前的测距结果。你可以将Wemos D1连接到电脑上,打开串口监视器,就可以看到测距结果了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值