项目一感应垃圾桶(Wemos)

硬件材料:
Wemos D1、SG90舵机、HC-SR04、杜邦线若干、蜂鸣器3.3V(可有可无)

软件材料:
arduino IDE编译器、USB转串口驱动

Wemos D1:
特性:

  • 基于ESP-8266EX及arduino做的一个融合
  • arduino兼容,使用arduino IDE编程
  • 11个IO口
  • 一个ADC转换引脚(输入范围0~3.3V),ADC通常用在光照的采集或者人体的模拟量转换的应用。本项目没有使用该功能。
  • 板载5V1A开关电源,集成度高。

arduino IDE:
优点:集成很多开发库,如串口、网络,SG90等各种硬开发接口,迅速开发,自带串口调试工具。
缺点:程序编译速度慢。
注意:本次使用的单片机是Wemos D1,若在开发板里找不到Wemos D1就要在开发板管理器中下载,搜索D1就可以看到ESP8266了,然后安装即可。

蜂鸣器:
低电平触发,也就是将蜂鸣器的IO口设置为输出端口,IO口输出高电平不响,IO口输出低电平响。

驱动蜂鸣器滴滴响:

void setup() {//这个函数里放的是初始化的内容,程序只跑一次
  pinMode(D5,OUTPUT);//初始化蜂鸣器的IO口为输出模式
}

void loop() {
  digitalWrite(D5,LOW);//输出低电平,蜂鸣器响
  delay(1000);//延时1000ms=1s
  digitalWrite(D5,HIGH);//输出高电平,蜂鸣器不响
  delay(1000);//延时1000ms=1s
}

SG90舵机:

  • 红色电压线
  • 棕色地线
  • 橙色信号线
  • 无负载速度:0.12s/60度(4.8V)
  • 堵转扭矩:1.2~1.4公斤/厘米(4.8V)
  • 工作电压:4.8~6V

HC-SR04超声波模块:

  • 超声波传感器上面通常带有两个超声波元器件,一个用于发射,一个用于接收。电路板上有4个引脚:VCC(正极)、Trig(触发)、Echo(回应)、GND(接地)。
  • 工作电压与电流:5V、15mA
  • 感测距离:2~400cm
  • 感应角度:不大于15度
  • 在超声波模块的触发脚位输入10微妙以上的高电位,即可以发射超声波,发射超声波以后,与接收到传回的超声波之前,响应位呈现高电位。因此,程序可以从“响应”脚位的高电位脉冲持续时间,换算出被测物体的距离。

超声波部分代码:

#define Echo D2
#define Trig D8
int getTime()//超声波发生函数
{
  digitalWrite(Trig,HIGH);
  delayMicroseconds(10);//延时10us
  digitalWrite(Trig,LOW);
  return pulseIn(Echo,HIGH);//计算某个引脚高电平持续的时间,单位是us
}
void initChaoShengBo()//超声波初始化函数
{
  pinMode(Echo,INPUT);//设置Echo引脚为输入引脚
  pinMode(Trig,OUTPUT);//设置Trig引脚为输出引脚  
}
void setup() {//这个函数里放的是初始化的内容,程序只跑一次
  Serial.begin(9600);
  initChaoShengBo();//在初始化中调用超声波初始化函数
}

void loop() {
  int dis;//超声波测试的距离
  dis=getTime()/58;//计算距离
  Serial.print(dis);
  Serial.println("cm");
  delay(500);
}
/*
dis=getTime()/58;
关于距离除以58的说明:
波在空气中传播的速度是:343米每秒,也就是343000厘米每秒。根据公式1000000us=1s得0.0343厘米/微妙,再换一个角度,1/(0.0343厘米/微妙)即:29.15微妙/厘米,表示1厘米就是29.15微妙。但是声波走过的距离是二倍,所以除以58就是实际距离。
*/

SG90舵机部分控制代码:

#include <Servo.h>
#define DuoPin D5//将D5红定义为Duo

Servo myDuoJi;//这是舵机的一个类
void setup() {//这个函数里放的是初始化的内容,程序只跑一次
  Serial.begin(115200);
  myDuoJi.attach(DuoPin);//将舵机连接到D5这个引脚
}

void loop() {
  myDuoJi.write();//里面的参数是想要旋转的度数0~180
}

Wemos D1和PC串口通信:

void setup() {//这个函数里放的是初始化的内容,程序只跑一次
  Serial.begin(115200);
}

void loop() {
  Serial.println("hello!");//单片机向电脑发送hello!
}

Serial.begin();
描述:开启串口。
原型:
     Serial.begin(speed);
     Serial.begin(speed,config);
     speed:波特率,一般取值9600115200(就相当于人说话的语速,通信时要保持波特率一至)
     config:设置数据位、停止位和校验位。默认SERIAL_8N1表示8个数据位,无校验位,1个停止位。
返回值:无

Serial.println()
描述:串口输出数据并换行
原型:
     Serial.println(val)
     val:打印的值,任意数据类型
     
Serial.available()
描述:判断串口缓冲区的状态,返回串口缓冲区读取的字节数
原型:
      Serial.available()
参数:无
返回值:可读取的字节数。

Serial.read()
描述:读取串口数据,一次读一个字符,读完后删除已读数据
原型:
      Serial.read()
参数:无
返回值:返回串口缓存中第一个可读字节,当没有可读数据时返回-1,整数类型

代码综合实现效果:

#include <Servo.h>
#define DuoPin 4
#define Echo D2
#define Trig D8
Servo myduoji;
int getTime()//超声波发生函数
{
  digitalWrite(Trig,HIGH);
  delayMicroseconds(10);//延时10us
  digitalWrite(Trig,LOW);
  return pulseIn(Echo,HIGH);//计算某个引脚高电平持续的时间,单位是us
}
void initChaoShengBo()//超声波初始化函数
{
  pinMode(Echo,INPUT);//设置Echo引脚为输入引脚
  pinMode(Trig,OUTPUT);//设置Trig引脚为输出引脚  
}
void setup() 
{
  initChaoShengBo();
  myduoji.attach(DuoPin);//连接舵机
  Serial.begin(115200);//确定串口的波特率
  myduoji.write(98);
}

void loop() 
{
 int dis;
 dis=getTime()/58;//计算手与超声波的距离
 Serial.println(dis);
 delay(500);
 if (dis<10) 
 {
  myduoji.write(98);
  delay(1000);
  }
 else
 {
  myduoji.write(180);
 }
}
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值