Inhoudsopgave:

Web-verbonden digitale klok: 7 stappen
Web-verbonden digitale klok: 7 stappen

Video: Web-verbonden digitale klok: 7 stappen

Video: Web-verbonden digitale klok: 7 stappen
Video: Instellen zomertijd op de digitale tachograaf 2024, Juli-
Anonim
Web-verbonden digitale klok
Web-verbonden digitale klok

Ik heb een digitale klok van $ 10 gevonden bij Amazon. Nu om het aan te passen om de tijd van internet te halen.

Benodigdheden

ARM Stamp programmeerbaar in BASIC hier beschikbaar

Stap 1: Digit Drive en Segment Drive aansluiten voor multiplexweergave

Verbind Digit Drive en Segment Drive voor multiplexweergave
Verbind Digit Drive en Segment Drive voor multiplexweergave

Ik begon met een goedkope standaard digitale klok met een groot aantal. Eerst heb ik de bestaande klokchip verwijderd. Daarna wat rondgespeurd en de 7 segment aansluitingen gelokaliseerd, die direct aangestuurd kunnen worden door de microprocessor. Toen vond ik de 4-cijferige stuurprogramma's die transistors waren die de microprocessor kan aansturen. En heb die dan aangesloten.

Stap 2: Test de verbindingen

Test de verbindingen
Test de verbindingen

Als experiment heb ik een BASIC-programma geschreven om alle lijnen aan te sturen, de bedrading te controleren en de stroom te meten, in dit geval 82 mA

Het volgende was om de code te schrijven om de regels te scannen.

' web klok display drive

IO(7)=0 ' PMOS-schijf -- zal ooit PWM zijn

voor y=45 tot 48

IO(y)=0 'cijferige schijf

voor x=8 tot 15

IO(x)=0 ' segmentaandrijving

wacht(500)

IO(x)=1

volgende x

DIR(y)=0 ' schijf uitschakelen op segment

volgende jaar

Stap 3: Codeer om tijd weer te geven en PWM om de helderheid te regelen

Code om tijd weer te geven en PWM om helderheid te regelen
Code om tijd weer te geven en PWM om helderheid te regelen
Code om tijd weer te geven en PWM om helderheid te regelen
Code om tijd weer te geven en PWM om helderheid te regelen

Vervolgens heb ik een PMOS-transistor in de voeding toegevoegd aan alle cijferstuurprogramma's. Met dat aangedreven door pulsbreedtemodulatie zal de helderheid van het scherm worden geregeld. Hier is de BASIC-code om de tijd weer te geven.

' web klok display drive #include "LPC11U3x.bas"

'globalen'

hr = 0 ' definieer uur

min = 0 ' definieer minuut

#define SEG_0 &HBB00

#definieer SEG_1 &H1800

#definieer SEG_2 &HD300

#definieer SEG_3 &HD900

#definieer SEG_4 &H7800

#definieer SEG_5 &HE900

#definieer SEG_6 &HEB00

#definieer 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

als hr > 12 dan hr -= 12

als hr = 0 dan hr = 12

#stop als

uur10 = uur / 10

uur1 = uur MOD 10

min10 = min / 10

min1 = min MOD 10

voor i=0 tot 1

als hr10 dan

IO(45) = 0

stop als

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

GPIO_CLR(0) = DI-array(hr10)

wacht (DIG_WAIT)

INGANG(45)

IO(46) = 0

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIArray(hr1) + IF(i, &H400, 0)

GPIO_CLR(0) = DI-array(hr1) + IF(i, &H400, 0)

wacht (DIG_WAIT)

INGANG(46)

IO(47) = 0

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DI-array (min10)

GPIO_CLR(0) = DI-array(min10)

wacht (DIG_WAIT)

INGANG(47)

IO(48) = 0

GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DI-array (min1)

GPIO_CLR(0) = DI-array(min1)

wacht (DIG_WAIT)

INGANG(48)

volgende ik

eindsub

' gebruiker TIMER1 (32 bit) om elke minuut te onderbreken

SUB-TIMER ONDERBREKEN1IRQ

T1_IR = 1 ' Wis onderbreking

min += 1

als min > 59 dan

min = 0

uur += 1

als u > 23 dan

u = 0

