«Сумасшедшие» термостаты Hive сами устанавливают температуру 32ºC

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

Производитель British Gas сегодня прислал в редакцию The Memo заявление: «Мы осведомлены о температурном сбое, который затронул очень маленькое количество пользователей: определённая последовательность команд в приложении Hive под iOS могла привести к повышению температуры до 32ºC».

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


Компания British Gas продала 300 000 таких термостатов. Производитель не уточнил, какое количество из них затронул баг.

«Любые пользователи, которые увидят это, могут очень легко и немедленно исправить ситуацию, просто понизив температуру с помощью программы на смартфоне, веб-приложения или на самом термостате, — сказано в заявлении. — Никому не нужно волноваться из-за слишком высокой температуры, потому что остальная часть приложения функционирует нормально. Тем временем, мы работаем над программным обновлением, которое скоро станет доступно».

По совпадению, другой умный термостат Nest в середине января тоже сглючил. Из-за программного сбоя аккумулятор устройства быстро разряжался — и термостат уходил в офлайн, отключив обогрев помещений ночью в январский мороз. Люди просыпались слегка посиневшими или разбуженные плачем ребёнка в 4 утра, как журналист NY Times. Компания-производитель назвала причиной декабрьский программный апдейт.

ссылка на оригинал статьи https://geektimes.ru/post/271868/

Конструктор 3D-принтера из поднебесной от SUNHOKEY

Примерно пол года назад я приобрел себе 3D-принтер. С тех пор я наблюдаю как недорогие китайские решения по типу моего конструктора набирают популярность. И я считаю это правильно, при должной сноровке и небольшом умении такие конструкторы могут дать фору именитым брендам, которые стоят в разы дороже, а иногда даже и на порядки.

В этой публикации я бы хотел познакомить читателей Geektimes с такими конструкторами и показать, что тут нечего бояться. А в разобранном виде получить принтер даже приятней, так как за его сборкой можно провести время очень интересно + получить первоначальное представление как и что работает.

image

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

Я давно следил за развитием бытовых 3D-принтеров и уже когда их цена снизилась до 1000 долларов (при цене 30 за бакс) начал еще пристальней наблюдать за ценовой политикой. Цена падать начала примерно пару лет назад, вернее уменьшалась то она уже давно, но вот пару лет назад прям начали появляться варианты по ценам все интереснее и интереснее. И вот в прошлом году (в 2015) цены достигли своего апологета. На рынок массово вышли китайские наборы, и уже не просто из строительных шпилек и непойми чего, а вполне со сносными комплектующими.

На этот набор от Sunhokey я натолкнулся тут же на гиктаймс в комментариях к посту о 3D-принтере. С того момента я и стал следить за ценой. И вот однажды цена упала сразу на 15 долларов, курс на тот момент был не такой как сейчас и я решил побыстрее заказать. Цена на тот момент была 275 баксов.

Ну и как обычно у меня бывает. Вопрос-то я изучил, принтер — ОК, а вот с доставкой непонятно. В комментариях к заказу писали что кому-то доехало чуть ли не за пару недель. Положительных отзывов на момент заказа было чуть меньше 300.

image

Как выяснилось позже заказ пошел в доставку по хитрому пути. Отчасти это плюс, так как с таможней я вообще никак не пересекался, вернее не я а посылка. Минусом же стало время доставки. Судя по всему посылка поехала грузовиком из Шенженя к границе с Россией, там каким-то образом она пересекла границу, возможно даже на вьючных мулах (судя по внешнему виду упаковки) и достигнув Омска была отправлена уже через ПЭК от частного лица с русской фамилией, опять же грузовиком. Ух… Почти месяц я ждал обновления трека, когда китайский трек сменится российским. И вот спустя 24 дня после оплаты мне приходит СМС от ПЭК, что товар мне выехал и прибудет еще через 20 дней.

image

Спустя все сроки и почти 2 месяца ожидания мы на нашем семейном жуке поехали забирать посылку =)

image

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

image

В моей посылке было «все путём», ну почти. Пострадали 2 катушки пластика. У одной треснул бортик в двух местах, у другой развалилось пополам основание. Вроде такие косяки тоже можно было бы заменить, но я не стал напирать на рподавца а просто одну катушки склеил цианокрилатом а другую укрепил скотчем продев несколько лент через центральное отверстие.

image

Вот на этой фотографии видно, что пластик лежал вообще без защиты, отчего и пострадал.

image

Вообще с упаковкой тут все было классно. Первые партии отправляли в пенопласте. Представляю какой это был кошмар когда вынимаешь такой бутерброд из коробки. У меня был опыт общения с подобными упаковками (стеклянный китайский стол).

image

Опасения насчет акрила не подтвердились. Вспененный полипропилен отработал на все 100%.
Весь акрил еще и в защитной пленке был. С одной стороны прозрачной, с другой розоватой, подозреваю это фишка специально для лазерной резки. Кстати так как акрил порезан лазером у него на кромке есть некая напряженность. Вот в чем сила таится Люк. Поэтому ни в коем случае не вздумайте протирать раму спиртом или чем-то подобным, иначе она вся покроется микротрещинами.

image

Вот все детали. Что куда, на первый взгляд, фиг поймешь. Анархия!

image

А это основная самая большая часть рамы плюс стол с подогревом. А вот кстати подогреваемый стол это большой плюс, уже можно печатать ABS и прочими материалами с высокой усадкой.

image

Основа стола. Она тоже акриловая. За пол года полета, все с ней нормально, не сломалась. Но все-равно я бы её не очень доверял. По возможности лучше вообще всю раму заменить на сталь (цена решения примерно 4000р. + время на разборку/сборку).

image

Ну всё. Хватит рассматривать это безобразие, пора этому хаосу приобрести законченный вид и явить чудо машину свету.

image

Собирать все легко. Просто повторяем за молчаливым китайцем на видео все действия. Инструкция по сборке + нужные программы и картинки с настройками были приложены на диске заботливыми китайскими друзьями. Да порой продавцы салиэкспресс тоже предоставляют хороший сервис.

image

Комплектующие тут неплохие. Вот на фото часть каретки двигающейся по оси Z. Тут и нормальные шаговые двигатели NEMA17, а не урезанные версии и длинный подшипник LM8LUU на 8мм и даже латунная гайка трапецивидного винта тоже на 8 мм. В общем при цене в рублях примерно 17 000 удивительно на чем заработал продавец. И к тому времени как доллар подорожал китайцы так же скинули цену и в рублях принтер по прежнему стоит приблизительно 17 тыр.

image

Вторая часть каретки. Тут видно что есть преднатяжитель ремня, а такое решение не везде используется. Даже распиаренный недорогой Wanhao Duplicator i3 в качестве натяжителей использует пружинки от бельевых прищепок.

image

А это самая интересная часть принтера нагревательный элемент с карткой оси X. Тут установлен клон от E3D v5. Ничего плохого про китайские клоны E3D сказать не могу. Сколько их перепробовал, всегда все ок. Вот только v5 я что-то недолюбливаю и почти сразу я заменил его на более компактный V6, чего и вам советую.

image

Казалось бы очень простая штуковина, а вон что можно с её помощью делать… Тут ничего сложного. Есть керамический нагреватель на 40W, терморезистор для контроля температуры, алюминиевый кубик для передачи тепла к соплу и стальной термобарьер заключенный в алюминиевый же радиатор для того чтобы нагрев не шел выше сопла.

image

В общем еще раз повторюсь, меняйте вы этот v5 на v6, можно цельнометаллический, и не будете знать проблем. Главное обдув получше и еще один секрет. О нем попозже расскажу.

Саму голову в сборе можно приобрести тут, я уже несколько раз там брал. Продавец проверенный, правда иногда тормозит с отправкой. Цена смешная 500-600р.в зависимости от курса.

image

