Ethernet контроллер для удалённого управления оборудованием

Как показала практика, бытовые спутниковые тюнера, используемые кабельными операторами, нередко приходится перезапускать из-за периодического пропадания звука или изображения. Вызвано это различными факторами: неоднородный уровень сигнала с конвектора, перегрев приёмника или высыхание электролитов. Можно держать дежурный персонал для оперативного переключения, однако когда это экономически невыгодно поможет описываемый девайс. В принципе, применение разработанного устройства не ограничено только этой сферой деятельности.

Кратко:
Назначение. Позволяет посредством локальной сети (или Интернета) управлять включением и отключением нагрузок, подключенных к управляемым реле.
Устройство. Принципиально устройство состоит из трёх модулей: Ethernet-модуль, модуль микроконтроллера, модуль управления нагрузками.
Ethernet-модуль собран на микросхеме от Microchip ENC28J60 и его целесообразнее взять готовый, например здесь: http://www.aliexpress.com/wholesale?SearchText=enc28j60. В качестве микроконтроллера использовал микросхему Atmega32. В модуле управления стоят транзисторные ключи, включающие соответствующие реле. Каждое реле включает или отключает питание на потребителе, нуждающемся в этом.
Принцип действия. Принцип действия устройства несложно понять из принципиальной схемы:

Для интерактивного использования системы предусмотрен веб-интерфейс, зайдя в который, оператор включает или отключает соответствующий порт(см.рисунок). Конструкцией и прошивкой предусмотрено использование 20 портов вывода: PA0…PA7, PC0…PC7, PD4…PD7. Однако, при желании количество выходов можно увеличить до 80 штук — для этого необходимо использовать дешифраторы (например К155ИД3) и переписать яваскрипт вебпанели, чтобы выходы МК генерировали управляющие слова (0x0…0xF). Такой подход несколько усложнит схему устройства и появится необходимость перезагрузки тюнеров «по очереди». Гораздо уместнее использовать несколько описываемых устройств под различными IP-адресами.

Прошивка микроконтроллера. Чтобы прошить Atmega32 я использовал программатор «4 проводка» для COM-порта и софт UniProf. Прошивал на стареньком ПК под управлением Windows XP. На современных операционках не пробовал, ввиду отсутствия COM-а. HEX-файл прошивки.

Ещё необходимо установить фьюзы как на картинке.

Исходные коды прошивки с комментариями можно скачать eth.sources. В папке с исходниками лежит рабочий Makefile. Чтобы скомпилировать проект я пользовался бесплатным WinAVR. Для этого открываем командную строку, заходим в папку с проектом и набираем «make». В результате работы компилятора в папке появится несколько промежуточных файлов линкования и файл прошивки HEX.

Чтобы очистить результат работы компилера — там же, в командной строке, пишем «make clean».

Если будете пилить исходники, то обратите внимание на две функции:

fill_tcp_data_p(buf,plen,PSTR("строка, передаваемая в пакет"));

char stroka[255] = "строка, передаваемая в пакет";
fill_tcp_data(buf,plen,stroka);

Первую функцию используем там, где явно необходимо передать строку (статический текст). Вторую юзаем со строковыми переменными.
Из файла ip_arp_udp_tcp.c:

uint16_t fill_tcp_data_p(uint8_t *buf,uint16_t pos, const prog_char *progmem_s)
{
        char c;
        // fill in tcp data at position pos
        //
        // with no options the data starts after the checksum + 2 more bytes (urgent ptr)
        while ((c = pgm_read_byte(progmem_s++))) {
                buf[TCP_CHECKSUM_L_P+3+pos]=c;
                pos++;
        }
        return(pos);
}

...

uint16_t fill_tcp_data(uint8_t *buf,uint16_t pos, const char *s)
{
        return(fill_tcp_data_len(buf,pos,(uint8_t*)s,strlen(s)));
}

Собранные экземпляры:

Демонстрация работы:

В прошивке микроконтроллера предусмотрена смена IP-адреса (по умолчанию 192.168.1.99) и домена яваскрипта. Так, переход по адресу: 192.168.1.99/?i=91 изменит адрес устройства на 192.168.1.91 после перезагрузки (пользуйтесь очень аккуратно и только при острой необходимости, чтобы не потерять устройство!!! :)). Домен скрипта меняется так: 192.168.1.99/?d=mydomain.com , т.е. ваш скрипт будет подгружаться с адреса: mydomain.com/eth/script.js. Обратите внимание, что в директории eth на сервере должны лежать эти файлы.

Открываете script.js и меняете описания портов под свои нужды:

  var name = "Управление портами:"; // заголовок

  // ниже названия портов (можно заменить на что-нибудь осмысленное)
  var title = ["PA0", "PA1", "PA2", "PA3", "PA4", "PA5", "PA6", "PA7",
               "PC0", "PC1", "PC2", "PC3", "PC4", "PC5", "PC6", "PC7",
               "PD4", "PD5", "PD6", "PD7"];

Например у меня так:

  var name = "«Радуга», 75 градус"; // заголовок

  // ниже названия портов (можно заменить на что-нибудь осмысленное)
  var title = ["Русский иллюзион", "24 техно", "Усадьба", "Здоровое ТВ", "Ретро", "Драйв", "Феникс+кино", "Детский",
               "Охота и рыбалка", "Europa Plus", "Sony Entertaiment", "Sony Sci-Fi", "Мультимания", "National Geographic", "НСТ", "не используется",
               "не используется", "не используется", "не используется", "WWW-СЕРВЕР"];

Для блока питания можно использовать зарядное устройство для мобильного телефона (выходное напряжение около 7 вольт). В режиме ожидания ток потребления около 120 мА. При включении одного реле ток потребления возрастает до 180 мА. Необходимо учитывать, что если будет необходимость активировать все реле одновременно (отключать все ресиверы), то и блок питания должен быть уже соответствующей мощности (как минимум 1.5 А).

Представленная статья является всего лишь демонстрацией устройства. В коммерческой версии направление этой разработки существенно расширено — портов до 150 штук, три датчика температуры и прочее, всё зависит от заказа. (Ещё один пример на 40 портов: http://conture.by/post/1330)

Конструктивно устройство можно разместить в корпусе какого-нибудь отслужившего свой срок коммутатора в телекоммуникационную стойку 19″. Так как такого коммутатора под рукой не оказалось, то заказал в «Мобильном сервисе» вот такую коробушку от оптоволоконной вводно-распредительной системы (стоит 290 тыш без НДС):

Запись опубликована в рубрике C++, Программирование, Радиолюбитель, Телевидение, Технологии с метками , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий