基于ardunio的蓝牙开门装置

蓝牙舵机

我用这个来开宿舍门的,可惜后面未实装,但在家里试过了可以。

其实装置本身很简单,总共三个模块 。

分别是ArdunioHC-05舵机,都是上淘宝买的,加加起来差不多50左右。

对了设备之间连接的杜邦线之类的也别忘了。

原理

其实整个装置的原理非常简单,就是通过设备向蓝牙模块HC-05发送特定的字符,然后蓝牙模块将受到的字符传输给上位机,也就是Ardunio,然后经过一段很简单的if判断是否为正确字符后就可以向舵机发送指定电平让舵机转动从而带动某样东西。

理论上这个装置不仅仅是开门,有很多地方都可以用到,只要传动装置的力够,我买的舵机只有10N,差不多可以拉动一公斤的东西。

哦对了,如果真实装最好考虑一下电源,用电池或者小充电宝啥的,值得注意的是现在的充电宝都有放电检测,Ardunio的耗电太小可能不在检测范围内导致充电宝断电,非常难受。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <SoftwareSerial.h>          //库文件
#include <Servo.h>

Servo myservo;
SoftwareSerial BT(8, 9); //设置蓝牙与板子的连接端口。 pin 8 接蓝牙的 TXD pin 9 接蓝牙的 RXD
char X; //定义一个变量存数据。

void setup()
{
Serial.begin(9600); //串口监视器通信速率,38400
Serial.println("蓝牙连接正常"); //串口监视器显示蓝牙正常状态
myservo.attach(10); // 将引脚10上的舵机与声明的舵机对象连接起来
BT.begin(9600); //蓝牙通信速率,默认一般为 38400
}

void loop() //大循环,执行。
{
if (Serial.available()) //检测:【串口】如果数据写入,则执行。
{
X = Serial.read(); //把写入的数据给到自定义变量 X
BT.print(X); //把数据给蓝牙
}

if (BT.available()) //检测:【蓝牙】如果数据写入,则执行。
{
X = BT.read(); //把检测到的数据给到自定义变量 X
Serial.print(X); //把从蓝牙得到的数据显示到串口监视器
}
if(X=='O')
{
Serial.println("检测到开锁信号,正在开锁");
myservo.write(180);
delay(8000);
X='L';
Serial.println("开锁时间结束");
delay(100);
}
if(X!='O')
{
myservo.write(0);
}
}

代码解析

上面的代码并未有什么很难的地方,就是一个基本框架。可以在里面添加很多东西,比如 myservo.write(180);这里是舵机的转动角度,理论上配合合适的时延和不同的转动角度可以办到一些更加精细的活。

还可以在if里添加else做到更多的判定。总的来说这就是个框架,补一补还是能在很多地方的。我懒,就算了,开个门得了。😂