Это моторы оси Z. Тут стоит их сразу пара и каждый на отдельном драйвере. Я бы если честно сделал на один драйвер а освободившийся пустил бы на второе сопло. Уже занимаюсь этим вопросом, жду недостающих деталей…

image

Собираем основание стола.

image

Еще одна деталь с натяжителем ремня. Теперь для оси по которой ездит стол, Y получается значит.

image

Элегантное решение, я считаю.

image

Собираем подставку для катушки. Подставка эта с одной стороны компактна и удобна, с другой не очень. Помните я писал что бортик у одной катушки обкололся? Так вот если бы не было возможности его склеить, то таким держателем уже не воспользуешься. На фото образец пластика PLA от FL-33. Неплохой пластик, но победил я его не сразу. По началу он забивал напрочь сопло. О чем в следующий раз.

image

Тут видно что используются подшипники с бортиком.

image

Переходим к крупным деталям.

image

Гордое имя Prusa i3.

image

Шпильки все же тут применяются, но не простые оцинкованные а нормальные нержавеющие.

image

Постепенно вундервафля приобретает законченный вид.

image

Вот уже и ось X установлена на место.

image

Стол. А вот тут я подготовился сразу. Провода у стола лучше заменить на потолще. А для этого нужно отделить термоизолятор держащийся на каптоновом скотче и перепаять их.

image

Сказано, сделано. Заодно и подложим термоизолятор получше. Я использовал пробку от банного коврика, купленного в карусели рублей за 60 или 80. Если вы делали недавно ремонт то найдете термоизоляционный материал получше. Идеально термоизолятор для теплого пола, он может быть уже с клеющейся основой, поэтому монтировать такой будет удобней.

image

Раз.

image

Два. Готово. Алюминиевый скотч тоже пригодился.

image

Пол дела сделано. Да да только половина. К этому моменту на сборку ушло примерно часов 6 наверное, может чуть больше. Был перерыв на поспать 🙂

image

Переходим к электронно электрической части. Тут установлена плата MKS GEN v1.1 это в принципе та же ардуина с RAMPS только более качественная. Плюс это то что все грамотно разведено и есть разъемы на драйвера. Драйвера тут съемные а не впаяные как на MELZI другой плате часто используемой в недорогих 3D-принтерах.

image

Тут установлен экструдер типа Bouden со всеми его недостатками и достоинствами. Что это значит? Значит что голова легкая и не будет давать инерционных волн при резкой смене направления движения, но и мягкие материалы сюда лучше не заправлять. FLEX точно не пойдет.

image

Так же у данной модели имеется выносной экран с картридером, занчит можно печатать без компьютера. Я в первую неделю не знал что крутилка еще и кнопка, и стартовал печать через комп. Потом все же нажал посильнее и открылись новые возможности.

image

Остается проложить аккуратно провода и можно переходить к печати. Блин уже не хватает терпения, собираем их в пучки, потом проложу как надо.

image

Красота. А, нужно еще на платформу малярный скотч наклеить.

image

Ага, вот так теперь совсем хорошо.

image

Принтер готов к печати. О чем расскажу в следующей статье.

Сам принтер доступен по этой ссылке: Prusa i3 SUNHOKEY.

ссылка на оригинал статьи https://geektimes.ru/post/271708/

WhatsApp прекратит поддержку своего мессенджера для Android 2.*, Blackberry и S40

В официальном блоге WhatsApp сообщается, что к концу 2016 года компания прекратит поддержку и выпуск обновлений для своего мессенджера для ряда устаревших операционных систем. К ним компания относит Blackberry (даже последнюю версию системы — Blackberry 10, появившейся в 2012 году), Nokia S40, S60, Android 2.1 и 2.2, а также Windows Phone 7.1.

Компания объясняет свое решение очень просто: мир операционных систем кардинально изменился с 2009 года, когда появилась первая версия WhatsApp. Тогда 70% всех смартфонов продавали Nokia и Blackberry, тогда как сейчас операционки от Google, Apple и Microsoft совокупно занимают 99.5% рынка. Таким образом инженеры хотели бы сконцентрировать свои усилия для действительно востребованных устройств.

