前言
记录嵌入式学习的第一个小项目吧,基于Wemos的智能感应开盖垃圾桶(上官可编程)。项目超声波传感器安置在垃圾桶上,用来检测前方人体的距离。当人体离垃圾桶的距离小于某个值时,舵机开始工作完成垃圾桶的开合。虽然很简单,但是我觉得还是很有必要做一些总结和思考的。
- 注:项目基于Wemos开发板、Arduino IDE。
硬件部分
硬件介绍:
塑料垃圾桶、超声波传感器、Wemos开发板、舵机以及杜邦线若干当然还有个充电宝。
硬件接线图:
软件部分
一、舵机控制
利用servo类函数
串口控制舵机测试:
#include <Servo.h>
#define Duo D5 //把引脚D5命名为DUO
Servo myDuoJi;//把Servo类函数命名为myDuoJi
void setup() {
myDuoJi.attach(Duo); //调用attach函数,连接舵机,即连接引脚DUOPIN
Serial.begin(115200);//设置波特率
}
void loop() {
int cmd;
if (Serial.available()>0)
{
cmd = Serial.read();
Serial.println(cmd);
if(cmd==53)
{
myDuoJi.write(45);//控制舵机转到45°位置
delay(1000);
myDuoJi.write(140);//控制舵机转到140°位置
delay(1000);
}
}
}
二、超声波控制
超声波测距原理:
Trig端给予高电位触发超声波的发射,Echo端对超声波的反射进行接收。通过发射和接收的时间差来计算前方物体的距离。
超声波测距测试:
#define Echo D2 //把引脚D2命名为Echo
#define Trig D8 //把引脚D8命名为Trig
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH); //pilseIn是已经封装好的函数返回信号发出与接受的时间
}
void initChaoShengBo() //初始化超声波引脚
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void setup() {
initChaoShengBo();
Serial.begin(115200); //串口波特率设置
}
void loop() {
long dis;
dis=getTime()/58;
Serial.print(dis);
Serial.println("cm");
delay(500);
}
三、项目整体代码
#include <Servo.h>
#define Duo D5
#define Echo D2
#define Trig D8
Servo myDuoJi;
long getTime()
{
digitalWrite(Trig,HIGH);
delayMicroseconds(10);
digitalWrite(Trig,LOW);
return pulseIn(Echo,HIGH);
}
void initChaoShengBo()
{
pinMode(Echo,INPUT);
pinMode(Trig,OUTPUT);
}
void setup() {
initChaoShengBo();
myDuoJi.attach(Duo);
Serial.begin(115200);
}
void loop() {
myDuoJi.write(45);
long dis;
dis=getTime()/58;
Serial.print(dis);
Serial.println("cm");
delay(300);
if(dis < 10)
{
myDuoJi.write(45);
delay(1000);
myDuoJi.write(140);
delay(1000);
}
}
思考
- 利用串口助手对单个传感器进行测试实验。
- 实际项目中需要注意代码的封装思想,模块化功能。
☀ 记录自己学习的同时,也希望能对大家有所帮助,欢迎留言交流!