Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

DCF77 Радио-часы и Анализатор v2.0 — проект на Arduino Mega/UNO

Компоненты и материалы

Компонент Количество
Arduino Mega 2560 (основной контроллер) 1
Arduino UNO (для DCF77 Superfilter) 1

О проекте

Продвинутые радио-часы, синхронизируемые по сигналу DCF77 (Германия, 77.5 кГц). Версия 2.0 включает:

Конструкция корпуса

Фронтальная панель спроектирована в Inkscape. Печать на DiBond (алюминиевый композит) — 28€ с доставкой. Важно: требовать печать 1:1 без масштабирования! Корпус — дерево/акрил, много сверления/фрезеровки.

Функционал

Программный код

DCF Analyzer / Clock v2.1 (Arduino Mega)

Полный код очень большой (~1500 строк). Ниже — ключевые фрагменты и структура.

/* DCF77 Analyzer / Clock v2.1 — Erik de Ruiter 2014-2020
   GNU LGPL v2.1. Arduino Mega + DCF Superfilter (Uno).
   Драйвит множество LED напрямую через порты Mega (не MAX7219).
*/

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LedControl.h> // Специальная версия для Common Anode!
#include <SPI.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// --- ПИНЫ MEGA ---
#define DCF77PIN 2           // INT0 — сигнал DCF от Superfilter
#define PIRDETECTORPIN 3     // PIR вход
#define BUZZERSWITCHPIN 4    // Вкл/выкл звука DCF
#define CHIMESWITCHPIN 5     // Вкл/выкл боёв
#define POWERSAVESWITCHPIN 6 // Вкл/выкл эко-режим
#define TEMPSENSORPIN 8      // DS18B20
#define TEMPRESETPIN 9       // Кнопка сброса мин/макс темп.
#define MAXIMCCLD 10         // MAX7219 CS
#define MAXIMCCCLK 11        // MAX7219 CLK
#define MAXIMCCDATA 12       // MAX7219 DIN

// LED на пинах 22–50 (дни недели, CET/CEST, високосный, RTC ошибка, синхро, паритеты, PIR, питание)
#define LED_SUNDAY 22 ... #define LED_PIRMOTION 50

// Аналоговые
#define BUZZER A7
#define SPEAKERVOLPIN A6
#define CHIMEPIN A5

// --- НАСТРОЙКИ ---
#define SPEAKERVOLUME 12
#define PERFORM_LED_TEST 1
#define LEDTEST_DELAY_DISPLAYS 600
#define LEDTEST_DELAY_LED_RING 20
#define CONFIGURE_DS18B20 0
#define POWERSAVINGOFFTIME 9   // Включение дисплеев (утро)
#define POWERSAVINGONTIME 22   // Выключение (вечер)
#define POWERSAVE_BY_PIR 1
#define PIR_DELAY_TIME 30      // мин
#define TEMPRESET_MIDNIGHT 1

// --- ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ ---
LedControl MaximCC = LedControl(MAXIMCCDATA, MAXIMCCCLK, MAXIMCCLD, 7, false);
OneWire ds(TEMPSENSORPIN);
// ... буферы DCF, флаги, счётчики ошибок, переменные времени, температура ...

void setup() {
  Serial.begin(9600);
  // Инициализация пинов, LED, RTC, MAX7219, звука, DS18B20
  attachInterrupt(0, int0handler, CHANGE); // DCF прерывание
  setSyncProvider(RTC.get);
  if (timeStatus() != timeSet) digitalWrite(LED_RTCERROR, HIGH);
  // Настройка громкости Sound Board
  if (CONFIGURE_DS18B20) configureDS18B20();
  if (PERFORM_LED_TEST) ledTest(); else delay(750);
  displayTemp();
}

void loop() {
  if (DCFSignalState != previousSignalState) {
    previousSignalState = DCFSignalState;
    scanSignal(); // Анализ импульса
  }
  checkSwitches();
  checkPIR();
  tasksEverySecond();
  tasksEveryMinute();
  tasksEveryHour();
}

// Прерывание DCF
void int0handler() { DCFSignalState = digitalRead(DCF77PIN); }

// Анализ фронтов: период, ширина, парность, буфер
void scanSignal() { ... }
void processDcfBit(int bit) { ... }
void finalizeBuffer() { ... }
void decodeBufferContents() { ... }
int bitDecode(int start, int end) { ... }
// ... функции дисплеев, температуры, PIR, звука, чаймов ...

Superfilter Sketch (Arduino Uno — Udo Klein)

Отдельная плата Uno между антенной и Mega. Очищает сигнал DCF77, выдаёт отфильтрованный/синтезированный сигнал. Использует библиотеку dcf77.h (blinkenlight.net).

// Superfilter 3.0 — Udo Klein
// Пины Uno:
// DCF вход: A5 (19)
// Выходы: 12 (filtered), A2 (semi-synth), 6 (synth)
// LED: A4 (monitor), 10 (1Hz), 13 (signal good), 7/A0/4 (diff)
#include <dcf77.h>

const uint8_t dcf77_sample_pin = 19;
const uint8_t dcf77_filtered_pin = 12;
const uint8_t dcf77_semi_synthesized_pin = 16;
const uint8_t dcf77_synthesized_pin = 6;
const uint8_t dcf77_monitor_pin = 18;
const uint8_t dcf77_second_pulse_pin = 10;
const uint8_t dcf77_signal_good_indicator_pin = 13;

void setup() {
  Serial.begin(115200);
  // инициализация пинов, DCF77_Clock::setup()
}
void loop() {
  DCF77_Clock::get_current_time(now);
  // дебаг, скоупы
}

CAD / Печатные платы

Схемы

Полная схема (Eagle/KiCad) в ZIP-архиве в разделе Schematics. Включает: Mega, Superfilter Uno, MAX7219 каскад, DS1307 RTC, DS18B20, PIR, Sound Board, ключи, LED-индикация.

Полезные ссылки

Производственный процесс

  1. Кукушка: история, мастерство и современная эволюция
  2. Arduino POV-часы: сборка дисплея на эффекте сохранения образа
  3. Ретро-часы на индикаторах Numitron с Arduino: просто, надёжно, экономно
  4. Стильные настенные часы на четырех кольцах Adafruit Neopixel 60 LED и Arduino
  5. Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
  6. Часы реального времени на Arduino с расчётом времени намаза
  7. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  8. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  9. Создание пользовательских LED-часов с будильником — видно с 12 метров
  10. Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код