Cuprins:

Ceas digital conectat la web: 7 pași
Ceas digital conectat la web: 7 pași

Video: Ceas digital conectat la web: 7 pași

Video: Ceas digital conectat la web: 7 pași
Video: Cel mai IEFTIN și mai ”POPULAR” SMARTWATCH din ROMÂNIA 2024, Iulie
Anonim
Ceas digital conectat la web
Ceas digital conectat la web

Am găsit un ceas digital de 10 USD la Amazon. Acum, personalizați-l pentru a obține timpul de pe internet.

Provizii

ARM Stamp programabil în BASIC disponibil aici

Pasul 1: Conectați unitatea digitală și unitatea segmentată pentru afișaj multiplexat

Conectați unitate digitală și unitate segmentată pentru afișaj multiplexat
Conectați unitate digitală și unitate segmentată pentru afișaj multiplexat

Am început cu un ceas digital cu număr mare ieftin. Mai întâi am eliminat cipul de ceas existent. Apoi am făcut câteva sondaje și am localizat conexiunile pe 7 segmente, care pot fi conduse direct de microprocesor. Apoi am găsit driverele de 4 cifre care erau tranzistoare pe care microprocesorul le poate conduce. Și apoi le-am conectat.

Pasul 2: Testați conexiunile

Testați conexiunile
Testați conexiunile

Ca experiment am scris un program BASIC pentru a conduce toate liniile, pentru a verifica cablajul și a măsura curentul, care în acest caz a fost de 82 mA

Apoi a fost să scriu codul pentru a scana liniile.

'unitate de afișare a ceasului web

IO (7) = 0 'unitate PMOS - va fi PWM cândva

pentru y = 45 până la 48

IO (y) = unitate de 0 'cifre

pentru x = 8 la 15

IO (x) = unitate de segment 0 '

așteptați (500)

IO (x) = 1

următorul x

DIR (y) = 0 'dezactivează unitatea pe segment

următorul y

Pasul 3: Cod pentru afișarea timpului și PWM pentru controlul luminozității

Cod pentru afișarea timpului și PWM pentru controlul luminozității
Cod pentru afișarea timpului și PWM pentru controlul luminozității
Cod pentru afișarea timpului și PWM pentru controlul luminozității
Cod pentru afișarea timpului și PWM pentru controlul luminozității

Apoi am adăugat un tranzistor PMOS în sursa de alimentare la toate driverele de cifre. Modulat în funcție de lățimea impulsului va controla luminozitatea afișajului. Iată codul BASIC pentru a afișa ora.

'Unitatea de afișare a ceasului web #include "LPC11U3x.bas"

'globali

hr = 0 'definește ora

min = 0 'definiți minutul

#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

timp afișare secundară (eroare, oră, min)

dim hr10, hr1, min10, min1, i

#ifdef US_TIME

dacă hr> 12 atunci hr - = 12

dacă hr = 0 atunci hr = 12

#endif

hr10 = hr / 10

hr1 = hr MOD 10

min10 = min / 10

min1 = min MOD 10

pentru i = 0 la 1

dacă hr10 atunci

IO (45) = 0

endif

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

GPIO_CLR (0) = DIGarray (hr10)

așteptați (DIG_WAIT)

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

așteptați (DIG_WAIT)

INTRARE (46)

IO (47) = 0

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

GPIO_CLR (0) = DIGarray (min10)

așteptați (DIG_WAIT)

INTRARE (47)

IO (48) = 0

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

GPIO_CLR (0) = DIGarray (min1)

așteptați (DIG_WAIT)

INTRARE (48)

apoi eu

endsub

'utilizator TIMER1 (32 biți) pentru a întrerupe fiecare minut

INTERRUPT SUB TIMER1IRQ

T1_IR = 1 'Ștergeți întreruperea

min + = 1

dacă min> 59 atunci

min = 0

hr + = 1

dacă hr> 23 atunci

hr = 0

endif

endif

ENDSUB

SUB ON_TIMER (max_cnt, dothis)

TIMER1_ISR = aceasta este funcția setată de + 1 'a VIC - are nevoie de +1 pentru operația Thumb

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

T1_PR = 0 'fără prescalare - va ajusta valoarea pentru un timp mai precis

VICIntEnable OR = (1 << TIMER1_IRQn) 'Activați întreruperea

T1_MR0 = max_cnt-1 'setează numărul de meci de ms

T1_MCR = 3 'Întrerupere și resetare activată

MR0 T1_IR = 1 'întrerupe clar

T1_TC = 0 'goliți contorul temporizatorului

T1_TCR = 1 'TIMER1 Activare

ENDSUB

#define MINUT_PCLK 2880000000 '60 de secunde la 48 MHz

principal:

hr = 9

min = 33

ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)

IO (7) = 0 'PWM într-o zi - trebuie să treceți la P0_22 ??

în timp ce 1

display_time (0, hr, min)

buclă

Pasul 4: Faceți o conexiune la Internet

Faceți o conexiune la Internet
Faceți o conexiune la Internet

Utilizați un ESP8266 pentru o conexiune WiFi. După ce a scos pe internet o vreme cea mai bună soluție a fost versiunea nodemcu 0.9.6 și un vechi esp8266_flasher a funcționat cel mai bine.

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

Apoi, o pagină web PHP simplă pentru a transmite timp de pe internet …

Coridium Time Server

<? php

$ fus orar = htmlspecialchars ($ _ GET ["zona"]); if ($ fus orar == "")

$ fus orar = 'America / Los_Angeles';

$ tz_object = new DateTimeZone ($ fus orar);

$ datetime = new DateTime ();

$ datetime-> setTimezone ($ tz_object);

ecou "ora este-", $ datetime-> format ('H: i: s');

ecou "";

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

?>

Această pagină web este astfel încât să puteți solicita

coridium.us/time.php - și veți obține fusul orar din Pacificul SUA

sau

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

Nicio verificare a erorilor și cel mai probabil nu va fi niciodată

Și Lua să citească asta -

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

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

sk: activat („primi”, funcție (sck, c) print (c) final)

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

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

Și vă întoarceți timpul ca

ora este-09: 38: 49 data este-2018-31-12

Pasul 5: Adăugați un cod BASIC pentru a analiza timpul de pe web

Adăugați un cod BASIC pentru a analiza timpul de pe web
Adăugați un cod BASIC pentru a analiza timpul de pe web

Acesta este un subset al întregului program BASIC, acel program complet poate fi vizualizat la linkul din pasul final.

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

hr = build_gets (8) - "0"

dacă build_gets (9) = ":" atunci

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

min + = build_gets (11) - "0"

altceva

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

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

min + = build_gets (12) - "0"

endif

endif

Pasul 6: Adăugați un senzor de lumină și un cod pentru a reduce afișajul

Adăugați un senzor de lumină și un cod pentru a reduce afișajul
Adăugați un senzor de lumină și un cod pentru a reduce afișajul
Adăugați un senzor de lumină și un cod pentru a reduce afișajul
Adăugați un senzor de lumină și un cod pentru a reduce afișajul
Adăugați un senzor de lumină și un cod pentru a reduce afișajul
Adăugați un senzor de lumină și un cod pentru a reduce afișajul

S-a adăugat un tranzistor foto pentru a detecta lumina ambientală din cameră. Fără el, ecranul este suficient de luminos pentru a trezi morții (eu) noaptea.

Tensiunea analogică a ieșirii tranzistorului foto este citită și modulația lățimii pulsului setează luminozitatea generală a afișajului.

Pasul 7: Butonează ceasul și începe să îl folosești

Butonează ceasul și începe să îl folosești
Butonează ceasul și începe să îl folosești

Versiunea finală afișează ora și în jurul orei 3 dimineața iese pe web pentru a citi ora curentă. Aceasta se ocupă și de timpul de economisire a luminii de zi.

Motivația acestui proiect a fost căderile de curent pe care le experimentăm aici la munte și necesitatea de a reseta ceasurile sau de a înlocui bateriile pentru a le menține în viață.

Aceasta a fost o prezentare rapidă a proiectului.

Detalii complete despre acest ceas DIY conectat la web.

Recomandat: