Kazalo:
- Zaloge
- 1. korak: Povežite številski pogon in segmentni pogon za večstranski prikaz
- 2. korak: Preizkusite povezave
- Korak 3: Koda za prikaz časa in PWM za nadzor svetlosti
- 4. korak: vzpostavite internetno povezavo
- 5. korak: Dodajte OSNOVNO kodo za razčlenitev časa iz spleta
- 6. korak: Dodajte svetlobni senzor in kodo za zatemnitev zaslona
- 7. korak: Ura pritisnite in začnite uporabljati
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
Na Amazonu sem našel digitalno uro za 10 USD. Zdaj ga prilagodite, da boste imeli čas iz interneta.
Zaloge
ARM Stamp, ki ga je mogoče programirati v BASIC -u, je na voljo tukaj
1. korak: Povežite številski pogon in segmentni pogon za večstranski prikaz
Začel sem z poceni digitalno uro z veliko številko. Najprej sem odstranil obstoječi čip ure. Nato so naredili nekaj sondanja in našli 7 segmentne povezave, ki jih lahko poganja neposredno mikroprocesor. Nato so našli 4 -mestne gonilnike, ki so bili tranzistorji, ki jih mikroprocesor lahko poganja. In potem jih priklopil.
2. korak: Preizkusite povezave
Kot poskus sem napisal BASIC program za vožnjo po vseh vodih, za preverjanje ožičenja in merjenje toka, ki je bil v tem primeru 82 mA
Nato je bilo treba napisati kodo za skeniranje vrstic.
'pogon za prikaz spletne ure
IO (7) = 0 'PMOS pogon - nekoč bo PWM
za y = 45 do 48
IO (y) = 0 'mestni pogon
za x = 8 do 15
IO (x) = 0 'segmentni pogon
počakaj (500)
IO (x) = 1
naslednji x
DIR (y) = 0 'onemogoči pogon na segmentu
naslednji y
Korak 3: Koda za prikaz časa in PWM za nadzor svetlosti
Nato sem vsem napajalnikom za števce dodal tranzistor PMOS. S tem, ki ga poganja širina impulza, bo modulacija nadzorovala svetlost zaslona. Tukaj je BASIC koda za prikaz časa.
'pogon za prikaz spletne ure #include "LPC11U3x.bas"
'global
hr = 0 'določi uro
min = 0 'določi minuto
#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
#define US_TIME
sub display_time (napaka, h, min)
dim hr10, hr1, min10, min1, i
#ifdef US_TIME
če je hr> 12, potem je hr -= 12
če je hr = 0, potem je hr = 12
#endif
hr10 = hr / 10
hr1 = hr MOD 10
min10 = min / 10
min1 = min MOD 10
za i = 0 do 1
če hr10 potem
IO (45) = 0
endif
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarija (hr10)
GPIO_CLR (0) = DIGarray (hr10)
počakaj (DIG_WAIT)
VHOD (45)
IO (46) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarija (hr1) + IF (i, & H400, 0)
GPIO_CLR (0) = DIGarray (hr1) + IF (i, & H400, 0)
počakaj (DIG_WAIT)
VHOD (46)
IO (47) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (min10)
GPIO_CLR (0) = DIGarray (min10)
počakaj (DIG_WAIT)
VHOD (47)
IO (48) = 0
GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarija (min1)
GPIO_CLR (0) = DIGarray (min1)
počakaj (DIG_WAIT)
VHOD (48)
naslednji i
konca
'TIMER1 (32 -bitni), da prekine vsako minuto
PREKINI SUB TIMER1IRQ
T1_IR = 1 'Počisti prekinitev
min +1
če je min> 59, potem
min = 0
hr += 1
če je hr> 23, potem
hr = 0
endif
endif
ENDSUB
SUB ON_TIMER (max_cnt, to)
TIMER1_ISR = Ali je to nastavljena funkcija VIC + 1 ' - potrebujete +1 za operacijo Thumb
SYSCON_SYSAHBCLKCTRL OR = (1 << 10) 'omogoči TIMER1
T1_PR = 0 'brez predrazmerja - bo vrednost prilagodila za natančnejši čas
VICIntEnable OR = (1 << TIMER1_IRQn) 'Omogoči prekinitev
T1_MR0 = max_cnt-1 'nastavljeno število ujemanja ms
T1_MCR = 3 'Prekinitev in ponastavitev vklopljena
MR0 T1_IR = 1 'čisti prekinitev
T1_TC = 0 'počisti števec časovnika
T1_TCR = 1 'TIMER1 Omogoči
ENDSUB
#define MINUT_PCLK 2880000000 '60 sekund pri 48 MHz
glavni:
hr = 9
min = 33
ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)
IO (7) = 0 'PWM nekega dne - premakniti se na P0_22 ??
medtem ko 1
display_time (0, h, min)
zanka
4. korak: vzpostavite internetno povezavo
Za povezavo WiFi uporabite ESP8266. Potem ko sem nekaj časa brskala po spletu, je bila najboljša rešitev nodemcu različice 0.9.6, starejši esp8266_flasher pa je deloval najbolje.
www.electrodragon.com/w/File:Nodemcu_20150704_firmware.zip
Nato preprosto spletno mesto PHP, ki služi času iz interneta-
Coridium Time Server
<? php
$ časovni pas = htmlspecialchars ($ _ GET ["cona"]); če ($ časovni pas == "")
$ timezone = 'America/Los_Angeles';
$ tz_object = nov DateTimeZone ($ časovni pas);
$ datetime = nov DateTime ();
$ datetime-> setTimezone ($ tz_object);
echo "time is-", $ datetime-> format ('H: i: s');
odmev "";
echo "date is-", $ datetime-> format ('m/d/Y');
?>
Ta spletna stran je takšna, da lahko zahtevate
coridium.us/time.php - in dobro boste dobili pacifiški časovni pas ZDA
ali
coridium.us/time.php?zone=Europe/London
Brez preverjanja napak in najverjetneje nikoli ne bo
In Lua naj to prebere -
wifi.sta.config ("your_SSID", "your_PASSWORD")> wifi.sta.connect ()…
sk = net.createConnection (net. TCP, 0)
sk: on ("sprejemi", funkcija (sck, c) print (c) konec))
sk: connect (80, "coridium.us")
sk: send ("GET /time.php HTTP/1.1 / r / nHost: coridium.us / r / n Povezava: keep-living / r / nSprejmi: */ *\ r / n / r / n")
In vrnete čas nazaj kot
ura je-09: 38: 49 datum je -2018-31-12
5. korak: Dodajte OSNOVNO kodo za razčlenitev časa iz spleta
To je podmnožica celotnega programa BASIC, ki si ga lahko ogledate na povezavi v zadnjem koraku.
če je strstr (build_gets, "čas je-") = 0, potem
hr = build_gets (8) - "0"
če build_gets (9) = ":" potem
min = (build_gets (10) - "0")*10
min += build_gets (11) - "0"
drugače
hr = hr * 10 + build_gets (9) - "0"
min = (build_gets (11) - "0")*10
min += build_gets (12) - "0"
endif
endif
6. korak: Dodajte svetlobni senzor in kodo za zatemnitev zaslona
Dodan je bil foto tranzistor za zaznavanje zunanje svetlobe v sobi. Brez njega je zaslon dovolj svetel, da ponoči zbudi mrtve (mene).
Analogna napetost izhoda fototranzistorja se prebere in modulacija širine impulza nastavi celotno svetlost zaslona.
7. korak: Ura pritisnite in začnite uporabljati
Končna različica prikazuje čas, okoli 3. ure pa gre v splet, da prebere trenutni čas. To omogoča tudi časovni prihranek dnevne svetlobe.
Motivacija za ta projekt je bila izpad električne energije, ki ga doživimo tukaj v gorah, in potreba po ponastavitvi ur ali zamenjavi baterij, da ostanejo pri življenju.
To je bil hiter pregled projekta.
Vse podrobnosti o tej DIY spletni povezavi ure.