В этой статье мастер-самодельщик поделится своим опытом изготовления бинарных часов под управлением Ардуино. Как правило, бинарные часы имеют 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;

Шаг пятый: установка светодиодов
Дальше мастер монтирует, согласно схемы, светодиоды.

Перед пайкой мастер проверяет работоспособность каждого светодиода.

Устанавливает Ардуино. Для настройки устанавливает три кнопки.

Шаг шестой: шарики
Теперь нужно установить шарики в отверстия. Фиксирует мастер шарики с помощью термоклея.

Все готово.

Источник (Source)

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

Источник: usamodelkina.ru