Привет! Интернет вещей (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)
pewpew
21.11.2019 12:57+6Ещё вариант — когда не так важна точность, можно плавно кодировать от фиолетового до белого через голубой и синий отрицательные значения, а от белого до жёлтого через красный и оранжевый — положительные. Например относительной температуры. Вполне можно так закодировать значительный диапазон от -50 до 50 °C, а если выходит за рамки — мигать, тем быстрее, чем больше вышло за них.
schetilin
21.11.2019 18:48Сравните цвета «фиолетовый» и «бледно-красный» в начале шкалы — очень легко перепутать (мое мнение). Так что шкалу лучше начинать с синего, а не с фиолетового.
pewpew
21.11.2019 19:00Я просто предложил, вдохновившись термографией. Но как я понял, даже там нет единого стандарта. Во всяком случае, мне показалось логичным, что фиолетовый идёт после синего, т.к. в RGB это дополнение красного канала к синему.
Впрочем, в моей шкале почти не задействован зелёный канал, но это легко дополнить, начиная шкалу от чёрного до белого:
Но мне этот вариант кажется менее удачным.
Akon32
22.11.2019 12:20Имхо, у вас диапазон красный-жёлтый неинтуитивно развёрнут. На тепловизоре (в вашем комменте ниже) как-то получше (что-то очень похожее на HSB).
pewpew
22.11.2019 12:29За идею красно-жёлтого я взял от светимости нагретых вещей в реальном мире. Т.е. если металл нагреть, то он сначала краснеет, потом желтеет.
В варианте с тепловизором (с картинки) как минимум два минуса:
1) Минимальная температура отображается чёрным (отсутствием напряжения на светодиоде), что наверное менее информативно.
2) В моём случае есть 0 (белый), который с одной стороны уходит в «холодные» цвета, а с другой в «тёплые», к чему люди уже привыкли. А тут нет знакомых ориентиров для нуля.
Arson
21.11.2019 13:13А чем не устраивает принцип бинарных часов?
картинкаpewpew
21.11.2019 13:19+2Предположу (после просмотра видео), что потому что rgb-светодиод всего один. Ну и паять-то лень, по сути паять семисегментник примерно так же по заморочкам, как несколько светодиодов. Хотя вот с бабушкой наверное договориться будет всего сложнее. Запомнить таблицу кодирования не так просто, хотя считать в двоичной системе (даже с подсказкой, просто складывать в уме) бабушкам сложно. Нет, правда, я свою не могу научить в домофон не называть всех входящих моим именем, не то что объяснять двоичную систему.
CryptoPirate
21.11.2019 13:56Хотя вот с бабушкой наверное договориться будет всего сложнее./blockquote>
Бабушки разные бывают. Моя даже скайпом и e-mail научилась пользоваться :-)
FForth
21.11.2019 13:15+3Предлагаю мигать азбукой морзе! :)
dsiberia9s Автор
21.11.2019 15:09+1я думал об этом, но это сложно для восприятия
shutkarmannbii
22.11.2019 06:06Простите я не бабушка — но мне кажется, что Ваша система является более сложной для восприятия, чем азбука Морзе
. _ _ _ _
.. _ _ _
... _ _
.... _
.....
_....
_ _...
_ _ _..
_ _ _ _.
_ _ _ _ _
куда более интуитивно чем мигание разными цветами
PS ах значит морзянку светом сложно, ну ладно буду знать
PSS когда читал заголовок и смотрел на картинку подумал что будет простая система с датчиком, логикой и подсветкой типо:
Синий — холодно
Зеленый — норма
Красный — жарко
ИМХО такого достаточно для той же теплицы, каждый диапазон настраивается и все счастливы, а запомнить надо всего то 3 цвета, еще и интуитивно понятных
ЗЫЫЫ посмотрел видео — у меня чуть глаза не уплыли, и я слабо заметил разницу при достаточно быстрой смене цвета, девять так вообще адок
GCU
21.11.2019 13:16+1Вообще как-то странно придумывать свою систему кодирования.
Можно же использовать «морзянку»
P.S. Пока писал, уже предложили :)
FGV
21.11.2019 14:37У m5stack есть экран, т.е. можно нормальные цифири показывать.
А еще есть динамик, усилитель и i2s цап и мощи хватает что бы mp3 не напрягаясь проигрывать, т.е. можно говорить.
Но мы легких путей для пользователя не ищем, поэтому будем моргать :))))
Akon32
21.11.2019 14:57Можно взять DOS-палитру 16-битного цвета.
Каналы-биты: 1 — синий, 2 — зелёный, 4 — красный, 8 — повышенная яркость. Остальные цвета or'ом комбинируются из этих.
P.S. но лучше морзянкой.
dsiberia9s Автор
21.11.2019 15:11-2не будет лучше морзянкой, это свет
Akon32
22.11.2019 12:12Почему не будет лучше? Не вижу причин, по которым было бы сложно воспринимать цифры морзянкой глазами.
А лучше лишь потому, что морзянка более известна, чем ваш код. Я бы сказал, общеизвестна. В вашем же случае нужна таблица, которую через год вы и сами можете не вспомнить.
Кодировка, как в тепловизоре (HSB, канал H?), понагляднее будет.
Вообще, желательно, чтобы в кодировке можно было разобраться без документации.
Syzd
21.11.2019 15:02Думал о подобной цветовой индикации температуры, пришел к мысли что НЕУДОБНО запоминать цвета.
Приемлимый вариант 3-4 цвета, Фиолетовый -30..-20, синий -19 -10, белый -10..0, зеленый 0..+10, желтый +10..+19, красный +20 +29, розовый +30..+39.
И мигать этим цветом единицы градуса: -24 — моргает фиолетовый 4 раза.
dsiberia9s Автор
21.11.2019 17:29-3Кто ещё готов показать свою ненависть без аргументов?
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 единицы слишком напряжно, цвета путает и т.д.) — разумная аргументация.
derduron
21.11.2019 17:32Да проще моргать с паузами нужное кол-во раз. Уж до 10 сосчитать получится.
Запомнить все эти цвета/моргания спорное решение.
Проще тогда сервоприводы со стрелками прилепить. И наглядно, и шкалу хоть 72 шрифтом сделать можно.
solderman
21.11.2019 19:27+1А Вы сами используете то, что предложили? Где именно и насколько это Вам удобно? Сколько бабушек и дедушек уже пользуются предложенным и насколько им это удобно?
vin2809
22.11.2019 10:07Я вот о том же.
Прежде чем позиционировать принцип для категории "бабушка, дедушка" вы бы хоть на своих проверили, а смогут ли они запомнить вашу таблицу...
iliasam
21.11.2019 20:51Цитата из Википедии: " Красно-зелёным дальтонизмом страдают до 8 % мужчин и 0,5 % женщин североевропейского происхождения. Способность видеть цвет также уменьшается в старости."
Дальтоники такой способ кодирования ивно не одобрят.kvazimoda24
24.11.2019 19:08Я дальтоник и жёлтый с зелёным светодиоды не различаю, а фиолетового цвета для меня вообще практически не существует. И можно ещё привести кучу всяких оттенков, где я увижу не то, что есть на самом деле.
gerasimenkoao
22.11.2019 09:57Интернет вещей (IoT) уже на слуху у каждой бабушки или у дедушки. В стайке, теплице или >гараже, наверняка, уже стоит умная розетка. Перейдём к делу. Надо узнать влажность и >температуру, но дисплей по какой-то причине использовать не предоставляется возможным.
Я не дедушка, и уж тем более, не бабушка, но ни одной умной розетки не имею, видимо это самые продвинутые слои населения, что мы прямо на них равняемся ;-)
Но комментарий не об этом, а вот о чем:
Вкус детства — проверять исправность батареек языком.
Если уж мы пошли по нестандартным подходам, то в теплицу так и просится датчик кислотности почвы, индикатор- два контакта — прямое соответствие — лизнул -не щипет — низкая кислотность, ну и т.д.
Думаете, это все, на что данный метод годится?
Отнюдь!
Можно сделать часы — хочешь узнать время — приложил влажную пятерню — узнал.
Вот живо себе представил время пол-пятого ;-)
dsiberia9s, не обижайтесь, уж такие на Хабре нравы, взяли-бы модуль WiFi Witty cloud, да никто может и слова-бы не сказал, а так на заглавной фото девайс с экраном, и бах — светодиоды!!!
P.S. А бабушки бывают разные, доказано пронхаб ;-)
Yuriy_krd
И вместо того, чтобы просто посмотреть на дисплей (можно взять сдвоенный, семисегментный, большой)и увидеть значение, надо будет запомнить мигающую комбинацию, а потом смотреть в таблицу… По моему мнению, это перебор. Максимум, что можно выжать из трехцветного светодиода — это «ниже», «выше», «в норме»…
dsiberia9s Автор
Вы собираетесь в кнопку или датчик ставить сегментник?
Yuriy_krd
Поскольку для светодиода нужно питание, то вместо него легко можно запитать тот же сегментник. В чем проблема? Да, корпус будет несколько больше. Но и датчики сами по себе — не со спичечную голову (с обвязкой), чтобы можно было говорить о несоизмеримых размерах.
dsiberia9s Автор
Где Вы видели кнопки с сегментниками?
dlinyj
А что мешает её сделать? мышление ардуинщика?
iliasam
Есть даже кнопки с LCD: robosavvy.com/store/smartswitch-64x32-lcd-push-button-and-display.html (дорогие, правда).