久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 21253|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

Arduino DIY輸入密碼,門閂自開的數(shù)字鎖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:101489 發(fā)表于 2016-1-4 03:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式


市面上有很多種類的鎖,它們保護著你的房屋、辦公室的安全。不過,一個鎖動輒上使用Linkit,我們用很少的錢就可以制作一個數(shù)字密碼鎖。所有的鎖系統(tǒng),就算是生物基質(zhì)的鎖或者應(yīng)用傳感器的鎖,都是在門的外面上鎖,但是如果用到藍牙裝置,鎖就可以在門里面控制。這個教程就是來做一個鎖。另外,總是使用一個密碼是很危險的,所以我們定期要更換密碼。這次制作的這個密碼鎖也可以按照我們的要求更換密碼。
第一步:材料清單


1)PCB板1型號
2)帶有藍牙天線的Linkit one
3)PCB按鈕
4)伺服電機
5)安卓手機
6)藍牙控制應(yīng)用,可以在谷歌上免費下載,我在之前的帖子里也有說明。
7)門栓型鎖
8)PCB連接器
9)電線
10)焊接設(shè)備
那么,Arduino UNO需要些什么呢?這個比較復(fù)雜,我會在后面的步驟里解釋。
第二步:設(shè)備連接

這并非一個復(fù)雜的線路,還是很好理解的。按照圖示,將一個按鈕連接到12號引腳,作為輸入口,按照圖紙用電阻連接基本按鈕。然后,將伺服電機連接在9號引腳上作為伺服電機連接器。伺服電機有三條線,第一條是黑色或者是棕色,把它接到地線上;第二條是紅色的,把它接到5V線上;第三條是橙色,把它接到信號線上(9號或3號引腳,因為它們是PWM引腳)
第三步:焊接硬件部分

1)焊接電路板,作為防護罩
2)把按鈕焊接在PCB板的頂部
3)把它連接到數(shù)字引腳12
4)把3號引腳的PCB公線連接器焊接到PCB板上的伺服上
5)從GND、+5V、D9中拉出線來
6)將電路板固定在Linkit one 板
硬件部分完成。
第四步:編碼
1)這個項目需要三個庫。
     A)藍牙庫
      B)EEPROM庫
      C)伺服庫
2)藍牙庫用來提供密碼,并控制鎖的開關(guān)。另外,也要用來存儲新的密碼。這些功能都通過藍牙控制應(yīng)用來完成。
3)EEPROM庫用來存儲現(xiàn)有的密碼(這樣即使重啟了系統(tǒng),還是可以記住密碼)。同時,它還能存儲門鎖最后的狀態(tài)。在開機或重啟時,它會檢查這兩個數(shù)據(jù)。
4)伺服庫用來控制伺服電機。
相關(guān)代碼如下:
  1. #include
  2. #include
  3. #include
  4. #include  

  5. int readval;
  6. Servo myservo;

  7. int resultvalue;
  8. int checktime=0;

  9. String readpassword;
  10. String Password;
  11. String msg;

  12. const int buttonPin = 12;
  13. const int ledPin =  13;

  14. boolean firstconn;
  15. boolean changepass;
  16. int Doorstatus;
  17. int Dooraddress=100;

  18. void setup() {
  19. if(!LBTServer.begin((uint8_t*)"Sivam_LIO"))
  20. {
  21. return;
  22. }  
  23. //  writepass("123456");
  24.   Doorstatus=EEPROM.read(Dooraddress);
  25. //  Serial.begin(9600);
  26.   pinMode(ledPin, OUTPUT);
  27.   pinMode(buttonPin, INPUT);
  28.   firstconn=false;
  29.   changepass=false;
  30.   readpassword="";
  31.   Password=readpass();
  32.   myservo.attach(9);
  33.   delay(100);
  34. }

  35. void servocommand()
  36. {
  37.   if (Doorstatus==0)
  38.   {
  39.     myservo.write(0);
  40.     delay(100);
  41.   }
  42.   else
  43.   {
  44.     myservo.write(180);   
  45.     delay(100);
  46.   }
  47. }

  48. void loop() {
  49. uint8_t buf[1];
  50. int bytesRead;
  51. if(LBTServer.connected())
  52. {
  53.    if (firstconn==false)
  54.    {
  55.      firstconn=true;
  56.      delay(200);     
  57.      LBTServer.write("Hello Welcome");     
  58.      delay(100);
  59.      if (Doorstatus==0)
  60.      {
  61.        LBTServer.write("Door is close");            
  62.        delay(100);      
  63.        LBTServer.write("Type Password to open");
  64.        delay(100);      
  65.      }
  66.      else
  67.      {
  68.        LBTServer.write("Door is open");            
  69.        delay(100);      
  70.        LBTServer.write("Type Password to close");
  71.        delay(100);              
  72.      }
  73.    }
  74.    if (digitalRead(buttonPin) == HIGH && Doorstatus==0 && changepass==false)
  75.    {     
  76.      changepass=true;
  77.      LBTServer.write("Type new password");
  78.      readpassword="";
  79.      delay(100);
  80.    }
  81.    else if (digitalRead(buttonPin) == LOW && changepass==true)
  82.    {
  83.      changepass=false;
  84.      LBTServer.write("Exit from password change");
  85.      readpassword="";
  86.      delay(100);     
  87.    }
  88.    while(true)
  89.    {
  90.      bytesRead = LBTServer.readBytes(buf, 1);
  91.      if(!bytesRead)
  92.      break;
  93.      readval = buf[0];
  94.      readpassword = readpassword + char(readval);
  95.      checktime=0;
  96. //     msg = "U type -" + readpassword;
  97. //     LBTServer.write(msg);   
  98. //      Serial.println(readpassword);
  99.      if (readpassword.length()==6)
  100.      {
  101.        if (changepass==false)
  102.        {
  103.          if (readpassword.equals(Password))
  104.          {
  105.            if (Doorstatus==0)
  106.            {
  107.              Doorstatus=1;
  108.              servocommand();
  109.              EEPROM.write(Dooraddress,1);
  110.              LBTServer.write("Door Open");
  111.            }
  112.            else
  113.            {
  114.              Doorstatus=0;
  115.              servocommand();
  116.              EEPROM.write(Dooraddress,0);           
  117.              LBTServer.write("Door Close");           
  118.            }
  119.          }
  120.          else
  121.          {
  122.            LBTServer.write("Invalid Password");              
  123.          }  
  124.        }      
  125.       else
  126.       {
  127.         writepass(readpassword);
  128.         Password=readpassword;
  129.         LBTServer.write("Password Changed");
  130.         delay(100);
  131.         LBTServer.write("Remove Your hand");
  132.         delay(100);
  133.       }
  134.        readpassword="";
  135.      }     
  136.    }
  137.    delay(100);

  138.   if (readpassword!="")
  139.   {
  140.    checktime=checktime+1;
  141.    if (checktime>5)
  142.    {
  143.      readpassword="";
  144.      changepass=false;
  145.      checktime=0;
  146.       LBTServer.write("Time out. Try again");
  147.       delay(100);     
  148.    }
  149.   }
  150.   
  151.   }
  152.   else
  153.   {
  154.      readpassword="";
  155.      firstconn=false;
  156.      changepass=false;
  157.      LBTServer.accept(5);
  158.   }
  159.   
  160. //  if (digitalRead(buttonPin) == HIGH) {
  161. //    Serial.println(2);
  162. //    digitalWrite(ledPin, HIGH);
  163. //  }
  164. //  else {
  165. //    Serial.println(3);
  166. //    digitalWrite(ledPin, LOW);
  167. //  }  
  168.   
  169.   delay(100);
  170. }


  171. String readpass()
  172. {
  173.   String mempass;
  174.   int memval;
  175.   int memadd;
  176.   mempass="";
  177.   for(int i=0;i<6;i++)
  178.   {
  179.     memadd=200+i;
  180.     memval=EEPROM.read(memadd);
  181.     if (memval>9)
  182.     {
  183.       memval=0;
  184.     }
  185.     mempass=mempass + memval;
  186.   }
  187.   return mempass;
  188. }
  189. void writepass(String passw)
  190. {
  191.   String mempass;
  192.   int memval;
  193.   int memadd;
  194.   for(int i=0;i<6;i++)
  195.   {
  196.     mempass=passw.substring(i,i+1);
  197.     memval=mempass.toInt();
  198.     memadd=200+i;
  199.     EEPROM.write(memadd,memval);
  200.   }
  201. }
復(fù)制代碼




第五步:測試



1)沒有伺服電機的情況下,我發(fā)現(xiàn)編碼工作正常,手機顯示所有狀態(tài)正常。
2)但是主要問題在于伺服電機無法正常工作。
重新檢查了所有設(shè)備之后,發(fā)現(xiàn)伺服電機還是無法正常工作。在檢查的過程中,因為我的錯誤操作,導(dǎo)致伺服電機被燒壞了,所以我買了一個新的并繼續(xù)檢查。我做了如下工作:
A)更新固件
B)檢查3號引腳
C)從外部提供一個5V的電源。檢查了很久,最后伺服電機開始工作了,但是非常緩慢,需要間隔很長時間。然后我用Arduino檢查后,它終于正常工作了。
第六步:用Arduino連接并更改編碼
1)計劃一下如何連接Linkit one 和Arduino
2)將Linkit one的10號引腳連接到Arduino的12號引腳。連接Linkit one和Arduino的Gnd,使用電阻來保護引腳并作為按鈕輸入口。然后,連接伺服的9號引腳和Arduino
3)在Linkit one板上載入BTlockerWA( FH6O1X6IHCBVNR8.rar (1.29 KB, 下載次數(shù): 11)
4)在Arduino板上載入伺服控制( FQ1KW53IHCBVNR9.rar (314 Bytes, 下載次數(shù): 9)
5)接著把伺服連接到Arduino上
6)在這個系統(tǒng)里,當(dāng)開門鎖時,Linkit one的10號引腳會設(shè)定成“高”,Arduino從12號引腳讀取這個信息,然后門鎖就開了。
7)同樣的,當(dāng)關(guān)上門鎖時,Linkit one的10號引腳會設(shè)定成“低”,Arduino從12號引腳讀取這個信息,然后門鎖就關(guān)了。
第七步:開關(guān)測試

