Innholdsfortegnelse:

Internett -tilkoblet digital klokke: 7 trinn
Internett -tilkoblet digital klokke: 7 trinn

Video: Internett -tilkoblet digital klokke: 7 trinn

Video: Internett -tilkoblet digital klokke: 7 trinn
Video: Как распознать подделку Casio 2024, November
Anonim
Internett -tilkoblet digital klokke
Internett -tilkoblet digital klokke

Fant en digital klokke på $ 10 på Amazon. Nå for å tilpasse det for å få tid fra internett.

Rekvisita

ARM Stamp programmerbar i BASIC tilgjengelig her

Trinn 1: Koble til Digit Drive og Segment Drive for Multiplexed Display

Connect Digit Drive og Segment Drive for Multiplexed Display
Connect Digit Drive og Segment Drive for Multiplexed Display

Jeg startet med en billig digital klokke på hyllen. Først fjernet jeg den eksisterende klokkebrikken. Så gjorde noen undersøkelser rundt og fant de 7 segmentforbindelsene, som kan drives direkte av mikroprosessoren. Fant deretter de firesifrede driverne som var transistorer som mikroprosessoren kan kjøre. Og deretter koblet de opp.

Trinn 2: Test tilkoblingene

Test tilkoblingene
Test tilkoblingene

Som et eksperiment skrev jeg et BASIC -program for å drive alle linjene, for å kontrollere ledningene og måle strømmen, som i dette tilfellet var 82 mA

Neste var å skrive koden for å skanne linjene.

'klokke for visning av klokken

IO (7) = 0 'PMOS -stasjon - blir PWM en dag

for y = 45 til 48

IO (y) = 0 'sifferstasjon

for x = 8 til 15

IO (x) = 0 'segmentstasjon

vent (500)

IO (x) = 1

neste x

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

neste y

Trinn 3: Kode for visningstid og PWM for å kontrollere lysstyrken

Kode for visningstid og PWM for å kontrollere lysstyrken
Kode for visningstid og PWM for å kontrollere lysstyrken
Kode for visningstid og PWM for å kontrollere lysstyrken
Kode for visningstid og PWM for å kontrollere lysstyrken

Deretter la jeg til en PMOS -transistor i strømforsyningen til alle sifferdriverne. Med den drevet av pulsbreddemodulasjon vil kontrollere lysstyrken på skjermen. Her er BASIC -koden for å vise tiden.

'klokke for visning av klokken #inkluderer "LPC11U3x.bas"

'globaler

hr = 0 'definere time

min = 0 'definere minutt

#define SEG_0 & HBB00

#define SEG_1 og H1800

#define SEG_2 og HD300

#define SEG_3 og 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}

#definere DIG_WAIT 1

#definer US_TIME

sub display_time (err, hr, min)

dim hr10, hr1, min10, min1, i

#ifdef US_TIME

hvis hr> 12 så hr -= 12

hvis hr = 0 så hr = 12

#slutt om

hr10 = hr / 10

hr1 = hr MOD 10

min10 = min / 10

min1 = min MOD 10

for i = 0 til 1

hvis hr10 da

IO (45) = 0

slutt om

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

GPIO_CLR (0) = DIGarray (hr10)

vent (DIG_WAIT)

INNGANG (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)

INNGANG (46)

IO (47) = 0

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

GPIO_CLR (0) = DIGarray (min10)

vent (DIG_WAIT)

INNGANG (47)

IO (48) = 0

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

GPIO_CLR (0) = DIGarray (min1)

vent (DIG_WAIT)

INNGANG (48)

neste i

endesub

'bruker TIMER1 (32 bit) for å avbryte hvert minutt

AVBRYT SUB TIMER1IRQ

T1_IR = 1 'Fjern avbrudd

min += 1

hvis min> 59 da

min = 0

time += 1

hvis hr> 23 da

t = 0

slutt om

slutt om

ENDSUB

SUB ON_TIMER (maks_cnt, dette gjøres)

