Innholdsfortegnelse:
- Rekvisita
- Trinn 1: Koble til Digit Drive og Segment Drive for Multiplexed Display
- Trinn 2: Test tilkoblingene
- Trinn 3: Kode for visningstid og PWM for å kontrollere lysstyrken
- Trinn 4: Opprett en Internett -tilkobling
- Trinn 5: Legg til BASIC -kode for å analysere tiden fra nettet
- Trinn 6: Legg til en lyssensor og kode for å dempe skjermen
- Trinn 7: Knapp opp klokken og begynn å bruke den
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
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
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
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
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
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
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
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
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.