| Ваш IP: 3.231.220.225 | Online(22) - гости: 18, боты: 4 | Загрузка сервера: 0.29 ::::::::::::

Ретро часы на ИВ-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 и (или) скважность шима, можно подобрать вольтаж.

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

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

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

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

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

    К140УД2А, К140УД2Б относят к ОУ средней точности. Электрические параметры: Uпит. ном — 2*12,6В (А), 2*6,3 (Б) I пот — 16мА (А), 10мА(Б) Ku — 35*10³(А), 3*10³(Б) Uсм — 5мВ Iвх — 700нА ΔIвх — 150нА Кос.сф — 60дБ f1 — 1МГц Vu — 0,2В/мкс Uвых.мах — 10В(А), 3В(Б) Rвх — …Подробнее...
  • Преобразователь 5В / 8,5В

    На рисунке представлена схема простого преобразователя напряжения, уст-во при питании +5В выдает напряжение +8,5В. Основа преобразователя триггере Шмитта. Генератор построен на ИС К555ТЛ2 работающий на частоте 20кГц, далее выходной сигнал поступает на умножитель напряжения VD1 – VD2. Во время перезарядки конденсатора С1 через резистор R1 образуются колебания. Когда напряжение на …Подробнее...
  • STM32 + TM1637 (Arduino)

    STM32 + TM1637 (Arduino)

    Модуль TM1637 представляет собой 4-х разрядный семисегментный дисплей на базе драйвера TM1637. Дисплей имеет десятичные точки в разрядах. Для подключения используется всего 2 цифровых контакта (помимо питания от 3.3 до 5 В) отладочной платы на STM32 (базе микроконтроллера STM32F103C8T6). Для работы с дисплеем TM1637 можно использовать простую в применении библиотеку …Подробнее...
  • Усилитель мощности на STK1050

    Усилитель мощности на STK1050

    Интегральные микросхема STK1050 фирмы Sanyo выполнена в корпусах SIP10 с 10 выводами и представляют собой выходной модуль усилителя мощности низкой частоты в гибридном исполнении. ИМС STK1050 предназначена для использования в магнитофонах, электрофонах, телевизионных и радиоприемниках, другой аудиоаппаратуре высокого класса с двухполярным питанием. В микросхемах отсутствует защита выхода от короткого замыкания …Подробнее...
  • Простой цифровой индикатор

    Эту схему удобно применять только в тех случаях когда необходима цифровая индикация со средней степенью точности, например в БП от 1 до 10 или 1…99В без десятичного разряда. В основе схемы лежит принцип сравнения величины измеряемого сигнала с линейно нарастающим напряжением и измерения времени нарастания этого напряжения до момента совпадения …Подробнее...