Мазмұны:

Интернетке қосылған сандық сағат: 7 қадам
Интернетке қосылған сандық сағат: 7 қадам

Бейне: Интернетке қосылған сандық сағат: 7 қадам

Бейне: Интернетке қосылған сандық сағат: 7 қадам
Бейне: Басқа тышты деген осы 😡 2024, Қараша
Anonim
Интернетке қосылған сандық сағат
Интернетке қосылған сандық сағат

Amazon -да 10 доллар тұратын сандық сағат табылды. Енді интернеттен уақытты алу үшін оны реттеу.

Жабдықтар

BASIC тілінде бағдарламаланатын ARM Stamp мұнда қол жетімді

1 -қадам: Сандық дискіні және мультиплексті дисплейге арналған сегменттік дискіні қосыңыз

Сандық дискіні және сегменттік дискіні мультиплексті дисплейге қосыңыз
Сандық дискіні және сегменттік дискіні мультиплексті дисплейге қосыңыз

Мен сөреден арзан сандық үлкен сағаттан бастадым. Алдымен мен қолданыстағы сағат чипін алып тастадым. Содан кейін микропроцессор тікелей басқаруға болатын 7 сегментті қосылымды зерттеді. Содан кейін микропроцессор жүргізе алатын транзистор болатын 4 таңбалы драйверлер табылды. Содан кейін оларды байланыстырды.

2 -қадам: Қосылымдарды тексеріңіз

Қосылымдарды тексеріңіз
Қосылымдарды тексеріңіз

Эксперимент ретінде мен барлық желілерді жүргізуге, сымдарды тексеруге және бұл жағдайда 82 мА болатын токты өлшеуге арналған BASIC бағдарламасын жаздым.

Келесі жолдарды сканерлеу үшін кодты жазу болды.

веб -дисплей дискі

IO (7) = 0 'PMOS дискісі - бір күні PWM болады

y = 45 -тен 48 -ге дейін

IO (y) = 0 'сандық жетегі

x = 8 -ден 15 -ке дейін

IO (x) = 0 'сегменттік жетегі

күту (500)

IO (x) = 1

келесі x

DIR (y) = 0 'сегменттегі дискіні өшіреді

келесі ж

3 -қадам: Уақытты көрсету коды және жарықтықты басқару үшін PWM

Уақытты көрсету коды және жарықтықты басқару үшін PWM
Уақытты көрсету коды және жарықтықты басқару үшін PWM
Уақытты көрсету коды және жарықтықты басқару үшін PWM
Уақытты көрсету коды және жарықтықты басқару үшін PWM

Содан кейін мен барлық разрядты драйверлерге қуат көзіне PMOS транзисторын қостым. Оның көмегімен импульстік ен модуляциясы дисплей жарықтығын басқарады. Міне, уақытты көрсету үшін BASIC коды.

веб -дисплей дискі #«LPC11U3x.bas» қосады

'жаһандық

hr = 0 'анықтайтын сағат

min = 0 'минутты анықтаңыз

#SEG_0 & HBB00 анықтаңыз

#SEG_1 & H1800 анықтаңыз

#SEG_2 & HD300 анықтаңыз

#SEG_3 & HD900 анықтаңыз

#SEG_4 & H7800 анықтаңыз

#SEG_5 & HE900 анықтаңыз

#SEG_6 және HEB00 анықтаңыз

#SEG_7 & H9800 анықтаңыз

#SEG_8 және HFB00 анықтаңыз

#SEG_9 және HF800 анықтаңыз

#SEG_o & H4B00 анықтаңыз

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

#DIG_WAIT анықтаңыз

#US_TIME анықтаңыз

sub display_time (қате, сағ, мин)

күңгірт сағ10, сағ1, мин10, мин1, мен

#ifdef US_TIME

егер сағ> 12 болса, сағ -= 12

егер сағ = 0 болса, онда сағ = 12 болады

#endif

сағ10 = сағ / 10

сағ1 = сағ MOD 10

мин10 = мин / 10

min1 = min MOD 10

i = 0 -ден 1 -ге дейін

егер сағат 10 болса

IO (45) = 0

эндиф

GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (сағ10)

GPIO_CLR (0) = DIGarray (сағ10)

күту (DIG_WAIT)

Кіріс (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)

күту (DIG_WAIT)

Кіріс (46)

IO (47) = 0

GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (мин10)

GPIO_CLR (0) = DIGarray (мин10)

күту (DIG_WAIT)

Кіріс (47)

IO (48) = 0

GPIO_DIR (0) = (GPIO_DIR (0) & HFFFF00FF) + DIGarray (мин1)

GPIO_CLR (0) = DIGarray (мин1)

күту (DIG_WAIT)

Кіріс (48)

келесі i

ұшы

пайдаланушы TIMER1 (32 бит) әр минутты үзу үшін

INTERRUPT SUB TIMER1IRQ

T1_IR = 1 'Үзілісті өшіру

мин += 1

егер мин> 59 болса

мин = 0

сағ += 1

егер сағ> 23 болса

сағ = 0

