美文网首页玩转Arduinoarduinoarduino
[Arduino]没带钥匙?手机遥控开宿舍之门

[Arduino]没带钥匙?手机遥控开宿舍之门

作者: 鸿鑫在简书 | 来源:发表于2017-04-28 19:46 被阅读1841次

    (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连接
    安装好后,进入,界面如下:

    Paste_Image.png
    这里面要检测信息的话,可以用 "聊天”,“终端”。一键式设置的话用“开关” 连接正常后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 上文已发布。



    成本计算

    • 现机成本:

    Paste_Image.png Paste_Image.png Paste_Image.png wifi 电源延长线:

    物件|成本|
    -|
    ARDUINO R3(质量好)|78
    wif模块|60
    舵机|30
    粘贴|10
    usb延长线|10
    总计:180¥

    上面由于使用的是开发板,较贵。实际使用中,采用工业级配置会相当实惠。


    • 低成本改进装置:

    主控板方面:

    • 国产ARDUINO R3
    Paste_Image.png
    • 国产 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.
      大好き?フォロー!

    相关文章

      网友评论

      • 05282b662c40:想问一下,这个程序怎么写,我想试着做一下
        05282b662c40:@鸿鑫在简书 舵机的程序,
        鸿鑫在简书:@昵称咋老被使用 具体那一段呢。
      • 星河_a416:arduino的电源能带动舵机转动吗?,那个USB线是直接接到电脑上吗
        鸿鑫在简书:@星河_a416 是的,UNO可以带8个电机;那个USB线,数据下载好后只是供电用
      • 6b294656c519:请问有完整的代码吗
      • Murrey_Xiao:很强。。。Mark一下 一直想做这种
        鸿鑫在简书:@Murrey_Xiao 其实思路很简单哒,you can definatly do it.

      本文标题:[Arduino]没带钥匙?手机遥控开宿舍之门

      本文链接:https://www.haomeiwen.com/subject/ludozttx.html