Сегодня WhatsApp выпустила обновление под номером 2.12.14 для iOS. Около месяца назад компания анонсировала, что это обновление будет очень крупным и будет включать в себя более 50 новых функций. Среди них можно назвать собственный браузер, который предназначен для просмотра ссылок прямо из мессенджера, экспорт истории чатов в формате zip, end-to-end шифрование для чатов и групп, а также другие улучшения, вроде выбора фона на чата. Версия с аналогичными функциями для Android должна появиться в конце марта.

Кроме того, в начале этого года WhatsApp принял другое решение относительно платы за использование своего сервиса: и так небольшая абонентская плата была отменена, а рекламы должна быть заменена возможностью "… использовать WhatsApp для поддержки связи с компаниями и организациями, новости от которых вы хотите получать. Например, получить от вашего банка информацию о мошеннических транзакциях или от авиакомпании о задержке рейса".

ссылка на оригинал статьи https://geektimes.ru/post/271864/

Дайджест интересных материалов из мира Drupal #18

Привет!

Мы собираем полезные статьи и свежие новости из мира Drupal и делимся с вами раз в месяц. В этом выпуске провожаем зиму (и Drupal 6).

По-русски

  1. «Приятно наблюдать, как статьи по Друпал 8 постепенно наполняют русскоязычный сегмент сети…» — пишет автор открывающей статьи рубрики «По-русски». Действительно приятно! Друпал 8: Routing, links, permissions, tabs или "Hello YML" — создаём простой модуль со всеми необходимыми правами и ссылками в меню.
  2. Небольшой обзор Migrate для семёрки от этого же автора.
  3. Похоже, что на Drupal.ru пригласили писать Дэдпула. По крайней мере с чувством юмора у нашего нового Drupal-героя всё впорядке. Уже можно насладиться двумя шедеврами: Drupal 8, Cache & Rock N’ Roll и Drupal 8. Entity, мы с тобой одной крови. Автор, некогда объяснять, свяжись с нами срочно!
  4. Ещё на Drupal.ru: анонс модуля render_boost для ускорения семёрки.
  5. Там же на Drupal.ru можно найти информацию по Backdrop CMS, форку семёрки для тех, кому пока велик Drupal 8.
  6. Возвращемся к классике. Новое в блоге xandeadx.ru: полезный сниппет для поддержки алиасов нод в актуальном состоякии.
  7. Там же подробно и со скриншотами, как настроить табы (локальные задачи) во Views. То же самое для восьмёрки.
  8. Интеграция custom entity с Panelizer — продолжение серии статей про сущности в блоге nightdevel.ru.
  9. Модуль Commerce Robokassa обновлен до 7.x-2.0-rc1.
  10. Тема настройки локального окружения никогда не выйдет из моды. На сей раз читайте про настройку xdebug для сложных случаев. Хештеги: #windows #virtualbox #sshtunnel #docker #phpstorm.

Drupal 8

  1. Обновления безопасности: Вышел Drupal 8.0.4.
  2. Создание простейшнего плагина к модулю Views рассматривается в заметке "Views Plugins (Part 1): Simple Area Handler Plugin".
  3. Переезжаем на Composer. Из ветки Drupal 8.1.x убрали все зависимости.
  4. В последнее время всё больше и больше компаний уделяют внимание UX админки Drupal’a. В статье "Redesigning the content creation page for Drupal 8" рассматриваютсся связанные с этим процессом грабли.
  5. Документация по модулю Rules.
  6. В материале "Drupal 8 REST Requests" рассматриваются вопросы работы с REST запросами к системе. Советуем также ознакомится с 3 советами по этой же теме.
  7. Вкладываем параграфы в параграфы.
  8. Несколько советов по настройке CloudFlare от автора DrupalVM, который увлёкся Raspberry Pi.
  9. Слайды презентации Debugging in Drupal 8. Забудьте о dpm().
  10. Одноименная видео-серия про отладку друпала, но уже от совсем другого автора (будет дополняться).
  11. Вим Лирс предлагает поиграться с BigPipe, который уже на пути в 8.1. Разобраться, что это вообще такое, поможет большая красивая статья, которую написал не Вим Лирс 🙂
  12. Если вы увидели ошибку Mismatched entity and/or field definitions, то скорее всего у вас не применились обновления к сущностям. Исправляется запуском drush entity-updates сразу после drush updb.
  13. Ещё раз про разные типы конфигураций в Drupal 8.

