| Ваш IP: 34.204.191.0 | Online(39) - гости: 28, боты: 11 | Загрузка сервера: 0.38 ::::::::::::

Ретро часы на ИН-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кГц - изменение яркости индикаторов
}
 
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;
    }}

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

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

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

  • Устройство для получения СЕРЕБРЯНОЙ ВОДЫ

    Введение серебра в воду позволяет существенно улучшить ее свойства при длительном хранении. В качестве электродов используется серебро 875…999,9 пробы. Растворяемым электродом является анод, оптимальное межэлектродное расстояние 5-12мм, плотность тока 0,15…5,0 мА\кв.см., проводимое напряжение 3-12В. На рисунке 1 представлен базовый вариант схемы собранный на микросхеме К176ИЕ18. Задающий генератор выполнен на внутренних …Подробнее...
  • УКВ приемник на TDA7000

    УКВ приемник на TDA7000

    На рисунке показан схема УКВ (88…108 МГц) приемника на ИМС TDA7000. УКВ приемник содержит небольшое кол-во внешних элементов, прост в настройке. Выходной сигнал звуковой частоты (моно) подается на вход усилителя ЗЧ или на высокоомные наушники. Перечень элементов: С1, С9, С12, С17 —  0.1мкФ С2, С4, С5, С6, С13 —  0.01мкФ …Подробнее...
  • Инвертор 100Вт

    На рисунке показана схема инвертора с выходной мощностью 100В и выходным напряжением 220В 50 Гц. Питается инвертор от аккумуляторной батареи 12В. VR1  используется для более точной подстройки частоты 50 Гц, при большом расхождении частоты можно подобрать более точно емкость конденсатора Cx.   ИМС CD4047 используется в качестве генератора 50 Гц …Подробнее...
  • Электрические вольфрамовые лампы накаливания

    Электрические вольфрамовые лампы накаливания

    В 1879 году Т.А. Эдисон создал лампу накаливания запустив ее в серийное производство, в качестве нити накаливания он использовал угольную нить, которую он получал обугливанием длинный и тонких бамбуковых волокон. Так же он ввел откачку воздуха из баллона. В 1890 году А.Н. Лодыгин продемонстрировал лампу с нитью накала из тугоплавкого …Подробнее...
  • К140УД5А, К140УД5Б (справочные данные)

    К140УД5А, К140УД5Б (справочные данные)

    К140УД5А, К140УД5Б относят к ОУ средней точности. Электрические параметры: Uпит. ном — 2*12,0В I пот — 12мА Ku — 0,5*10³(А), 10³(Б) Uсм — 10мВ (А), 7мВ(Б) TKUсм — 35(А)мкв/Сº, 10(Б)мкв/Сº Iвх — 5*10³нА(А), 10000нА(Б) ΔIвх — 1000нА(А), 5000нА(Б) Кос.сф — 50дБ(А), 60дБ(Б) f1 — 5МГц(А), 10МГц(Б) Vu — 6В/мкс Uвых.мах …Подробнее...