Innehållsförteckning:

Webbansluten digital klocka: 7 steg
Webbansluten digital klocka: 7 steg

Video: Webbansluten digital klocka: 7 steg

Video: Webbansluten digital klocka: 7 steg
Video: Klockan 2024, November
Anonim
Webbansluten digital klocka
Webbansluten digital klocka

Hittade en digital klocka på $ 10 på Amazon. Nu för att anpassa det för att få tid från internet.

Tillbehör

ARM Stamp programmerbar i BASIC tillgänglig här

Steg 1: Anslut Digit Drive och Segment Drive för Multiplexed Display

Anslut Digit Drive och Segment Drive för Multiplexed Display
Anslut Digit Drive och Segment Drive för Multiplexed Display

Jag började med en billig digital klocka på hyllan. Först tog jag bort det befintliga klockchippet. Gjorde sedan en del undersökningar och hittade de 7 segmentanslutningarna, som kan drivas direkt av mikroprocessorn. Hittade sedan de fyrsiffriga drivrutinerna som var transistorer som mikroprocessorn kan driva. Och sedan kopplade de upp dem.

Steg 2: Testa anslutningarna

Testa anslutningarna
Testa anslutningarna

Som ett experiment skrev jag ett BASIC -program för att driva alla linjer, för att kontrollera ledningarna och mäta strömmen, som i detta fall var 82 mA

Nästa var att skriva koden för att skanna linjerna.

'webbklocka displayenhet

IO (7) = 0 'PMOS -enhet - kommer att vara PWM någon gång

för y = 45 till 48

IO (y) = 0 'siffra enhet

för x = 8 till 15

IO (x) = 0 'segment -enhet

vänta (500)

IO (x) = 1

nästa x

DIR (y) = 0 'inaktivera enhet på segment

nästa y

Steg 3: Kod för visningstid och PWM för att styra ljusstyrkan

Kod för visningstid och PWM för att styra ljusstyrkan
Kod för visningstid och PWM för att styra ljusstyrkan
Kod för visningstid och PWM för att styra ljusstyrkan
Kod för visningstid och PWM för att styra ljusstyrkan

Därefter lade jag till en PMOS -transistor i strömförsörjningen till alla sifferdrivrutiner. Med det som drivs av pulsbreddsmodulering styr displayens ljusstyrka. Här är BASIC -koden för att visa tiden.

'webbklocka display #inkludera "LPC11U3x.bas"

'globaler

hr = 0 'definiera timme

min = 0 'definiera minut

#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

om hr> 12 så hr -= 12

om hr = 0 då hr = 12

#endif

hr10 = hr / 10

hr1 = hr MOD 10

min10 = min / 10

min1 = min MOD 10

för i = 0 till 1

om hr10 då

IO (45) = 0

endif

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

GPIO_CLR (0) = DIGarray (hr10)

vänta (DIG_WAIT)

INGÅNG (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)

vänta (DIG_WAIT)

INGÅNG (46)

IO (47) = 0

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

GPIO_CLR (0) = DIGarray (min10)

vänta (DIG_WAIT)

INGÅNG (47)

IO (48) = 0

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

GPIO_CLR (0) = DIGarray (min1)

vänta (DIG_WAIT)

INGÅNG (48)

nästa i

ändsub

'användare TIMER1 (32 bit) för att avbryta varje minut

AVBRYT SUB TIMER1IRQ

T1_IR = 1 'Rensa avbrott

min += 1

om min> 59 då

min = 0

tim += 1

om tim> 23 då

tim = 0

endif

endif

ENDSUB

SUB ON_TIMER (max_cnt, detta)

TIMER1_ISR = gör denna + 1 'inställningsfunktion för VIC - behöver +1 för tummen

SYSCON_SYSAHBCLKCTRL ELLER = (1 << 10) 'aktivera TIMER1

T1_PR = 0 'ingen förskalning - justerar värdet för mer exakt tid

VICIntEnable OR = (1 << TIMER1_IRQn) 'Aktivera avbrott

T1_MR0 = max_cnt-1 'ställa in matchningsantal ms

T1_MCR = 3 'Avbrott och återställning på

MR0 T1_IR = 1 'klart avbrott

T1_TC = 0 'tydlig timerräknare

T1_TCR = 1 'TIMER1 Aktivera

ENDSUB

#define MINUT_PCLK 2880000000 '60 sekunder vid 48 MHz

huvud:

tim = 9

min = 33

ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)

IO (7) = 0 'PWM någon dag - måste flytta till P0_22 ??

medan 1

display_time (0, hr, min)

slinga

Steg 4: Skapa en internetanslutning

Gör en internetanslutning
Gör en internetanslutning

Använd en ESP8266 för en WiFi -anslutning. Efter att ha petat runt på nätet ett tag var den bästa lösningen nodemcu version 0.9.6 och en äldre esp8266_flasher fungerade bäst.

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

Sedan en enkel PHP-webbsida för att servera tid från internet--

Coridium Time Server

<? php

$ tidszon = htmlspecialchars ($ _ GET ["zon"]); if ($ tidszon == "")

$ timezone = 'America/Los_Angeles';

$ tz_object = ny DateTimeZone ($ tidszon);

$ datetime = new DateTime ();

$ datetime-> setTimezone ($ tz_object);

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

eko "";

eko "datum är-", $ datetime-> format ('m/d/Y');

?>

Den webbsidan är så att du kan begära

coridium.us/time.php - och du får väl tidszon i USA

eller

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

Inget felkontroll och kommer troligen aldrig att bli det

Och Lua att läsa det -

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

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

sk: on ("ta emot", funktion (sck, c) print (c) end)

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

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

Och du får tillbaka tiden som

tid är-09: 38: 49datum är-2018-31-12

Steg 5: Lägg till BASIC -kod för att analysera tiden från webben

Lägg till BASIC -kod för att analysera tiden från webben
Lägg till BASIC -kod för att analysera tiden från webben

Detta är en delmängd av hela BASIC -programmet, hela programmet kan ses på länken i det sista steget.

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

hr = build_gets (8) - "0"

if build_gets (9) = ":" då

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

min += build_gets (11) - "0"

annan

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

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

min += build_gets (12) - "0"

endif

endif

Steg 6: Lägg till en ljussensor och kod för att dimma skärmen

Lägg till en ljussensor och kod för att dimma displayen
Lägg till en ljussensor och kod för att dimma displayen
Lägg till en ljussensor och kod för att dimma displayen
Lägg till en ljussensor och kod för att dimma displayen
Lägg till en ljussensor och kod för att dimma displayen
Lägg till en ljussensor och kod för att dimma displayen

En fototransistor tillsattes för att känna av det omgivande ljuset i rummet. Utan det är displayen tillräckligt ljus för att väcka de döda (jag) på natten.

Den analoga spänningen för utgången på fototransistorn avläses och pulsbreddsmodulationen anger skärmens totala ljusstyrka.

Steg 7: Knappa upp klockan och börja använda den

Knappa upp klockan och börja använda den
Knappa upp klockan och börja använda den

Den slutliga versionen visar tiden, och runt 03:00 går den ut på webben för att läsa den aktuella tiden. Detta klarar också sommartid.

Motiveringen för detta projekt var de strömavbrott vi upplever här i bergen och behovet av att återställa klockor eller byta batterier för att hålla dem vid liv.

Detta har varit en snabb översikt över projektet.

Fullständig information om denna DIY webbkopplade klocka.

Rekommenderad: