DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ืฉืœื•ื ื”ื‘ืจ.

ื›ื ืจืื” ืฉืจื‘ื™ื ืฉืจื•ื›ืฉื™ื ืฉืขื•ืŸ ืื• ืชื—ื ืช ืžื–ื’ ืื•ื•ื™ืจ ืจืื• ืืช ื”ืœื•ื’ื• ืฉืœ ืฉืขื•ืŸ ืžื‘ื•ืงืจ ืจื“ื™ื• ืื• ืืคื™ืœื• ืฉืขื•ืŸ ืื˜ื•ืžื™ ืขืœ ื”ืืจื™ื–ื”. ื–ื” ืžืื•ื“ ื ื•ื—, ื›ื™ ืืชื” ืจืง ืฆืจื™ืš ืœืฉื™ื ืืช ื”ืฉืขื•ืŸ ืขืœ ื”ืฉื•ืœื—ืŸ, ื•ืœืื—ืจ ื–ืžืŸ ืžื” ื”ื•ื ื™ืชืื™ื ืื•ื˜ื•ืžื˜ื™ืช ืœืฉืขื” ื”ืžื“ื•ื™ืงืช.
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื‘ื•ืื• ืœื”ื‘ื™ืŸ ืื™ืš ื–ื” ืขื•ื‘ื“ ื•ื ื›ืชื•ื‘ ืžืคืขื ื— ื‘ืคื™ื™ืชื•ืŸ.

ื™ืฉื ืŸ ืžืขืจื›ื•ืช ืฉื•ื ื•ืช ืœืกื ื›ืจื•ืŸ ื–ืžืŸ. ื”ืคื•ืคื•ืœืจื™ืช ื‘ื™ื•ืชืจ ื‘ืื™ืจื•ืคื” ื”ื™ื ื”ืฉื™ื˜ื” ื”ื’ืจืžื ื™ืช DCF-77, ืœื™ืคืŸ ื™ืฉ ืžืขืจื›ืช ืžืฉืœื” ื’'ื™ื™ ื’'ื™ื™, ื‘ืืจื”"ื‘ ื™ืฉ ืžืขืจื›ืช WWVB, ื•ื›ื•ืœื™. ืœืื—ืจ ืžื›ืŸ, ื”ืกื™ืคื•ืจ ื™ืขืกื•ืง ื‘-DCF77, ื‘ืชื•ืจ ื”ืจืœื•ื•ื ื˜ื™ ื•ื”ื ื’ื™ืฉ ื‘ื™ื•ืชืจ ืœืงื‘ืœื” ื‘ืžืงื•ืžื•ืช ืžืกื•ื™ืžื™ื ื‘ื—ืœืง ื”ืื™ืจื•ืคื™ ืฉืœ ืจื•ืกื™ื” ื•ื‘ืžื“ื™ื ื•ืช ื”ืฉื›ื ื•ืช (ื™ื™ืชื›ืŸ ืฉืœืชื•ืฉื‘ื™ ื”ืžื–ืจื— ื”ืจื—ื•ืง ื™ืฉ ื“ืขื” ื”ืคื•ื›ื”, ืื•ืœื ื”ื, ื‘ืชื•ืจื, ื™ื›ื•ืœื™ื ืœืงื‘ืœ ื•ืœื ืชื— ืืช ื”ืื•ืช ื”ื™ืคื ื™ ;).

ื›ืœ ืžื” ืฉื ื›ืชื‘ ืœืžื˜ื” ื™ื”ื™ื” ืขืœ DCF77.

ืงืœื™ื˜ืช ืื•ืช

