Stwórz dokładny zegar Arduino używając tylko jednego przewodu - NIE potrzebujemy zewnętrznego sprzętu!

Stwórz dokładny zegar Arduino używając tylko jednego przewodu - NIE potrzebujemy zewnętrznego sprzętu!

Spisu treści:

Anonim

Jak zrobić zegar Arduino - bez użycia zewnętrznych oscylatorów lub układów zegarowych:

(więcej moich projektów na naszej stronie internetowej - kliknij logo arduino na górze strony głównej)

Będziesz potrzebować:

Płyta Arduino (prawie każdy smak będzie działał dobrze) i oprogramowanie

1 dioda LED

1 przewód połączeniowy

(Przykład okablowania zaktualizowany poniżej …)

Jestem inżynierem elektrykiem od ponad 20 lat i właśnie odkryłem platformę Arduino kilka miesięcy temu. Nie trzeba dodawać, że się w nim zakochałem i jestem teraz uzależniony od projektów. Na Boże Narodzenie w tym roku chciałem dać moim rodzicom prezenty bardzo serdeczne, jedyne w swoim rodzaju. Dla mojej Matki był to z pewnością projekt „jednego zegara”. Nie chodziło mi o nadążanie za czasem letnim lub latami przestępnymi - po prostu dokładnie trzymaj dzień tygodnia i godzinę.

Jak jednak wygenerować impulsy zegara w wyjątkowy, ale dokładny sposób? Oczywiście, mógłbym użyć fantazyjnego wbudowanego zegara IC lub zwykłego oscylatora kryształowego 32 768, ale chciałem czegoś innego niż reszta. Zacząłem używać timera 555 do wyprowadzania stałej fali prostokątnej 100 Hz. To działało całkiem dobrze, ale traciłem około 1 sekundy na godzinę. Nie ma problemu - napisałem algorytm, aby poprawić brakującą sekundę w oprogramowaniu. Byłem szczęśliwy. Potem odkryłem, że chociaż wewnętrzny zegar Arduino nie był całkowicie niezawodny dla zachowania czasu, analogowe wyjścia PWM miały bardzo stabilną falę kwadratową 490 Hz. Cykl roboczy jest określony przez wartość zapisaną na styku analogowym. (tj. - 0 to zero woltów, 127 to 50% cykl pracy, 255 to logiczny wysoki / 5V).

Postanowiłem wypróbować wyjście analogowe PWM podłączone bezpośrednio do pinu przerwania 2 i działało świetnie! Co więcej, doskonale współpracuje z zegarem czasu rzeczywistego mojego komputera do drugiego bez konieczności kompensacji oprogramowania. Używam go już od wielu dni i nadal działa tak, jak się spodziewałem … wszystko za pomocą jednego kabla i kodu.

Gotowy prezent będzie zawierał niestandardowe płytki drukowane Eagle CAD do zasilania i logiki, umieszczone w obudowie z pleksiglasu. Cały temat to lodowe niebieskie oświetlenie LED symulujące zegar analogowy. Podczas gdy obudowa ma biały, niebieski wyświetlacz LCD wyświetlający dzień, godzinę i temperaturę w pomieszczeniu, kabel szeregowy łączy się z pola projektu z rzeczywistym zegarem. Za pomocą 12-bitowego licznika dekad, serwomechanizmu i wielu niebieskich diod LED podświetlam odpowiednie segmenty godzinowe na specjalnie zaprojektowanej analogowej tarczy zegara drukowanej na pleksi. Serwo jest zamontowane na środku tarczy zegara i ma zamocowaną armaturę z zamontowaną diodą LED, która oświetla minuty za szybą. (co minutę serwo obraca się o 6 stopni, zapalając odpowiednią minutę). Mam nadzieję, że wkrótce to się skończy i nakręcę film z finalnym produktem …. Mam nadzieję, że to uwielbia !!

Prosty schemat okablowania Arduino i kod demo do tworzenia własnego zegara za pomocą tej metody. Również link do Laboratorium obwodów, pokazujący, jak użyć metody 555 timer @ 100Hz, jeśli tak zdecydujesz.

Kod i linki poniżej …

Obwód oscylatora czasowego 555 (jeśli chcesz wypróbować tę metodę)

www.circuitlab.com/circuit/b575r9/555-100hz-oscillator/

Zegarowy kod demonstracyjny:

/ * Proste demo wewnętrznego zegara: Joseph Unik aka Relic1974

Wykorzystuje analogowe wyjście PWM 490 Hz z 50% cyklem pracy do

zachowaj bardzo dokładny czas;). Podłącz diodę LED do styku 13 do

migają sekundy zegarka. Połącz zworkę z pinem analogowym 0

do Digital Pin 2 (przerwanie 0). Wyjście minut do numeru seryjnego

monitor. http://www.planetxresearch.com Logo „Arduino”

po więcej projektów i sztuczek …

(Możesz użyć tego kodu, aby rozwinąć się w pełni funkcjonalny

zegar lub inny projekt na licencji Creative Commons;)

*/

int clockInt = 0; // cyfrowy pin 2 jest teraz przerwany 0

int masterClock = 0; // zlicza sygnały zegara narastającego

int seconds = 0; // zmienna

int minutes = 0; // zmienna

int ledPin = 13;

void setup ()

{

attachInterrupt (clockInt, clockCounter, RISING);

// clockInt jest naszym przerwaniem, funkcja clockCounter jest wywoływana, gdy

// wywołany na krawędzi RISING

analogReference (DEFAULT);

pinMode (ledPin, OUTPUT);

Serial.begin (57600);

analogWrite (0, 127); // to uruchamia nasz zegar PWM z 50% cyklem pracy

}

void clockCounter () // wywołany przez przerwanie

{

masterClock ++; // z każdym wzrostem zegara dodaj 1 do licznika masterclock

osiągnięto if (masterClock == 489) // 490Hz

{

sekundy ++; // po jednym cyklu 490 Hz dodaj 1 sekundę;)

masterClock = 0; // Resetuj po osiągnięciu 1 sekundy

ton (13, 100, 500); // za pomocą diody LED na impuls bez opóźnienia;)

}

powrót;

}

void loop ()

{

jeśli (sekundy == 60) // TERAZ WPROWADZENIE DO RZECZYWISTEGO CZASU

{

minuty ++; // zwiększanie minut o 1

sekundy = 0; // zresetuj zmienną sekundową

Serial.print („Minutes =”);

Serial.println (minuty);

}

}

Demo mojego projektu w pracach tutaj

Kieszonkowe dzieci: