Sommario:

Orologio digitale connesso al Web: 7 passaggi
Orologio digitale connesso al Web: 7 passaggi

Video: Orologio digitale connesso al Web: 7 passaggi

Video: Orologio digitale connesso al Web: 7 passaggi
Video: Come Collegare Smartwatch al Telefono? | Orologio Intelligente Impostare Ora Y68 D20 2024, Novembre
Anonim
Orologio digitale connesso al web
Orologio digitale connesso al web

Ho trovato un orologio digitale da $ 10 su Amazon. Ora per personalizzarlo per ottenere l'ora da Internet.

Forniture

Timbro ARM programmabile in BASIC disponibile qui

Passaggio 1: collegare Digit Drive e Segment Drive per display multiplex

Connetti Digit Drive e Segment Drive per display multiplex
Connetti Digit Drive e Segment Drive per display multiplex

Ho iniziato con un orologio digitale a buon mercato con un grande numero di scaffale. Per prima cosa ho rimosso il chip dell'orologio esistente. Quindi ha fatto un po' di sondaggi e ha individuato le connessioni a 7 segmenti, che possono essere guidate direttamente dal microprocessore. Quindi ho trovato i driver a 4 cifre che erano transistor che il microprocessore può pilotare. E poi li ho cablati.

Passaggio 2: testare le connessioni

Prova le connessioni
Prova le connessioni

Per esperimento ho scritto un programma BASIC per pilotare tutte le linee, per controllare il cablaggio e misurare la corrente, che in questo caso era 82 mA

Successivamente è stato necessario scrivere il codice per scansionare le righe.

' unità di visualizzazione dell'orologio web

IO(7)=0 'Unità PMOS: un giorno sarà PWM

per y=45 a 48

IO(y)=0 ' unità di cifre

per x=8 a 15

IO(x)=0 'unità di segmento

attendere(500)

IO(x)=1

prossimo x

DIR(y)=0 'disabilita drive sul segmento

il prossimo sì

Passaggio 3: codice per visualizzare l'ora e PWM per controllare la luminosità

Codice per visualizzare l'ora e PWM per controllare la luminosità
Codice per visualizzare l'ora e PWM per controllare la luminosità
Codice per visualizzare l'ora e PWM per controllare la luminosità
Codice per visualizzare l'ora e PWM per controllare la luminosità

Successivamente ho aggiunto un transistor PMOS nell'alimentatore a tutti i driver delle cifre. Con quello pilotato dalla modulazione di larghezza d'impulso si controllerà la luminosità del display. Ecco il codice BASIC per visualizzare l'ora.

' unità di visualizzazione dell'orologio web #include "LPC11U3x.bas"

"globali"

hr = 0 'definire l'ora

min = 0 ' definisce 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(err, hr, min)

dim hr10, hr1, min10, min1, i

#ifdef US_TIME

se h > 12 allora h -= 12

se h = 0 allora h = 12

#finisci se

h10 = h / 10

h1 = h MOD 10

min10 = minimo / 10

min1 = minimo MOD 10

per i=0 a 1

se hr10 allora

IO(45) = 0

finisci se

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

GPIO_CLR(0) = DIGarray(hr10)

aspetta (DIG_WAIT)

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

aspetta (DIG_WAIT)

INGRESSO(46)

IO(47) = 0

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

GPIO_CLR(0) = DIGarray(min10)

aspetta (DIG_WAIT)

INGRESSO(47)

IO(48) = 0

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

GPIO_CLR(0) = DIGarray(min1)

aspetta (DIG_WAIT)

INGRESSO(48)

prossimo io

endsub

' utente TIMER1 (32 bit) per interrompere ogni minuto

INTERRUZIONE SUB TIMER1IRQ

T1_IR = 1 ' Cancella interrupt

minimo += 1

se min > 59 allora

minimo = 0

ora += 1

se h > 23 allora

ora = 0

finisci se

finisci se

ENDSUB

SUB ON_TIMER (max_cnt, fai questo)

TIMER1_ISR = dothis + 1 'imposta la funzione di VIC - è necessario il +1 per il funzionamento del pollice

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

T1_PR = 0 'nessuna prescala -- regolerà il valore per un tempo più preciso

VICIntEnable OR= (1<<TIMER1_IRQn) 'Abilita interrupt

T1_MR0 = max_cnt-1 ' imposta il numero di corrispondenza di ms

T1_MCR = 3 ' Interrupt e Reset on

MR0 T1_IR = 1 ' azzera l'interruzione

T1_TC = 0 'azzera contatore timer

T1_TCR = 1 ' Abilita TIMER1

ENDSUB

#define MINUT_PCLK 2880000000 '60 secondi a 48 MHz

principale:

ora = 9

minimo = 33

ON_TIMER(MINUT_PCLK, INDIRIZZO DI TIMER1IRQ)

IO(7) = 0 ' PWM un giorno - devi passare a P0_22 ??

mentre 1

display_time(0, h, min)

ciclo continuo

Passaggio 4: effettuare una connessione Internet

Crea una connessione a Internet
Crea una connessione a Internet

Usa un ESP8266 per una connessione WiFi. Dopo aver rovistato per un po' sul web, la soluzione migliore era nodemcu versione 0.9.6 e un esp8266_flasher precedente funzionava meglio.

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

Quindi una semplice pagina Web PHP per servire il tempo da Internet--

Coridium Time Server

<?php

$timezone = htmlspecialchars($_GET["zone"]); if ($fuso orario == "")

$timezone = 'America/Los_Angeles';

$tz_object = new DateTimeZone($timezone);

$datetime = new DateTime();

$datetime->setTimezone($tz_object);

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

eco "";

echo "la data è-", $datetime->format('m/g/Y');

?>

Quella pagina web è così puoi richiedere

coridium.us/time.php - e ottieni bene il fuso orario degli Stati Uniti del Pacifico

o

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

Nessun controllo degli errori e molto probabilmente non lo sarà mai

E il Lua a leggerlo…

wifi.sta.config("tuo_SSID", "tua_PASSWORD")> wifi.sta.connect() …

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

sk:on("ricevi", function(sck, c) print(c) end)

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

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

E torni nel tempo come

l'ora è-09:38:49la data è il 31-12-2018

Passaggio 5: aggiungi il codice BASIC per analizzare il tempo dal Web

Aggiungi codice BASIC per analizzare il tempo dal Web
Aggiungi codice BASIC per analizzare il tempo dal Web

Questo è un sottoinsieme del programma BASIC completo, che il programma completo può essere visualizzato al link nel passaggio finale.

se strstr(build_gets, "time is-") = 0 then

hr = build_gets(8) - "0"

se build_gets(9) = ":" allora

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

min += build_gets(11) - "0"

altro

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

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

min += build_gets(12) - "0"

finisci se

finisci se

Passaggio 6: aggiungi un sensore di luce e un codice per oscurare il display

Aggiungi un sensore di luce e un codice per oscurare il display
Aggiungi un sensore di luce e un codice per oscurare il display
Aggiungi un sensore di luce e un codice per oscurare il display
Aggiungi un sensore di luce e un codice per oscurare il display
Aggiungi un sensore di luce e un codice per oscurare il display
Aggiungi un sensore di luce e un codice per oscurare il display

È stato aggiunto un fototransistor per rilevare la luce ambientale nella stanza. Senza di esso il display è abbastanza luminoso da svegliare i morti (me) di notte.

Viene letta la tensione analogica dell'uscita del fototransistor e la modulazione dell'ampiezza dell'impulso imposta la luminosità complessiva del display.

Passaggio 7: abbottona l'orologio e inizia a usarlo

Accendi l'orologio e inizia a usarlo
Accendi l'orologio e inizia a usarlo

La versione finale visualizza l'ora e verso le 3 del mattino esce sul web per leggere l'ora corrente. Questo gestisce anche l'ora legale.

La motivazione di questo progetto sono state le interruzioni di corrente che sperimentiamo qui in montagna e la necessità di azzerare gli orologi o sostituire le batterie per mantenerli in vita.

Questa è stata una rapida panoramica del progetto.

Tutti i dettagli di questo orologio connesso al web fai-da-te.

Consigliato: