Ручнаяя мастерская

Бинарные настольные часы

Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыВ этой статье мастер-самодельщик поделится своим опытом изготовления бинарных часов под управлением Ардуино. Как правило, бинарные часы имеют 3 колонки по два ряда в каждой. Такие часы выглядят довольно интересно и могут украсить любой письменный стол.

Инструменты и материалы:
-Arduino Pro Micro;
-Модуль RTC DS3231;
-Микросхема MAX7219CNG;
-Синий светодиод -20 шт;
-Стеклянные шарики;
-Резистор 10K;
-Провода;
-Монтажная плата;
-ЧПУ-станок;
-Паяльная станция;
-Кусачки;
-Доска;
Бинарные настольные часыБинарные настольные часыБинарные настольные часыШаг первый: основание
Для основания мастер взял доску из мягкого клена размером 165X145X18,8 мм. На лицевой части основания будут размещены стеклянные шарики, подсвечиваемые светодиодами. Диаметр шариков 15,5 мм. Отверстия для шариков вырезаются диаметром 15,7 мм и глубиной 7 мм. В центре каждого отверстия мастер сделал 5-мм отверстие для светодиодов. Сверху и снизу делает гравировку.
Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыШаг второй: шлифовка
Шлифует заготовку. Покрывает лаком в несколько слоев.
Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыШаг третий: подключение
Основными компонентами часов являются плата микроконтроллера Arduino Pro Mini и модуль RTC DS3231. Монтаж Arduino Pro Mini и модуля RTC очень прост. Необходимо подключить вывод SDA модуля RTC к выводу SDA Arduino, а вывод SCL модуля RTC — к выводу SCL Arduino. Контакты SDA и SCL на Arduino обозначены A4 и A5 соответственно. Также необходимо установить общее заземление между модулями Arduino и RTC.
Соединение между Arduino и DS3231 RTC:
Arduino DS3231
SCL (A5) SCL
SDA (A4) SDA
5V VCC
GND GND
Для отображения часов, минут и секунд двоичным часам требуются 20 светодиодов. Для управления светодиодами мастер использует микросхему MAX7219CNG.

MAX7219 способна управлять 64 отдельными светодиодами, используя только 3 провода для связи с Arduino, и, более того, можно последовательно соединять несколько драйверов и матриц и при этом использовать те же 3 провода.

64 светодиода управляются 16 контактами микросхемы. Вопрос в том, как это возможно? Максимальное количество одновременно загорающихся светодиодов — восемь. Светодиоды расположены в виде набора 8 × 8 строк и столбцов. Таким образом, MAX7219 активирует каждый столбец в течение очень короткого периода времени, и в то же время он также управляет каждой строкой. Поэтому, быстро переключаясь между колоннами и рядами, человеческий глаз будет замечать только непрерывный свет.

VCC и GND MAX7219 подключаются к выводам 5V и GND Arduino, а три других контакта, DIN, CLK и CS — на любой цифровой вывод платы Arduino. Если нужно подключить более одного модуля, просто подключаем выходные контакты предыдущей коммутационной панели к входным контактам нового модуля. На самом деле эти контакты одинаковы, за исключением того, что вывод DOUT предыдущей платы идет к выводу DIN новой платы.

Подключение Arduino и MAX7219CNG:
Arduino MAX7219
D12 ОТ
D11 CLK
D10 LOAD
GND GND
Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыШаг четвертый: код
Вся программа написана в среде Arduino. Для эскиза были использованы две внешние библиотеки. Один для модуля RTC, а другой для ИС MAX7219. Загрузите библиотеки по ссылке и добавьте в устройство Arduino IED перед установкой программы.
Код можно загрузить ниже.
Бинарные настольные часы Скетч здесь#include "Wire.h"
#include "DS3231.h"
#include "LedControl.h"

/*
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/

DS3231 clock;
RTCDateTime dt;
LedControl lc=LedControl(12,11,10,1);

int seconds, minutes, hours;
byte number[10]={B00000000,B01000000,B00100000,B01100000,B00010000,B01010000,B00110000,B01110000,B00001000,B01001000};

void setup()
{
//Serial.begin(9600);
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0,false);
/* Set the brightness to a medium values */
lc.setIntensity(0,15);
/* and clear the display */
lc.clearDisplay(0);
//lc.setLed(0,row,col,true);

// lc.setRow(0,0,B11111111);
// lc.setRow(0,1,B11111111);
// lc.setRow(0,2,B11111111);
// lc.setRow(0,3,B11111111);
// lc.setRow(0,4,B11111111);
// lc.setRow(0,5,B11111111);
// lc.setColumn(0,2,B11111111);
// lc.setColumn(0,3,B11111111);
// lc.setColumn(0,4,B11111111);
// lc.setColumn(0,5,B11111111);

// Initialize DS3231
clock.begin();
// Set sketch compiling time
//clock.setDateTime(__DATE__, __TIME__);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
}

int menu = 0, up, down;

int hours_one;
int hours_ten;
int minutes_one;
int minutes_ten;
int seconds_one;
int seconds_ten;

void loop()
{
if(digitalRead(5)==0){
delay(300);
menu++;
if(menu>3) menu = 0;
}

if(menu==0){
dt = clock.getDateTime();

hours = dt.hour;
minutes = dt.minute;
seconds = dt.second;

if(hours>12) hours = hours — 12;
if(hours==0) hours = 1;

hours_one = hours%10;
hours_ten = hours/10;

minutes_one = minutes%10;
minutes_ten = minutes/10;

seconds_one = seconds%10;
seconds_ten = seconds/10;

lc.setRow(0,0,number[seconds_one]);
lc.setRow(0,1,number[seconds_ten]);
lc.setRow(0,2,number[minutes_one]);
lc.setRow(0,3,number[minutes_ten]);
lc.setRow(0,4,number[hours_one]);
lc.setRow(0,5,number[hours_ten]);
}

if(menu==1){
if(digitalRead(6)==0){
delay(300);
hours++;
if(hours>=24)hours = 0;
}
if(digitalRead(7)==0){
delay(300);
hours—;
if(hours<0)hours = 0;
}
hours_one = hours%10;
hours_ten = hours/10;
lc.setRow(0,2,B00000000);
lc.setRow(0,3,B00000000);
lc.setRow(0,1,B00000000);
lc.setRow(0,0,B00000000);
lc.setRow(0,4,number[hours_one]);
lc.setRow(0,5,number[hours_ten]);
}

if(menu==2){
if(digitalRead(6)==0){
delay(300);
minutes++;
if(minutes>=60) minutes = 0;
}
if(digitalRead(7)==0){
delay(300);
minutes—;
if(minutes<0) minutes = 0;
}
minutes_one = minutes%10;
minutes_ten = minutes/10;
Бинарные настольные часыШаг пятый: установка светодиодов
Дальше мастер монтирует, согласно схемы, светодиоды.
Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыПеред пайкой мастер проверяет работоспособность каждого светодиода.
Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыУстанавливает Ардуино. Для настройки устанавливает три кнопки.
Бинарные настольные часыБинарные настольные часыШаг шестой: шарики
Теперь нужно установить шарики в отверстия. Фиксирует мастер шарики с помощью термоклея.
Бинарные настольные часыВсе готово.
Бинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часыБинарные настольные часы

Присоединяйтесь!

Не стесняйся, общайся. Мы любим встречать интересных людей и заводить новых друзей.