ARDUINO: DECODIFICA DEL SEGNALE DCF77 SENZA RICEVITORE



ITALIANO   ENGLISH    ESPAÑOL

INTRODUZIONE

Per la decodifica del segnale DCF77, contenente l'informazione oraria, è necessario ricevere il segnale sulla frequenza dei 77,5kHz.  Il progetto presentato in questa pagina permette di decodificare il segnale DCF77, ricavandone l'informazione  oraria, senza acquistare il ricevitore. Basta solo un  PC, una scheda Arduino e  la scheda, presentata in questo  articolo, che prende il nome di BF_DCF77. Questo circuito permette di ricavare l'informazione oraria  presente nel segnale  DCF77 , in forma di seganle digitale, dal segnale audio in uscita dal PC sintonizzato sui 77,5kHz. tramite la radio SDR controllabile via web come quella presente al seguente indirizzo: SDR WEB RADIO.

Al seguente indirizzo  DCF_DECODER e' presentato il progetto completo di un decodificatore harware basato su microcontrollore, con display LCD che utilizza la interfaccia BF_DCF77.

L'INTERFACCIA BF_DCF77

In figura 1 e' riportato lo schema elettrico della scheda BF_DCF77. In pratica si tratta di un circuito di demodulazione che ricava dall'inviluppo del segnale audio, presente all'ingresso IN_BF, il segnale DCFF in versione digitale prelevabile sul pin di uscita VOUT.

schema elettrico interfaccia BF_DCF77


Fig. 1: schema elettrico dell'interfaccia BF_DCF77

Nella figura 2 e' riportato la cattura dello schermo dell'oscilloscopio in cui sono raffigurate le forme d'onda del segnale audio di ingresso e' quello digitale corrispondente in uscita VOUT

cattura  oscilloscopio IN/OUT per BF_DCF77

Fig. 2: CH1 = segnale audio ingresso su IN_BF;  CH2 segnale uscita su VOUT

Lo stadio di ingresso del circuito e' costituito dal transistor Q1 che e' in configurazione di amplificatore in classe A. L'uscita di questo stadio e' quindi applicata allo stadio di rilevazione dell'inviluppo costituito da D1, C1 e R1 mentre lo stadio di digitalizzazione e' costituito da  Q2, D2 e C3. Il circuito funziona con tensione di compresa tra i 3,3V e i  5V per cui può essere direttamente collegato alla scheda Arduino.


RICEZIONE DEL SEGNALE DCFF

Per ricevere il segnale bisogna collegarsi alla radio SDR tramite il seguente link: SDR WEB RADIO. 
La prima operazione è quella di settare la frequenza al valore 77,5 kHz nel campo dedicato e selezionare la modalità LSB. Per  ricevere il segnale in maniera ottimale bisogna, in prima istanza, ascoltare in altoparlante il segnale, aumentare il volume ( andare oltre la metà della scala) e spostare la sintonia ( tramite i pulsanti + e -) in modo da udire un segnale audio come quello riproducibile da questo link. audio DCF77. Fatto il setup del ricevitore si collega l'ingresso della scheda BF_DCF77 (dotata di jack stereo) all'uscita audio per cuffia del PC e l'uscita della scheda ad Arduino che decodifica l'informazione digitale ricavandone l'informazione oraria.

IMPLEMENTAZIONE DEL DECODIFICATORE DCFF

Si passa quindi al collegamento con la scheda Arduino che può essere la scheda MEGA 2560 o Arduino Nano. Bastano solo tre fili: uno per la alimentazione positiva (rosso) prelevata da connettore delle alimentazioni nel posto contrassegnato con la sigla 5V , uno (nero) per la GND e uno (verde) per il segnale  in uscita dall'interfaccia che va collegato nel pin 2 della scheda Arduino usata. Nelle due figure seguenti sono riportati i collegamenti per entrambi le schede arduino:

microst.it  DCF77 decodificatore con Arduinomicrost.it  DCF77 decodificatore con Arduino Nano


IMPLEMENTAZIONE SOFTWARE

Ecco il codice utilizzabile per entrambe le schede Arduino ( Mega2560 e Nano). L'uscita della decodifica e' visbile nel monitor seriale del programma IDE di Arduino. Se il segnale e' buono la codifica prende un tempo massimo di 2 minuti. Nel frattempo che il decodificatore aggancia il segnale, il monitor riporta un orario e una data che sono il setup di base della libreria ( TimeLib.h)  usata nel codice. Quando si ha l'aggancio del segnale viene riportato l'orario e la data attuale (UTC). Il codice può essere copiato direttamente.



// Arduino  code for project DCF DECODER WITHOUT RECIEVER https://www.microst.it/Progetti/arduino_9.htm
#include "DCF77.h"
#include "TimeLib.h"


#define DCF_PIN 2           // Connection pin to DCF 77 device
#define DCF_INTERRUPT 0    // Interrupt number associated with pin

//time_t time;
DCF77 DCF = DCF77(DCF_PIN,DCF_INTERRUPT);
//DCF77 DCF = DCF77(DCF_PIN, DCF_INTERRUPT,HIGH);

void setup() {
 Serial.begin(9600);
 Serial.println("Initialising DCF77");
 DCF.Start();
 Serial.println("Waiting for DCF77 time ... ");
 Serial.println("It will take at least 2 minutes until a first update can be processed.");
}

void loop() {
 delay(1000);
 time_t DCFtime = DCF.getTime(); // Check if new DCF77 time is available
 if (DCFtime != 0)
 {
   Serial.println("Time is updated");
   setTime(DCFtime);
  
 }
 digitalClockDisplay();
}

void digitalClockDisplay() {
 // digital clock display of the time
 Serial.print(hour());
 printDigits(minute());
 printDigits(second());
 Serial.print(" ");
 Serial.print(day());
 Serial.print(" ");
 Serial.print(month());
 Serial.print(" ");
 Serial.print(year());
 Serial.println();
}

void printDigits(int digits) {
 // utility function for digital clock display: prints preceding colon and leading 0
 Serial.print(":");
 if (digits < 10)
   Serial.print('0');
 Serial.print(digits);
}

VIDEO /FOTO

Nella figura seguente e' riportata la schermata del PC che riproduce il monitor seriale durante la decodifica.


microst.it