| Ваш IP: 35.175.121.230 | Online(25) - гости: 18, боты: 7 | Загрузка сервера: 0.65 ::::::::::::

Ретро часы на ИН-16 (Arduino)

На платформе Arduino можно собрать простые часы на газоразрядных индикаторах типа ИН-16 (ИН-14, ИН-18 и др.). ИН-16 представляет собой индикатор тлеющего разряда имеющий десять катодов выполненных в виде цифр и два катода для запятых. Ток индикации 2 мА, напряжение возникновения тлеющего разряда не более 170 В, яркость свечения 150 кд/м².

Назначение выводов:

  • 1 — анод
  • 2 — цифра 1
  • 3 — цифра 7
  • 4 — цифра 3
  • 5 — знак «запятая»
  • 6 — цифра 4
  • 7 — цифра 5
  •  8 — цифра 6
  • 9 — цифра 2
  • 10 — знак «запятая»
  • 11 — цифра 8
  • 12 — цифра 9
  • 13 — цифра 0

Управление цифрами газоразрядных индикаторов осуществляется при помощи высоковольтного двоично-десятичного дешифратора  К155ИД1 (динамическая индикация), управление анодами осуществляется при помощи высоковольтных транзисторных оптронов (TLP627) со схемой Дарлингтона на выходе. Плата Arduino коммутирует управление газоразрядных индикаторов и управляет работой высоковольтного DC-DC преобразователя. В схеме используются часы реального времени DS3231, выход SQW через высоковольтный оптрон управляет индикатором секунд (ИН-3).

В схеме используется стабилизатор типа 7805 для питания платы Arduino, но можно исключить этот элемент и напряжение +9 В подавать на встроенный в Arduino стабилизатор (вход VIN).

Настройка времени по времени компиляции:
// clock.setDateTime(__DATE__, __TIME__);
раскомментировать, залить скетч, закомментировать и по новой залить скетч


Библиотеки

https://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip

http://forum.rcl-radio.ru/misc.php?action=pan_download&item=58&download=1

#include <MsTimer2.h>
#include <Wire.h> 
#include <DS3231.h>
  DS3231 clock;RTCDateTime DateTime;
  int an, segm,times,i;
  byte a[4];
 
void setup(){  Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
  // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
 pinMode(2,OUTPUT); // D2 === H1
 pinMode(3,OUTPUT); // D3 === H2
 pinMode(4,OUTPUT); // D4 === H3
 pinMode(5,OUTPUT); // D5 === H4
 pinMode(6,OUTPUT);  // D6  === A0 3 ид1 
 pinMode(7,OUTPUT);  // D7  === A1 6 ид1
 pinMode(8,OUTPUT);  // D8  === A2 7 ид1
 pinMode(10,OUTPUT); // D10 === A3 4 ид1
 pinMode(9,OUTPUT);  // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
  TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц - изменение яркости индикаторов
clock.setOutput(DS3231_1HZ);
}
 
void loop(){ 
  DateTime=clock.getDateTime();// опрос времени
  times = DateTime.hour*100+DateTime.minute;
  a[0]=times/1000;
  a[1]=times/100%10;
  a[2]=times/10%10;
  a[3]=times%10%10;
  }
 
void to_Timer(){
  switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
    case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}
 
 
void segment(){
  switch(segm){                                                                 
    case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break;     // DEC 0 = 0b0000
    case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;    // DEC 1 = 0b0001
    case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break;    // DEC 2 = 0b0010
    case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break;   // DEC 3 = 0b0011
    case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break;    // DEC 4 = 0b0100
    case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;   // DEC 5 = 0b0101
    case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break;   // DEC 6 = 0b0110
    case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break;  // DEC 7 = 0b0111
    case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break;    // DEC 8 = 0b1000
    case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break;   // DEC 9 = 0b0110
  }}
void anod(){
  switch(an){                                                             
    case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;    
    case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;   
    case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;   
    case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;   
  }}

После сборки часов необходимо подобрать оптимальную частоту генератора для высоковольтного преобразователя, чтобы выходное напряжение преобразователя находилось в пределах от 160 до 170 В:

TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;

270=30 кГц, 300=26 кГц, 400=20 кГц, 500=16 кГц — изменение яркости индикаторов

*Чем выше частота тем меньше выходное напряжение преобразователя

MOSFET транзистор IRF740 необходимо установить на небольшой по площади теплоотвод.

Видео

Форум — http://forum.rcl-radio.ru/viewtopic.php?id=83

Комментарии

  • Доброго вечера. Пытаюсь повторить данные часы, с небольшими изменениями. Лампы ИН-12, преобразователь напряжения анодов ламп не зависит от микроконтроллера-генератор отдельный на 555 таймере. регулируемое выходное напряжение 0-210 В. Вместо оптронов применил транзисторные ключи на MPSA92. Встал с работой по причине отсутствия модуля часов реального времени. В наличие есть DS1302. Вопрос возник в правке скетча под этот модуль. С ув. Александр.

  • DS1302 RTC AT24C32 вот такой модуль.

    • liman28:

      Здравствуйте! К сожалению у меня нет такого модуля, поэтому изменить скетч я не могу, но Вы можете взять стандартный скетч для Вашего модуля и получить минуты и часы, далее надо просто ставить эти переменные в следующую строку:

      times = часы*100+минуты;

      А все лишнее касаемо модуля DS3132 убрать:
      #include «ds3231.h»
      DS3231 clock;RTCDateTime DateTime;

      clock.begin();

      DateTime=clock.getDateTime();// опрос времени

      единственная проблема в том, что такт секунд для мигания ИН-3 я беру с модуля DS3132, я так понимаю что такого выхода у DS1302 нет, поэтому такт секунд придется получать программно.

  • развязка анодов через транзисторные ключи

  • преобразователь напряжения на таймере. Мосфет применил IRF740.

    • Этот преобразователь свободно запускает стандартную светодиодную лампу до 20 Ватт 230В. Дроссель мотаю на пермалоевом кольце от АТХ блока питания компьютера. Жёлтое кольцо, на нём намотанны дроссели в цепях +3,3: 5 и 12 В. Любой эмалированный провод диаметром 1,8-2 мм. Содержит 80 витков провода(2 слоя по 40 витков) В итоге на выходе почти 215 В постоянки.Удобно брать в машину на рыбалку. От аккумулятора последний раз такая переноска проработала почти 7 часов беспрерывно.

  • Приветствую. Встал вопрос о ручной корректировке времени в этом проекте. Хочу отправить эти часы в другую страну в подарок, а человек абсолютно далёк от Ардуино. Как бы ввести три кнопки «+», «-«, «коррекция» и переписать скетч?. Заранее благодарен.

    • liman28:

      Попробуйте внедрить этот код:

      int h,m,x;

      void setup() {
      pinMode(11,INPUT);
      pinMode(12,INPUT);

      DateTime=clock.getDateTime();// опрос времени
      h = DateTime.hour;
      m = DateTime.minute;
      }

      void loop() {
      if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
      if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

      if(x==1){x=0;setDateTime(2020, 1, 28, h, m, 0);}
      }

  • Спасибо. Я так понял, на D11 кнопка увеличения часов, а на D12 увеличения мнут.?

  • Извините, ещё момент уточню. В оригинальной прошивке графу void loop(){
    DateTime=clock.getDateTime();// опрос времени
    times = DateTime.hour*100+DateTime.minute;
    a[0]=times/1000;
    a[1]=times/100%10;
    a[2]=times/10%10;
    a[3]=times%10%10;
    }
    заменить на ту, что Вы предложили, или объединить их?

    • liman28:

      Вставьте код как есть, удалять или менять ни чего не надо.
      В setup() в самый конец
      pinMode(11,INPUT);
      pinMode(12,INPUT);

      DateTime=clock.getDateTime();// опрос времени
      h = DateTime.hour;
      m = DateTime.minute;

      В loop() в самое начало

      if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
      if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

      if(x==1){x=0;setDateTime(2020, 1, 28, h, m, 0);}

  • Доброго дня. Всё удачно получилось. Благодарю за поддержку.

  • Доброго дня. Поспешил я, оказывается скетч не «залился». При компиляции выдаёт ошибку строки
    void setup(){ Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();

    : error: ‘to_Timer’ was not declared in this scope

    Вот весь скетч с Вашей правкой (как я его понял)
    #include
    #include
    #include
    DS3231 clock;RTCDateTime DateTime;
    int an, segm,times,i;
    byte a[4];
    int h,m,x;
    void setup(){ Wire.begin();clock.begin();MsTimer2::set(4, to_Timer);MsTimer2::start();
    // clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
    pinMode(2,OUTPUT); // D2 === H1
    pinMode(3,OUTPUT); // D3 === H2
    pinMode(4,OUTPUT); // D4 === H3
    pinMode(5,OUTPUT); // D5 === H4
    pinMode(6,OUTPUT); // D6 === A0 3 ид1
    pinMode(7,OUTPUT); // D7 === A1 6 ид1
    pinMode(8,OUTPUT); // D8 === A2 7 ид1
    pinMode(10,OUTPUT); // D10 === A3 4 ид1
    pinMode(9,OUTPUT); // ВЫХОД СИГНАЛА ГЕНЕРАТОРА 16-30 кГц для высоковольтного источника питания
    TCCR1A = 0x40;TCCR1B = 0x09;OCR1A = 400;//270=30кГц, 300=26кГц, 400=20кГц, 500=16кГц — изменение яркости индикаторов
    pinMode(11,INPUT);
    pinMode(12,INPUT);

    DateTime=clock.getDateTime();// опрос времени
    h = DateTime.hour;
    m = DateTime.minute;
    }

    void loop(){
    if(digitalRead(11)==HIGH){x=1;h++;if(h>23){h=0;}delay(200);}
    if(digitalRead(12)==HIGH){x=1;m++;if(m>59){m=0;}delay(200);}

    if(x==1){x=0;setDateTime(2020, 1, 28, h, m, 0);}
    }
    DateTime=clock.getDateTime();// опрос времени
    times = DateTime.hour*100+DateTime.minute;
    a[0]=times/1000;
    a[1]=times/100%10;
    a[2]=times/10%10;
    a[3]=times%10%10;
    }

    void to_Timer(){
    switch(i){
    case 0: segm=a[0]; an=0; anod(); segment();delay(1);break;
    case 1: segm=a[1]; an=1; anod(); segment();delay(1);break;
    case 2: segm=a[2]; an=2; anod(); segment();delay(1);break;
    case 3: segm=a[3]; an=3; anod(); segment();delay(1);break;}i++;if(i>3){i=0;}}

    void segment(){
    switch(segm){
    case 0: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 0 = 0b0000
    case 1: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 1 = 0b0001
    case 2: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 2 = 0b0010
    case 3: digitalWrite(10,LOW);digitalWrite(8,LOW);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 3 = 0b0011
    case 4: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 4 = 0b0100
    case 5: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 5 = 0b0101
    case 6: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,LOW);break; // DEC 6 = 0b0110
    case 7: digitalWrite(10,LOW);digitalWrite(8,HIGH);digitalWrite(7,HIGH);digitalWrite(6,HIGH);break; // DEC 7 = 0b0111
    case 8: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,LOW);break; // DEC 8 = 0b1000
    case 9: digitalWrite(10,HIGH);digitalWrite(8,LOW);digitalWrite(7,LOW);digitalWrite(6,HIGH);break; // DEC 9 = 0b0110
    }}
    void anod(){
    switch(an){
    case 0: digitalWrite(2,HIGH);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
    case 1: digitalWrite(2,LOW);digitalWrite(3,HIGH);digitalWrite(4,LOW);digitalWrite(5,LOW);break;
    case 2: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,HIGH);digitalWrite(5,LOW);break;
    case 3: digitalWrite(2,LOW);digitalWrite(3,LOW);digitalWrite(4,LOW);digitalWrite(5,HIGH);break;
    }}

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Цифровой термометр

    Основа термометра АЦП типа КР572ПВ5 который предназначен для работы с ЖКИ. Датчик температуры ТСП100П. Погрешность измерений при температуре от -50 до +100°С не более 0,5°С, погрешность при температуре  от -200 до +600ºС не более 5ºС. Напряжение питания термометра +9В. Вместо ТСП100П можно использовать и другие датчики термосопротивлений типа ТСП50П(46Ом) или …Подробнее...
  • Нормирующий усилитель на микросхеме К548УН1

    Нормирующий усилитель на микросхеме К548УН1

    Нормирующий усилитель на микросхеме К548УН1 имеет следующие основные технические характеристики: Входное напряжение: номинальное 0,1 В максимальное 0,6 В Выходное напряжение: номинальное 0,8 В максимальное 5 В Перегрузочная способность, не менее 15 дБ Коэффициент гармоник, не более 0,1% Отношение сигнал-шум (невзвешенное) 72 дБ Номинальный диапазон частот 10… 50000 Гц Напряжение питания …Подробнее...
  • Переключатель елочных гирлянд

    Переключатель елочных гирлянд

    На рисунке показана схема простого переключателя елочных гирлянд. Устройство коммутирует две гирлянды с рабочим напряжением 220В. Уст-во состоит из источника питания для цепи управления гирляндами, реле и низкочастотного генератора на LM380. НЧ генератор вырабатывает импульсы  которые управляют работой реле. Реле в свою очередь переключает гирлянды. Мощность гирлянд зависит от типа …Подробнее...
  • LM4808 — двухканальный маломощный УМЗЧ

    LM4808 — двухканальный маломощный УМЗЧ

    LM4808 — двухканальный маломощный усилитель звуковой частоты с максимальной выходной мощностью 0,105 Вт на канал. ИМС LM4808 специально разработана для компактных аудиосистем, как усилитель для аудио наушников и др. Выпускается корпусах для поверхностного монтажа WSON и SOIC. Основные технические характеристики: Выходная мощность: 105 мВт при сопротивлении нагрузки 16 Ом при …Подробнее...
  • Металлоискатель

    Металлоискатель состоит из параллельного стабилизатора напряжения (V1V2), генератора ВЧ(100кГц на V4), детектора ВЧ на V5 и усилителя постоянного тока с индикатором на транзисторах V6 V7. ВЧ напряжение с катушки связи L2 выпрямляется эмиттерным переходом транзистора V5. Этот транзистор при работе генератора будет открыт, V6, V7 закрыты. Если приблизить металлический предмет …Подробнее...