LED Dawn / Sunrise väckarklocka, nattlampa & säkerhet ljus - Arduino kompatibel (10 / 22 steg)
Steg 10: Modul 3 - Rotary Encoder och switchar - översikt
En av de bästa sakerna med detta projekt är att när du ställer in tiden från rotary encoder du kunde lika gärna vara en Bond-skurk ringer upp nedräkning på hans stulna atombomb! Visst, du kan göra detta projekt utan rotary encoder - en "upp", en "down" och en "uppsättning" switch skulle göra jobbet och ta samma antal stift, men där är roligt i det?
Denna modul är den kortaste och enklaste men det finns ett par roliga rynkor och resultatet är bra.
För det första att kodare - ut jag bara på grundval av hur billigt jag kunde källa dem av e-bay. Det kan finnas bättre kriterier men som fungerade för mig. Få en med 5 stift - de har en press-switch samt vänster/höger sväng kodaren. Du som.
En kodare är i huvudsak två växlar. När du slår ett sätt första växeln är ansluten, följt av andra, följt av urkoppling av först, följt av urkoppling av andra. I den andra riktningen, är ordningen vändas så att växeln andra ansluter, följt av först, följt av ifrån den andra, följt av ifrån den första. Använder en pull-down resistor på produktionen och ansluter den gemensamma terminal till + 5V får vi en "Hög" ingång för en ansluten switch och en "låg" för frånkopplad.
Händelseförloppet går således:
Medurs:
A: H-H-L-L-H-H-L-L-H-H-L-L
B: L-H-H-L-L-H-H-L-L-H-H-L
Moturs:
A: L-H-H-L-L-H-H-L-L-H-H-L
B: H-H-L-L-H-H-L-L-H-H-L-L
Det enklaste sättet att läsa dessa använder ett avbrott att kalla en rutin när en av ingångarna ändrar tillstånd. Från att titta på sekvensen ovan, du kommer se att när det går medsols, A alltid förändringar vara olika från B (A är ledande). Går moturs, A alltid förändringar vara detsamma som B (A är följande). En mycket kort rutin kan anropas när en ändras och helt enkelt öka en räknare om A = B och minska disken om en = / = B. att hålla avbryter kort är alltid en bra plan.
Det enda problemet är att vi använder en riktigt billiga kodare. Ovanstående idén fungerar bra men billiga kodaren "studsar" så illa att det är nära oanvändbar.
Det finns gott om debounce kretsar på internet för rotationsencoder men jag ville ha något som var en) lätt & b) använder delar som jag hade på min bänk. Det visar sig att genom att ansluta till ingångsstiftet genom en 1K, med ett 10K pull-down och lägga en 100nf mössa över för att buffra det, vi kan gå från oanvändbar till nära-perfekt med två ytterligare delar. Det är i grunden en rå lågpassfilter. Kopplingsschema visas i den andra bilden.
Vi kunde lika Dämpningstid i programvara och du kommer att se som i exempelkoden och full klockan koden, jag har tagit kommenterade rader som kan vara de kommenterade att genomföra en programvara debounce. Om du inte kan avvara en 100nf cap eller din kodare studsar ännu mer fruktansvärt än min (som inte verkar möjligt) då du kan o-kommentera den programvara debounce.