На платформе 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);}
Библиотеки
Транзистор IRF740 и стабилизатор необходимо установить на небольшие теплоотводы, так же для уменьшения тока потребления рекомендуется увеличить сопротивления на коллекторах транзисторов BC547 до оптимального значения (при увеличении сопротивления не должна существенно падать яркость свечения индикаторов).
Еще вопрос, как время установить без кнопок, ну не понимаю и все, все истыкал уже?
по времени компиляции
// clock.setDateTime(__DATE__, __TIME__); // Устанавливаем время на часах, основываясь на времени компиляции скетча
раскомментируйте строчку, прошейте скетч, после закомментируйте строку и снова прошейте скетч
Вот я и не понимаю что значит расскоментировать строку
убрать //
Так?
Так?
Нет
сначала так:
clock.setDateTime(__DATE__, __TIME__);
прошили, далее так:
// clock.setDateTime(__DATE__, __TIME__);
снова прошили.
Я так и сделал, а само время то я где должен вписать?
__DATE__, __TIME_ — это и есть время, эта команда возмет время с компьютера
Ааа, понял, а почему тогда на часах у меня время ставится 61:81 и меняются цифры только на первой лампе? Куда копать
У Вас сейчас местное время 18:16?
Вот участок кода который надо изменить чтобы ни чего не перепаивать:
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;}}
поменяйте на
case 0: segm=a[0]; an=3; anod(); segment();break;
case 1: segm=a[1]; an=2; anod(); segment();break;
case 2: segm=a[2]; an=1; anod(); segment();break;
case 3: segm=a[3]; an=0; anod(); segment();break;}i++;if(i>3){i=0;}}
Должно все правильно заработать
И правда заработало все как надо, спасибо вам большое,весь измучился уже. А с чем это связано? Спаял неправильно?
Сложно сказать, может что напутали, может я в схеме что напутал.
И еще вопрос такой, яркость ламп можно как то больше сделать, потому что когда в розетку включаю часы то лампы загораются ярко(ну 4 восьмерки) и при прошивке также, а потом тускнее светят, c преобразователя идет 28 вольт(MT3608)
При динамической индикации яркость всегда меньше, чем при статической. Повышайте анодно-сеточное напряжение до 35 В
Понял вас, спасибо
А е поможете еще с прошивкой которая с кнопками? Тоже белеберду показывают часы, минуты еще вроде можно настроить а часы нет, заранее спасибо