DCF77 ื”ื™ื ืชื—ื ืช ื’ืœื™ื ืืจื•ื›ื™ื ื”ืคื•ืขืœืช ื‘ืชื“ืจ ืฉืœ 77.5 ืงื™ืœื•-ื”ืจืฅ ื•ืžืฉื“ืจืช ืื•ืชื•ืช ื‘ืืคื ื•ืŸ ืžืฉืจืขืช. ืชื—ื ืช ื”-50KW ืžืžื•ืงืžืช 25 ืง"ืž ืžืคืจื ืงืคื•ืจื˜, ื”ื™ื ื”ื—ืœื” ืœืคืขื•ืœ ื‘ืฉื ืช 1959, ื•ื‘ืฉื ืช 1973 ื ื•ืกืคื” ืžื™ื“ืข ืชืืจื™ืš ืœืฉืขื” ื”ืžื“ื•ื™ืงืช. ืื•ืจืš ื”ื’ืœ ื‘ืชื“ืจ ืฉืœ 77 KHz ื”ื•ื ืืจื•ืš ืžืื•ื“, ื›ืš ืฉื’ื ืžื™ืžื“ื™ ืฉื“ื” ื”ืื ื˜ื ื” ื”ื ื“ื™ ื”ื’ื•ื ื™ื (ืฆื™ืœื•ื ืžื•ื™ืงื™ืคื“ื™ื”):
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ืขื ืื ื˜ื ื” ื›ื–ื• ื•ื›ื ื™ืกืช ื—ืฉืžืœ, ืื–ื•ืจ ื”ืงืœื™ื˜ื” ืžื›ืกื” ื›ืžืขื˜ ืืช ื›ืœ ืื™ืจื•ืคื”, ื‘ืœืืจื•ืก, ืื•ืงืจืื™ื ื” ื•ื—ืœืง ืžืจื•ืกื™ื”.

DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœื”ืงืœื™ื˜ ืื•ืช. ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืคืฉื•ื˜ ืขื‘ื•ืจ ืืœ ื”ืžืงืœื˜ ื”ืžืงื•ื•ืŸ http://websdr.ewi.utwente.nl:8901/, ื‘ื—ืจ ืืช ื”ืชื“ืจ 76.5KHz ื•ืืช ืืคื ื•ืŸ USB ืฉื. ืืžื•ืจื” ืœื”ื™ืคืชื— ืชืžื•ื ื” ืฉื ืจืื™ืช ื‘ืขืจืš ื›ืš:

DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ืฉื ืื ื• ืœื•ื—ืฆื™ื ืขืœ ื›ืคืชื•ืจ ื”ื”ื•ืจื“ื” ื•ืžืงืœื™ื˜ื™ื ืงื˜ืข ื‘ืื•ืจืš ืžืกืคืจ ื“ืงื•ืช. ื›ืžื•ื‘ืŸ, ืื ื™ืฉ ืœืš ืจืกื™ื‘ืจ "ืืžื™ืชื™" ื”ืžืกื•ื’ืœ ืœื”ืงืœื™ื˜ ืืช ืชื“ืจ 77.5KHz, ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื–ื”.

ื›ืžื•ื‘ืŸ ืฉื‘ืงื‘ืœืช ืื•ืชื•ืช ื–ืžืŸ ืจื“ื™ื• ื“ืจืš ื”ืื™ื ื˜ืจื ื˜ ืœื ื ืงื‘ืœ ื–ืžืŸ ืžื“ื•ื™ืง ื‘ืืžืช โ€“ ื”ืื•ืช ืžื•ืขื‘ืจ ื‘ืื™ื—ื•ืจ. ืื‘ืœ ื”ืžื˜ืจื” ืฉืœื ื• ื”ื™ื ืจืง ืœื”ื‘ื™ืŸ ืืช ืžื‘ื ื” ื”ืื•ืช; ื‘ืฉื‘ื™ืœ ื–ื”, ื”ื”ืงืœื˜ื” ื‘ืื™ื ื˜ืจื ื˜ ื”ื™ื ื“ื™ ื•ื”ื•ืชืจ. ื‘ื—ื™ื™ื ื”ืืžื™ืชื™ื™ื, ื›ืžื•ื‘ืŸ, ืžื›ืฉื™ืจื™ื ืžื™ื•ื—ื“ื™ื ืžืฉืžืฉื™ื ืœืงื‘ืœื” ื•ืœืคืขื ื•ื—; ื”ื ื™ื™ื“ื•ื ื• ืœื”ืœืŸ.

ืื–, ืงื™ื‘ืœื ื• ืืช ื”ื”ืงืœื˜ื”, ื‘ื•ืื• ื ืชื—ื™ืœ ืœืขื‘ื“ ืื•ืชื”.

ืคืขื ื•ื— ืื•ืชื•ืช

