Indholdsfortegnelse:

Webforbundet digitalt ur: 7 trin
Webforbundet digitalt ur: 7 trin

Video: Webforbundet digitalt ur: 7 trin

Video: Webforbundet digitalt ur: 7 trin
Video: The Power of Analytics at Your Fingertips: O-Tracker! 2024, November
Anonim
Webforbundet digitalt ur
Webforbundet digitalt ur

Fandt et digitalt ur på $ 10 på Amazon. Nu for at tilpasse det for at få tiden fra internettet.

Forbrugsvarer

ARM Stamp programmerbar i BASIC tilgængelig her

Trin 1: Tilslut Digit Drive og Segment Drive til Multiplexed Display

Tilslut Digit Drive og Segment Drive til Multiplexed Display
Tilslut Digit Drive og Segment Drive til Multiplexed Display

Jeg startede med et billigt stort nummer digitalt ur. Først fjernede jeg den eksisterende urchip. Derefter foretog nogle sondering rundt og fandt de 7 segmentforbindelser, som kan drives direkte af mikroprocessoren. Derefter fandt de firecifrede drivere, som var transistorer, som mikroprocessoren kan drive. Og derefter kablet dem op.

Trin 2: Test forbindelserne

Test forbindelserne
Test forbindelserne

Som et eksperiment skrev jeg et BASIC -program til at køre alle linjer, for at kontrollere ledningerne og måle strømmen, som i dette tilfælde var 82 mA

Næste var at skrive koden for at scanne linjerne.

'webur displaydrev

IO (7) = 0 'PMOS -drev - vil være PWM en dag

for y = 45 til 48

IO (y) = 0 'cifret drev

for x = 8 til 15

IO (x) = 0 'segmentdrev

vent (500)

IO (x) = 1

næste x

DIR (y) = 0 'deaktiver drev på segment

næste y

Trin 3: Kode til visningstid og PWM til styring af lysstyrke

Kode til visningstid og PWM til styring af lysstyrke
Kode til visningstid og PWM til styring af lysstyrke
Kode til visningstid og PWM til styring af lysstyrke
Kode til visningstid og PWM til styring af lysstyrke

Dernæst tilføjede jeg en PMOS -transistor i strømforsyningen til alle cifferdriverne. Med det drevet af pulsbreddemodulation styrer skærmens lysstyrke. Her er BASIC -koden til visning af tiden.

'web clock display drive #include "LPC11U3x.bas"

'globaler

hr = 0 'definer time

min = 0 'definer minut

#define SEG_0 & HBB00

#define SEG_1 & H1800

#define SEG_2 & HD300

#define SEG_3 & HD900

#define SEG_4 & H7800

#define SEG_5 & HE900

#define SEG_6 & HEB00

#define SEG_7 & H9800

#define SEG_8 & HFB00

#define SEG_9 & HF800

#define SEG_o & H4B00

#define 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

#definer US_TIME

sub display_time (fejl, t, min)

dæmpet hr10, hr1, min10, min1, i

#ifdef US_TIME

hvis hr> 12 så hr -= 12

hvis hr = 0 så hr = 12

#Afslut Hvis

hr10 = hr / 10

hr1 = hr MOD 10

min10 = min / 10

min1 = min MOD 10

for i = 0 til 1

hvis hr10 så

IO (45) = 0

Afslut Hvis

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

GPIO_CLR (0) = DIGarray (hr10)

vent (DIG_WAIT)

INDGANG (45)

IO (46) = 0

GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (hr1) + IF (i, & H400, 0)

GPIO_CLR (0) = DIGarray (hr1) + IF (i, & H400, 0)

vent (DIG_WAIT)

INDGANG (46)

IO (47) = 0

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

GPIO_CLR (0) = DIGarray (min10)

vent (DIG_WAIT)

INDGANG (47)

IO (48) = 0

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

GPIO_CLR (0) = DIGarray (min1)

vent (DIG_WAIT)

INDGANG (48)

næste i

endesub

'bruger TIMER1 (32 bit) for at afbryde hvert minut

AFBRYT SUB TIMER1IRQ

T1_IR = 1 'Ryd afbrydelse

min += 1

hvis min> 59 derefter

min = 0

time += 1

hvis hr> 23 derefter

time = 0

Afslut Hvis

Afslut Hvis

ENDSUB

SUB ON_TIMER (max_cnt, gør dette)

TIMER1_ISR = denne + 1 'indstillede funktion for VIC - har brug for +1 for tommelfingerbetjening

