Arduino + lysdioder = binär klocka
Detta projekt togs direkt från boken "30 Arduino projekt för Evil Genius" av Simon Monk. Det beskrivs i detalj börjar på sidan 159.
I princip är stegen jag gjorde:
1. efter beslut om storleken på 12 av 15 inches, jag byggt en låda från skrot trä och sedan färgas det mörka.
2. jag sedan köpte en bit plast och skär den till en storlek som bara passar in i spåret jag leds från toppen av rutan.
3. sedan gjorde jag en cirkel i princip centrerad i mitten av rutan men något skev överst i rutan. Jag skulle göra en fyrkantig låda nästa gång eftersom mätningarna skulle vara lättare.
4. sedan borrade jag noga hål för de 16 lysdioder som används för att visa tiden.
5. alla de positiva sidorna av lysdioderna har anslutas till Lilypad stiften. Jag använde stift 1 - 4 timmar, 5-10 minuter och 11-13 plus A0-A3 för sekunder. De negativa sidorna är alla kopplade till en gemensam grund. Jag avvek från boken på samma sätt som hur jag fick en gemensam grund. Varje LED har en 100 ohms motstånd fäst vid den.
Jag har en gammal cykel som jag är fast besluten att återanvända på så många sätt som möjligt. Så jag tog en av de främre redskap och fäst den till plasten och sedan sprang en koppartråd runt baksidan av redskap. Detta möjliggjorde en ostridigt tråd och gjorde en något renare utseende (färre sladdar att se).
6. jag sedan kopierade följande kod som det är i artikeln och lastat till Lilypad. Jag gjorde ett par ändringar till ursprungliga så koden jag använde faktiskt är nedan:
#include < Time.h >
int hourLEDs [] = {1, 2,3,4}; minst betydande lite först
int minuteLEDs [] = {10,9,8,7,6,5};
int secondLEDs [] = {16,15,14,13,12,11};
int loopLEDs [] = {16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1}.
int switchPin = 17;
void setup()
{
för (int jag = 0; jag < 4; i ++)
{
pinMode (hourLEDs [i], produktionen);
}
för (int jag = 0; jag < 6; i ++)
{
pinMode (minuteLEDs [i], produktionen);
}
för (int jag = 0; jag < 6; i ++)
{
pinMode (secondLEDs [i], produktionen);
}
setTime(0);
}
void loop()
{
om (digitalRead(switchPin))
{
adjustTime(1);
}
annat if (minute() == 0 & & second() == 0)
{spin(hour());
}
updateDisplay();
Delay(1);
}
void updateDisplay()
{
tid t = now();
setOutput (hourLEDs, 4, hourFormat12(t));
setOutput (minuteLEDs, 6, minute(t));
setOutput (secondLEDs, 6, second(t));
}
void setOutput (int * ledArray, int numLEDs, int värde)
{
för (int jag = 0; jag < numLEDs; i ++)
{
digitalWrite (ledArray [i],
bitRead(value, i));
}
}
void spin (int antal)
{
för (int jag = 0; jag < greve; i ++)
{
för (int j = 0; j < 16; j ++)
{
digitalWrite (loopLEDs [j], hög);
Delay(50);
digitalWrite(loopLEDs[j],LOW);
}
}
}
7. det var nödvändigt för mig att få tid biblioteket och installera den. Processen beskrivs i artikeln.
8. När installerad och inkopplad fungerar klockan på detta sätt.
-För att justera tiden du placera en magnet nära rörbladet går switch och det snabbare genom tiden tills du får rätt tid...
-Som tiden går, sekunder lysdioder ändringen och naturligtvis minuter och timmar.
-För att läsa tiden, måste man lägga till lysdioder som finns på t.ex om timmar lysdioder 8 och 2 är lite, 32 minuter och 8 är på, och sekunder 16 och 1 är på detta skulle vara 10 (8 + 2), 40 (32 + 8), 17(16+1) eller 10:40:17.
-Även vid byte av timmen kommer att lysdioderna jaga i en komplett cirkel ett antal gånger. Om det är 4:00 t, sedan de jaga 4 gånger, 11:00 sedan de jaga 11 gånger.
Här är en video av det fungerar: