Настоящие бинарные часы показывают время числами двоичной системы счисления. Это необычно и по своему привлекательно. Их не сложно сделать на основе 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 // ////////////////////////
Управление часиками осуществляется тремя кнопками. Третьей кнопкой устанавливаются часы. Второй кнопкой устанавливаются минуты. Чтобы изменить время нужно нажать и держать кнопку. Тогда связанная с этой кнопкой величина будет увеличиваться на единицу за секунду. Когда будет достигнуто необходимое значение, кнопку нужно отпустить. Первая кнопка предназначена для управления секундами. Если ее нажать, то секунды сбрасываются в ноль. Пока она нажата часы стоят. Если кнопку отпустить, часы пойдут.
Комментариев нет:
Отправить комментарий