SYSCON_SYSAHBCLKCTRL ELLER = (1 << 10) 'aktiver TIMER1

T1_PR = 0 'ingen forudskala - justerer værdien for mere præcis tid

VICIntEnable OR = (1 << TIMER1_IRQn) 'Aktiver afbrydelse

T1_MR0 = max_cnt-1 'opsætning match antal ms

T1_MCR = 3 'Afbryd og nulstil

MR0 T1_IR = 1 'klar afbrydelse

T1_TC = 0 'clear timer counter

T1_TCR = 1 'TIMER1 Aktiver

ENDSUB

#define MINUT_PCLK 2880000000 '60 sekunder ved 48 MHz

vigtigste:

time = 9

min = 33

ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)

IO (7) = 0 'PWM en dag - skal du flytte til P0_22 ??

mens 1

display_time (0, hr, min)

sløjfe

Trin 4: Opret en internetforbindelse

Opret en internetforbindelse
Opret en internetforbindelse

Brug en ESP8266 til en WiFi -forbindelse. Efter at have stukket rundt på nettet et stykke tid var den bedste løsning nodemcu version 0.9.6 og en ældre esp8266_flasher fungerede bedst.

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

Derefter en simpel PHP-webside til at tjene tid fra internettet-

Coridium Time Server

<? php

$ tidszone = htmlspecialchars ($ _ GET ["zone"]); hvis ($ tidszone == "")

$ timezone = 'America/Los_Angeles';

$ tz_object = ny DateTimeZone ($ tidszone);

$ datetime = ny DateTime ();

$ datetime-> setTimezone ($ tz_object);

ekko "time is-", $ datetime-> format ('H: i: s');

ekko "";

ekko "dato er-", $ datetime-> format ('m/d/Y');

?>

Denne webside er så du kan anmode om det

coridium.us/time.php - og du får godt US Pacific tidszone

eller

coridium.us/time.php?zone=Europe/London

Ingen fejlkontrol og sandsynligvis aldrig

Og Luaen læste det -

wifi.sta.config ("your_SSID", "your_PASSWORD")> wifi.sta.connect () …

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

sk: on ("modtag", funktion (sck, c) print (c) ende)

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

sk: send ("GET /time.php HTTP/1.1 / r / nHost: coridium.us / r / nTilslutning: hold-i live / r / nAccept: */ *\ r / n / r / n")

Og du får tiden tilbage som

klokken er-09: 38: 49dato er-2018-31-12

Trin 5: Tilføj BASIC -kode for at analysere tiden fra internettet

Tilføj BASIC -kode for at analysere tiden fra internettet
Tilføj BASIC -kode for at analysere tiden fra internettet

Dette er en delmængde af det fulde BASIC -program, det fulde program kan ses på linket i det sidste trin.

hvis strstr (build_gets, "time is-") = 0 derefter

hr = build_gets (8) - "0"

hvis build_gets (9) = ":" så

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

min += build_gets (11) - "0"

andet

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

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

min += build_gets (12) - "0"

Afslut Hvis

Afslut Hvis

Trin 6: Tilføj en lyssensor og kode for at dæmpe skærmen

Tilføj en lyssensor og kode for at dæmpe skærmen
Tilføj en lyssensor og kode for at dæmpe skærmen
Tilføj en lyssensor og kode for at dæmpe skærmen
Tilføj en lyssensor og kode for at dæmpe skærmen
Tilføj en lyssensor og kode for at dæmpe skærmen
Tilføj en lyssensor og kode for at dæmpe skærmen

En fototransistor blev tilføjet for at mærke det omgivende lys i rummet. Uden det er displayet lyst nok til at vække de døde (mig) om natten.

Den analoge spænding for fototransistorens output læses, og pulsbreddemodulationen indstiller displayets samlede lysstyrke.

Trin 7: Knap uret, og begynd at bruge det

Knap uret, og begynd at bruge det
Knap uret, og begynd at bruge det

Den endelige version viser klokkeslættet, og omkring kl. 03.00 går den ud på nettet for at læse den aktuelle tid. Dette håndterer også sommertid.

Motivationen til dette projekt var de strømafbrydelser, vi oplever her i bjergene og behovet for at nulstille ure eller udskifte batterier for at holde dem i live.

Dette har været en hurtig oversigt over projektet.

Fuld detaljer om dette DIY web -tilsluttede ur.

Anbefalede: