Advertisement
esref_21

Arduino Piezo Element Vibration - Secret Knock Code 2

Jan 14th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.17 KB | None | 0 0
  1. Arduino Piezo elementi kullanılarak gizli vuruşlar algılamamızı sağlayarak gizli kapılar,kutular vs. herhangi bir yerde kullanılabilir.
  2.  
  3. Kaynak = http://www.instructables.com/id/Secret-Knock-Detecting-Door-Lock/step2/Program-The-Arduino/ (http://www.instructables.com/files/orig/F1T/DII6/GIYWWK6R/F1TDII6GIYWWK6R.tmp)
  4.  
  5. ------------------------RGB Kodu------------------------
  6.  
  7. const int knockSensor = 0;
  8. const int threshold = 3; // minimum 3 değerine kadar
  9. const int rejectValue = 25;
  10. const int averageRejectValue = 15;
  11. const int knockFadeTime = 150; // bekleme zamanı
  12. const int lockTurnTime = 650;
  13. const int maximumKnocks = 20;
  14. const int knockComplete = 1200;
  15. int kirmizipin = 10; // RGB elemanının pinlerini buradan girerek videodaki tıklatmayı yapın.Aynen çalışacaktır.
  16. int yesilpin = 11;
  17. int mavipin = 12;
  18. int secretCode[maximumKnocks] = {25,100,25,25};
  19. int knockReadings[maximumKnocks];
  20. int knockSensorValue = 0;
  21. int programButtonPressed = false;
  22.  
  23. void setup()
  24. {
  25. pinMode(kirmizipin, OUTPUT);
  26. pinMode(yesilpin, OUTPUT);
  27. pinMode(mavipin, OUTPUT);
  28. Serial.begin(9600);
  29. Serial.println("Sistem Aktif");
  30. setColor(0,0,0);
  31. }
  32.  
  33. void loop()
  34. {
  35. knockSensorValue = analogRead(knockSensor);
  36.  
  37. if (knockSensorValue >=threshold)
  38. {
  39. listenToSecretKnock();
  40. }
  41. }
  42. void listenToSecretKnock(){
  43. Serial.println("Vurus Basladi");
  44. setColor(0, 255, 0);
  45. delay(10);
  46. int i = 0;
  47. for (i=0;i<maximumKnocks;i++){
  48. knockReadings[i]=0;
  49. }
  50.  
  51. int currentKnockNumber=0;
  52. int startTime=millis();
  53. int now=millis();
  54. delay(knockFadeTime);
  55. do
  56. {
  57. knockSensorValue = analogRead(knockSensor);
  58. if (knockSensorValue >=threshold)
  59. {
  60. Serial.println("Vurus");
  61. now=millis();
  62. int i = 0;
  63. knockReadings[currentKnockNumber] = now-startTime;
  64. currentKnockNumber ++;
  65. startTime=now;
  66. setColor(0, 255, 0);
  67. delay(knockFadeTime);
  68. }
  69. now=millis();
  70. }
  71. while ((now-startTime < knockComplete) && (currentKnockNumber < maximumKnocks));
  72.  
  73. if (programButtonPressed==false)
  74. {
  75. if (validateKnock() == true)
  76. {
  77. triggerDoorUnlock();
  78. }
  79. else
  80. {
  81. Serial.println("Vurus Gecersiz");
  82. setColor(255,0, 0);
  83. }
  84. }
  85. else
  86. {
  87. validateKnock();
  88. Serial.println("New lock stored.");
  89. }
  90. }
  91.  
  92. void triggerDoorUnlock()
  93. {
  94. Serial.println("Sistem Deaktif");
  95. setColor(0, 0, 255);
  96. delay (1000);
  97. int i=0;
  98. delay (lockTurnTime);
  99. }
  100.  
  101. boolean validateKnock(){
  102. int i=0;
  103. int currentKnockCount = 0;
  104. int secretKnockCount = 0;
  105. int maxKnockInterval = 0;
  106. for (i=0;i<maximumKnocks;i++)
  107. {
  108. if (knockReadings[i] > 0)
  109. {
  110. currentKnockCount++;
  111. }
  112. if (secretCode[i] > 0)
  113. {
  114. secretKnockCount++;
  115. }
  116.  
  117. if (knockReadings[i] > maxKnockInterval)
  118. {
  119. maxKnockInterval = knockReadings[i];
  120. }
  121. }
  122. if (programButtonPressed==true)
  123. {
  124. for (i=0;i<maximumKnocks;i++)
  125. {
  126. secretCode[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);
  127. }
  128. for (i = 0; i < maximumKnocks ; i++)
  129. {
  130. if (secretCode[i] > 0){
  131. delay( map(secretCode[i],0, 100, 0, maxKnockInterval));
  132. }
  133. delay(50);
  134. }
  135. return false;
  136. }
  137.  
  138. if (currentKnockCount != secretKnockCount)
  139. {
  140. return false;
  141. }
  142. int totaltimeDifferences=0;
  143. int timeDiff=0;
  144. for (i=0;i<maximumKnocks;i++)
  145. {
  146.  
  147. knockReadings[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);
  148. timeDiff = abs(knockReadings[i]-secretCode[i]);
  149. if (timeDiff > rejectValue)
  150. {
  151. return false;
  152. }
  153. totaltimeDifferences += timeDiff;
  154. }
  155. if (totaltimeDifferences/secretKnockCount>averageRejectValue)
  156. {
  157. return false;
  158. }
  159.  
  160. return true;
  161.  
  162. }
  163. void setColor(int kirmizi, int yesil, int mavi)
  164. {
  165. analogWrite(kirmizipin, kirmizi);
  166. analogWrite(yesilpin, yesil);
  167. analogWrite(mavipin, mavi);
  168. }
  169. ------------------------------------------------------------------------------------------------
  170.  
  171. ------------------------7 Segment Display,1 Digit------------------------
  172.  
  173. const int knockSensor = 0;
  174. const int threshold = 3; // minimum 3 değerine kadar
  175. const int rejectValue = 25;
  176. const int averageRejectValue = 15;
  177. const int knockFadeTime = 150; // bekleme zamanı
  178. const int lockTurnTime = 650;
  179. const int maximumKnocks = 20;
  180. const int knockComplete = 1200;
  181. int kackaldi = 0;
  182. int secretCode[maximumKnocks] = {25,100,25,25};
  183. int vurussayisi = 4;
  184. int knockReadings[maximumKnocks];
  185. int knockSensorValue = 0;
  186. int programButtonPressed = false;
  187.  
  188. void setup()
  189. {
  190. pinMode(2, OUTPUT); //Display elemanını bu pinlere bağlayın.Şayet bu pinler dolu ise tanımladığınız pinlere bağlayarak ve buralardaki değerleri ona eşit olarak değiştirerek yapabilirsiniz.
  191. pinMode(3, OUTPUT);
  192. pinMode(4, OUTPUT);
  193. pinMode(5, OUTPUT);
  194. pinMode(6, OUTPUT);
  195. pinMode(7, OUTPUT);
  196. pinMode(8, OUTPUT);
  197. pinMode(9, OUTPUT);
  198. Serial.begin(9600);
  199. Serial.println("Sistem Aktif");
  200. sifir();
  201. }
  202.  
  203. void loop()
  204. {
  205. kactayizgoster();
  206. delay (50);
  207. knockSensorValue = analogRead(knockSensor);
  208.  
  209. if (knockSensorValue >=threshold)
  210. {
  211. listenToSecretKnock();
  212. }
  213. }
  214. void listenToSecretKnock(){
  215. Serial.println("Vurus Basladi");
  216. int i = 0;
  217. for (i=0;i<maximumKnocks;i++){
  218. knockReadings[i]=0;
  219. kackaldi = vurussayisi;
  220. }
  221.  
  222. int currentKnockNumber=0;
  223. int startTime=millis();
  224. int now=millis();
  225. delay(knockFadeTime);
  226. do
  227. {
  228. knockSensorValue = analogRead(knockSensor);
  229. if (knockSensorValue >=threshold)
  230. {
  231. Serial.println("Vurus");
  232. now=millis();
  233. int i = 0;
  234. knockReadings[currentKnockNumber] = now-startTime;
  235. currentKnockNumber ++;
  236. startTime=now;
  237. kackaldi = vurussayisi-currentKnockNumber;
  238. kactayizgoster();
  239. delay(50);
  240. delay(knockFadeTime);
  241. }
  242. now=millis();
  243. }
  244. while ((now-startTime < knockComplete) && (currentKnockNumber < maximumKnocks));
  245.  
  246. if (programButtonPressed==false)
  247. {
  248. if (validateKnock() == true)
  249. {
  250. triggerDoorUnlock();
  251. }
  252. else
  253. {
  254. Serial.println("Vurus Gecersiz");
  255. kackaldi = 0;
  256. }
  257. }
  258. else
  259. {
  260. validateKnock();
  261. Serial.println("New lock stored.");
  262. }
  263. }
  264.  
  265. void triggerDoorUnlock()
  266. {
  267. Serial.println("Sistem Deaktif");
  268. kackaldi = vurussayisi;
  269. delay (1000);
  270. int i=0;
  271. delay (lockTurnTime);
  272. }
  273.  
  274. boolean validateKnock(){
  275. int i=0;
  276. int currentKnockCount = 0;
  277. int secretKnockCount = 0;
  278. int maxKnockInterval = 0;
  279. for (i=0;i<maximumKnocks;i++)
  280. {
  281. if (knockReadings[i] > 0)
  282. {
  283. currentKnockCount++;
  284. }
  285. if (secretCode[i] > 0)
  286. {
  287. secretKnockCount++;
  288. }
  289.  
  290. if (knockReadings[i] > maxKnockInterval)
  291. {
  292. maxKnockInterval = knockReadings[i];
  293. }
  294. }
  295. if (programButtonPressed==true)
  296. {
  297. for (i=0;i<maximumKnocks;i++)
  298. {
  299. secretCode[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);
  300. }
  301. for (i = 0; i < maximumKnocks ; i++)
  302. {
  303. if (secretCode[i] > 0){
  304. delay( map(secretCode[i],0, 100, 0, maxKnockInterval));
  305. }
  306. delay(50);
  307. }
  308. return false;
  309. }
  310.  
  311. if (currentKnockCount != secretKnockCount)
  312. {
  313. return false;
  314. }
  315. int totaltimeDifferences=0;
  316. int timeDiff=0;
  317. for (i=0;i<maximumKnocks;i++)
  318. {
  319.  
  320. knockReadings[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);
  321. timeDiff = abs(knockReadings[i]-secretCode[i]);
  322. if (timeDiff > rejectValue)
  323. {
  324. return false;
  325. }
  326. totaltimeDifferences += timeDiff;
  327. }
  328. if (totaltimeDifferences/secretKnockCount>averageRejectValue)
  329. {
  330. return false;
  331. }
  332.  
  333. return true;
  334.  
  335. }
  336.  
  337. void kactayizgoster()
  338. {
  339. if (kackaldi == 0)
  340. {
  341. sifir();
  342. }
  343. if (kackaldi ==1)
  344. {
  345. bir();
  346. }
  347. if (kackaldi ==2)
  348. {
  349. iki();
  350. }
  351. if (kackaldi == 3)
  352. {
  353. uc();
  354. }
  355. if (kackaldi == 4)
  356. {
  357. dort();
  358. }
  359. if (kackaldi == 5)
  360. {
  361. bes();
  362. }
  363. if (kackaldi == 6)
  364. {
  365. alti();
  366. }
  367. if (kackaldi == 7)
  368. {
  369. yedi();
  370. }
  371. if (kackaldi == 8)
  372. {
  373. sekiz();
  374. }
  375. if (kackaldi == 9)
  376. {
  377. dokuz();
  378. }
  379.  
  380.  
  381. }
  382. void dokuz ()
  383. {
  384. digitalWrite(2, 1);
  385. digitalWrite(3, 1);
  386. digitalWrite(4, 1);
  387. digitalWrite(5, 0);
  388. digitalWrite(6, 0);
  389. digitalWrite(7, 1);
  390. digitalWrite(8, 1);
  391. }
  392. void sekiz ()
  393. {
  394. digitalWrite(2, 1);
  395. digitalWrite(3, 1);
  396. digitalWrite(4, 1);
  397. digitalWrite(5, 1);
  398. digitalWrite(6, 1);
  399. digitalWrite(7, 1);
  400. digitalWrite(8, 1);
  401. }
  402. void yedi ()
  403. {
  404. digitalWrite(2, 1);
  405. digitalWrite(3, 1);
  406. digitalWrite(4, 1);
  407. digitalWrite(5, 0);
  408. digitalWrite(6, 0);
  409. digitalWrite(7, 0);
  410. digitalWrite(8, 0);
  411. }
  412. void alti ()
  413. {
  414. digitalWrite(2, 1);
  415. digitalWrite(3, 0);
  416. digitalWrite(4, 1);
  417. digitalWrite(5, 1);
  418. digitalWrite(6, 1);
  419. digitalWrite(7, 1);
  420. digitalWrite(8, 1);
  421. }
  422. void bes ()
  423. {
  424. digitalWrite(2, 1);
  425. digitalWrite(3, 0);
  426. digitalWrite(4, 1);
  427. digitalWrite(5, 1);
  428. digitalWrite(6, 0);
  429. digitalWrite(7, 1);
  430. digitalWrite(8, 1);
  431. }
  432. void dort ()
  433. {
  434. digitalWrite(2, 0);
  435. digitalWrite(3, 1);
  436. digitalWrite(4, 1);
  437. digitalWrite(5, 0);
  438. digitalWrite(6, 0);
  439. digitalWrite(7, 1);
  440. digitalWrite(8, 1);
  441. }
  442. void uc ()
  443. {
  444. digitalWrite(2, 1);
  445. digitalWrite(3, 1);
  446. digitalWrite(4, 1);
  447. digitalWrite(5, 1);
  448. digitalWrite(6, 0);
  449. digitalWrite(7, 0);
  450. digitalWrite(8, 1);
  451. }
  452. void iki ()
  453. {
  454. digitalWrite(2, 1);
  455. digitalWrite(3, 1);
  456. digitalWrite(4, 0);
  457. digitalWrite(5, 1);
  458. digitalWrite(6, 1);
  459. digitalWrite(7, 0);
  460. digitalWrite(8, 1);
  461. }
  462. void bir ()
  463. {
  464. digitalWrite(2, 0);
  465. digitalWrite(3, 1);
  466. digitalWrite(4, 1);
  467. digitalWrite(5, 0);
  468. digitalWrite(6, 0);
  469. digitalWrite(7, 0);
  470. digitalWrite(8, 0);
  471. }
  472. void sifir ()
  473. {
  474. digitalWrite(2, 1);
  475. digitalWrite(3, 1);
  476. digitalWrite(4, 1);
  477. digitalWrite(5, 1);
  478. digitalWrite(6, 1);
  479. digitalWrite(7, 1);
  480. digitalWrite(8, 0);
  481. }
  482. ------------------------------------------------------------------------------------------------
  483.  
  484. ------------------------Passive Buzzer------------------------
  485.  
  486. const int knockSensor = 0;
  487. const int threshold = 3; // minimum 3 değerine kadar
  488. const int rejectValue = 25;
  489. const int averageRejectValue = 15;
  490. const int knockFadeTime = 150; // bekleme zamanı
  491. const int lockTurnTime = 650;
  492. const int maximumKnocks = 20;
  493. const int knockComplete = 1200;
  494. int buzzer = 13; // Buzzerınızın digital pin numarasını girerek aynen çalıştırabilirsiniz.
  495. int secretCode[maximumKnocks] = {25,100,25,25};
  496. int knockReadings[maximumKnocks];
  497. int knockSensorValue = 0;
  498. int programButtonPressed = false;
  499.  
  500. void setup()
  501. {
  502. pinMode (buzzer, OUTPUT);
  503. Serial.begin(9600);
  504. Serial.println("Sistem Aktif");
  505. }
  506.  
  507. void loop()
  508. {
  509. knockSensorValue = analogRead(knockSensor);
  510.  
  511. if (knockSensorValue >=threshold)
  512. {
  513. listenToSecretKnock();
  514. }
  515. }
  516. void listenToSecretKnock(){
  517. Serial.println("Vurus Basladi");
  518. int i = 0;
  519. for (i=0;i<maximumKnocks;i++){
  520. knockReadings[i]=0;
  521. }
  522.  
  523. int currentKnockNumber=0;
  524. int startTime=millis();
  525. int now=millis();
  526. delay(knockFadeTime);
  527. do
  528. {
  529. knockSensorValue = analogRead(knockSensor);
  530. if (knockSensorValue >=threshold)
  531. {
  532. Serial.println("Vurus");
  533. now=millis();
  534. int i = 0;
  535. knockReadings[currentKnockNumber] = now-startTime;
  536. currentKnockNumber ++;
  537. startTime=now;
  538. delay(knockFadeTime);
  539. }
  540. now=millis();
  541. }
  542. while ((now-startTime < knockComplete) && (currentKnockNumber < maximumKnocks));
  543.  
  544. if (programButtonPressed==false)
  545. {
  546. if (validateKnock() == true)
  547. {
  548. triggerDoorUnlock();
  549. }
  550. else
  551. {
  552. Serial.println("Vurus Gecersiz");
  553. for (int i = 0; i <80; i++)
  554. {
  555. digitalWrite (buzzer, HIGH);
  556. delay (5);
  557. digitalWrite (buzzer, LOW);
  558. delay (5);
  559. }
  560. delay (1000);
  561. }
  562. }
  563. else
  564. {
  565. validateKnock();
  566. Serial.println("New lock stored.");
  567. }
  568. }
  569.  
  570. void triggerDoorUnlock()
  571. {
  572. Serial.println("Sistem Deaktif");
  573. for (int i = 0; i <40; i++)
  574. {
  575. digitalWrite (buzzer, HIGH);
  576. delay (1);
  577. digitalWrite (buzzer, LOW);
  578. delay (4);
  579. }
  580. for (int i = 0; i <40; i++)
  581. {
  582. digitalWrite (buzzer, HIGH);
  583. delay (1);
  584. digitalWrite (buzzer, LOW);
  585. delay (3);
  586. }
  587. for (int i = 0; i <40; i++)
  588. {
  589. digitalWrite (buzzer, HIGH);
  590. delay (1);
  591. digitalWrite (buzzer, LOW);
  592. delay (2);
  593. }
  594. for (int i = 0; i <40; i++)
  595. {
  596. digitalWrite (buzzer, HIGH);
  597. delay (1);
  598. digitalWrite (buzzer, LOW);
  599. delay (3);
  600. }
  601. for (int i = 0; i <40; i++)
  602. {
  603. digitalWrite (buzzer, HIGH);
  604. delay (1);
  605. digitalWrite (buzzer, LOW);
  606. delay (1);
  607. }
  608. for (int i = 0; i <100; i++)
  609. {
  610. digitalWrite (buzzer, HIGH);
  611. delay (1);
  612. digitalWrite (buzzer, LOW);
  613. delayMicroseconds (500);
  614. }
  615. delay (1000);
  616. int i=0;
  617. delay (lockTurnTime);
  618. }
  619.  
  620. boolean validateKnock(){
  621. int i=0;
  622. int currentKnockCount = 0;
  623. int secretKnockCount = 0;
  624. int maxKnockInterval = 0;
  625. for (i=0;i<maximumKnocks;i++)
  626. {
  627. if (knockReadings[i] > 0)
  628. {
  629. currentKnockCount++;
  630. }
  631. if (secretCode[i] > 0)
  632. {
  633. secretKnockCount++;
  634. }
  635.  
  636. if (knockReadings[i] > maxKnockInterval)
  637. {
  638. maxKnockInterval = knockReadings[i];
  639. }
  640. }
  641. if (programButtonPressed==true)
  642. {
  643. for (i=0;i<maximumKnocks;i++)
  644. {
  645. secretCode[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);
  646. }
  647. for (i = 0; i < maximumKnocks ; i++)
  648. {
  649. if (secretCode[i] > 0){
  650. delay( map(secretCode[i],0, 100, 0, maxKnockInterval));
  651. }
  652. delay(50);
  653. }
  654. return false;
  655. }
  656.  
  657. if (currentKnockCount != secretKnockCount)
  658. {
  659. return false;
  660. }
  661. int totaltimeDifferences=0;
  662. int timeDiff=0;
  663. for (i=0;i<maximumKnocks;i++)
  664. {
  665.  
  666. knockReadings[i]= map(knockReadings[i],0, maxKnockInterval, 0, 100);
  667. timeDiff = abs(knockReadings[i]-secretCode[i]);
  668. if (timeDiff > rejectValue)
  669. {
  670. return false;
  671. }
  672. totaltimeDifferences += timeDiff;
  673. }
  674. if (totaltimeDifferences/secretKnockCount>averageRejectValue)
  675. {
  676. return false;
  677. }
  678.  
  679. return true;
  680.  
  681. }
  682.  
  683. ------------------------------------------------------------------------------------------------
  684.  
  685. Özelleştirmek İçin;
  686. int secretCode[maximumKnocks] = {25,100,25,25};
  687. olan yeri eleman sayısı +1 vuruş olarak düşünün.Yani ben ilk vurduğumda 25'ten öncesi oluyor.Daha sonraki bekleme 100'ü sonraki üste üste 2 kere vurmalar 25',i temsil ediyor.Bu sistemi çözmeniz uzun sürmez.Bir kaç örnek ve kendi düşünme tarzınızla istediğiniz her kodu yaratabilirsiniz.
  688.  
  689. 25 = Üst üste beklemeden tıklatma aralığı
  690. 50 = yarım saniye civarı bekleme aralığı
  691. 100 = 1 saniye civarında bekleme aralığını temsil etmektedir.
  692. Bunlar olacak diye bir şey yok.42,74,92 gibi sayılar da yapabilirsiniz.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement