提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、项目软硬件平台及开发环境
-
- 1.硬件平台
- 2.软件平台
- 3.安装USB转串口驱动
- 4.添加支持,使得WeMos可以在ArduiNo下连接
- 二、驱动演示
-
- 1.蜂鸣器
- 2.Wemos串口通信
- 3. SG90舵机
- 4.超声波测距
- 5.蜂鸣器
- 三、代码实现
-
- 1.相关函数
- 2.代码整合
- 总结
前言
通过WeMos D1开发板、SG90舵机、超声波模块、蜂鸣器,实现垃圾箱盖子的自动开合。
一、项目软硬件平台及开发环境
1.硬件平台
特性
1.基于ESP-8266EX
2.Arduino兼容,使用rduino IDE来编程
3.11 x I/O 引脚
4.1 x ADC 引脚(输入范围0-3.3V)
5.板载5V 1A开关电源(高输入电压24V)
工作中:
和stm32模块开发类似,集成度高
STM32方案也更经济便宜
2.软件平台
3.安装USB转串口驱动
4.添加支持,使得WeMos可以在ArduiNo下连接
4.1检查是否连接完成
二、驱动演示
1.蜂鸣器
//基础控制:蜂鸣器叫唤和不叫唤
void setup()
{
pinMode(D5, OUTPUT); //设置引脚为输出引脚
}
void loop()
{
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //这一秒内都得闭嘴
digitalWrite
2.Wemos串口通信
串口有关的函数:
串口与wemos的简单通信:
串口控制蜂鸣器代码:
#define BEEP D5
void setup() {
Serial.begin(115200); //初始化串口,设置波特率为115200
pinMode(BEEP, OUTPUT); //设置引脚为输出引脚
digitalWrite(BEEP, HIGH); // 上电不让蜂鸣器响起
}
void loop()
{
int cmd;
if ( Serial.available() > 0 )
{ //检测串口是否有数据
cmd = Serial.read(); // 读取串口数据
Serial.println(cmd);
if (cmd == 1) { //如果读取的数据是1
digitalWrite(BEEP, LOW); // 蜂鸣器响起
}
else
{
digitalWrite(BEEP, HIGH); // 否则(读取数据非1)蜂鸣器不响
}
}
}
3. SG90舵机
3.1舵机参数及其调用函数
3.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);
}
4.超声波测距
HC-SR04超声波识别模块介绍
超声波测距编程实现(距离小于10触发蜂鸣器发出声音):
#define Echo D2
#define Trig D8
#define BEEP D5
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void initBeep()
{
pinMode(BEEP,OUTPUT);
digitalWrite(BEEP,HIGH);
}
void setup()
{
initChaoShengBo();
initBeep();
Serial.begin(115200);
}
void loop()
{
//获取距离
long dis;
dis = getTime()/58;
Serial.print(dis);
Serial.println(“cm”);
if(dis < 10)
{
digitalWrite(BEEP,LOW);
}
else
{
digitalWrite(BEEP,HIGH);
}
delay(500);
}
5.蜂鸣器
void setup() {
pinMode(D5, OUTPUT); //配置D5为输出端口
}
void loop() {//上电后不断执行loop函数中的代码,应将核心控制代码写入loop
//HIGH,LOW经过了宏定义
digitalWrite(D5, HIGH); // 输出高电平,蜂鸣器闭嘴
delay(1000); //单位为ms,这一秒内都得闭嘴
digitalWrite(D5, LOW); //输出低电平,蜂鸣器吼起来
delay(1000); //吼一秒(延时期间,蜂鸣器控制引脚属于低电平)
}
5.1通过串口控制蜂鸣器的响与不响
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输出低电平,让蜂鸣器不响
}
}
}
三、代码实现
1.相关函数
2.代码整合
#include<Servo.h>
#define Trig D8
#define Echo D2
#define duoji D5
Servo myduoji;
long init_chaoshengbo()
{
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
}
long gettime()
{
digitalWrite(Trig, HIGH);
delayMicroseconds(10);
digitalWrite(Trig, LOW);
return pulseIn(Echo, HIGH);
}
void setup()
{
init_chaoshengbo();
myduoji.attach(duoji);
pinMode(duoji, OUTPUT);
}
void loop()
{
long dis;
dis = gettime() / 58;
if (dis < 10)
{
myduoji.write(160);
}
else
{
myduoji.write(30);
}
}
总结
制作完成后可通过移动电源供电使用,当垃圾桶前部指定范围内出现物体时,桶盖自动打开,此时可以将物品放入桶内,延时一定时间后,桶盖自动关闭。若垃圾桶前部指定范围内始终有物体存在,桶盖将保持打开状态。