Spisu treści:

Zegar cyfrowy podłączony do sieci: 7 kroków
Zegar cyfrowy podłączony do sieci: 7 kroków

Wideo: Zegar cyfrowy podłączony do sieci: 7 kroków

Wideo: Zegar cyfrowy podłączony do sieci: 7 kroków
Wideo: NAJBARDZIEJ ZŁOŚLIWE USTAWIENIE WE WSZYSTKICH SMARTFONACH ANDROID. ZMIEŃ TO TERAZ!!! 2024, Listopad
Anonim
Zegar cyfrowy podłączony do sieci
Zegar cyfrowy podłączony do sieci

Znalazłem zegar cyfrowy za 10 USD w Amazon. Teraz dostosuj go, aby uzyskać czas z Internetu.

Kieszonkowe dzieci

ARM Stamp programowalny w BASIC dostępny tutaj

Krok 1: Podłącz napęd cyfrowy i napęd segmentowy dla multipleksowanego wyświetlacza

Połącz napęd cyfrowy i napęd segmentowy dla multipleksowanego wyświetlacza
Połącz napęd cyfrowy i napęd segmentowy dla multipleksowanego wyświetlacza

Zacząłem od taniego zegara cyfrowego z dużej liczby. Najpierw usunąłem istniejący układ zegara. Następnie wykonałem sondowanie i zlokalizowałem 7-segmentowe połączenia, które mogą być sterowane bezpośrednio przez mikroprocesor. Następnie znaleziono 4-cyfrowe sterowniki, które były tranzystorami, którymi może sterować mikroprocesor. A potem podłączyłem je.

Krok 2: Przetestuj połączenia

Przetestuj połączenia
Przetestuj połączenia

Jako eksperyment napisałem program BASIC do wysterowania wszystkich linii, sprawdzenia okablowania i pomiaru prądu, który w tym przypadku wynosił 82 mA

Następnym krokiem było napisanie kodu do skanowania linii.

„Dysk zegara internetowego”

IO(7)=0 'Napęd PMOS - kiedyś będzie PWM

dla y=45 do 48

IO(y)=0 'napęd cyfr

dla x=8 do 15

IO(x)=0 'napęd segmentu

czekaj(500)

IO(x)=1

następny x

DIR(y)=0 ' wyłącz napęd w segmencie

następny ty

Krok 3: Kod do wyświetlania czasu i PWM do sterowania jasnością

Kod do wyświetlania czasu i PWM do sterowania jasnością
Kod do wyświetlania czasu i PWM do sterowania jasnością
Kod do wyświetlania czasu i PWM do sterowania jasnością
Kod do wyświetlania czasu i PWM do sterowania jasnością

Następnie dodałem tranzystor PMOS w zasilaczu do wszystkich sterowników cyfrowych. Dzięki temu sterowana modulacją szerokości impulsu będzie sterować jasnością wyświetlacza. Oto kod BASIC do wyświetlania czasu.

' dysk wyświetlania zegara internetowego #include "LPC11U3x.bas"

„globalne”

hr = 0 ' zdefiniuj godzinę

min = 0 'zdefiniuj minutę

#zdefiniuj SEG_0 &HBB00

#define SEG_1 &H1800

#zdefiniuj SEG_2 &HD300

#zdefiniuj SEG_3 &HD900

#zdefiniuj SEG_4 &H7800

#zdefiniuj SEG_5 &HE900

#define SEG_6 &HEB00

#zdefiniuj SEG_7 &H9800

#zdefiniuj SEG_8 &HFB00

#zdefiniuj SEG_9 &HF800

#zdefiniuj SEG_o &H4B00

#zdefiniuj SEG_f &HE200

const DIGarray = { SEG_0, SEG_1, SEG_2, SEG_3, SEG_4, SEG_5, SEG_6, SEG_7, SEG_8, SEG_9, SEG_o, SEG_f }

#define DIG_WAIT 1

#definiuj US_TIME

sub display_time (błąd, godz., min)

dim hr10, hr1, min10, min1, i

#ifdef US_TIME

jeśli hr > 12 to hr -= 12

jeśli hr = 0 to hr = 12

#endif

godz.10 = godz. / 10

godz1 = godz MOD 10

min10 = min / 10

min1 = min MOD 10

dla i=0 do 1

jeśli hr10 to

IO(45) = 0

endif

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(hr10)

GPIO_CLR(0) = DIGarray(hr10)

czekaj (DIG_WAIT)

WEJŚCIE(45)

IO(46) = 0

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(hr1) + JEŻELI(i, &H400, 0)

GPIO_CLR(0) = DIGarray(hr1) + JEŻELI(i, &H400, 0)

czekaj (DIG_WAIT)

WEJŚCIE(46)

IO(47) = 0

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(min10)

GPIO_CLR(0) = DIGarray(min10)

czekaj (DIG_WAIT)

WEJŚCIE(47)

IO(48) = 0

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(min1)

GPIO_CLR(0) = DIGarray(min1)

czekaj (DIG_WAIT)

WEJŚCIE(48)

następny ja

napis końcowy

' użytkownik TIMER1 (32 bity) do przerywania co minutę

PRZERWANIE CZASU PODCZASOWEGO1IRQ

T1_IR = 1 'Skasuj przerwanie

min += 1

jeśli min > 59 to

min = 0

godz. += 1

jeśli godz. > 23 to

godz. = 0

endif

endif

NAPIS KOŃCOWY

SUB ON_TIMER (max_cnt, dothis)

TIMER1_ISR = dothis + 1 'ustaw funkcję VIC - potrzebujesz +1 dla operacji kciuka

SYSCON_SYSAHBCLKCTRL OR= (1<<10) 'włącz TIMER1

T1_PR = 0 'brak przeskalowania - dostosuje wartość, aby uzyskać dokładniejszy czas

VICIntEnable OR= (1<<TIMER1_IRQn) 'Włącz przerwanie

T1_MR0 = max_cnt-1 'ustaw liczbę dopasowania ms

T1_MCR = 3 'Przerwanie i zresetowanie włączone

MR0 T1_IR = 1 'wyczyść przerwanie

T1_TC = 0 'wyczyść licznik czasu

T1_TCR = 1 ' TIMER1 włączony

NAPIS KOŃCOWY

#define MINUT_PCLK 2880000000 ' 60 sekund przy 48 MHz

Główny:

godz. = 9

min = 33

ON_TIMER(MINUT_PCLK, ADRES TIMER1IRQ)

IO(7) = 0' PWM pewnego dnia -- trzeba przejść do P0_22 ??

podczas gdy 1

display_time(0, godz., min)

pętla

Krok 4: Nawiąż połączenie z Internetem

Nawiąż połączenie z Internetem
Nawiąż połączenie z Internetem

Użyj ESP8266 do połączenia Wi-Fi. Po grzebaniu w sieci najlepszym rozwiązaniem okazała się wersja nodemcu 0.9.6, a starsza wersja esp8266_flasher działała najlepiej.

www.electrodragon.com/w/File:Nodemcu_20150704_firmware.zip

Następnie prosta strona internetowa PHP do udostępniania czasu z Internetu…

Serwer czasu Coridium

<?php

$timezone = htmlspecialchars($_GET["strefa"]); if ($strefa czasowa == "")

$strefa czasowa = 'Ameryka/Los_Angeles';

$tz_object = new DateTimeZone($timezone);

$dataczas = nowa DataCzas();

$datetime->setTimezone($tz_object);

echo "czas to-", $datetime->format('H:i:s');

Echo "";

echo "data to-", $datetime->format('m/d/Y');

?>

Ta strona internetowa jest po to, abyś mógł poprosić

coridium.us/time.php -- i masz strefę czasową US Pacific

lub

coridium.us/time.php?zone=Europa/Londyn

Brak sprawdzania błędów i najprawdopodobniej nigdy nie będzie

I Lua, żeby to przeczytać…

wifi.sta.config("twoje_SSID", "twoje_HASŁO")> wifi.sta.connect()…

sk=net.createConnection(net. TCP, 0)

sk:on("odbierz", function(sck, c) print(c) end)

sk:connect(80, "coridium.us")

sk:send("GET /time.php HTTP/1.1\r\nHost: coridium.us\r\nPołączenie: keep-alive\r\nAkceptuj: */*\r\n\r\n")

I wracasz do czasu, gdy

czas to 09:38:49data to 31.12.2018

Krok 5: Dodaj kod BASIC, aby analizować czas z sieci

Dodaj kod BASIC, aby analizować czas z sieci
Dodaj kod BASIC, aby analizować czas z sieci

Jest to podzbiór pełnego programu BASIC, który można wyświetlić pod linkiem w ostatnim kroku.

if strstr(build_gets, "czas to-") = 0 wtedy

hr = build_gets(8) - "0"

if build_gets(9) = ":" to

min = (build_gets(10) - "0")*10

min += build_gets(11) - "0"

w przeciwnym razie

hr = hr * 10 + build_gets(9) - "0"

min = (build_gets(11) - "0")*10

min += build_gets(12) - "0"

endif

endif

Krok 6: Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz

Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz
Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz
Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz
Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz
Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz
Dodaj czujnik światła i kod, aby przyciemnić wyświetlacz

Dodano fototranzystor, aby wyczuć światło otoczenia w pomieszczeniu. Bez niego wyświetlacz jest wystarczająco jasny, aby obudzić zmarłych (mnie) w nocy.

Odczytywane jest napięcie analogowe wyjścia fototranzystora, a modulacja szerokości impulsu ustawia ogólną jasność wyświetlacza.

Krok 7: Zaciśnij zegar i zacznij go używać

Zaciśnij zegar i zacznij go używać
Zaciśnij zegar i zacznij go używać

Ostateczna wersja wyświetla czas, a około 3 nad ranem wychodzi do sieci, aby odczytać aktualny czas. Dotyczy to również czasu oszczędzania światła dziennego.

Motywacją do tego projektu były przerwy w dostawie prądu, których doświadczamy tutaj w górach i konieczność resetowania zegarów lub wymiany baterii, aby utrzymać je przy życiu.

To był krótki przegląd projektu.

Pełne informacje na temat tego DIY zegara podłączonego do Internetu.

Zalecana: