Hemliga slå upptäcka dörrlås (2 / 10 steg)
Steg 2: Programmera Arduino
Det här avsnittet förutsätts att du vet hur du ansluter din Arduino microcontroller du dator, kompilera och ladda upp en skiss. Om du inte vet hur man gör att du förmodligen inte bör göra detta Instructable. Men spendera lite tid på denna sida och gör några av de exempel och tutorials där kan ge dig upp till hastigheten.
Vi kommer att ladda upp vår skiss innan du gör någon av elektroniken så vi kan testa elektroniken som vi går.
#1: Hämta
Hämta filen secret_knock_detector.pde längst ned i detta avsnitt och kopiera den till din skissbok. (Eller visa texten och klippa och klistra in den i en ny skiss.)
(Tips: om namnet på den nedladdade filen är något som "BARS5HS13H8SW.tmp" helt enkelt byta namn på den till secret_knock_detector.pde. och du är bra att gå.)
#2:
Öppna skissen och kompilera den. Det bör sammanställa ordentligt första språng, men det är bra för att vara säker.
#3:
Anslut din Arduino och ladda upp skissen.
Om du har några problem, kolla Felsökning avsnitt på webbplatsen Arduino.
Kodöversikt:
För de nyfikna är här en titt på några bitar av kod om du är intresserad knorra:
(Om du är nyfiken, gå till nästa avsnitt)
om linje 28:const int tröskel = 4;
Detta är känsligheten hos detektorn knock. Om du får en massa oväsen, tar upp detta (upp till 1023), om du har en hård tid höra smällar kan du sänka det (så lågt som 1).
om linje 29:const int rejectValue = 25;
om linje 30:const int averageRejectValue = 15;
Båda dessa används för att avgöra hur exakt någon har att slå. De är procentsatser och bör vara i intervallet 0-100. Sänka dessa innebär någon måste ha mer exakta timing, högre är mer förlåtande. averageRejectValue ska alltid vara lägre än rejectValue.
Inställningar av ca 10 och 7 gör det svårt för två personer att slå den samma knock även om de vet rytmen. Men det ökar också antalet falskt negativ. (dvs: du slå korrekt och det fortfarande inte öppnas.)
om linje 31:const int knockFadeTime = 150,
Detta är en rå debounce timer för knock sensor. Efter det hör en knock slutar lyssnar till detta många millisekunder så det inte räknas den samma knock mer än en gång. Om du får en enda knock räknas som två sedan öka denna timer. Om det inte registrera två snabba smällar då minska den.
om linje 32:const int lockTurnTime = 650,
Detta är nu många millisekunder vi kör motorn för att låsa upp dörren. Hur länge detta ska vara beror på utformningen av din motor och ditt lås. Det är okej om det tar lite lång tid sedan jag har utformat en enkel slirkoppling i designen, men det är bättre för alla delar om det inte fungerar för mycket.
om linje 34:const int maximumKnocks = 20;
Hur många slår vi rekord. 20 är mycket. Du kan öka om din hemliga gömställe skyddas av försåtliga trummisar med goda minnen. Öka den för mycket och du får slut på minne.
om linje 35:const int knockComplete = 1200;
Även känd som det maximala antalet millisekunder som det kommer att vänta tills en knock. Om det inte höra en knock för detta lång tid det tar är det gjort och kontrollera om knock är något bra. Öka detta om du är en långsam gnällspik. Minska det om du är en snabb gnällspik och är otåliga att vänta 1,2 sekunder för din dörr låsa upp.
Om raden 39:int secretCode [maximumKnocks] = {50, 25, 25, 50, 100, 5...
Detta är den standard knock som den känner igen när du slår på den. Detta är konstigt rytmisk notation eftersom varje värde är en procentandel av den längsta knock. Om du har svårt att få det att känna igen "rakning och en klippa" ändra detta till {100,100,100,0,0,0... och en enkel följd av 3 slag kommer att öppna den.
Felsökning:
om linje 51: Serial.begin(9600);
om linje 52:Serial.println ("programmet start.");
Avkommentera dessa linjer för att se några debug information om den seriella porten. Det finns några andra rader felsökning kod som ställts in i resten av kod som du kan ta bort kommentar för att se vad som händer internt.
Var noga med att ange den seriella porten till rätt hastighet.
Resten av koden är kommenterade så kan du se hur det fungerar men förmodligen behöver du inte ändra det om du inte ändrar designen.