эндиф

эндиф

ENDSUB

ON_TIMER SUB (max_cnt, dothis)

TIMER1_ISR = dothis + 1 'VIC функциясы - саусақпен жұмыс істеу үшін +1 қажет

SYSCON_SYSAHBCLKCTRL OR = (1 << 10) 'TIMER1 қосу

T1_PR = 0 'алдын ала шкаласы жоқ - мәнді дәлірек уақытқа реттейді

VICIntEnable OR = (1 << TIMER1_IRQn) 'Үзілісті қосу

T1_MR0 = max_cnt-1 'мс сәйкестік санын орнатады

T1_MCR = 3 'Үзіліс және қалпына келтіру

MR0 T1_IR = 1 'таза үзіліс

T1_TC = 0 'анық таймер есептегіші

T1_TCR = 1 'TIMER1 қосу

ENDSUB

#анықтау MINUT_PCLK 2880000000 '48 МГц жиілігінде 60 секунд

негізгі:

сағ = 9

мин = 33

ON_TIMER (MINUT_PCLK, ADDRESSOF TIMER1IRQ)

IO (7) = 0 'PWM бір күні - P0_22 -ге көшу керек пе?

ал 1

көрсету_ уақыты (0, сағ, мин)

цикл

4 -қадам: Интернетке қосылу

Интернетке қосылуды жасаңыз
Интернетке қосылуды жасаңыз

WiFi байланысы үшін ESP8266 пайдаланыңыз. Біраз уақыт интернетті аралап көргеннен кейін 0.9.6 nodemcu нұсқасы ең жақсы шешім болды, ал ескі esp8266_flasher ең жақсы жұмыс істеді.

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

Содан кейін интернеттен уақытты қамтамасыз ететін қарапайым PHP веб-беті-

Coridium уақыт сервері

<? php

$ timezone = htmlspecialchars ($ _ GET [«аймақ»]); егер ($ уақыт белдеуі == «»)

$ timezone = 'Америка/Los_Angeles';

$ tz_object = жаңа DateTimeZone ($ уақыт белдеуі);

$ datetime = жаңа DateTime ();

$ datetime-> setTimezone ($ tz_object);

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

жаңғырық «»;

echo «date is-», $ datetime-> форматы ('m/d/Y');

?>

Бұл веб -бет сіз сұрай аласыз

coridium.us/time.php - және сіз АҚШ -тың Тынық мұхиты уақыт белдеуін жақсы аласыз

немесе

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

Ешқандай қате тексерілмейді және ешқашан болмайды

Ал оны оқу үшін Луа -

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

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

sk: on («қабылдау», функция (sck, c) басып шығару (с) соңы)

sk: қосылу (80, «coridium.us»)

sk: send («GET /time.php HTTP/1.1 / r / nХост: coridium.us / r / nБайланыс: тірі қалу / r / nҚабылдау: */ *\ r / n / r / n»)

Ал сіз уақытты солай қайтарасыз

уақыты-09: 38: 49, күні-12.12.18

5 -қадам: Интернеттен уақытты талдау үшін BASIC кодын қосыңыз

Интернеттен уақытты талдау үшін BASIC кодын қосыңыз
Интернеттен уақытты талдау үшін BASIC кодын қосыңыз

Бұл толық BASIC бағдарламасының жиынтығы, оны толық бағдарламаны соңғы қадамдағы сілтеме бойынша қарауға болады.

егер strstr (build_gets, «time is») = 0 болса

сағ = build_gets (8) - «0»

егер build_gets (9) = «:» болса, онда

мин = (build_gets (10) - «0»)*10

мин += build_gets (11) - «0»

басқа

сағ = сағ * 10 + build_gets (9) - «0»

мин = (build_gets (11) - «0»)*10

мин += build_gets (12) - «0»

эндиф

эндиф

6 -қадам: Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз

Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз
Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз
Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз
Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз
Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз
Дисплейді күңгірттеу үшін жарық сенсоры мен кодын қосыңыз

Бөлмедегі жарықты сезіну үшін фото транзистор қосылды. Онсыз дисплей өлгендерді (мені) түнде оятатындай жарқын.

Фото транзистордың шығысындағы аналогтық кернеу оқылады және импульстің ені модуляциясы дисплейдің жалпы жарықтығын орнатады.

7 -қадам: Сағат түймесін басып, оны пайдалануды бастаңыз

Сағат түймесін басып, оны пайдалануды бастаңыз
Сағат түймесін басып, оны пайдалануды бастаңыз

Соңғы нұсқада уақыт көрсетіледі, ал таңғы 3 -те ол ағымдағы уақытты оқу үшін желіге шығады. Бұл сонымен қатар күндізгі уақытты үнемдеуге мүмкіндік береді.

Бұл жобаның мотивациясы - тауларда электр қуатын өшіру және тірі қалу үшін сағаттарды қалпына келтіру немесе батареяларды ауыстыру қажеттілігі.

Бұл жобаның қысқаша шолуы болды.

Бұл DIY желіге қосылған сағат туралы толық ақпарат.

Ұсынылған: