Automatiska hemliga biblioteksdörren (4 / 5 steg)
Steg 4: Den Arduino krets och programvara
Kravet på programmet var enkel:
1. om en hemlig bok (med en inbäddad mikrobrytare) drogs, öppna (eller nära) dörren.
2. om en hemlig knackning mönster identifieras, öppna (eller nära) dörren.
Jag hade aldrig arbetat med eller programmerat en Arduino innan, men jag vet hur att programmera och hittade Arduino är super lätt att arbeta med. Det kom med massor av kort, lätt att förstå exempel som gjorde de exakta sakerna jag ville - driva reläer och lyssna till mikrofoner. Genom att experimentera i bitar, först kunde med att få systemet att bara öppna och stänga korrekt reläer, sedan att få det att lyssna på smällar, jag stegvis bygga ett anpassat program som drivs genom dörren.
Hemliga bok aktiveringen
Att få Arduino att manövrera dörren var lätt. Jag trådbundna en momentan kontakt mikrobrytare till Arduino som är i normalt stängd position när boken väger på den. När du toppen boken tillbaka, vikten lossnar växeln och öppnar kretsen. Arduinoen upptäcker detta och kontroller en dörr ange variabel för att se om dörren är öppen eller stängd. Detta utlöser koden för att fungera korrekt reläet för att öppna eller stänga dörren.
Huvudloop för koden kontrollerar bara två saker - vad är tillståndet i knappen och är det statligt samma som det var sista gången det var kollade? Om det är, då boken inte har aktiverats, så lyssna efter en knock. Om en knock hörs, förgrena sig till en funktion för att lyssna efter fler smällar att se om de matchar den hemliga koden.
Slå upptäckt
För Hemlig knackning koden är jag evigt tacksamhetsskuld till Grathio labs för en instructable för hur man bygger en hemlig knackning upptäcka lockout av en Arduino. Med hjälp av kod Inlagd, kunde jag återanvända Hemlig knackning upptäckt algoritm utan att skapa en på min egen. Jag är skyldig er en öl! Den svåraste delen av återanvända koden var att infoga den i mitt program. Jag innehöll inte en programmering switch för att tillåta mig att ändra knock koden enkelhet skäl. Så, jag använde del av deras kod som lyssnade på smällar, utgång värdena till seriell övervaka och sedan hårdkodad dem i programmet. Inte flexibel, jag förstår, men jag ville ha något enkelt och okomplicerat.
Säkerhet
Jag ville lägga till säkerhetsfunktioner så dörren kunde plötsligt stannade och vände om det behövs. Om du använder boken att aktivera dörren och misslyckas med att returnera boken till sin surrningsplats inom 3 sekunder, stannar dörren. Också, om du drar boken igen efter 3 sekunder, dörren kommer att sluta. Om du drar boken ännu en gång, kommer att dörren vända.
Jag trodde att någon förutom mig kan spela med dörren och av misstag fastnar i den. Jag tänkte att det mest sannolika som någon skulle göra om de drog boken och dörren började öppna oavsiktligt skulle vara att dra boken igen hoppas att stoppa dörren. Det är vad som händer.
Genom att kräva att boken skall återlämnas till surrningsplatsen inom 3 sekunder, måste den person som drar boken släppa det, vilket betyder att deras hand är fri från själva boken. Bokhyllan tar 18 sekunder att öppna, så det finns gott om tid att få din hand ur vägen. Jag är medveten att förlita sig på programvara för säkerhet är en dålig idé, så öppningen för bokhyllan är bredare än bokhyllan själv. Jag är ganska säker på att en hand kunde dras enkelt ut bara genom att trycka bokhyllan bakåt (i rummet) även om bokhyllan stängd helt. Fjädrarna skulle utöva påtryckningar på handen men jag tvivlar nog att bryta eller fälla det permanent. På sidan rum är öppningen också tillräckligt bred för att dra en hand ut.
EXIT-knappen för rummet åkande
Sedan publicerar detta instructable la jag en exit tryckknapp för att tillåta den rum Boende att avsluta enkelt. Utan exit tryckknapp är det enda sättet att stänga eller öppna dörren från rummet sidan med hjälp av Hemlig knackning. Jag hittade knappen på eBay för ca $20. Det är en momentan kontakt knapp som har både normalt sluten och normalt öppna (NC/NO) stift på den. Jag fast det i serie med bokhylla tryckknappen. På så sätt aktivera antingen knappen orsakar dörren att fungera.
Sedan trycka på knappen orsakar dörren att stoppa, och trycka den igen orsakar dörren till omvänd, är knappen användbar vid in- och ut ur rummet. Du behöver inte vänta på bokhyllan helt öppna eller stänga innan vända det med knappen. Du kan inte avbryta dörren öppnas eller stängs sekvens med knock, så knappen sparar lite tid.
Knappen tänds om du förse det med 24 volt men jag tänker inte på det tänds. Jag skulle behöva tråd upp en separat strömförsörjning och kör kabeln till ljuset och det är inte värt det. Knappen som säger "Tryck till Exit" på den är ganska synlig. Det är tillräckligt.
Förbinder relay board och mikrofon
De faktiska anslutningarna för komponenterna är detaljerade i programvara kommentarerna men här är de:
1. relay board: relä 1 ansluter till stift 7 på Arduino. Relay 2 ansluter till Pin 8. Anslut relay board också till marken och 5v på Arduino.
2. mikrofon: Anslut till marken, 5v, och ut pin till analoga A0 (noll) stift på Arduino.
3. boka mikrobrytare: ansluta vanligt och normalt sluten till digital stift 2 och marken. Spelar ingen roll som ansluter till stift 2 eller marken.
4. reläer måste anslutas till den kabel som går till DIN kontakten för det linjära ställdonet. Efter räkna ut hur den handhållna controller som följde med manöverdonet arbetat, jag köpte en dubblett kabel med en DIN kontakten på det så jag kunde bevara manuell handkontrollen och ha den som en backup Arduino misslyckas.
** Obs: wire färgerna jag Visa kan inte vara samma om du försöker kopiera detta!!! Om du tråd styrenheten felaktigt, du troligen kommer att bränna ut din motor controller på din dyra linjärt ställdon!!! Detta fungerar för din manöverdonet bekräftar du SJÄLVSTÄNDIGT. INTE bara blint Följ denna bild ***
5. med den identiska DIN kabel jag köpte, jag klippa kabeln till DIN kontakten och separerade och avskalade ledningarna.
6. jag lödda förlängning kablar till DIN plug tråd stiften visas i diagrammet i steg 4 utvidga dem till relay board. Jag använde värme krympslang (finns på Radio Shack) över varje lödda tråd för att hålla dem från kortslutning tillsammans. Jag använde ett litet rör enskilda kablar, krympt det, sedan används större slang för att passa alla sladdar har vänts och värme krympte som för att säkra dem tillsammans. Jag heter varje utökade tråd med en bit tejp så jag visste som fäster på DIN kontakt det gick till. Jag trippel kontrolleras detta av kontinuitet testa dem med min multimeter.
7. jag ansluten varje tråd till utgångssida relay board som visas i diagrammet ovan. Jag hade också att använda en jumper tråd från den normalt öppen (NO) på relä 1 nr på relay 2 och NC på relä 1 till normalt stängd (NC) på relay 2 för att duplicera den krets som handstyrning hade inuti den. Dessa anslutningar är skruv terminal, så det var lätt att ansluta dem.
8. på inloppssidan av relay board sprang jag kontakter från GND och 5V på Arduino till GND och 5V på relay ombord. Jag ansluten IN1 ombord relä till digital stift 7 på Arduino och IN2 på relay styrelsen att digital stift 8 på Arduino.
Det är allt elektriskt arbete jag hade att göra. Jag håller på att lägga till en mer tryckknapp switch inne i rummet så att boende kan öppna bokhyllan genom att trycka på en knapp. Jag kommer tråd som i serie med knappen hemliga bok. Eftersom denna krets är normalt stängd (NC), ska jag använda NC terminalerna på knappen jag tillägga. När jag trycker det, kretsen kommer att öppna, Arduino kommer att upptäcka det och bokhyllan kommer att antingen öppna eller stänga, vid behov. (Så här fungerar knappen hemliga bok nu.
Koden fungerar utmärkt och jag har tagit det här men du använder det på egen risk. Jag är inte en professionell programmerare och jag tar inget ansvar för all användning du kan använda den till.
En udda fråga med det är det första gången efter start programmet på Arduino när du dra boken, ingenting händer. Andra gången, det fungerar perfekt och fungerar perfekt efter som. Jag är säker på att det finns logik i en slinga som orsakar som men det är också mindre att köra ner. Det händer bara första gången exekverar. Känn dig fri att fixa det och posta lösningen om det stör dig.