четверг, 26 октября 2017 г.

Как я включал телевизор с помощью Arduino.

История это началась давно и сегодня наконец я осуществил то, что хотел.

    А хотел я просто включить/выключить телевизор, используя инфракрасный диод. У меня валяется старый, выпаянный непонятно откуда диод, но что-то у меня с ним не пошли дела.

    Первым делом ищу в Чип и Дип'е, там удобный поиск и картиночки есть. 40 рублей за диод 5 мм 940 нм. Смотрю на алиэксперсс, что? 48 рублей за 5 пар излучателей и приёмников. Характеристики не указаны, но похоже на то, что надо. Из-за 50 рублей тревожить продавца я не стану конечно. Беру у него в нагрузку логический анализатор и USB Blaster для прошивки ПЛИС. Про бластер пока ничего не скажу. ПЛИС сложная штука, но я обязательно попробую, когда у меня появится отладочная плата. Штука это не дешёвая, но в пределах тысячи можно найти. Сойдёт для экспериментов.
Готово, жду товар.


    Получил на почте коробочку. Первым делом проверил анализатор. Анализатор этот копия продукта от компании Saleae. Моя версия 8-и канальная 24-х мегагерцовая. Зашёл на их сайт, скачал программное обеспечение. Установил, подключил анализатор, программа его видит. Драйвера устанавливаются с приложением. Решил проанализировать что-нибудь. Есть у меня преобразователь USB TTL-UART на микросхеме CH340G. Подключил Tx и землю к анализатору, этого должно хватить чтобы проверить передачу данных модуля. Просто воткнул в usb и нажал "Start Simulation". Запустил Putty. Выбрал Serial, COM порт который создал модуль и открыл соединение. Открылось чёрное окно  Putty. Я набрал "Hello", но текст не отобразился. На этом я закрыл путти и решил посмотреть, что там анализатор захватил. В приложении были сигналы на канале подключённом к Tx. Программа позволяет выбирать из пары десятков анализаторов. Я выбрал Serial и на панели "Decoded Protocols" я увидел своё Hello посимвольно. Хорошо. Работает.

    Теперь история с инфракрасный диодом. В пакетике 5 чёрных и пять прозрачных диодов. Не мог понять сначала кто из них кто, т.к. не работал ни чёрный ни прозрачный. Код включения/выключения для Sony простой. Не помню, где я увидел его, но использовал без изменения.

#include <IRremote.h>

IRsend irsend;

void setup()
{
}

void loop() {
  for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xa90, 12);
    delay(40);
  }
}

    Библиотека IRemote стандартная, если я не ошибаюсь. С её помощью я считывал как-то коды с пультов, изучал это дело. Ну как изучал, игрался. На самом деле вопрос этот не простой. Если изучать, то надо потратить немало времени. Я не задумывался раньше как работают пульты, а они передают сигналы используя специальные протоколы. У каждой крупной фирмы свой протокол. Есть протокол фирмы NEC, который многие используют. У Sony конечно свой протокол, в этом можно было не сомневаться. В коде видно, что библиотека использует метод sendSony. Можно посмотреть исходники библиотеки и убедиться, что она поддерживает много производителей.

    Так вот. Рылся я в интернете, чтобы найти схему, как подключить инфракрасный диод к ардуино и наткнулся на страницу adafruit. Куда же без них? Что бы я делал? =)
Раздел на странице "Sending IR Codes". В этом разделе есть схема состоящая из транзистора 2N2222, резистора 1/4 Вт 470 Ом и инфракрасного диода. Нужно три проводка. Один провод на 3-ий пин ардуино, +5 В и GND. Отмечу, что речь идёт об ардуино UNO. Всяческие нано, мини, мега и т.п. могут отличаться в плане количества штырей и их назначения. Почему 3-ий и он не обозначен в программе? Он задан в самой библиотеке. Точно не скажу почему. Это связано с ШИМ, частотами, циклами, таймерами и т.п. Я не особо в этом разбираюсь пока.

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

    В примере, кстати, используется другая библиотека - IRLib. У меня и без неё работает.
Покажу как видит сигнал включения/выключения логический анализатор. В настройках захвата указал 10 секунд, 100 КГц. На первой картинке видно, что между передачами проходит 40 микросекунд, как и задано в программе.

    Если посмотреть на сигнал, то видно, что начиная со второго идёт передача нулей и единиц данных. Единица в два раза длиннее нуля. 12 бит, 1010 1001 0000 - это 0xA90, как и задано в программе.


На этом, пожалуй, закончу. Всего доброго!

Комментариев нет:

Отправить комментарий

Определение параметров CHS (Cylinder, Head, Sector) карт CF с помощью утилиты IDEINFO

 Столкнулся с проблемкой подключения карт CF к материнской плате LTC-SL REV-B и WD386SX-LPX. В БИОС этих плат нет автоопределения накопителе...