前言
相信很多电子爱好者刚开始都想搞一些电子开发板之类的东西。开发板平台有很多:STM32系列,ESP系列,FPGA系列,当然还有今天的主角儿——Arduino系列。可能很多人当初是为了实现某些自动化设备开始捣鼓这些的,而我是在抖音上看到有人做指纹锁才开始做的。虽说这玩意是那些电子相关专业的,但听介绍也感觉不难,于是非专业的我也想做一个,谁让我对这玩意非常感兴趣呢。话不多说,上才艺!(其实是翻车记录) 呜呜~
踩到的坑
-
硬件方面
- 舵机尽量买全金属机芯的。 MG996R这个型号的舵机有便宜的(十多块)和贵一点的(二十多块),买之前一定要问好店家老板舵机机芯是不是纯金属的。因为有些舵机外面的齿轮是金属的,但拆开的齿轮组全是塑料的。这样一来,负载重的东西可能会滑丝(当时我手欠,以为舵机和普通电机一样机芯和外部齿轮是直通的。就直接没有通电强行转动舵机,只听咔一声,滑丝了),滑丝后相当于直接报废。
- 舵机不要买360°的版本。 360°版本是通过PWM改变舵机转速来控制的,这样控制开锁会很麻烦。而180°以下的版本则是用PWM改变舵机的旋转角度,这样一步到位,很是方便。
- 开发板负载电机尽量加上继电器模块或者电机驱动模块,不要直接把舵机连在开发板上。 在板子负载这种纯电能转换的元器件的时候,电流一般很大,如果不加上中间的继电器的话,最直观的现象就是舵机只要一启动,板载LED会变暗。这时会很明显的感受到带动舵机很吃力,等程序运行几次后就会莫名奇妙的卡住。更严重的是在其他工程中,有可能直接烧坏开发板。
-
继电器有高电平触发、低电平触发和复合型触发
这几种继电器是用开发板连接继电器的IN端通过改变其高低电平来对应控制继电器的打开和关闭(我刚开始买了一个低电平触发的,刚买回来偶然把继电器的VCC、GND、IN全部接触,继电器啪响了一下,后来再怎么搞都不响了。以为是坏了,就干脆忽略( 拆掉 )外围电路,直接连接到蓝色的部分把它当成高电平触发的用了。后来才知道有两种触发模式——都是不仔细看说明惹的祸) - 如果要连接IIC的屏幕,SCL和SDA的两个个引脚可以直接连在板子上对应的引脚上面,有些买的元件的例程中让连接在A0、A1上或者A4、A5上,这样有时候可能会导致屏幕不亮,应该是库中没有正确定义引脚导致的。
-
软件方面
- Arduino库的使用。Arduino IDE刚下载安装好的时候是自带几个库的,比如
<Servo.h>
、<Keyboard.h>
。这几个库都在\软件安装目录下\libraries
这个文件夹里,不用再费心的找了,直接引用就可以了。 - 串口监视器不能同时在两个软件打开。 比如你要上传程序,发现上传错误,这时可以看看上传的端口是不是被占用了。如果同时打开两个串口程序,很可能某个串口程序会崩溃,带来不必要的麻烦。
- 上传程序时要拔掉板子的0端口和1端口的连线。 因为上传程序占用的这两个端口。可以把需要串口通讯的部分代码改成软串口,这样下载的时候就不用管这两个端口啦。
-
程序中出现一组硬串口和一组软串口的时候,要辨别清楚对应的串口波特率。 例如
<Adafruit_Fingerprint>
库中的实例代码Fingerprint
:
#include <Adafruit_Fingerprint.h>
SoftwareSerial mySerial(2, 3);
#else
// On Leonardo/M0/etc, others with hardware serial, use hardware serial!
// #0 is green wire, #1 is white
#define mySerial Serial
#endif
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial);
void setup()
{
Serial.begin(9600);
while (!Serial); // For Yun/Leo/Micro/Zero/...
delay(100);
Serial.println("\n\nAdafruit finger detect test");
// set the data rate for the sensor serial port
finger.begin(57600);
delay(5);
if (finger.verifyPassword()) {
Serial.println("Found fingerprint sensor!");
} else {
Serial.println("Did not find fingerprint sensor :(");
while (1) { delay(1); }
}
- 代码中出现了两个串口初始化。
-
硬串口——第13行的
Serial.begin(9600);
对应的是第6行mySerial定义出的Serial这个名字,而mySerial又是第2行SoftwareSerial 这个关键字定义的——这对应的是单片机与电脑通讯的串口。 -
软产口——第19行的
finger.begin(57600);
对应的是<Adafruit_Fingerprint.h>
这个库中定义出的,用来让指纹模块和单片机通讯的串口。
-
硬串口——第13行的
- 由于软串口的波特率设置不正确常常导致板子与指纹模块无法通讯的情况。就如上面代码中第19行的波特率设置为57600,而一般的指纹模块默认的是9600。如此导致无法识别指纹模块。
后续还可以给指纹锁加上显示屏,语音提示,声光报警之类的,以后再写啦!