ื‘ื•ื ื ื˜ืขืŸ ืืช ื”ืงื•ื‘ืฅ ื‘ืืžืฆืขื•ืช Python ื•ื ืจืื” ืืช ื”ืžื‘ื ื” ืฉืœื•:

from scipy.io import wavfile
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np

sample_rate, data = wavfile.read("dcf_websdr_2019-03-26T20_25_34Z_76.6kHz.wav")
plt.plot(data[:100000])
plt.show()

ืื ื• ืจื•ืื™ื ืืคื ื•ืŸ ืžืฉืจืขืช ื˜ื™ืคื•ืกื™:
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื›ื“ื™ ืœืคืฉื˜ ืืช ื”ืคืขื ื•ื—, ื”ื‘ื” ื ื™ืงื— ืืช ืžืขื˜ืคืช ื”ืื•ืช ื‘ืืžืฆืขื•ืช ื˜ืจื ืกืคื•ืจืžืฆื™ื” ืฉืœ ื”ื™ืœื‘ืจื˜:

analytic_signal = signal.hilbert(data)
A = np.abs(analytic_signal)
plt.plot(A[:100000])

ืชื•ืฆืื” ืžื•ื’ื“ืœืช:
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื‘ื•ืื• ืœื”ื—ืœื™ืง ืืช ืคืœื™ื˜ืช ื”ืจืขืฉ ื‘ืืžืฆืขื•ืช ืคื™ืœื˜ืจ ืžืขื‘ื™ืจ ื ืžื•ืš, ื•ื‘ืžืงื‘ื™ืœ ืœื—ืฉื‘ ืืช ื”ืขืจืš ื”ืžืžื•ืฆืข, ืฉื™ื”ื™ื” ืฉื™ืžื•ืฉื™ ืžืื•ื—ืจ ื™ื•ืชืจ ืœื ื™ืชื•ื—.

b, a = signal.butter(2, 20.0/sample_rate)
zi = signal.lfilter_zi(b, a)
A, _ = signal.lfilter(b, a, A, zi=zi*A[0])
avg = (np.amax(A) + np.amin(A))/2

ืชื•ืฆืื” (ืงื• ืฆื”ื•ื‘): ืื•ืช ื’ืœ ื›ืžืขื˜ ืžืจื•ื‘ืข ืฉืงืœ ืœืžื“ื™ ืœื ืชื— ืื•ืชื•.
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื ื™ืชื•ื—

ืจืืฉื™ืช ืขืœื™ืš ืœืงื‘ืœ ืืช ืจืฆืฃ ื”ืกื™ื‘ื™ื•ืช. ืžื‘ื ื” ื”ืื•ืช ืขืฆืžื• ืคืฉื•ื˜ ืžืื•ื“.
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื”ืคื•ืœืกื™ื ืžื—ื•ืœืงื™ื ืœืžืจื•ื•ื—ื™ื ืฉื ื™ื™ื. ืื ื”ืžืจื—ืง ื‘ื™ืŸ ื”ืคื•ืœืกื™ื ื”ื•ื 0.1 ืฉื ื™ื•ืช (ื›ืœื•ืžืจ ืื•ืจืš ื”ื“ื•ืคืง ืขืฆืžื• ื”ื•ื 0.9 ืฉื ื™ื•ืช), ื”ื•ืกืฃ "0" ืœืจืฆืฃ ื”ืกื™ื‘ื™ื•ืช; ืื ื”ืžืจื—ืง ื”ื•ื 0.2 ืฉื ื™ื•ืช (ื›ืœื•ืžืจ ื”ืื•ืจืš ื”ื•ื 0.8 ืฉื ื™ื•ืช), ื”ื•ืกืฃ "1". ืกื•ืฃ ื›ืœ ื“ืงื” ืžืฆื•ื™ืŸ ื‘ืคื•ืœืก "ืืจื•ืš", ื‘ืื•ืจืš ืฉืœ 2 ืฉื ื™ื•ืช, ืจืฆืฃ ื”ืกื™ื‘ื™ื•ืช ืžืื•ืคืก ืœืืคืก, ื•ื”ืžื™ืœื•ื™ ืžืชื—ื™ืœ ืฉื•ื‘.

ืงืœ ืœื›ืชื•ื‘ ืืช ื”ืืžื•ืจ ืœืขื™ืœ ื‘ืคื™ื™ืชื•ืŸ.

sig_start, sig_stop = 0, 0
pos = 0
bits_str = ""
while pos < cnt - 4:
    if A[pos] < avg and A[pos+1] > avg:
        # Signal begin
        sig_start = pos
    if A[pos] > avg and A[pos+1] < avg:
        # Signal end
        sig_stop = pos

        diff = sig_stop - sig_start
    
        if diff < 0.85*sample_rate:
            bits_str += "1"
        if diff > 0.85*sample_rate and diff < 1.25*sample_rate:
            bits_str += "0"
        if diff > 1.5*sample_rate:
            print(bits_str)
            bits_str = ""

    pos += 1

ื›ืชื•ืฆืื” ืžื›ืš, ืื ื• ืžืงื‘ืœื™ื ืจืฆืฃ ืฉืœ ื‘ื™ื˜ื™ื, ื‘ื“ื•ื’ืžื” ืฉืœื ื• ืœืžืฉืš ืฉืชื™ ืฉื ื™ื•ืช ื–ื” ื ืจืื” ื›ืš:

0011110110111000001011000001010000100110010101100010011000
0001111100110110001010100001010000100110010101100010011000

ืื’ื‘, ืžืขื ื™ื™ืŸ ืฉืœืื•ืช ื™ืฉ ื’ื "ืฉื›ื‘ื” ืฉื ื™ื™ื”" ืฉืœ ื ืชื•ื ื™ื. ืจืฆืฃ ื”ืกื™ื‘ื™ื•ืช ืžืงื•ื“ื“ ื’ื ื‘ืืžืฆืขื•ืช ืืคื ื•ืŸ ืคืื–ื”. ื‘ืชื™ืื•ืจื™ื”, ื–ื” ืืžื•ืจ ืœืกืคืง ืคืขื ื•ื— ื—ื–ืง ื™ื•ืชืจ ื’ื ื‘ืžืงืจื” ืฉืœ ืื•ืช ืžื•ื—ืœืฉ.

ื”ืฆืขื“ ื”ืื—ืจื•ืŸ ืฉืœื ื•: ืงื‘ืœืช ื”ื ืชื•ื ื™ื ื‘ืคื•ืขืœ. ืกื™ื‘ื™ื•ืช ืžื•ืขื‘ืจื•ืช ืคืขื ื‘ืฉื ื™ื™ื”, ื›ืš ืฉื™ืฉ ืœื ื• ื‘ืกืš ื”ื›ืœ 59 ืกื™ื‘ื™ื•ืช, ืฉื‘ื”ืŸ ืžืงื•ื“ื“ ื“ื™ ื”ืจื‘ื” ืžื™ื“ืข:
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื”ืกื™ื‘ื™ื•ืช ืžืชื•ืืจื•ืช ื‘ ื•ื™ืงื™ืคื“ื™ื”, ื•ื”ื ื“ื™ ืกืงืจื ื™ื. 15 ื”ื‘ื™ื˜ื™ื ื”ืจืืฉื•ื ื™ื ืื™ื ื ื‘ืฉื™ืžื•ืฉ, ืื ื›ื™ ื”ื™ื• ืชื•ื›ื ื™ื•ืช ืœื”ืฉืชืžืฉ ื‘ื”ื ืขื‘ื•ืจ ืžืขืจื›ื•ืช ื”ืชืจืขื” ื•ื”ื’ื ื” ืื–ืจื—ื™ืช. ืกื™ื‘ื™ื•ืช A1 ืžืฆื™ื™ื ืช ืฉื”ืฉืขื•ืŸ ื™ืฉืชื ื” ืœืฉืขื•ืŸ ืงื™ืฅ ื‘ืฉืขื” ื”ื‘ืื”. ืกื™ื‘ื™ื•ืช A2 ืžืฆื™ื™ื ืช ื›ื™ ื ื•ืกืฃ ืœื–ื ืง ืฉื ื™ื™ื”, ื”ืžืฉืžืฉ ืœืขืชื™ื ืœื”ืชืืžืช ื–ืžืŸ ืœืคื™ ืกื™ื‘ื•ื‘ ื›ื“ื•ืจ ื”ืืจืฅ. ื”ืกื™ื‘ื™ื•ืช ื”ื ื•ืชืจื•ืช ืžืงื•ื“ื“ื•ืช ืฉืขื•ืช, ื“ืงื•ืช, ืฉื ื™ื•ืช ื•ืชืืจื™ืš.

DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ืœืžื™ ืฉืจื•ืฆื” ืœื”ืชื ืกื•ืช ื‘ืขืฆืžื•, ืงื•ื“ ื”ืคืขื ื•ื— ื ื™ืชืŸ ืชื—ืช ื”ืกืคื•ื™ืœืจ.
ืงื•ื“ ืžืงื•ืจ

def decode(bits):
    if bits[0] != '0' or bits[20] != '1':
        return
    
    minutes, hours, day_of_month, weekday, month, year = map(convert_block,
                                                             (bits[21:28], bits[29:35], bits[36:42], bits[42:45],
                                                              bits[45:50], bits[50:58]))
    days = ('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday')
    print('{dow}, {dom:02}.{mon:02}.{y}, {h:02}:{m:02}'.format(h=hours, m=minutes, dow=days[weekday],
                                                               dom=day_of_month, mon=month, y=year))


def convert_ones(bits):
    return sum(2**i for i, bit in enumerate(bits) if bit == '1')


def convert_tens(bits):
    return 10*convert_ones(bits)


def right_parity(bits, parity_bit):
    num_of_ones = sum(int(bit) for bit in bits)
    return num_of_ones % 2 == int(parity_bit)


def convert_block(bits, parity=False):
    if parity and not right_parity(bits[:-1], bits[-1]):
        return -1
    
    ones = bits[:4]
    tens = bits[4:]
    return convert_tens(tens) + convert_ones(ones)

ื›ืืฉืจ ื ืจื™ืฅ ืืช ื”ืชื•ื›ื ื™ืช, ื ืจืื” ืคืœื˜ ื“ื•ืžื” ืœื–ื”:

0011110110111000001011000001010000100110010101100010011000
Tuesday, 26.03.19, 21:41
0001111100110110001010100001010000100110010101100010011000
Tuesday, 26.03.19, 21:42

ืœืžืขืฉื”, ื–ื” ื›ืœ ื”ืงืกื. ื”ื™ืชืจื•ืŸ ืฉืœ ืžืขืจื›ืช ื›ื–ื• ื”ื•ื ืฉื”ืคืขื ื•ื— ื”ื•ื ืคืฉื•ื˜ ื‘ื™ื•ืชืจ ื•ื ื™ืชืŸ ืœืขืฉื•ืชื• ืขืœ ื›ืœ ืžื™ืงืจื•-ื‘ืงืจ, ืืคื™ืœื• ื”ืคืฉื•ื˜ ื‘ื™ื•ืชืจ. ืื ื—ื ื• ืคืฉื•ื˜ ืกื•ืคืจื™ื ืืช ืื•ืจืš ื”ืคื•ืœืกื™ื, ืฆื•ื‘ืจื™ื 60 ื‘ื™ื˜ื™ื, ื•ื‘ืกื•ืฃ ื›ืœ ื“ืงื” ื ืงื‘ืœ ืืช ื”ืฉืขื” ื”ืžื“ื•ื™ืงืช. ื‘ื”ืฉื•ื•ืื” ืœืฉื™ื˜ื•ืช ืื—ืจื•ืช ืฉืœ ืกื ื›ืจื•ืŸ ื–ืžืŸ (GPS, ืœืžืฉืœ, ืื• ื—ืœื™ืœื”, ื”ืื™ื ื˜ืจื ื˜ :)), ืกื ื›ืจื•ืŸ ืจื“ื™ื• ื›ื–ื” ืœื ื“ื•ืจืฉ ื›ืžืขื˜ ื—ืฉืžืœ - ืœืžืฉืœ, ืชื—ื ืช ืžื–ื’ ืื•ื•ื™ืจ ื‘ื™ืชื™ืช ืจื’ื™ืœื” ืคื•ืขืœืช ื›ืฉื ื” ืขืœ 2 ืกื•ืœืœื•ืช AA. ืœื›ืŸ, ื’ื ืฉืขื•ื ื™ ื™ื“ ืžื™ื•ืฆืจื™ื ืขื ืกื ื›ืจื•ืŸ ืจื“ื™ื•, ืฉืœื ืœื“ื‘ืจ ื›ืžื•ื‘ืŸ ืขืœ ืฉืขื•ื ื™ ืงื™ืจ ืื• ืฉืขื•ื ื™ ืชื—ื ืช ืจื—ื•ื‘.

ื”ื ื•ื—ื•ืช ื•ื”ืคืฉื˜ื•ืช ืฉืœ DCF ืžื•ืฉื›ื™ื ื’ื ื—ื•ื‘ื‘ื™ ืขืฉื” ื–ืืช ื‘ืขืฆืžืš. ืชืžื•ืจืช 10-20$ ื‘ืœื‘ื“ ืชื•ื›ืœื• ืœืงื ื•ืช ืžื•ื“ื•ืœ ืื ื˜ื ื” ืžื•ื›ืŸ ืขื ืžืงืœื˜ ืžื•ื›ืŸ ื•ื™ืฆื™ืืช TTL, ืฉื ื™ืชืŸ ืœื—ื‘ืจ ืœ- Arduino ืื• ื‘ืงืจ ืื—ืจ.
DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ื›ื‘ืจ ื ื›ืชื‘ ืขื‘ื•ืจ Arduino ืกืคืจื™ื•ืช ืžื•ื›ื ื•ืช. ืขื ื–ืืช, ื–ื” ื›ื‘ืจ ื™ื“ื•ืข ืฉืœื ืžืฉื ื” ืžื” ืืชื” ืขื•ืฉื” ืขืœ ืžื™ืงืจื•-ื‘ืงืจ, ืืชื” ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ืขื ืฉืขื•ืŸ ืื• ืชื—ื ืช ืžื–ื’ ืื•ื•ื™ืจ. ืขื ืžื›ืฉื™ืจ ื›ื–ื”, ืงืœ ืžืื•ื“ ืœืงื‘ืœ ืืช ื”ืฉืขื” ื”ืžื“ื•ื™ืงืช, ื‘ืชื ืื™, ื›ืžื•ื‘ืŸ, ืฉืืชื” ื ืžืฆื ื‘ืื–ื•ืจ ื”ืงื‘ืœื”. ื•ื‘ื›ืŸ, ืืชื” ื™ื›ื•ืœ ืœืชืœื•ืช ืืช ื”ื›ื™ืชื•ื‘ "ืฉืขื•ืŸ ืื˜ื•ืžื™" ืขืœ ื”ืฉืขื•ืŸ ืฉืœืš, ื•ื‘ืžืงื‘ื™ืœ ืœื”ืกื‘ื™ืจ ืœื›ื•ืœื ืฉื”ืžื›ืฉื™ืจ ื‘ืืžืช ืžืกื•ื ื›ืจืŸ ื‘ืืžืฆืขื•ืช ืฉืขื•ืŸ ืื˜ื•ืžื™.

ืžื™ ืฉืจื•ืฆื” ื™ื›ื•ืœ ืืคื™ืœื• ืœืฉื“ืจื’ ืืช ื”ืฉืขื•ืŸ ืฉืœ ืกื‘ืชื ื”ื™ืฉืŸ ืขืœ ื™ื“ื™ ื”ืชืงื ืช ืžื ื’ื ื•ืŸ ื—ื“ืฉ ืขื ืกื ื›ืจื•ืŸ ืจื“ื™ื•:

DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?

ืืชื” ื™ื›ื•ืœ ืœืžืฆื•ื ืื—ื“ ื‘-ebay ื‘ืืžืฆืขื•ืช ืžื™ืœื•ืช ื”ืžืคืชื— "ืชื ื•ืขื” ืžื‘ื•ืงืจืช ืจื“ื™ื•".