1)在安卓手機上打開藍牙控制應(yīng)用
2)改變密碼的數(shù)值,密碼數(shù)字范圍設(shè)為1-9
3)點擊掃描,查看主板的名稱
4)在列表中選擇主板名稱
5)收到一個歡迎短信,里面顯示了門鎖的狀態(tài)。請求輸入密碼來開/關(guān)門
6)輸入密碼。密碼是6位數(shù)字。所以當(dāng)你輸入最后一個數(shù)字時:
7)如果密碼錯誤,手機屏幕里會顯示“無效密碼”
8)如果密碼正確,伺服電機會啟動打開關(guān)閉的門。并將門的狀態(tài)顯示在屏幕上
9)如果門現(xiàn)在是開的,再輸入一次密碼關(guān)上門
第八步:超時測試

1)當(dāng)你設(shè)定密碼時,每個數(shù)字的間隔時間不要太久
2)系統(tǒng)設(shè)定是不能等待的。可能幾秒后,它會顯示“超時,請重試”
3)你得從一開始就鍵入密碼
第九步:改換密碼測試


1)按下主板上的按鈕
2)手機會顯示“輸入新密碼”
3)在按下主板按鈕的同時,另一只手在手機上輸入新密碼
4)輸入好6個新的數(shù)字后,系統(tǒng)會儲存現(xiàn)有的這個新密碼并替換舊密碼,這時就可以松開手機了。
5)然后,松開主板按鈕
6)系統(tǒng)自動退出密碼更改程序
7)注意:如果當(dāng)鍵入密碼時,松開主板按鈕,系統(tǒng)會跳到第六步,新密碼不會被設(shè)置,舊密碼依然可用。


第十步:組裝門鎖

1)取出滑動鎖
2)拆下所有的連接處
3)在滑動鎖的滑動桿下面,有一個彈簧。拿走這個彈簧,這樣可以使得鎖的移動非常順滑。
4)磨光滑動桿不平整的表面
5)在滑動桿和鎖之間做一個連接
6)來回移動一下,檢查順滑程度
第十一步:完成

1)在把鎖固定進門上之前,我用兩個分獨立的木板檢查了它
2)將滑動活塞連接到滑動閥的短邊。這樣它就有空間可以移動
3)多次檢查整個系統(tǒng)直到它可以正常工作
好了,看看我們的作品吧!





分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:95165 發(fā)表于 2016-1-6 21:38 來自手機 | 只看該作者
Linkit one ,這個
回復(fù)

使用道具 舉報

板凳
ID:95165 發(fā)表于 2016-3-2 12:23 | 只看該作者
請問一下帶有藍牙天線的Linkit one這個哪里有賣的?
回復(fù)

使用道具 舉報

地板
ID:95165 發(fā)表于 2016-3-15 21:06 | 只看該作者
頭文件呢?
回復(fù)

使用道具 舉報

5#
ID:262020 發(fā)表于 2017-12-15 14:54 | 只看該作者
一個類別的實現(xiàn)不了嗎?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人午夜免费在线视频 | 激情欧美一区二区三区中文字幕 | 特级生活片| 欧美日韩第一页 | 国产中文一区二区三区 | 欧美视频区 | 91pao对白在线播放 | 亚洲福利 | 国产欧美一区二区三区另类精品 | 国产一区三区在线 | 欧美乱人伦视频 | 日韩欧美在线播放 | 国产专区在线 | 久久网亚洲 | 午夜免费精品视频 | 黑人巨大精品欧美一区二区一视频 | 国产精品久久久久久久久久久久久久 | 国产视频线观看永久免费 | 国偷自产av一区二区三区 | 日韩欧美国产不卡 | 成人免费在线 | 免费av在线网站 | 欧美成年黄网站色视频 | 射欧美 | 国产91亚洲精品一区二区三区 | 2020国产在线 | 国产二区精品视频 | 欧美精品福利视频 | 爱综合 | 精品国产乱码久久久 | 91精品国产综合久久精品 | 国产精品一区二区三区在线 | 亚洲久久| 欧美成人猛片aaaaaaa | 免费一区二区三区在线视频 | 精品久久久久久久 | 欧美精品第三页 | 欧美精品在线播放 | 欧美日韩亚洲系列 | 欧美精品久久 | 亚洲欧美自拍偷拍视频 |