Daftar Isi:
- Perlengkapan
- Langkah 1: Hubungkan Digit Drive dan Segment Drive untuk Multiplexed Display
- Langkah 2: Uji Koneksi
- Langkah 3: Kode untuk Menampilkan Waktu dan PWM untuk Mengontrol Kecerahan
- Langkah 4: Buat Koneksi Internet
- Langkah 5: Tambahkan Kode DASAR untuk Mengurai Waktu Dari Web
- Langkah 6: Tambahkan Sensor Cahaya dan Kode untuk Meredupkan Layar
- Langkah 7: Kancingkan Jam dan Mulai Menggunakannya
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Menemukan jam digital $10 di Amazon. Sekarang untuk menyesuaikannya untuk mendapatkan waktu dari internet.
Perlengkapan
ARM Stamp dapat diprogram dalam BASIC tersedia di sini
Langkah 1: Hubungkan Digit Drive dan Segment Drive untuk Multiplexed Display
Saya mulai dengan jam digital nomor besar yang murah. Pertama saya melepas chip jam yang ada. Kemudian melakukan probing sekitar dan menemukan koneksi 7 segmen, yang dapat digerakkan langsung oleh mikroprosesor. Kemudian ditemukan driver 4 digit yang merupakan transistor yang dapat digerakkan oleh mikroprosesor. Dan kemudian menyambungkannya.
Langkah 2: Uji Koneksi
Sebagai percobaan saya menulis program BASIC untuk menggerakkan semua jalur, untuk memeriksa kabel dan mengukur arus, yang dalam hal ini adalah 82 mA
Selanjutnya adalah menulis kode untuk memindai garis.
' drive tampilan jam web
IO(7)=0 ' PMOS drive -- akan menjadi PWM suatu hari nanti
untuk y=45 sampai 48
IO(y)=0 ' digit drive
untuk x=8 sampai 15
IO(x)=0 ' penggerak segmen
tunggu(500)
IO(x)=1
x berikutnya
DIR(y)=0 ' nonaktifkan drive pada segmen
selanjutnya kamu
Langkah 3: Kode untuk Menampilkan Waktu dan PWM untuk Mengontrol Kecerahan
Selanjutnya saya menambahkan transistor PMOS di catu daya ke semua driver digit. Dengan didorong oleh modulasi lebar pulsa akan mengontrol kecerahan tampilan. Berikut adalah kode BASIC untuk menampilkan waktu.
' drive tampilan jam web #include "LPC11U3x.bas"
' global
jam = 0 ' tentukan jam
min = 0 ' tentukan menit
#tentukan SEG_0 &HBB00
#define SEG_1 &H1800
#define SEG_2 &HD300
#tentukan SEG_3 &HD900
#tentukan SEG_4 &H7800
#tentukan SEG_5 &HE900
#define SEG_6 &HEB00
#tentukan SEG_7 &H9800
#tentukan SEG_8 &HFB00
#tentukan 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 }
#tentukan DIG_WAIT 1
#tentukan US_TIME
sub tampilan_waktu(err, jam, menit)
redup hr10, hr1, min10, min1, i
#ifdef US_TIME
jika jam > 12 maka jam -= 12
jika jam = 0 maka jam = 12
#berakhir jika
jam10 = jam / 10
jam1 = jam MOD 10
min10 = menit / 10
min1 = min MOD 10
untuk i=0 sampai 1
jika jam 10 maka
IO(45) = 0
berakhir jika
GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(jam10)
GPIO_CLR(0) = DIGarray(jam10)
tunggu(DIG_WAIT)
MASUKAN(45)
IO(46) = 0
GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(hr1) + IF(i, &H400, 0)
GPIO_CLR(0) = DIGarray(hr1) + JIKA(i, &H400, 0)
tunggu(DIG_WAIT)
MASUKAN(46)
IO(47) = 0
GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(min10)
GPIO_CLR(0) = DIGarray(min10)
tunggu(DIG_WAIT)
MASUKAN(47)
IO(48) = 0
GPIO_DIR(0) = (GPIO_DIR(0) &HFFFF00FF) + DIGarray(min1)
GPIO_CLR(0) = DIGarray(min1)
tunggu(DIG_WAIT)
MASUKAN(48)
selanjutnya saya
sub akhir
' pengguna TIMER1 (32 bit) untuk menginterupsi setiap menit
INTERRUPT SUB TIMER1IRQ
T1_IR = 1 'Hapus interupsi
min += 1
jika min > 59 maka
menit = 0
jam += 1
jika jam > 23 maka
jam = 0
berakhir jika
berakhir jika
SELESAI
SUB ON_TIMER (max_cnt, lakukan ini)
TIMER1_ISR = lakukan ini + 1 'set fungsi VIC -- perlu +1 untuk operasi Thumb
SYSCON_SYSAHBCLKCTRL OR= (1<<10) ' aktifkan TIMER1
T1_PR = 0 'tidak ada skala awal -- akan menyesuaikan nilai untuk waktu yang lebih akurat
VICintEnable OR= (1<<TIMER1_IRQn) 'Aktifkan interupsi
T1_MR0 = max_cnt-1 ' mengatur jumlah kecocokan ms
T1_MCR = 3' Interrupt dan Reset on
MR0 T1_IR = 1 'menghapus interupsi
T1_TC = 0 'menghapus penghitung waktu
T1_TCR = 1' TIMER1 Aktifkan
SELESAI
#define MINUT_PCLK 2880000000 ' 60 detik pada 48 MHz
utama:
jam = 9
menit = 33
ON_TIMER(MINUT_PCLK, ALAMAT TIMER1IRQ)
IO(7) = 0 ' PWM suatu hari nanti -- perlu pindah ke P0_22 ??
sementara 1
tampilan_waktu(0, jam, mnt)
lingkaran
Langkah 4: Buat Koneksi Internet
Gunakan ESP8266 untuk koneksi WiFi. Setelah mengaduk-aduk web untuk sementara waktu, solusi terbaik adalah nodemcu versi 0.9.6 dan esp8266_flasher yang lebih lama bekerja paling baik.
www.electrodragon.com/w/File:Nodemcu_20150704_firmware.zip
Kemudian halaman web PHP sederhana untuk melayani waktu dari internet--
Server Waktu Coridium
<?php
$zona waktu = htmlspecialchars($_GET["zona"]); if ($zona waktu == "")
$zona waktu = 'Amerika/Los_Angeles';
$tz_object = new DateTimeZone($zona waktu);
$datetime = new DateTime();
$datetime->setTimezone($tz_object);
echo "waktu adalah-", $datetime->format('H:i:s');
gema "";
echo "tanggal adalah-", $datetime->format('m/h/Y');
?>
Halaman web itu agar Anda dapat meminta
coridium.us/time.php -- dan Anda mendapatkan zona waktu Pasifik AS
atau
coridium.us/time.php?zone=Eropa/London
Tidak ada pengecekan kesalahan dan kemungkinan besar tidak akan pernah terjadi
Dan Lua membacanya --
wifi.sta.config("your_SSID", "your_PASSWORD")> wifi.sta.connect() …
sk=net.createConnection(net. TCP, 0)
sk:on("menerima", fungsi(sck, c) print(c) end)
sk:koneksi(80, "coridium.us")
sk:send("DAPATKAN /time.php HTTP/1.1\r\nHost: coridium.us\r\nKoneksi: keep-alive\r\nTerima: */*\r\n\r\n")
Dan Anda mendapatkan kembali waktu sebagai
waktu adalah-09:38:49tanggal 31-12/2018
Langkah 5: Tambahkan Kode DASAR untuk Mengurai Waktu Dari Web
Ini adalah bagian dari program BASIC lengkap, program lengkap itu dapat dilihat di tautan di langkah terakhir.
jika strstr(build_gets, "waktu adalah-") = 0 maka
jam = build_gets(8) - "0"
jika build_gets(9) = ":" maka
min = (build_gets(10) - "0")*10
min += build_gets(11) - "0"
lain
jam = jam * 10 + build_gets(9) - "0"
min = (build_gets(11) - "0")*10
min += build_gets(12) - "0"
berakhir jika
berakhir jika
Langkah 6: Tambahkan Sensor Cahaya dan Kode untuk Meredupkan Layar
Sebuah transistor foto ditambahkan untuk merasakan cahaya sekitar di dalam ruangan. Tanpa itu, layarnya cukup terang untuk membangunkan orang mati (saya) di malam hari.
Tegangan analog dari output transistor foto dibaca dan modulasi lebar pulsa mengatur kecerahan tampilan secara keseluruhan.
Langkah 7: Kancingkan Jam dan Mulai Menggunakannya
Versi terakhir menampilkan waktu, dan sekitar pukul 3 pagi ia keluar ke web untuk membaca waktu saat ini. Ini juga menangani waktu hemat cahaya siang hari.
Motivasi proyek ini adalah padamnya listrik yang kami alami di pegunungan ini dan kebutuhan untuk menyetel ulang jam atau mengganti baterai agar tetap hidup.
Ini adalah gambaran singkat dari proyek ini.
Detail lengkap dari jam terhubung web DIY ini.