stop als

stop als

ENDSUB

SUB ON_TIMER (max_cnt, doe dit)

TIMER1_ISR = dothis + 1 'set-functie van VIC - heb de +1 nodig voor duimbediening

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

T1_PR = 0 'geen voorschaal - zal de waarde aanpassen voor een nauwkeurigere tijd

VICIntEnable OR= (1<<TIMER1_IRQn) 'Onderbreking inschakelen'

T1_MR0 = max_cnt-1 ' matchnummer van ms instellen

T1_MCR = 3 ' Onderbreken en resetten aan

MR0 T1_IR = 1' onderbreking wissen

T1_TC = 0 ' timerteller wissen

T1_TCR = 1 ' TIMER1 inschakelen

ENDSUB

#define MINUT_PCLK 2880000000 ' 60 seconden bij 48 MHz

hoofd:

u = 9

min = 33

ON_TIMER(MINUT_PCLK, ADRES VAN TIMER1IRQ)

IO(7) = 0 ' PWM op een dag -- moet verhuizen naar P0_22 ??

terwijl 1

display_time(0, u, min)

lus

Stap 4: Maak een internetverbinding

Maak een internetverbinding
Maak een internetverbinding

Gebruik een ESP8266 voor een wifi-verbinding. Na een tijdje rondneuzen op het web was de beste oplossing nodemcu versie 0.9.6 en een oudere esp8266_flasher werkte het beste.

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

Dan een eenvoudige PHP-webpagina om de tijd van internet te dienen--

Coridium Tijdserver

<?php

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

$timezone = 'Amerika/Los_Angeles';

$tz_object = nieuwe DateTimeZone($timezone);

$datetime = nieuwe DateTime();

$datetime->setTimezone($tz_object);

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

echo "";

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

?>

Die webpagina is zodat u kunt aanvragen

coridium.us/time.php -- en je krijgt de tijdzone van de VS Pacific

of

coridium.us/time.php?zone=Europa/Londen

Geen foutcontrole en zal dat hoogstwaarschijnlijk ook nooit zijn

En de Lua om dat te lezen --

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

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

sk:on("ontvangen", functie(sck, c) print(c) einde)

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

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

En je krijgt de tijd terug als

tijd is-09:38:49datum is 31-12-2018

Stap 5: BASIC-code toevoegen om de tijd van internet te ontleden

BASIC-code toevoegen om de tijd van internet te ontleden
BASIC-code toevoegen om de tijd van internet te ontleden

Dit is een subset van het volledige BASIC-programma, dat volledige programma kan worden bekeken via de link in de laatste stap.

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

hr = build_gets(8) - "0"

if build_gets(9) = ":" dan

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

min += build_gets(11) - "0"

anders

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

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

min += build_gets (12) - "0"

stop als

stop als

Stap 6: voeg een lichtsensor en code toe om het scherm te dimmen

Voeg een lichtsensor en code toe om het scherm te dimmen
Voeg een lichtsensor en code toe om het scherm te dimmen
Voeg een lichtsensor en code toe om het scherm te dimmen
Voeg een lichtsensor en code toe om het scherm te dimmen
Voeg een lichtsensor en code toe om het scherm te dimmen
Voeg een lichtsensor en code toe om het scherm te dimmen

Een fototransistor werd toegevoegd om het omgevingslicht in de kamer te voelen. Zonder dit is het scherm helder genoeg om de doden (ik) 's nachts wakker te maken.

De analoge spanning van de uitgang van de fototransistor wordt gelezen en de pulsbreedtemodulatie stelt de algehele helderheid van het display in.

Stap 7: Sluit de klok aan en begin deze te gebruiken

Knoop de klok omhoog en begin hem te gebruiken
Knoop de klok omhoog en begin hem te gebruiken

De definitieve versie geeft de tijd weer en rond 3 uur 's nachts gaat het naar het web om de huidige tijd te lezen. Dit houdt ook rekening met de zomertijd.

De motivatie voor dit project waren de stroomstoringen die we hier in de bergen ervaren en de noodzaak om klokken te resetten of batterijen te vervangen om ze in leven te houden.

Dit was een kort overzicht van het project.

Volledige details van deze doe-het-zelf klok met internet.

Aanbevolen: