- Цена: $6,88
Я вам не надоел? Ну, тогда продолжим собирать разные глупые и бесполезные устройства!
Если вы читали мой прошлый обзор, то должны были узнать, что я бросил курить, а поскольку полумерами ограничиваться не хочется, то я начал кататься на велосипеде.
Ну, а какой же велосипед без ардуины…
В данной статье я потерплю фиаско, но надеюсь временное, и очень надеюсь на «светлые головы» в комментариях.
Вступление
Достался мне по родственным каналам велосипед. Не новый, но хороший. Нужно поменять шифтеры, купить новые грипсы, и поменять тросик на передний тормоз.
Отказ от курения и велосипед — восхитительно! Но есть у всего этого побочный эффект — хочется всем об этом рассказывать:
«Привет! А я курить бросил! На велосипеде катаюсь!»
«Не надоело сидеть? Лучше пойди на велосипеде прокатись! Как я.»
«Да, я тут спортом занялся…»
Купил приложение на смартфон. пишет маршрут, скорость, расстояние, еще там есть социальная сеть для тренирующихся (пользуясь случаем, хочу выразить ненависть к дополнительным покупкам внутри платного приложения) — круто!

Persistence of vision
И катаясь по утрам в тишине чего то не хватало… Хотелось добавить что то этакое, чтобы все видели, что я катаюсь. И тут я вспомнил о такой интересной штуке как Persistence of vision дисплее — штука, которая использует недостатки нашего зрения для получения классного эффекта. Если коротко, то это способ отображения информации основанный на инертности восприятия ярких объектов нашим глазом — если вы начнете быстро махать угольком ночью, то вместо яркой точки вы увидите полосу света. Но, что если «угольков» будет несколько и мы будем иметь возможность гасить и зажигать его в определенный момент? А получится вот такая интересная штука
И я начал искать информацию. Нашел несколько готовых устройств:
Сначала китайский
Но он меня не впечатлил.
Еще нашел SpokePOV
А затем я увиделMonkeyLight Pro
Вау! Беру! Сколько стоит?
А не пойти бы вам н:*(%(*(%?*(
Начало
Ну такая продвинутая штука мне не нужна, мне хотелось лишь иметь возможность иногда загружать свои картинки и я начал копать в сторону самодельных утройств.
И старичок гугл привел меня в этот блог к Antonio Ospite
ao2.it/en/blog/2014/04/16/jmp-rope-programmable-jump-rope
Он собрал устройство для использования со своей камерой для занятия Lightpainting’ом
Одна проблема: устройство и код разработаны именно для светографики, и не имеют механизма синхронизации с частотой вращения колеса, но с этим мы разберемся (почти).
Сборка
Я приступил к сборке устройства.
Само устройство ничего сложного из себя не представляет вообще:
Arduino Nano
Лента на WS2812B
Датчик, который отмечает один оборот колеса
Для питания я временно использовал powerbank, но в дальнейшем планирую использовать батарею 18650 и dc-dc преобразователь.
С первыми двумя все понятно, а вот с датчиком пришлось покопаться. В закромах был найден датчик положения с пневмоцилиндра Hoerbiger KL3313. Такие датчики реагируют на магнит и бывают либо обычным герконом (механический контактик в стеклянной колбе), либо датчиком Холла (полностью электронным устройством). Даташит мне найти не удалось и я надеялся, что мой то датчик точно из второй категории, но я ошибся и именно это послужит причиной моего провала в дальнейшем.
А вот и датчик
И магнитик для него
Датчик прекрасно работал от 5в. При срабатывании открывался и на сигнальный пин поступало напряжение
Для его использования нужно было добавить резистор подтяжки на ардуинку. Что я и сделал
В целом первый прототип выглядел вот так
Все это очень грубо было смонтировано на колесе.
Датчик был установлен на небольшой кусочек какого то пенного материала из коробки с планшетом. Напротив него на хомутике был прицеплен магнит
Повербанк завернул в изоляционный материал и закреплен пластиковыми хомутиками. Ардуинку завернул в пакетик. Советую не повторять за мной, ибо после нескольких оборотов при испытаниях мою ардуинку замотало на цепь :-) Ох, уж эта моя лень! Но, слава богу, она выжила.

Софт
Приступил к софту.
Как я уже упоминал я использовал софт и скетч товарища Antonio Ospite. Он написал библиотеку на основе похожего проекта от BlinkyLabs, скетч и графический редактор PiPoPaint для редактирования паттернов. Скачать их вы можете у него в блоге.
Принцип работы его скетча такой:
Для начала в редакторе генерируется код наших картинок. Картинка представляется в виде последовательности цветных полос (кадров)
Эти данные записываются в память ардуины. По нажатию кнопки эти кадры начинают отправляться на ленту с опредленной задержкой, которая заранее указана в скетче, и автор выставлял ее в зависимости от выдержки на камере, с которой он снимал свои работы.
Нам необходимо было добавить замер частоты, с которой крутиться наше колесо. Я планировал использовать свой датчик для фиксирования одного оборота, т.е. мне нужно было замерять время, за которое колесо делает один оборот. Наткнулся на крошечную библиотеку FreqPeriodCounter www.avdweb.nl/arduino/hardware-interfacing/frequency-period-counter.html
Библиотека позволяет измерить время между импульсами (в моем случае между срабатываниями датчика) в микросекундах и миллисекундах.
Добавил данный замер в скетч. Получив время, ардуина делит полученное на количество кадров и получает задержку между их выводом на ленту. Также добавил сброс анимации при каждом срабатывании датчика, чтобы наша картинка не крутилась как сумашедшая, а находилась в одном положении при каждом обороте колеса. В итоге получился вот такой скетч
#include <FastLED.h> #include <FastLED_animation.h> #include "BareButton.h" #include "animation.h" #include <Streaming.h> #include <FreqPeriodCounter.h> #define debounceTime_ms 0 #define DATA_PIN 6 #define INPUT_PIN 12 const byte freqPin = 3; static struct CRGB leds[NUM_LEDS]; static BareButton button = BareButton(INPUT_PIN); static unsigned long frame_delay_usecs = 65000; uint16_t frameIndex; FreqPeriodCounter freqPeriodCounter(freqPin, millis, debounceTime_ms); void setup() { FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS); pinMode(freqPin, INPUT); } void loop() { freqPeriodCounter.poll(); frame_delay_usecs = freqPeriodCounter.pulseWidthLow / NUM_FRAMES; if (freqPin == HIGH) { animation.reset(); } if (button.isPressed()) { animation.draw(leds); } else { for (int i = 0; i < NUM_LEDS; i++) leds[i] = CRGB(0, 0, 0); FastLED.show(); animation.reset(); } delay(frame_delay_usecs); }
Первые испытания
Залив скетч и тестовую картинку на ардуинку, покрутил колесо и понял, что нифига не видно. Расстояние между пикселями слишком большое и нужно модифицировать ленту.
Модификация ленты
Поскольку возиться с демонтажом и пайкой диодов совсем не хотелось, я придумал выход
Я решил просто сложить ленту «гармошкой» вот так
Чтобы зафиксировать ее в этом состоянии и заодно защитить от внешних воздействий я решил сделать для нее корпус. Дйствуя по принипу «Все гениальное — просто!», взял кусок силиконового прозрачного шланга
Pазрезал его вдоль и запихнул ленту внутрь
Сзади и с торцов решил залить все термоклеем
Получилась гибкая и довольно прочная конструкция. То, что нужно!
Повторные испытания
Смонтировал новый «светодиодные элемент» на колесо и начал испытания.
Очень трудно было запечатлеть картинку, пришлось снимать через две линзы от солнцезащитных очков.
Да уж, очевидно, что где то я допустил ошибку, и пятиконечная звезда то предстает трехконечной, то четырех. Подозреваю, что в этом виноват мой датчик. Прав ли я? Или это ардуина не справляется с формированием изображения вовремя?
Решил заказать на али датчик холла на замену моему геркону, чтобы исключить влияние датчика, но китайский новый год немного задержит мой прогресс.
А пока же я решил еще немного поиграться с получившийся конструкцией например так (видео плохо передает реальное изображение, на самом деле оно не такое дерганное.
И пока датчик будет добираться ко мне из поднебесной, я решил покататься с паттернами, которые не будут разваливаться и сильно страдать от неправильного формирования например разного рода цветовыми узорами
Я точно не собираюсь останавливаться на этом, очень хочется добиться стабильной картинки в будущем, надеюсь, что замена датчика решит проблему. Также я планирую добавить возможность записи нескольких изображений в память ардуины и их смене через определенные промежутки времени.
Вообщем есть куда расти.
Спасибо, что прочитали сегодня мою очередную писанину.
Искренне ваш P43YM
P.S. Надеюсь на советы и критику по устройству в комментариях.
Источник материала.