Привет! Интернет вещей (IoT) уже на слуху у каждой бабушки или у дедушки. В стайке, теплице или гараже, наверняка, уже стоит умная розетка. Перейдём к делу. Надо узнать влажность и температуру, но дисплей по какой-то причине использовать не предоставляется возможным.



Список причин:


  • дорого стоит;
  • боится влаги;
  • лень паять;
  • мелкий шрифт, который совсем не видать;
  • бабушка обеспокоена эстетикой внутри теплицы, а ещё она ценит минимализм;
  • всё перечисленное вместе.

В таком случае есть отличный повод использовать цветовой подход к отображению информации. Всё бы ничего, да вот основных цветов совсем никудышно мало — каких-то семь (из радуги). А сможете различить голубой от синего или жёлтый от оранжевого? Если Вы и сможете, то бабушка на вряд ли. Что делать? Убрать такие странные цвета! Оставим: Красный, Жёлтый, Зелёный, Синий, Фазан Фиолетовый и Белый (неожиданно, да?). Сколько получилось? 6. А цифр-то 10, да ещё и минус для отрицательных чисел, плавающая точка и разделитель. Проявим смекалку и сделаем мигалку! Фиолетовый — это будет 5, а шесть это будет 5 + 1, а 1 будет Красный. Как раз уложились. Хух! В таблице 1 наглядно показаны цвета для соответствующих символов.


Таблица 1


Цифра (или символ) Цвет
Ноль мигает ФИОЛЕТОВЫЙ
Один горит КРАСНЫЙ
Два горит ЖЁЛТЫЙ
Три горит ЗЕЛЁНЫЙ
Четыре горит СИНИЙ
Пять горит ФИОЛЕТОВЫЙ
Шесть мигает ФИОЛЕТОВЫЙ / КРАСНЫЙ
Семь мигает ФИОЛЕТОВЫЙ / ЖЁЛТЫЙ
Восемь мигает ФИОЛЕТОВЫЙ / ЗЕЛЁНЫЙ
Девять мигает ФИОЛЕТОВЫЙ / СИНИЙ
Минус (-) мигает БЕЛЫЙ / КРАСНЫЙ
Точка (.) мигает БЕЛЫЙ
Конец строки (\n) горит БЕЛЫЙ

Для того, чтобы отобразить число, необходимо, разумеется, скачать и подключить библиотеку. Затем объявить пользовательскую callback-функцию void callback(int, int, int) R, G, B — каналы (от 0 до 255), которая будет обращаться к аппаратной части (зажигать светодиод). Вызвать функцию lightf, где первый аргумент будет указатель на эту самую callback-функцию, затем строка с форматом, которая полностью аналогична printf-ной и сколько угодно аргументов. Не забывайте использовать символ новой строки \n, после каждого спецификатора в форматной строке.


У меня под рукой лежит Базовое устройство M5Stack FIRE со встроенными Neopixel-панелями, для пробы как ничто лучше подойдёт. Видео с демонстрацией скетча, отображающего число Пи с точностью до 6 знаков после запятой можно посмотреть тут.


Я не просто так в самом начале сказал про IoT. Если серьёзно, то данный подход отлично подойдёт для отображения PIN-кода для сопряжения устройств и т. п.


Любите и не забывайте своих стариков. Спасибо за внимание!


Ссылка на библиотеку вот

Комментарии (51)


  1. Yuriy_krd
    21.11.2019 12:55
    +3

    И вместо того, чтобы просто посмотреть на дисплей (можно взять сдвоенный, семисегментный, большой)и увидеть значение, надо будет запомнить мигающую комбинацию, а потом смотреть в таблицу… По моему мнению, это перебор. Максимум, что можно выжать из трехцветного светодиода — это «ниже», «выше», «в норме»…


    1. dsiberia9s Автор
      21.11.2019 12:58
      -3

      Вы собираетесь в кнопку или датчик ставить сегментник?


      1. Yuriy_krd
        21.11.2019 13:14
        +2

        Поскольку для светодиода нужно питание, то вместо него легко можно запитать тот же сегментник. В чем проблема? Да, корпус будет несколько больше. Но и датчики сами по себе — не со спичечную голову (с обвязкой), чтобы можно было говорить о несоизмеримых размерах.


        1. dsiberia9s Автор
          21.11.2019 15:07
          -3

          Где Вы видели кнопки с сегментниками?


          1. dlinyj
            21.11.2019 15:42
            +6

            А что мешает её сделать? мышление ардуинщика?


          1. iliasam
            21.11.2019 15:56
            +2

            Есть даже кнопки с LCD: robosavvy.com/store/smartswitch-64x32-lcd-push-button-and-display.html (дорогие, правда).


  1. pewpew
    21.11.2019 12:57
    +6

    Ещё вариант — когда не так важна точность, можно плавно кодировать от фиолетового до белого через голубой и синий отрицательные значения, а от белого до жёлтого через красный и оранжевый — положительные. Например относительной температуры. Вполне можно так закодировать значительный диапазон от -50 до 50 °C, а если выходит за рамки — мигать, тем быстрее, чем больше вышло за них.
    image


    1. dsiberia9s Автор
      21.11.2019 12:59

      Да, как вариант!


    1. schetilin
      21.11.2019 18:48

      Сравните цвета «фиолетовый» и «бледно-красный» в начале шкалы — очень легко перепутать (мое мнение). Так что шкалу лучше начинать с синего, а не с фиолетового.


      1. pewpew
        21.11.2019 19:00

        Я просто предложил, вдохновившись термографией. Но как я понял, даже там нет единого стандарта. Во всяком случае, мне показалось логичным, что фиолетовый идёт после синего, т.к. в RGB это дополнение красного канала к синему.
        Впрочем, в моей шкале почти не задействован зелёный канал, но это легко дополнить, начиная шкалу от чёрного до белого:
        image
        Но мне этот вариант кажется менее удачным.


        1. dsiberia9s Автор
          21.11.2019 19:03

          классно!


      1. dsiberia9s Автор
        21.11.2019 19:03

        хороший совет!


      1. Coocos
        21.11.2019 21:16

        Не использовать фиолетовый. Сделать: синий-голубой-зеленый-желтый-красный. За норму взять зеленый.


        1. pewpew
          22.11.2019 13:01

          В случае наличия нормы, это лучший вариант. А если брать за основу шкалу Цельсия, то мне мой больше нравится.


    1. Akon32
      22.11.2019 12:20

      Имхо, у вас диапазон красный-жёлтый неинтуитивно развёрнут. На тепловизоре (в вашем комменте ниже) как-то получше (что-то очень похожее на HSB).


      1. pewpew
        22.11.2019 12:29

        За идею красно-жёлтого я взял от светимости нагретых вещей в реальном мире. Т.е. если металл нагреть, то он сначала краснеет, потом желтеет.
        В варианте с тепловизором (с картинки) как минимум два минуса:
        1) Минимальная температура отображается чёрным (отсутствием напряжения на светодиоде), что наверное менее информативно.
        2) В моём случае есть 0 (белый), который с одной стороны уходит в «холодные» цвета, а с другой в «тёплые», к чему люди уже привыкли. А тут нет знакомых ориентиров для нуля.


        1. Akon32
          22.11.2019 12:55

          Мне кажется, красный воспринимается как более тёплый, чем жёлтый. Для светимости температуры не те.


          1. pewpew
            22.11.2019 12:59

            В вашем варианте получается так:
            image

            Вполне жизнеспособно.


  1. Arson
    21.11.2019 13:13

    А чем не устраивает принцип бинарных часов?

    картинка
    image


    1. pewpew
      21.11.2019 13:19
      +2

      Предположу (после просмотра видео), что потому что rgb-светодиод всего один. Ну и паять-то лень, по сути паять семисегментник примерно так же по заморочкам, как несколько светодиодов. Хотя вот с бабушкой наверное договориться будет всего сложнее. Запомнить таблицу кодирования не так просто, хотя считать в двоичной системе (даже с подсказкой, просто складывать в уме) бабушкам сложно. Нет, правда, я свою не могу научить в домофон не называть всех входящих моим именем, не то что объяснять двоичную систему.


      1. CryptoPirate
        21.11.2019 13:56

        Хотя вот с бабушкой наверное договориться будет всего сложнее./blockquote>
        Бабушки разные бывают. Моя даже скайпом и e-mail научилась пользоваться :-)


      1. dsiberia9s Автор
        21.11.2019 15:08

        даже не знаю, что и сказать


    1. dsiberia9s Автор
      21.11.2019 15:07
      -1

      слишком много светодиодов


  1. FForth
    21.11.2019 13:15
    +3

    Предлагаю мигать азбукой морзе! :)


    1. dsiberia9s Автор
      21.11.2019 15:09
      +1

      я думал об этом, но это сложно для восприятия


      1. shutkarmannbii
        22.11.2019 06:06

        Простите я не бабушка — но мне кажется, что Ваша система является более сложной для восприятия, чем азбука Морзе
        . _ _ _ _
        .. _ _ _
        ... _ _
        .... _
        .....
        _....
        _ _...
        _ _ _..
        _ _ _ _.
        _ _ _ _ _
        куда более интуитивно чем мигание разными цветами
        PS ах значит морзянку светом сложно, ну ладно буду знать
        PSS когда читал заголовок и смотрел на картинку подумал что будет простая система с датчиком, логикой и подсветкой типо:
        Синий — холодно
        Зеленый — норма
        Красный — жарко
        ИМХО такого достаточно для той же теплицы, каждый диапазон настраивается и все счастливы, а запомнить надо всего то 3 цвета, еще и интуитивно понятных

        ЗЫЫЫ посмотрел видео — у меня чуть глаза не уплыли, и я слабо заметил разницу при достаточно быстрой смене цвета, девять так вообще адок


  1. GCU
    21.11.2019 13:16
    +1

    Вообще как-то странно придумывать свою систему кодирования.
    Можно же использовать «морзянку»

    P.S. Пока писал, уже предложили :)


    1. dsiberia9s Автор
      21.11.2019 15:09
      -1

      можно, но сложно. это Вам не звук


  1. FGV
    21.11.2019 14:37

    У m5stack есть экран, т.е. можно нормальные цифири показывать.
    А еще есть динамик, усилитель и i2s цап и мощи хватает что бы mp3 не напрягаясь проигрывать, т.е. можно говорить.


    Но мы легких путей для пользователя не ищем, поэтому будем моргать :))))


    1. GCU
      21.11.2019 14:40

      Может бабушка глуховата


      1. dsiberia9s Автор
        21.11.2019 15:10
        -1

        может! а может быть и слеповата.


    1. dsiberia9s Автор
      21.11.2019 15:10
      -1

      М5 я взял как прототип


  1. Akon32
    21.11.2019 14:57

    Можно взять DOS-палитру 16-битного цвета.
    Каналы-биты: 1 — синий, 2 — зелёный, 4 — красный, 8 — повышенная яркость. Остальные цвета or'ом комбинируются из этих.


    P.S. но лучше морзянкой.


    1. dsiberia9s Автор
      21.11.2019 15:11
      -2

      не будет лучше морзянкой, это свет


      1. Akon32
        22.11.2019 12:12

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


        А лучше лишь потому, что морзянка более известна, чем ваш код. Я бы сказал, общеизвестна. В вашем же случае нужна таблица, которую через год вы и сами можете не вспомнить.


        Кодировка, как в тепловизоре (HSB, канал H?), понагляднее будет.
        Вообще, желательно, чтобы в кодировке можно было разобраться без документации.


  1. Syzd
    21.11.2019 15:02

    Думал о подобной цветовой индикации температуры, пришел к мысли что НЕУДОБНО запоминать цвета.
    Приемлимый вариант 3-4 цвета, Фиолетовый -30..-20, синий -19 -10, белый -10..0, зеленый 0..+10, желтый +10..+19, красный +20 +29, розовый +30..+39.
    И мигать этим цветом единицы градуса: -24 — моргает фиолетовый 4 раза.


    1. dsiberia9s Автор
      21.11.2019 15:12
      -3

      что сложного выучить 5 цветов радуги?


  1. dsiberia9s Автор
    21.11.2019 17:28
    -1

    А как сделать иначе-то?


    1. Ivanii
      21.11.2019 20:30

      Любым кодом с расшифровкой через камеру смартфона, ввод вспышкой/фонариком.


  1. dsiberia9s Автор
    21.11.2019 17:29
    -3

    Кто ещё готов показать свою ненависть без аргументов?


    1. GCU
      22.11.2019 14:16

      Проблема в том, что система спорная, и можно предложить кучу других, которые не хуже.
      Например если можно мигать, то можно сделать и по-другому (по аналогии с монетами номиналом 1 и 5, где пятак большой):
      Короткий свет = 1, Долгий = 5
      Цвет задаёт разрядность:
      Красный — единицы
      Желтый — десятки
      Зелёный — сотни
      Синий — тысячи
      (может лучше наоборот — от холодных цветов к тёплым)

      2018 = Два коротких синих, (два длинных зелёных), короткий желтый, один длинный красный и три коротких

      Почему это может быть лучше:
      Не надо держать в уме порядок, он привязан к цвету.
      Цифр всего две 1 и 5, и запомнить их логичнее, чем «мигает Фиолетовый это 0»
      Не надо считать больше 5 (1 длинный и 4 коротких = 9)
      (Можно модифицировать что 0 это два длинных, например, вместо пропуска).

      Но это предложение так же спорно, как и Ваше решение, оно не является стандартным и понятным как та же «морзянка».

      Вариант считать мигания (от 1 до 10, где 10 это ноль) тоже можно сказать стандартный, так как это по сути импульсный набор номера телефона.

      Аргументированная «ненависть»:

      Можно решить использовать стандартные системы кодирования, которые всем понятны (это кстати хороший аргумент)
      Из набора стандартных и экспериментальных решений на основе тестирования выбрать наилучший (бабушка не захотела изучить «морзянку», считать до 10 сбивается, складывать 5 и 4 единицы слишком напряжно, цвета путает и т.д.) — разумная аргументация.


  1. derduron
    21.11.2019 17:32

    Да проще моргать с паузами нужное кол-во раз. Уж до 10 сосчитать получится.
    Запомнить все эти цвета/моргания спорное решение.
    Проще тогда сервоприводы со стрелками прилепить. И наглядно, и шкалу хоть 72 шрифтом сделать можно.


    1. dsiberia9s Автор
      22.11.2019 06:17

      Можно было бы, но со счёта сбиться просто.


  1. solderman
    21.11.2019 19:27
    +1

    А Вы сами используете то, что предложили? Где именно и насколько это Вам удобно? Сколько бабушек и дедушек уже пользуются предложенным и насколько им это удобно?


    1. vin2809
      22.11.2019 10:07

      Я вот о том же.


      Прежде чем позиционировать принцип для категории "бабушка, дедушка" вы бы хоть на своих проверили, а смогут ли они запомнить вашу таблицу...


      1. dsiberia9s Автор
        22.11.2019 11:11

        Сделаем! :)


  1. iliasam
    21.11.2019 20:51

    Цитата из Википедии: " Красно-зелёным дальтонизмом страдают до 8 % мужчин и 0,5 % женщин североевропейского происхождения. Способность видеть цвет также уменьшается в старости."
    Дальтоники такой способ кодирования ивно не одобрят.


    1. dsiberia9s Автор
      22.11.2019 06:16

      Действительно, необходимо учесть этот нюанс.


    1. kvazimoda24
      24.11.2019 19:08

      Я дальтоник и жёлтый с зелёным светодиоды не различаю, а фиолетового цвета для меня вообще практически не существует. И можно ещё привести кучу всяких оттенков, где я увижу не то, что есть на самом деле.


  1. gerasimenkoao
    22.11.2019 09:57

    Интернет вещей (IoT) уже на слуху у каждой бабушки или у дедушки. В стайке, теплице или >гараже, наверняка, уже стоит умная розетка. Перейдём к делу. Надо узнать влажность и >температуру, но дисплей по какой-то причине использовать не предоставляется возможным.

    Я не дедушка, и уж тем более, не бабушка, но ни одной умной розетки не имею, видимо это самые продвинутые слои населения, что мы прямо на них равняемся ;-)


    Но комментарий не об этом, а вот о чем:

    Вкус детства — проверять исправность батареек языком.


    Если уж мы пошли по нестандартным подходам, то в теплицу так и просится датчик кислотности почвы, индикатор- два контакта — прямое соответствие — лизнул -не щипет — низкая кислотность, ну и т.д.


    Думаете, это все, на что данный метод годится?
    Отнюдь!


    Можно сделать часы — хочешь узнать время — приложил влажную пятерню — узнал.
    Вот живо себе представил время пол-пятого ;-)


    dsiberia9s, не обижайтесь, уж такие на Хабре нравы, взяли-бы модуль WiFi Witty cloud, да никто может и слова-бы не сказал, а так на заглавной фото девайс с экраном, и бах — светодиоды!!!


    P.S. А бабушки бывают разные, доказано пронхаб ;-)


    1. dsiberia9s Автор
      22.11.2019 11:09

      Понятно! :)