Настоящие бинарные часы показывают время числами двоичной системы счисления. Это необычно и по своему привлекательно. Их не сложно сделать на основе Arduino UNO. Собственно, про это и статья.
На рисунке показан внешний вид бинарных светодиодных часов
Я нашел очень красивую реализацию таких часов на youtube: Binary clock driven by Arduino
О том как определить время по таким часам можно узнать из другого видео: mBINclock
Вот только ролик англоязычный. Поэтому лучше я скажу ещё пару слов об этом.
Итак, чтобы узнать время необходимо перевести двоичное число в десятичную форму. Для этого каждую цифру двоичного числа нужно умножить на соответствующее ей магическое число из специальной последовательности. Затем необходимо сложить результаты. В итоге получится обычное десятичное число. Вот эти магические числа: 128, 64, 32, 16, 8, 4, 2, 1. Я привел последовательность для одного байта (восемь бит). Но эту последовательность легко продолжить. Каждое последующее число больше предыдущего ровно в два раза. Так можно перевести в десятичный вид любое двоичное число. Правда, для чисел бинарных часов нужно не больше шести бит :-)
Приведу несколько примеров
000101
0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1 = 5
010111
0*32 + 1*16 + 0*8 + 1*4 + 1*2 + 1*1 = 23
101000
1*32 + 0*16 + 1*8 + 0*4 + 0*2 + 0*1 = 40
111010
1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 0*1 = 58
Думаю теории достаточно. Пора перейти к описанию устройства.
Для этих часов нужно 17 светодиодов и 17 ограничительных резисторов для них. Резисторы лучше взять на 680Ом - 1КОм и 0.25Вт. Светодиоды подключаются к выводам ардуино анодом. Катоды подключается к GND через ограничительные резисторы.
Еще для проекта необходимо три кнопочки без фиксации и три подтягивающих резистора. Прекрасно подойдут резисторы в 10КОм и 0.25Вт.
Все как в моей статье про светодиод, кнопку и ардуино.
Скетч для Arduino UNO
Управление часиками осуществляется тремя кнопками. Третьей кнопкой устанавливаются часы. Второй кнопкой устанавливаются минуты. Чтобы изменить время нужно нажать и держать кнопку. Тогда связанная с этой кнопкой величина будет увеличиваться на единицу за секунду. Когда будет достигнуто необходимое значение, кнопку нужно отпустить. Первая кнопка предназначена для управления секундами. Если ее нажать, то секунды сбрасываются в ноль. Пока она нажата часы стоят. Если кнопку отпустить, часы пойдут.
На рисунке показан внешний вид бинарных светодиодных часов
Я нашел очень красивую реализацию таких часов на youtube: Binary clock driven by Arduino
О том как определить время по таким часам можно узнать из другого видео: mBINclock
Вот только ролик англоязычный. Поэтому лучше я скажу ещё пару слов об этом.
Итак, чтобы узнать время необходимо перевести двоичное число в десятичную форму. Для этого каждую цифру двоичного числа нужно умножить на соответствующее ей магическое число из специальной последовательности. Затем необходимо сложить результаты. В итоге получится обычное десятичное число. Вот эти магические числа: 128, 64, 32, 16, 8, 4, 2, 1. Я привел последовательность для одного байта (восемь бит). Но эту последовательность легко продолжить. Каждое последующее число больше предыдущего ровно в два раза. Так можно перевести в десятичный вид любое двоичное число. Правда, для чисел бинарных часов нужно не больше шести бит :-)
Приведу несколько примеров
000101
0*32 + 0*16 + 0*8 + 1*4 + 0*2 + 1*1 = 5
010111
0*32 + 1*16 + 0*8 + 1*4 + 1*2 + 1*1 = 23
101000
1*32 + 0*16 + 1*8 + 0*4 + 0*2 + 0*1 = 40
111010
1*32 + 1*16 + 1*8 + 0*4 + 1*2 + 0*1 = 58
Думаю теории достаточно. Пора перейти к описанию устройства.
Для этих часов нужно 17 светодиодов и 17 ограничительных резисторов для них. Резисторы лучше взять на 680Ом - 1КОм и 0.25Вт. Светодиоды подключаются к выводам ардуино анодом. Катоды подключается к GND через ограничительные резисторы.
Еще для проекта необходимо три кнопочки без фиксации и три подтягивающих резистора. Прекрасно подойдут резисторы в 10КОм и 0.25Вт.
Все как в моей статье про светодиод, кнопку и ардуино.
Скетч для Arduino UNO
////////////////////////
//
// Arduino UNO
//
////////////////////////
//
// Sketch: binary clock
//
// Arduino --- Led
//
// D13 --- Led 12
// D12 --- Led 11
// D11 --- Led 10
// D10 --- Led 9
// D9 --- Led 8
// D8 --- Led 7
//
// D4 --- Led 17
// D3 --- Led 16
// D2 --- Led 15
// D1 --- Led 14
// D0 --- Led 13
//
// A5 --- Led 6
// A4 --- Led 5
// A3 --- Led 4
// A2 --- Led 3
// A1 --- Led 2
// A0 --- Led 1
// Arduino --- Button
//
// D7 --- Button 3
// D6 --- Button 2
// D5 --- Button 1
unsigned long int t1 = 0;
unsigned long int t2 = 1000;
unsigned char s = 0;
unsigned char m = 0;
unsigned char h = 0;
void setup()
{
DDRD = 0b00011111;
PORTD = 0b00000000;
DDRB = 0b00111111;
PORTB = 0b00000000;
DDRC = 0b00111111;
PORTC = 0b00000000;
}
void loop()
{
t1 = millis();
if ( (t1 / 1000) == (t2 / 1000) )
{
t2 += 1000;
s += 1;
if ( !(PIND & (1 << 5)) ) { s = 0; }
if ( !(PIND & (1 << 6)) ) { m += 1; s = 0; }
if ( !(PIND & (1 << 7)) ) { h += 1; s = 0; }
if( s >= 60 ) { s = 0; m += 1; }
if( m >= 60 ) { m = 0; h += 1; }
if( h >= 24 ) { h = 0; }
PORTD = h;
PORTB = m;
PORTC = s;
}
}
//
// End
//
////////////////////////
Управление часиками осуществляется тремя кнопками. Третьей кнопкой устанавливаются часы. Второй кнопкой устанавливаются минуты. Чтобы изменить время нужно нажать и держать кнопку. Тогда связанная с этой кнопкой величина будет увеличиваться на единицу за секунду. Когда будет достигнуто необходимое значение, кнопку нужно отпустить. Первая кнопка предназначена для управления секундами. Если ее нажать, то секунды сбрасываются в ноль. Пока она нажата часы стоят. Если кнопку отпустить, часы пойдут.



Комментариев нет:
Отправить комментарий