Электронные часы в духе Qlocktwo

Привет от команды uMove! Как-то раз увидели в интернете такое изображение часов. Текущее время на них задается словами: пять минут третьего, без четверти час, половина пятого и тому подобное с шагом в 5 минут.

4fc7ccfab0234268bcc201e72dfa5da9.jpg

Недавно мы сделали такие!

Как всё происходило


Первым делом мы сделали 3D модель. В качестве несущей основы выбрали доступную в избытке фанеру толщиной 4 мм, на ней разместили трехцветную диодную ленту, причем каждый диод управляется отдельно по SPI. Например, цвет 10-го диода задается примерно так: «Привет первый, скажи десятому, чтобы он загорелся сейчас таким-то цветом». Первый передает второму, второй третьему и так далее.

Выбор форм-фактора всего устройства был выбран исходя из существующего шага диодов. В данном случае лента имеет 60 чипов в метре длины. Конечный габаритный размер стороны квадратного девайса получился 264,4 мм.

ebfc34df12664c59a15930bd4b36ac1f.jpg

Вторым слоем мы организовали разделители между буквами. Это требовалось для предотвращения засветки неактивных букв активными. Во втором слое расположили отверстие для вывода шнура питания.

ac443246d41b4cf2b55b0c30377ee362.jpg

Вся матрица диодов — одномерный массив, расположенный змейкой на подложке.
Функция пересчета из декартовой системы координат в «змейку»:

int getStripPosition(int row, int col)
{
    if(col % 2 == 1)
    {
        return col * ROWS + row;
    }else{
        return (1 + col) * ROWS - (1 + row);
    }
}


Кусочки ленты соединены 3 проводами последовательно: Питание, Земля и Сигнал. Началась рутинная пайка. Вот что получилось:

0e44de9158e04ee08ee18207c26c2729.jpg

Проверка паяных соединений не заставила разочароваться, все заработало с первого раза, даже непривычно как-то.

Внешний вид


Набросав таблицу с буквами, мы поигрались с размером и типом шрифта, оформили чертеж для лазерного станка и принялись изучать материал и цвет. Выбор пал на черный глянцевый пластик. Получился очень стильный корпус. Язык выбрали немецкий… не знаем почему.

0b8db2ff2a8847b292a4e7f14d26ed54.jpg

Минутка немецкого:
5850a4cb990744aea078cb4c105b2c7c.jpeg


Электроника


Основа часов — наш любимый Spark. Это привычный STM32 микроконтроллер с доступом в интернет через Wi-Fi. Эта штука сама узнает текущее время, в часах нет ни единой кнопки! Новый логин и пароль сети можно задать с телефона.

4c595ada9b2144d5bfde3ee2a1585765.jpg

Все детали мы изготовили и собрали в ЦМИТ Академии.

Но это еще не всё


Посмотрим, что получилось:

  1. у нас есть матрица 10×11 пикселей
  2. у нас есть выход в интернет
  3. у нас есть облако с настроенным 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



    
    
    














Приложение на телефоне выглядит потрясающе:

2dfb4ea333cf49f184110f3f933f7d36.png

Демонстрация


Надеемся, мы вдохновили вас новыми идеями крутых проектов!

© Geektimes