用Arduino写小项目,相比于stm32来说,确确实实是方便了许多,非常适合新手小白来入坑嵌入式。
前言
这个项目虽然已经是老掉牙到不能再老掉牙了,但是我还是选择这个项目作为我的第一篇博客。为什么呢,答案当然是因为简单,因为疫情等等原因自己已经蛮久没做过小项目了,选这个项目纯粹拿来练练手,找找自信。
一、实现的功能
示例:根据不同的靠近距离,控制风扇是否转动,可以设计根据距离不同,风扇转速不同。
二、硬件模块
WemosD1 --
核心控制单片机
超声波模块
--
测量距离
L9110
模块
--
电机控制器
电机风扇模块
三、模块原理
1.超声波模块
超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,
计算出模块到前方障碍物的距离
给
Trig
一个
10us
的
TTL
电平,模块内部就会发出信号,信号发出后,模块把
ECHO
从低电平切换成
高电平,当模块收到返回波,模块把
ECHO
从高电平切回到低电平,所以
ECHO
维持高电平的时间
就是波在空气中的传播速度
距离
=
速度
*
时间
速度
=340m/s
时序图如下:
所以我们只要读ECHO高电平的持续时间就知道超声波传播了多久,然后根据时间算出距离。
四、具体代码
1.初始化
代码如下(示例):
void setup() {
// put your setup code here, to run once:
// 这个函数只会在上电后执行一次
pinMode(D5, OUTPUT);
pinMode(D6, OUTPUT);//把D5 D6引脚配置成输出引脚,为了向电机控制器输出信号
pinMode(D8, OUTPUT);//把D8(Trig)引脚配置成输出引脚,为了向超声波发送10us高电平信号
pinMode(D7, INPUT);// 把D7(Echo)引脚配置成输入引脚,检测Echo引脚高电平持续的时间=波在
空气中的时间
Serial.begin(9600); //开启串口
}
2.循环
代码如下(示例):
void loop() {
// put your main code here, to run repeatedly:
//把主要控制逻辑的代码放在这里,重复运行
unsigned long time;
unsigned long dis;
//时刻让风扇处于停止状态
digitalWrite(D5, HIGH);
digitalWrite(D6, HIGH);
// 1、10us的脉冲
digitalWrite(D8, LOW);
digitalWrite(D8, HIGH);
delayMicroseconds(10);
digitalWrite(D8, LOW);
//2. 检测D7echo高电平持续时间
time = pulseIn(D7,HIGH); //us
// 3.计算距离 2s = time * 340m/s
dis = time * 0.017;
Serial.print(dis);
Serial.println("cm"); //32cm
if(dis > 80) return;
//如果距离小于80的时候,就转动,否则就不转
while(dis--){ //改变占空比
digitalWrite(D5, LOW);
digitalWrite(D6, HIGH);
delayMicroseconds(200);
}
}
五、遇到的问题及解决过程
之前用过stm32所以有安装过CH340,这次第一次用Arduino说是要用CH340G,我一安装和我说安装失败,再次安装依旧失败,然后我点了先卸载后安装这次成功了,但是设备管理器还是看不见端口,搞了半天,最后换了个数据线,问题解决,告诉我们线一定得对不能是简单的电源线。
关于硬件连接,我一开始直接用铜丝搭在直流电机上,这种做法接触不良,最好有固定,别只是搭在上面。
一开始我想直接把功放模块的vcc接在单片机上来着,不应该这么做,因为功耗大会影响单片机稳定。但是超声波测距模块可以直接连,因为功耗小。
关于代码烧录,烧不进去重新打开软件就行了。
总结
虽然项目硬件简单且代码很少哈,但是还是能学到些东西的。