DevOps & CI

  1. Автор заметки "Alias Drupal Composer Project" напоминает, что длинющие команды в Shell’e вполне можно заменить псевдонимами.
  2. У Друпала появился свой официальный Docker-контейнер.
  3. Нам нужно больше докера: Dockerized Drupal.

Всё для разработчика

  1. Вышли две новые версии семерки: 7.42 и 7.43. Важные исправления безопастности.
  2. Прошла эпоха. Drupal 6 всё.
  3. Краткое ввдение в профилирование при помощи сервиса Blackfire. Мы уже о нём слышали от Ларри Гарфилда.
  4. Импортируем JSON-данные при помощи JSONPath.
  5. В статье "Spam Defense Network" озвучен призыв создать глобальную сеть плохих айпишников для борьбы со спамом.
  6. Размышления на тему будущего CMS в пользу decoupled-архитектуры.
  7. Вышла бета-версия системы бронирования и управления резервациями (в некотором роде аналог booking.com).
  8. Создаем редиректы при помощи одноименного модуля.
  9. В статье "Extend Drupal’s autocomplete Javascript with your own" рассматриваются вопросы расширения встроенной функционалисти автокомплита в Drupal 7.

Модули, темы и инструменты

  1. Subrequest
    Рендерим произвольный роут в блоке.
  2. Features Builder
    Автоматизируем рутинный процесс выбора компонент для ваших фич. Модуль, по умолчанию, автоматически генерирует соответствующие модули (фичи) для каждого из ваших компонентов. Модулю Features Builder посвящена отдельная статья.
  3. XHProf Sample
    Используем легковесное профилирование (семплирование) при помощи XHProf. При помощи данного метода можно достичь впечатляющих результатов.
  4. Image Effects
    Новый модуль с коллекцией полезных стилей изображений (статья).
  5. Swift Mailer
    Интергация с одноименной PHP-библиотекой для отправки почты. Настройка на Drupal 8: часть 1, часть 2.
  6. Simple XML sitemap
    Лёгкий аналог XML Sitemap под восьмёрку (статья).
  7. Accelerated Mobile Pages (AMP)
    Интеграция восьмёрки с одноимённым проектом для оптимизации производительности на мобильных устройствах (статья).

Бизнес и Сообщество

  1. Девид Ротштейн покинул пост со-мейнтейнера Drupal 7, чтобы уделять больше времени другим активностям. Радует, что вакантное место пустовало не долго: Скот Ривз в начале февраля оперативно принял поступившее предложение.
  2. С 7 по 18 марта состоятся выборы в совет Drupal-ассоциации из предложенного списка кандидатов. Если у кого-то есть вопросы, что они вообще там делают, то ознакомьтесь с информацией на официальной странице и c заметкой kalabro.
  3. Светские новости: Дрис встретился с королевской семьей Белгии.
  4. Программа финансирования портирования модулей на восьмерку приносит свои плоды. В ближайшем будущем обещают выпустить Panels, Panelizer и целую пачку модулей Search API.Значительный успех для азиатского друпала — в Индии прогремел DrupalCon. Число участников превысило тысячу. Некоторые людисчитают, что такой популяризации Друпала поспобоствовало внедрение на Drupal.Org системы рейтинга компаний на основе вклада в развитие системы и сообщества.

На этом на сегодня всё. В комментариях здесь и на dru.io обсуждаем, конечно же, докер. Используете? Что посоветуете сомневающимся?

Над выпуском работали Олег Кот и Катя Маршалкина. Подписывайтесь на рассылку, слушайте наши подкасты, присылайте интересные статьи и изучайте новое вместе с нами!

ссылка на оригинал статьи https://habrahabr.ru/post/278227/

IR транскодер на Arduino

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

Для Arduino существует прекрасная библиотека IRemote которая делает построение разнообразных ИК систем управления очень простым. Но при решении даже такой простой задачи как транскодер обязательно находятся проблемы которые интересно решать.
Итак для начала нам необходим интегральный ИК приёмник типа TSOP312 или соответствующий шилд для Arduino. Не стоит забывать что ИК приёмников существует очень много и цоколёвка у них меняется случайным образом. Например я использовал некий безымянный элемент по цоколёвке совпадающий с TSOP382 но в уменьшенном корпусе и без разделительного ключа.

Собранная схема нужна нам для получения кодов команд от обеих пультов, к несчастью снять команды с устройства для которого пульт утерян несколько сложнее. Вы можете всё-таки найти пульт донор, воспользоваться универсальным пультом подобрав код (а зачем тогда вам тогда транскодер, раз уж пульт подошёл?) или попытавшись воспользоваться данными из интернет баз по IR кодам. Самым простым для меня оказалось воспользоваться приложением под андроид, эмулирующий нужный мне пульт.
Для чтения данных используем пример IRrecvDumpV2 из поставки IRremote, если ваш пульт относится к распознаваемым библиотекой то сырой результат сканирования вам не понадобится, хотя например пульт от LG у меня ложно распознавался как Samsung и не заработал при попытке отправлять команды через sendLG.

Пример полученных данных под спойлером:

Encoding: SAMSUNG
Code: 34346897 (32 bits)
Timing[67]:
+4450, -4350 + 600, — 500 + 600, — 500 + 600, -1600
+ 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500
+ 600, — 500 + 600, — 500 + 600, — 500 + 600, -1600
+ 600, -1600 + 600, — 500 + 600, -1600 + 600, — 500
+ 600, — 500 + 600, — 500 + 600, -1600 + 600, -1600
+ 600, — 500 + 600, -1600 + 600, — 500 + 600, — 500
+ 600, — 500 + 550, -1650 + 550, — 550 + 550, — 550
+ 550, -1650 + 550, — 550 + 550, -1650 + 550, -1600
+ 600, -1600 + 600
unsigned int rawData[67] = {4450,4350, 600,500, 600,500, 600,1600, 600,1600, 600,500, 600,1600, 600,500, 600,500, 600,500, 600,500, 600,1600, 600,1600, 600,500, 600,1600, 600,500, 600,500, 600,500, 600,1600, 600,1600, 600,500, 600,1600, 600,500, 600,500, 600,500, 550,1650, 550,550, 550,550, 550,1650, 550,550, 550,1650, 550,1600, 600,1600, 600}; // SAMSUNG 34346897
unsigned int data = 0x34346897;

В случае если захват выдаёт сообщение “IR code too long. Edit IRremoteInt.h and increase RAWLEN” библиотеку придётся немного исправить — увеличив размер буфера для команд. Для пульта которым планируется управлять достаточно знать 32 битный код команды, стоит обратить внимание что на некоторых пультах код зажатой клавиши отличается от той же кнопки в режиме нажал и отпустил. Такие кнопки потребуют двух значений. Сводим полученные коды в удобную для вас таблицу. В ту же таблицу сохраняем коды для пульта донора в сыром виде.
Подключаем к Arduino инфракрасный светодиод и пишем простейшую программу которая получает инфракрасный сигнал с заданным кодом и отправляет другой код через светодиод. Резистор на 82 выбран из соображений того что валялось под рукой. Для встраиваемого устройства его можно смело увеличивать до 200 Ом а если передатчик должен быть дальнобойным то придётся дополнить его нехитрым транзисторным каскадом, иначе тока от Arduino обязательно не хватит.

При наличии кодов команд от обеих пультов код транскодера приобретает следующий вид

void loop() { if (irrecv.decode(&results)) {     switch(results.value){       case(0x845E5420):{ 	irsend.sendRaw(irSignal, sizeof(irSignal) / sizeof(irSignal[0]), khz);       }break;     }   }   irrecv.resume();   irrecv.enableIRIn(); } 

Запускаем скетч, заливаем в Arduino. Как ни странно после запуска одна команда проходит, после чего все последующие устройством игнорируются. Чтобы не связываться с отладкой добавляем в цикл мигалку на 13 пине и видим что после первой попытки отправить команду плата зависает. Что же, значит не всё так гладко в одновременном использовании передачи и приёма ИК сигнала в одном проекте. Немного покопавшись в используемых таймерах выясняется что так как и отправка и приём использует общий таймер то после начала отправки код должен подождать пока отправка не закончится. Можно эмпирически добавить задержку в пол секунды (delay(500) )и всё будет работать, но зная что сырые данные у нас представляют собой отсчёты времени в миллисекундах то можно просто добавить функцию отправки с задержкой. В модуле Irsend есть даже подходящая функция custom_delay_usec, которой я изначально воспользовался неправильно, забыв домножить величину задержки на множитель USECPERTICK из библиотеки (50 мс).

void sendDelayed(unsigned int array[]){   irsend.sendRaw(array, sizeof(array) / sizeof(array[0]), khz);     int array_size = sizeof(array) / sizeof(array[0]);     for(int i=0;i<array_size;i++){       // Using usec, so multiply raw to usec       irsend.custom_delay_usec(array[i]*USECPERTICK);     } } 

Такой код отлично работает, в switch теперь достаточно вписать нужное число case для кнопок и всё будет работать. Но не тут то было. Коды rawData записываются в виде массива int а у нас платформа на микроконтроллере. Память для переменных будет съедена уже пятью командами длиной по 100 элементов. А ведь на пультах бывает и по 25 кнопок.
Проблемы нет если не пользоваться сырым представлением данных, для этого в библиотеке есть возможность слать команды известными протоколами, например для пультов совместимых с Sony это sendSony. В библиотеке уже реализованы пульты известных производителей, но с ходу разобраться с моим пультом у меня не получилось. Поэтому переходим к более примитивным способам экономии памяти которые помогут тем у кого пульты совсем уж нестандартные.
Первое что приходит в голову это задавать rawData не в виде int, а перейти на байт. Все значения в этом массиве это результат чтения ИК сигнала таймером с периодом 50 миллисекунд, а так как эти данные кратны 50, то разделив их на 50 мы ничего не потеряем. Верхний предел будет ограничен значением 50*255=12750, а это 12 секунд, чего будет достаточно даже для декодирования неспешной азбуки Морзе — если такая необходимость возникнет.
В библиотеку был добавлен метод принимающий на вход байты, что сократило потребления памяти вдвое

IRsend::sendRaw (byte buf[],  unsigned int len,  unsigned int hz) 

Только вот памяти под переменные у Arduino всего два килобайта а это максимом 40 команд по 50 байтов. Нам необходимо больше памяти. И эту память мы извлечём из сегмента команд. Достаточно зарезервировать один массив достаточного размера и набивать его перед отправкой чередой присваиваний. Итого из кодового сегмента на одну команду будет тратиться около 100 байт, но ведь и места для кода у нас не меньше десяти килобайт. Так что на средний пульт со ста кнопками нам уже хватит.
Дабы не набивать руками присваивания в библиотеку был добавлен пример IRrecvDumpRawByte который выводит сырые данные не только в форме байтов но и в виде блока присваиваний

Пример под спойлером

rawData[0]=87;rawData[1]=87;rawData[2]=10;rawData[3]=9;rawData[4]=10;rawData[5]=9;rawData[6]=10;rawData[7]=10;rawData[8]=10;rawData[9]=9;rawData[10]=10;rawData[11]=9;rawData[12]=10;rawData[13]=29;rawData[14]=10;rawData[15]=9;rawData[16]=10;rawData[17]=9;rawData[18]=10;rawData[19]=10;rawData[20]=10;rawData[21]=9;rawData[22]=10;rawData[23]=9;rawData[24]=10;rawData[25]=10;rawData[26]=10;rawData[27]=9;rawData[28]=10;rawData[29]=9;rawData[30]=10;rawData[31]=10;rawData[32]=10;rawData[33]=9;rawData[34]=10;rawData[35]=86;rawData[36]=10;rawData[37]=9;rawData[38]=11;rawData[39]=9;rawData[40]=10;rawData[41]=9;rawData[42]=10;rawData[43]=9;rawData[44]=10;rawData[45]=28;rawData[46]=10;rawData[47]=29;rawData[48]=10;rawData[49]=28;rawData[50]=10;rawData[51]=9;rawData[52]=10;rawData[53]=28;rawData[54]=10;rawData[55]=10;rawData[56]=10;rawData[57]=9;rawData[58]=10;rawData[59]=28;rawData[60]=10;rawData[61]=10;rawData[62]=10;rawData[63]=9;rawData[64]=10;rawData[65]=9;rawData[66]=10;rawData[67]=28;rawData[68]=10;rawData[69]=9;rawData[70]=11;rawData[71]=27;rawData[72]=10;rawData[73]=29;rawData[74]=10;rawData[75]=9;rawData[76]=10;

Пример уже написанного скетча который позволяет управлять Samsung DVD HR-755 при помощи пульта Daewoo R40A01 находится в примерах под именем DaewooR40A01toDVDHR755Transcoder. Pull request на добавление примеров в общую ветку пока никто не принял поэтому скачать модифицированную библиотеку можно с форка .

Много фото с переделанным рекордером










Под катом находятся фотографии интеграции Arduino Nano внутрь этого DVD рекордера, Arduino Mini конечно занимает ощутимо меньше места, но под рукой была только Nano. Питание я взял с панели управления. Сигнал со встроенного приёмника был подключен к Arduino а параллельно ему был напаян ещё один ИК приёмник, расположенный с противоположной стороны от первого. Тем же навесным монтажом на него был напаян ИК светодиод. В принципе этого повторения можно было бы избежать — но сигнал с ИК приёмника инвертирован — поэтому напрямую завести ТТЛ сигнал на устройство не получится — а городить инвертор на логике или транзисторе я уже не стал.

Несмотря на то, что в моём случае сырые данные отлично работали, эксперименты с остальным домашним оборудованием показали что далеко не все захваченные сигналы корректно работали при попытке управления конкретным устройством. Команда включения кондиционера так и не заработала, хотя если он был уже включён смена режимов работала корректно. Колонка от LG тоже отказалась воспринимать сырые команды, но отлично реагировала на отправку кодов через sendSamsung. При этом пять собранных по знакомых телевизора отлично реагировали на сырые данные. Вариант с разной частотой сигнала я опробовал — это никак не помогло. Возможно проблема лежит в частоте дискретизации сигнала в 50 мс. Судя по работоспособности команд формата Samsung на технике LG, протокол стоит формализовать в виде отдельного модуль по аналогии с ir_LG.cpp ir_JVC.cpp ir_Dish.cpp, подобрав для конкретного устройства заголовок и параметры кодирования нулей и единиц. Наверное разбор написания такого протокола послужит неплохой темой для статьи.

Ну и в дополнение, вторая большая ИК библиотека для Arduino это IRLib. Она обладает схожим функционалом, в ней есть даже готовый модуль для разбора ИК протоколов для десктопа. Был проведён быстрый сравнительный тест чтения сырых данных который не выявил разницы в отсчётах по сравнению с IRemote. Из плюсов, в IRLib уже есть пример определения на какой частоте работает ИК передатчик. Пример Samsung36 фактически реализует разбор протокола по данным из сети интернет. Кроме того, документация отлично расписывает подключение ИК приёмников с каскадированием и много чего ещё. Хотя на мой взгляд, IRemote гораздо проще в понимании и использовании.

ссылка на оригинал статьи https://geektimes.ru/post/271860/