(Written By Vector.欢迎转载,保留出处便可)
youku视频
钥匙本身就容易丢,不少人进宿舍忘带钥匙,那个急的。宿舍里面有人还好,没人就尴尬了。如果里面的同学在高床,下来开门也是相当麻烦。为了解决这个困难,通过查阅资料,结合arduino,设计出了这款用手机(连上宿舍wifi)遥控开门的装置。
Clain:Standing on the shoulders of the giants
创新点:
功能方面|软件方面|
-|
手机Wifi遥控开门|20次连续快速判断减少距离判断误差
圆形舵机旋转盘,无视旋转方向|Autodelay:根据距离自动调整测距频率以省电\高频测试
成本低廉|三重密码安全性(Wifi密码,开门密码,设备Mac地址绑定)
可拓展性高|
部件|作用|数量|
-|
arduino R3 UNO开发板|单片机主机|1
Wifi模块|提供wifi数据接收&&输出|1
强力舵机|提供旋转动力|1
红外测距模块|提供室内距离检测自动开门|1
杜邦线|连接|若干
坚韧缝纫线|传动|若干
3M胶|粘贴|1
热熔胶|粘贴|少量
胶带|粘贴|少量
先看看效果吧:
自然状态 自然状态 工作 舵机安装好其实思路很简单,就是手机发送信号给单片机,单片机控制舵机旋转,舵机拉动门栓
项目管理
Must have|Should|Nice
-|
wifi接收,舵机|安全性,避免误差|室内走进自动开门,液晶显示,RFID,更低廉的成本
So we begin:
简要步骤(下文再详细介绍)
程序部分:
-
手机tcp窗口欢迎界面:
code:
void Welcome(float S)
{
Serial.println("Hi,this is a Wifi-control door-opening system organized by Vector_Y ^_^");
Serial.print("The Distance is:");
Serial.print(S);
Serial.print("cm now.\n\n");
}
-
红外模块测距扫描,根据距离自动调整频率以省电/快速侦测
float Scan()
{
long IntervalTime=0;
digitalWrite(trig,1);
delayMicroseconds(15);
digitalWrite(trig,0);
IntervalTime=pulseIn(echo,HIGH);
float S=IntervalTime/58.00;
return S;
}
int AutoDelay(float Distance)
{
if( Distance>120.00 ) //Scan according to the Distance.
delay(1000);
else if( Distance>50.00&&Distance<=120.00 )
delay(500);
else if( Distance>=0.00&&Distance<=50.00 ) //Why alwayts is this
delay(200);
return 0;
}
-
防误差机制
当检测到第一次有信号后,接下来快速检测19次,期间任何一次出现距离不对则全部break 重新判断。
code:
int Whether_True(float Distance)
{
int k=1;
for(int i=1;i<=19;i++)
{
if(Distance>0&&Distance<=s1)
{
k=1;
delay(10); //short enough
}
else
{
k=0;
break;
}
}
return k;
}
-
舵机顺逆时针
//舵机顺逆时针
void Steer_Turn_Clockwise()
{
int pos;
for(pos = 0; pos < 180; pos += 1) // 从 0 度-180 度
{
myservo.write(pos); // 输入对应的角度值,舵机会转到此位置
delay(1); // 5ms 后进入下一个位置
}
}
void Steer_Turn_Eastern()
{
int pos;
for(pos=180;pos>=0;pos--)
{
myservo.write(pos);
delay(1);
}
}
-
手机发射的暗号的接受与密码检查
code:
while(Serial.available()) //Get password.
{
Password+=(char)Serial.read();
delay(2);
}
int Check_Password(String Password)
{
int k=0;
if(Password=="k")
{
k=1;
}
else{
k=0;
}
return k;
}
-
手机端软件安装:
首先设置好wifi模块.
wifi模块采用TCP串口协议,底层协议怎么回事,我们或许无须现在理解。
要实现手机安装软件,首先,下载Tcp连接。
安装好后,进入,界面如下:
这里面要检测信息的话,可以用 "聊天”,“终端”。一键式设置的话用“开关” 连接正常后arduino返回距离信息
切换到开关栏目,选择一个按钮,设定为我们的开门暗号。目前,开门暗号为k。
定义开关,实现一键式操作
设置自动连接与默认开关
首选项设置noise:
大功率舵机的噪音真不是一般的。可以接受,但是还是有点大,就是那种熟悉的齿轮转动的“zizizi”的feeling。
按下 k,
开关触发返回到终端界面,可见arduino返回了信息
Paste_Image.png其实把端口公开了也不怕啦,因为我们路由器设置了mac绑定,第三重(最有保障的部分)保证安全性。
实验中遇到的拦路虎与解决:
理论与实际的差距有时真的比想象中的大。本来只是一个简单的东西,没想到实际安装却花了我不少时间。
-
舵机——快叫你大哥出来。
一开始用的是9g小舵机,优点是旋转快,成本低。
后来发现5格的地方转不动,尼玛
然后选择了2格,这样的话拉力就扩大了2.5倍,拉的动了,可是做工距离比较短。那也没关系,把门栓预先拉一点就好了。
没想到,这个9g舵机因长时间高负荷工作,内部齿轮磨损了,也就是滑齿了!
Paste_Image.png
没事,那就叫大哥出来——9KG/m大拉力之舵机。哇这黑色金属光芒什么的最喜欢了。
无奈因为用了9kg/m大拉力的舵机,旋转翼太长了会抵门,超强的拉力直接把胶弄下来。
还好后来发现了圆形旋转翼盘,更意外解决了无视旋转方向(顺逆时针)的困难。
-
连线:接连不断
真的是非常喜欢用线作牵引物。第一是软,第二是便宜、容易得到,最重要的是,不会影响手动开门。
用小舵机的时候,一根线就可以拉得动。
用大舵机,由于拉力太强,一根线,断;两根,断;上到四根终于不断了,但是把四根线穿进旋转盘的小孔,真是考眼力……
-
粘贴-哥们,给力点行吗
本来是想用3M胶贴固定的,发现舵机有旋转趋势,3M胶贴虽然强度不错,但是禁不起旋转。
后来选择了热熔胶固定(相当方便强劲)
舵机粘贴
因为用了9kg/m大拉力的舵机,可不敢把舵机粘错地方,否则就会整个把胶都拉下来。
-
距离设置:红外模块不知道是不是傻了,明明没人,还是动不动就检测到小于设置距离。
100cm太敏感,50cm却来不及开门了。最终设置到80cm感应。
于是写了一个防误差算法——第一次检测到距离小于80cm后,快速连续进行19次检测,所有检测都小于才开门。
防误差code 上文已发布。
成本计算
-
现机成本:
物件|成本|
-|
ARDUINO R3(质量好)|78
wif模块|60
舵机|30
粘贴|10
usb延长线|10
总计:180¥
上面由于使用的是开发板,较贵。实际使用中,采用工业级配置会相当实惠。
-
低成本改进装置:
主控板方面:
- 国产ARDUINO R3
- 国产 arduino mini
工业mini Wifi模块
Paste_Image.png可选:
- 液晶显示模块:
已写好一个有装载、滑入效果的图。
效果
Paste_Image.png
RFID:
Paste_Image.png
物件|成本|
-|
Arduino mini pro|10
迷你省电Wifi|10
延长线|10
粘贴|10
线|1
最低成本41.我的天,批量生产中,50元就能让我们的宿舍配备自动开门系统,你说划不划算,可不可怕~
Anyway,This Budget make my dormitary cooler.Lets play cool._
Ps:想与我交流的话就请评论、关注我吧
Thumbs up and follow if you wanna get my latest articles.
大好き?フォロー!
网友评论