ื•ืœื‘ืกื•ืฃ, ืคืจื™ืฆืช ื—ื™ื™ื ืœืžื™ ืฉืงืจื ืขื“ ื›ืืŸ. ื’ื ืื ืื™ืŸ ืžืฉื“ืจ ืื•ืช ืจื“ื™ื• ืื—ื“ ื‘ืืœืคื™ ื”ืง"ืž ื”ืงืจื•ื‘ื™ื, ืœื ืงืฉื” ืœื™ื™ืฆืจ ืื•ืช ื›ื–ื” ื‘ืขืฆืžืš. ื™ืฉ ืชื•ื›ื ื™ืช ื‘-Google Play ื‘ืฉื "DCF77 Emulator" ืฉืžื•ืฆื™ืื” ืืช ื”ืื•ืช ืœืื•ื–ื ื™ื•ืช. ืœื“ื‘ืจื™ ื”ืžื—ื‘ืจ, ืื ืชื›ืจื›ื• ืืช ื”ื—ื•ื˜ ืฉืœ ื”ืื•ื–ื ื™ื•ืช ืกื‘ื™ื‘ ื”ืฉืขื•ืŸ, ื”ืŸ ื™ืงืœื•ื˜ื• ืืช ื”ืื•ืช (ืžืขื ื™ื™ืŸ ืื™ืš, ื›ื™ ืื•ื–ื ื™ื•ืช ืจื’ื™ืœื•ืช ืœื ื™ืคื™ืงื• ืื•ืช ืฉืœ 77KHz, ืื‘ืœ ื”ืงืœื™ื˜ื” ื”ื™ื ื›ื ืจืื” ื‘ื’ืœืœ ื”ืจืžื•ื ื™ื•ืช). ื‘ืื ื“ืจื•ืื™ื“ 9, ื”ืชื•ื›ื ื™ืช ืœื ืขื‘ื“ื” ื‘ื›ืœืœ ื‘ืฉื‘ื™ืœื™ - ืคืฉื•ื˜ ืœื ื”ื™ื” ืฆืœื™ืœ (ืื• ืื•ืœื™ ืœื ืฉืžืขืชื™ ืื•ืชื• - ืื—ืจื™ ื”ื›ืœ ื–ื” 77KHz:), ืื‘ืœ ืื•ืœื™ ืœืžื™ืฉื”ื• ื™ื”ื™ื” ื™ื•ืชืจ ืžื–ืœ. ืขื ื–ืืช, ื—ืœืงื ืžื™ื™ืฆืจื™ื ืืช ืขืฆืžื ืžื—ื•ืœืœ ืื•ืชื•ืช DCF ืžืŸ ื”ืžื ื™ื™ืŸ, ืฉืงืœ ืœืขืฉื•ืช ืื•ืชื• ื‘ืื•ืชื• Arduino ืื• ESP32:

DCF77: ื›ื™ืฆื“ ืคื•ืขืœืช ืžืขืจื›ืช ืื™ืชื•ืช ื”ื–ืžืŸ?
(ืžึธืงื•ึนืจ sgfantasytoys.wordpress.com/2015/05/13/synchronize-radio-controlled-watch-without-access)

ืžืกืงื ื”

ืžืขืจื›ืช DCF ื”ืชื’ืœืชื” ื›ืคืฉื•ื˜ื” ื•ื ื•ื—ื” ืœืžื“ื™. ื‘ืขื–ืจืช ืžืงืœื˜ ืคืฉื•ื˜ ื•ื–ื•ืœ ืชื•ื›ืœื• ืœืงื‘ืœ ืืช ื”ืฉืขื” ื”ืžื“ื•ื™ืงืช ืชืžื™ื“ ื•ื‘ื›ืœ ืžืงื•ื, ื›ืžื•ื‘ืŸ ื‘ืื–ื•ืจ ื”ืงื‘ืœื”. ื ืจืื” ืฉื’ื ืœืžืจื•ืช ื”ื“ื™ื’ื™ื˜ืœื™ื–ืฆื™ื” ื”ื ืจื—ื‘ืช ื•ื”ืื™ื ื˜ืจื ื˜ ืฉืœ ื”ื“ื‘ืจื™ื, ืคืชืจื•ื ื•ืช ืคืฉื•ื˜ื™ื ื›ืืœื” ื™ื”ื™ื• ืžื‘ื•ืงืฉื™ื ืœืื•ืจืš ื–ืžืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”