Привет от команды uMove! Как-то раз увидели в интернете такое изображение часов. Текущее время на них задается словами: пять минут третьего, без четверти час, половина пятого и тому подобное с шагом в 5 минут.
Недавно мы сделали такие!
Первым делом мы сделали 3D модель. В качестве несущей основы выбрали доступную в избытке фанеру толщиной 4 мм, на ней разместили трехцветную диодную ленту, причем каждый диод управляется отдельно по SPI. Например, цвет 10-го диода задается примерно так: «Привет первый, скажи десятому, чтобы он загорелся сейчас таким-то цветом». Первый передает второму, второй третьему и так далее.
Выбор форм-фактора всего устройства был выбран исходя из существующего шага диодов. В данном случае лента имеет 60 чипов в метре длины. Конечный габаритный размер стороны квадратного девайса получился 264,4 мм.
Вторым слоем мы организовали разделители между буквами. Это требовалось для предотвращения засветки неактивных букв активными. Во втором слое расположили отверстие для вывода шнура питания.
Вся матрица диодов — одномерный массив, расположенный змейкой на подложке.
Функция пересчета из декартовой системы координат в «змейку»:
Кусочки ленты соединены 3 проводами последовательно: Питание, Земля и Сигнал. Началась рутинная пайка. Вот что получилось:
Проверка паяных соединений не заставила разочароваться, все заработало с первого раза, даже непривычно как-то.
Набросав таблицу с буквами, мы поигрались с размером и типом шрифта, оформили чертеж для лазерного станка и принялись изучать материал и цвет. Выбор пал на черный глянцевый пластик. Получился очень стильный корпус. Язык выбрали немецкий… не знаем почему.
Основа часов — наш любимый Spark. Это привычный STM32 микроконтроллер с доступом в интернет через Wi-Fi. Эта штука сама узнает текущее время, в часах нет ни единой кнопки! Новый логин и пароль сети можно задать с телефона.
Все детали мы изготовили и собрали в ЦМИТ Академии.
Посмотрим, что получилось:
Помните Brick Game?
Наверное, самая простая игра, которую можно написать.
Доступ к часам очень простой. В прошивке чипа лежит функция, к которой можно обратиться через облако. Пример с сайта:
Чтобы к ней обратиться, необходимо выполнить POST-запрос в облако, например, из командной строки:
Управлять ползунком можно через приложение. Мы его написали на HTML+JS с использованием Apache Cordova
Приложение на телефоне выглядит потрясающе:
Недавно мы сделали такие!
Как всё происходило
Первым делом мы сделали 3D модель. В качестве несущей основы выбрали доступную в избытке фанеру толщиной 4 мм, на ней разместили трехцветную диодную ленту, причем каждый диод управляется отдельно по SPI. Например, цвет 10-го диода задается примерно так: «Привет первый, скажи десятому, чтобы он загорелся сейчас таким-то цветом». Первый передает второму, второй третьему и так далее.
Выбор форм-фактора всего устройства был выбран исходя из существующего шага диодов. В данном случае лента имеет 60 чипов в метре длины. Конечный габаритный размер стороны квадратного девайса получился 264,4 мм.
Вторым слоем мы организовали разделители между буквами. Это требовалось для предотвращения засветки неактивных букв активными. Во втором слое расположили отверстие для вывода шнура питания.
Вся матрица диодов — одномерный массив, расположенный змейкой на подложке.
Функция пересчета из декартовой системы координат в «змейку»:
int getStripPosition(int row, int col)
{
if(col % 2 == 1)
{
return col * ROWS + row;
}else{
return (1 + col) * ROWS - (1 + row);
}
}
Кусочки ленты соединены 3 проводами последовательно: Питание, Земля и Сигнал. Началась рутинная пайка. Вот что получилось:
Проверка паяных соединений не заставила разочароваться, все заработало с первого раза, даже непривычно как-то.
Внешний вид
Набросав таблицу с буквами, мы поигрались с размером и типом шрифта, оформили чертеж для лазерного станка и принялись изучать материал и цвет. Выбор пал на черный глянцевый пластик. Получился очень стильный корпус. Язык выбрали немецкий… не знаем почему.
Минутка немецкого:
Электроника
Основа часов — наш любимый Spark. Это привычный STM32 микроконтроллер с доступом в интернет через Wi-Fi. Эта штука сама узнает текущее время, в часах нет ни единой кнопки! Новый логин и пароль сети можно задать с телефона.
Все детали мы изготовили и собрали в ЦМИТ Академии.
Но это еще не всё
Посмотрим, что получилось:
- у нас есть матрица 10х11 пикселей
- у нас есть выход в интернет
- у нас есть облако с настроенным API
Помните Brick Game?
Арканоид
Наверное, самая простая игра, которую можно написать.
Доступ к часам очень простой. В прошивке чипа лежит функция, к которой можно обратиться через облако. Пример с сайта:
int brewCoffee(String command);
void setup()
{
Particle.function("brew", brewCoffee);
}
void loop()
{
// this loops forever
}
// this function automagically gets called upon a matching POST request
int brewCoffee(String command)
{
if(command == "coffee")
{
// some example functions you might have
return 1;
}
else return -1;
}
Чтобы к ней обратиться, необходимо выполнить POST-запрос в облако, например, из командной строки:
curl https://api.particle.io/v1/devices/{DEVICE_ID}/{FUNCTION_NAME} -d access_token={TOKEN} -d "args={ARGUMENTS}"
Управлять ползунком можно через приложение. Мы его написали на HTML+JS с использованием Apache Cordova
<body style="margin: 0; padding: 0;">
<script language="javascript">
function go(action) {
var xhr = new XMLHttpRequest();
var body = 'access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx&args='+action;
xhr.open("POST", 'https://api.particle.io/v1/devices/53ff6e12345678900987654321/shift', true)
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
xhr.send(body);
};
</script>
<button class="button" style="width: 40%;" onclick="go('left')"><</button>
<button class="button" style="width: 20%; left: 40%" onclick="go('play')">!</button>
<button class="button" style="width: 40%; left: 60%" onclick="go('right')">></button>
</body>
Приложение на телефоне выглядит потрясающе:
IronHead
На русском смотрелось бы эффектнее
miron36357
В русском есть одна большая проблема в лице склонений…
kazakoff
На русском языке тоже есть, но чуть проще.
Часы на русском
kazakoff
На русском языке тоже есть, но чуть проще.
don_ikar
Хм, я понимаю, что в этом проекте совсем другой принцип реализации, представления информации и т.п., но, например, Вербариус совсем не страдает от наличия склонений и других особенностей русского (и не только) языка. Более того, одно и тоже время может вербализовать каждый раз другими словами («одиннадцать часов, сорок пять минут», «без пятнадцати двенадцать» и т.п.).
А вообще, ребята — молодцы, конечно. Спаянное и запрограммированное своими руками всегда вызывает уважение.
mcleod095
Хоть и сделали перегородки, но все равно видно что очень сильно засвечены соседние элементы. Наверное надо было сделать как на оригинальной фотографии, матовое белое стекло поставить в каждый квадратик, что бы свечение было видно только при зажженном светодиоде.
u010602
При такой яркости думаю даже нужно делать герметичный кубик под каждую букву, с одной прозрачной гранью.
Но на мой лично вкус нужно яркость регулировать, ночью или вечером такая яркость как минимум избыточна, а то и не комфортна.
А под прямыми солнечными лучами слабого белого свечения не будет видно.
HarryMorgan
Лицевой пластмассовый слой довольно сильно изогнут, отсюда и засветка соседних пикселей. По-хорошему, его нужно проклеить с сеткой. В следующих проектах такие нюансы будем учитывать
alexws54tk
Идея таких физических часов порадовала. Вдохновился. Возможно сделаю что-то подобное на кухню.
Маленько позанудствую.
Единственное что «зацепило» в видео, это как отскакивание „шарика“ от „площадки“ происходит со сдвигом вверх на «пиксель».
SharQ
Не потому ли немецкий, что в случае с русским нужно делать матрицу больше и проектировать новое расположение слов, а не брать готовое? Одиннадцать ноль пять это вам не funf nah elf.
HarryMorgan
Хм, интересная идея с использованием «ноль пять», но все-таки привычнее «пять минут одиннадцатаго».
vlivyur
Двенадцатого.
Mazumedroid
да, надо бутерброд было немного усложнить, рассеивающий слой из пэт добавить или молочного акрила, к нему заодно и межбуквенные элементы приклеить. а так конечно супер
HarryMorgan
Спасибо! С опытом будем совершенствовать качество наших устройств
northernbear
Класс. Но как быть если нет wifi, былобы неплохо
прикрутить чясы реального времени
Tolstyj_OD
Я бы слой с буквами делал из прозрачного материала (стекло, акрил), но не резал бы его, а с внутренней стороны поклеил бы пленку с вырезанными в ней символами. Профит в том, что буквы BORDPQ можно сделать нормальными, а не с провалами в центре.
HarryMorgan
Да, не плохая мысль, но плоттера в мастерской нет, и клеить внутренние элементы пришлось бы руками. Мы стараемся исключать ручной труд, особенно на внешних элементах устройств.
Tolstyj_OD
Дело хозяйское. Я так, мимопроходил дизигнер.
Rasalom
Но самое интересное(и сложное) — перевод врмени в текст вы оставили за кадром :(
Tolstyj_OD
А что там сложного? Набор условий. Это же таки да не русский, там падежей нет.
Грубо «если %минуты_число=5 то %минуты строка=funf». Ну и потом из нескольких строковых переменных собрать одну до кучи.
С русским было бы интереснее, но не намного.