TIMER1_ISR = dette er + 1 'innstilt funksjon av VIC - trenger +1 for tommelfingeroperasjon

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

T1_PR = 0 'ingen forhåndsskala - justerer verdien for mer nøyaktig tid

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

T1_MR0 = max_cnt-1 'konfigurert match antall ms

T1_MCR = 3 'Avbrudd og tilbakestilling på

MR0 T1_IR = 1 'klart avbrudd

T1_TC = 0 'slett tidteller

T1_TCR = 1 'TIMER1 Aktiver

ENDSUB

#define MINUT_PCLK 2880000000 '60 sekunder ved 48 MHz

hoved:

t = 9

min = 33

ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)

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

mens 1

display_time (0, t, min)

Løkke

Trinn 4: Opprett en Internett -tilkobling

Opprett en Internett -tilkobling
Opprett en Internett -tilkobling

Bruk en ESP8266 for en WiFi -tilkobling. Etter å ha stukket rundt på nettet en stund var den beste løsningen nodemcu versjon 0.9.6 og en eldre esp8266_flasher fungerte best.

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

Deretter en enkel PHP-webside for å vise tid fra internett-

Coridium Time Server

<? php

$ tidssone = htmlspecialchars ($ _ GET ["sone"]); hvis ($ tidssone == "")

$ tidssone = 'America/Los_Angeles';

$ tz_object = ny DateTimeZone ($ tidssone);

$ datetime = new DateTime ();

$ datetime-> setTimezone ($ tz_object);

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

ekko "";

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

?>

Denne websiden er slik at du kan be om det

coridium.us/time.php - og du får godt tidssonen i USA

eller

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

Ingen feilkontroll og vil sannsynligvis aldri bli det

Og Lua for å lese det -

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

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

sk: on ("motta", funksjon (sck, c) print (c) end)

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

sk: send ("GET /time.php HTTP/1.1 / r / nHost: coridium.us / r / nTilkobling: keep-alive / r / nAccept: */ *\ r / n / r / n")

Og du får tilbake tiden som

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

Trinn 5: Legg til BASIC -kode for å analysere tiden fra nettet

Legg til BASIC -kode for å analysere tiden fra nettet
Legg til BASIC -kode for å analysere tiden fra nettet

Dette er en delmengde av hele BASIC -programmet, det fulle programmet kan sees på lenken i det siste trinnet.

if strstr (build_gets, "time is-") = 0 da

hr = build_gets (8) - "0"

hvis build_gets (9) = ":" da

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

min += build_gets (11) - "0"

ellers

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

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

min += build_gets (12) - "0"

slutt om

slutt om

Trinn 6: Legg til en lyssensor og kode for å dempe skjermen

Legg til en lyssensor og kode for å dempe skjermen
Legg til en lyssensor og kode for å dempe skjermen
Legg til en lyssensor og kode for å dempe skjermen
Legg til en lyssensor og kode for å dempe skjermen
Legg til en lyssensor og kode for å dempe skjermen
Legg til en lyssensor og kode for å dempe skjermen

En fototransistor ble lagt til for å føle det omgivende lyset i rommet. Uten den er skjermen lys nok til å vekke de døde (meg) om natten.

Den analoge spenningen til utgangen til fototransistoren leses og pulsbreddemodulasjonen angir displayets generelle lysstyrke.

Trinn 7: Knapp opp klokken og begynn å bruke den

Knapp opp klokken og begynn å bruke den
Knapp opp klokken og begynn å bruke den

Den endelige versjonen viser tiden, og rundt klokken 03.00 går den ut på nettet for å lese gjeldende tid. Dette håndterer også sommertid.

Motivasjonen for dette prosjektet var strømbruddene vi opplever her i fjellet og behovet for å tilbakestille klokker eller bytte batterier for å holde dem i live.

Dette har vært en rask oversikt over prosjektet.

Full informasjon om denne DIY -tilkoblede klokken.

Anbefalt: