| Ваш IP: 3.234.143.26 | Online(21) - гости: 17, боты: 4 | Загрузка сервера: 2.66 ::::::::::::


Ретро часы на ИВ-22 (Arduino)

На платформе Arduino можно сделать часы на одноразрядных вакуумно-люминисцентных индикаторах ИВ-22. Часы питаются от напряжения 5 В, но в схеме применен стабилизатор 7805 позволяющий использовать напряжение больше 5 В. Если источник питания который Вы используете на напряжение 5 В, то стабилизатор 7805 из схемы нужно исключить.

Часы состоят из нескольких частей:

  • Плата Arduino Nano, Mini или Uno
  • Модуль часов реального времени DS3231
  • Импульсный преобразователь напряжения 27 В
  • Блок индикации

ИВ-22 — люминисцентный семисегментный индикатор зелёного цвета свечения. Индикатор ИВ-22 выполнен в стеклянной колбе с жесткими выводами. Индикация осуществляется через купол баллона. Аноды прибора выполнены в виде семи сегментов и десятичной точки.

#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__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
  clock.setOutput(DS3231_1HZ);
 pinMode(9,OUTPUT);  // D9  === A0
 pinMode(10,OUTPUT); // D10 === A1
 pinMode(11,OUTPUT); // D11 === A2
 pinMode(12,OUTPUT); // D12 === A3
 pinMode(2,OUTPUT);  // D2  === a
 pinMode(3,OUTPUT);  // D3  === b
 pinMode(4,OUTPUT);  // D4  === c
 pinMode(5,OUTPUT);  // D5  === d
 pinMode(6,OUTPUT);  // D6  === e
 pinMode(7,OUTPUT);  // D7  === f
 pinMode(8,OUTPUT);  // D8  === g
}
 
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();break;
    case 1: segm=a[1]; an=1; anod(); segment();break;
    case 2: segm=a[2]; an=2; anod(); segment();break;
    case 3: segm=a[3]; an=3; anod(); segment();break;}i++;if(i>3){i=0;}}
 
 
void segment(){
  switch(segm){                                                                 
             //  A       B       C       D       E       F       G  
    case 0: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,1);break;// 0 
    case 1: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 1
    case 2: ch(2,0);ch(3,0);ch(4,1);ch(5,0);ch(6,0);ch(7,1);ch(8,0);break;// 2
    case 3: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,1);ch(8,0);break;// 3   
    case 4: ch(2,1);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,0);ch(8,0);break;// 4 
    case 5: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 5 
    case 6: ch(2,0);ch(3,1);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 6 
    case 7: ch(2,0);ch(3,0);ch(4,0);ch(5,1);ch(6,1);ch(7,1);ch(8,1);break;// 7 
    case 8: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,0);ch(7,0);ch(8,0);break;// 8
    case 9: ch(2,0);ch(3,0);ch(4,0);ch(5,0);ch(6,1);ch(7,0);ch(8,0);break;// 9  
  }}
void anod(){
  switch(an){                                                             
    case 0:ch(9,0);ch(10,1);ch(11,1);ch(12,1);break;  
    case 1:ch(9,1);ch(10,0);ch(11,1);ch(12,1);break; 
    case 2:ch(9,1);ch(10,1);ch(11,0);ch(12,1);break;
    case 3:ch(9,1);ch(10,1);ch(11,1);ch(12,0);break;
  }}
 
  void ch(int pin, int logic){digitalWrite(pin,logic);}

Библиотеки

MsTimer2.zip

DS3231.zip

Транзистор IRF740 и стабилизатор необходимо установить на небольшие теплоотводы, так же для уменьшения тока потребления рекомендуется увеличить сопротивления на коллекторах транзисторов BC547 до оптимального значения (при увеличении сопротивления не должна существенно падать яркость свечения индикаторов).

Комментарии

  • Anton:

    Добрый день! Подскажите, пожалуйста, как устанавливать время. Спасибо.

    • liman28:

      Установка времени кнопками не предусмотрена, только по времени компиляции, но вы можете добавить две кнопки и в loop() в самое начало добавить:
      (нужны новые переменные: int h,m,x; )

      if(analogRead(A0)>900){x=1;h++;if(h>23){h=0;}delay(200);}
      if(analogRead(A1)>900){x=1;m++;if(m>59){m=0;}delay(200);}

      и в setup() в самый конец:

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

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

  • Anton:

    Понял, спасибо. А, если без кнопок, то в скетче ничего изменять не надо? Время автоматически выставится по времени компиляции?

    • liman28:

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

  • Anton:

    А есть ли какое то правило, по которому устанавливается дата и время. То есть вместо __DATE__ вписывать, например, 22.03.2020, а вместо __TIME__ вписывать 11:51? Извиняюсь, если задаю глупые вопросы, просто я совсем в этом новичок и хочу разобраться. Спасибо.

  • Anton:

    Понял, спасибо вам большое за помощь.

  • Интересная схема, жаль что нет разводки платы, кстати повышающий преобразователь можно сделать с помощью шима ардуины, без 555 таймера. Примерно по этой схеме. Меняя сопротивление R6 и (или) скважность шима, можно подобрать вольтаж.

  • Anton:

    Здравствуйте! Собрал часы и появилась такая проблема: часы достаточно сильно отстают. Во включённом состоянии находились недолго — меньше часа. Вчера немного поработали и отставали на 10 минут, сегодня также на немного включил и уже отстают на 15 минут. Было даже такое, что пара минут считалась в обратную сторону. Засёк время, через сколько переключается минута и и вышло что она на 7-10 секунд дольше чем должна. Подскажите, можно ли это вообще исправить и если да, то как?

    • liman28:

      Ход часов полностью зависит от часов реального времени DS3231, проблема может быть только в них. Во многих модулях DS3231 вместо аккумулятора китайцы ставят батарейку, померьте напряжение элемента питания, если оно сильно превышает 3 В, то нужно удалить диод питающей элемент питания, чтобы не было перезаряда. Батарейки хватит на 5 лет.

  • Anton:

    Подскажите ещё, пожалуйста, к каким контактам ардуино надо будет подключать кнопки, чтобы можно было ими настраивать время.

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

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

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

  • Логический пробник

    Пробник предназначен для проверки различных радиоэлектронных схем и уст-в которые работают на основе микросхем ТТЛ. Элемент DD1.1 питается от источника питания которым напитывается схема проверяемого прибора (5В), если на вход пробника поступит напряжение низкого уровня то на выходе элемента появится высокий лог уровень и загорается светодиод красного свечения, а если …Подробнее...
  • Схема мигания лампы

    Схема мигания лампы

    Схема работает от постоянного напряжения 12В. Основу схемы составляют два транзистора BC557 и MOSFET IRF530. Максимальная мощность подключенной лампы (ламп) 42Вт. Все конденсаторы на напряжение не менее 25В. Время мигания лампы определяется емкостью С2.   На втором рисунке показана аналогичная схема, максимальная мощность подключенной лампы (ламп) не более 10Вт. Оригинал статьи — http://www.circuitstoday.com/12v-lamp-flasher-circuitПодробнее...
  • Операции с битами (Arduino)

    Операции с битами (Arduino)

         | — старший бит 0b11110000                   | — младший бит DEC  BIN 0        0B00000000 1        0B00000001 2        0B00000010 3        0B00000011 4        0B00000100 5      …Подробнее...
  • Ультралинейный предварительный каскад усиления

    Ультралинейный предварительный каскад усиления

    На рисунке представлена схема стереофонического каскада предварительного усиления НЧ. Главным достоинством данного предварительного усилителя в том, что напряжение на выходе 6В, коэффициент гармоник в диапазоне частот от 40 до 20000Гц не более 0,01%. Такие параметры достигнуты повышенным напряжением питания 20В, применением малошумящих транзисторов ВС239 или ВС549 и введением ООС. Дополнительно …Подробнее...
  • 3 digits Digital volt meter

    Это — простой цифровой вольтметр с 3 семи сегментными индикаторами разрядов. Микроконтроллер PIC16F676 преобразует аналоговый сигнал (напряжение) и отображает его значение на 3 индикаторах. Из схемы видно что постоянное напряжение поступает на делитель выполненный на резисторах R1 и R2 (47К и 33К).Резистор подстроечный VR1 включен параллельно с R2, чтобы корректировать …Подробнее...