Как зайти по внешнему IP-адресу из локальной сети для MikroTik

 Arduino  Комментарии к записи Как зайти по внешнему IP-адресу из локальной сети для MikroTik отключены
Ноя 032021
 

Как зайти по внешнему IP-адресу из локальной сети для MikroTik


VkontakteOdnoklassnikiFacebookTwitterMail.ruЕще…

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

Скажем если я нахожусь дома, то я могу стучать к серверу умного дома на прямую по 192.168.88.229, но из мира это будет например 1.1.1.1. Но если я из локальной сети обращусь по внешнему IP роутер отбросит мой запрос.

  • Роутер с внешним IP (WAN IP) 1.1.1.1.
  • Компьютер с локальным адресом 192.168.88.229, и запущенным на нем сервером, приложением и т. д. для доступа из внешней сети. В нашем случае для соединения используется порт 8080.
  • Компьютер в локальной сети с адресом 192.168.88.110.

У нас уже проброшен порт 8080:


Но оно не будет срабатывать при обращении из локалки, так как настройки ориентированы на пакеты из внешней сети, через WAN-порт. Поэтому нам нужно прописать дополнительно еще 2 правила.

содержание [показать]

Настройка доступа из локальной сети по внешнему IP-адресу

1. СОЗДАЕМ ПРАВИЛО ДЛЯ ПЕРЕНАПРАВЛЕНИЯ ОБРАЩЕНИЙ ПО ВНЕШНЕМУ IP ИЗ ЛОКАЛЬНОЙ СЕТИ.

Вкладка General:

  • Chain — dstnat.
  • Src. Address — пишем здесь локальный адрес компьютера, с которого будем заходить по внешнему IP, или диапазон адресов, если такой доступ нужно предоставить нескольким компьютерам сети.
  • Dst. Address — указываем внешний адрес компьютера/ сервера и т. п., по которому будет осуществляться доступ из локалки.
  • Protocol, Dst. Port — здесь прописываем параметры порта и протокола, которые соответствуют нашему соединению (те же, что и в пробросе портов).

Вкладка Action

  • To Addresses — указываем локальный адрес нашего сервера, компьютера, на который мы заходим по внешнему IP-адресу.
  • To Ports — порт тот же самый, что на предыдущей вкладке, поэтому здесь можно ничего не указывать.

Теперь на компьютер 192.168.88.229 можно зайти из локальной сети по внешнему IP-адресу 1.1.1.1.

Но при попытке какого-то взаимодействия с ним ничего не получится. Почему? Посмотрим, что происходит.

  • Наш компьютер (192.168.88.110) посылает пакет на внешний адрес сервера, который является и адресом роутера, соответственно — 1.1.1.1.
  • Роутер добросовестно перенаправляет его по нашему правилу dst-nat на компьютер с адресом 192.168.88.229
  • Тот его принимает и отправляет ответ. Но так как он видит в качестве адреса источника локальный IP-адрес (ведь пакет поступил от компьютера в локальной сети), он отправляет ответ не на маршрутизатор, а напрямую получателю
  • Получатель же (192.168.88.10) отправляя данные по внешнему IP, и ответ также ожидает от внешнего IP. Получив пакет от локального 192.168.88.229, он его просто сбрасывает, как ненужный

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

ПОДМЕНЯЕМ ЛОКАЛЬНЫЙ АДРЕС КОМПЬЮТЕРА НА ВНЕШНИЙ IP-АДРЕС

На вкладке Action выставляем маскарадинг (masquerade), т. е. подмену адреса источника на локальный адрес маршрутизатора.
На вкладке General прописываем правила, при которых он будет применяться:

  • Chain — srcnat, т. е. при запросах из локальной сети.
  • Src. Address — пишем здесь локальный адрес компьютера, или диапазон адресов, с которых будут отправляться пакеты.
  • Dst. Address — здесь конкретизируем «адрес получателя», т. е. правило будет применяться только для пакетов, адресованных нашему серверу.
  • Protocol, Dst. Port — здесь прописываем те же параметры порта и протокола.


Теперь, получив пакет из локальной сети, адресованный на внешний IP 1.1.1.1, маршрутизатор не только перенаправит его на 192.168.88.229 (по первому правилу), но и заменит в пакете адрес источника (192.168.88.110) на свой локальный адрес.

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

Второй способ Hairpin NAT MikroTik: 2 правила вместо 3

Можно сделать еще проще, заменив правило проброса портов первым правилом Hairpin NAT. В этом случае в настройках не нужно указывать In. Interface и Src Address, но нужно прописать адрес назначения.

Доступ на внешний IP адрес вашего сервера или компьютера с приложением будет открыт как для обращений извне, так и из локальной сети, с любых адресов, но только для пакетов с адресом назначения 1.1.1.1:80.

Теперь добавляете описанное выше правило srcnat, и все. Можно добавить дополнительную фильтрацию, прописав в out-interface тот интерфейс, с которого будут осуществляться отправки пакетов, если есть такая необходимость.

Недостатком Hairpin NAT является только то, что нагрузка на роутер возрастает, ведь те обращения, что раньше проходили через локальную сеть непосредственно между компьютерами, теперь будут идти через маршрутизатор.

Второй способ проще, но, в зависимости от конфигурации вашей сети, может использоваться и первый.

Статья скопирована на 95% и используется как заметка. Источник: https://lantorg.com/article/kak-zajti-po-vneshnemu-ip-adresu-iz-lokalnoj-seti-dlya-mikrotik © LanTorg.com

Micropython на GSM+GPS модуле A9G

 Arduino  Комментарии к записи Micropython на GSM+GPS модуле A9G отключены
Ноя 032021
 

В этот раз я задумался о том, чтобы спрятать в велосипед GPS-трэкер в качестве меры предосторожности. На рынке есть масса автономных устройств для слежения за автомобилями, грузом, велосипедами, багажом, детьми и животными. Подавляющее большинство из них взаимодействуют с пользователем с помощью СМС. Более дорогие варианты предоставляют функциональность Find my phone, но привязаны к конкретному онлайн-сервису.
В идеале хотелось бы иметь полный контроль над трекером: использовать его в удобном режиме без СМС и регистрации. Поверхностное гугление вывело меня на пару модулей из поднебесной, один из которых, A9G pudding board, я и заказал (~15$).

Модуль

Эта статья о том, как я заставил работать python на этом модуле.

Если A9G — аналог ESP (производитель, кстати, один и тот же), то сам pudding board является аналогом платы NodeMCU за исключением того, что на pudding board нет встроенного конвертера USB-UART. Зато есть много другого интересного. Спецификации от производителя:

  • ядро 32 bit (RISC), до 312MHz
  • 29x GPIO (все распаяны, в это число включены все интерфейсы)
  • часы и watchdog
  • 1x интерфейс USB 1.1 (я его там не нашел, но копирую с офсайта) и microUSB для питания
  • 2x UART (+1 сервисный)
  • 2x SPI (не пробовал)
  • 3x I2C (не пробовал)
  • 1x SDMMC (с физическим слотом)
  • 2x аналоговых входа (10 бит, возможно, один из них используется контроллеров литиевых аккумуляторов)
  • 4Mb flash
  • 4Mb PSRAM
  • ADC (микрофон, физически существует на плате) и DAC (динамик, отсутствует)
  • контроллер заряда аккумулятора (самого аккумулятора нет)
  • собственно, GSM (800, 900, 1800, 1900 MHz) с SMS, голосом и GPRS
  • GPS, подключенный через UART2 (есть модуль «A9» без него)
  • слот для SIM (nanoSIM)
  • две кнопки (одна reset, другая — включение и программируемая функция)
  • два светодиода

Рабочее напряжение 3.3В, входное напряжение — 5-3.8В (в зависимости от подключения). Вообще, модуль имеет всё необходимое железо для того, чтобы собрать из него простенький кнопочный мобильный аппарат. Но из примеров создаётся впечатление, что китайцы его покупают для продажи из автоматов или автоматов с азартными играми или что-то вроде этого. Альтернативами модулю являются довольно популярные модули SIM800, у которых, к сожалению, нет SDK в свободном доступе (т.е. модули продаются как AT модемы).

SDK

К модулю прилагается SDK на удовлетворительном английском. Устанавливается под Ubuntu, но предпочтительными являются Windows и контейнеры. Всё работает через тыкание в GUI: ESPtool для этого модуля только предстоит зареверсить. Сама прошивка собирается Makefile-ом. Дебаггер наличествует: прежде чем зависнуть, модуль вываливает stack trace в сервисный порт. Но лично я так и не смог перевести адреса в строчки кода (gdb сообщает, что адреса ничему не соответствуют). Вполне возможно, что это связано с плохой поддержкой Linux как такового. Соответственно, если хотите повозиться с модулем — попробуйте это сделать под Windows (и отписаться на github). В противном случае вот инструкция для Linux. После установки нужно проверить правильность путей в .bashrc и удалить (переименовать) все файлы CSDTK/lib/libQt*: иначе, прошивальщик (он же дебаггер) просто не запустится из-за конфликта с, вероятно, установленным libQt.

Прошивальщик

К прошивальщику идёт инструкция.

Подключение

Тут всё сложнее, чем, на NodeMCU. Модули выглядят похоже, но на pudding board нет USB-TTY чипа и microUSB используется только для питания. Соответственно, вам понадобится USB-TTY на 3.3V. А лучше — два: один для дебаг порта и ещё один для UART1: первый используется для заливки прошивки а второй вы сможете использовать как обычный терминал. Чтобы не тащить все эти сопли к компьютеру я дополнительно приобрел USB разветвитель на 4 порта с двухметровым проводом и внешним блоком питания (обязателен). Суммарная стоимость этого набора с самим модулем составит 25-30$ (без блока питания: используйте от телефона).

Прошивка

Модуль приходит с AT прошивкой: можно подключить к 3.3В ардуине и использовать в качестве модема через UART1. Свои прошивки пишутся на C. make создает два файла прошивки: один шьётся около минуты, другой — достаточно быстро. Шить можно только один из этих файлов: первый раз — большой, последующие разы — маленький. Суммарно, у меня в процессе разработки на рабочем столе открыта китайская SDK (coolwatcher) для управления модулем, miniterm в качестве stdio и редактор кода.

API

Содержание API отражает список наверху и напоминает ESP8266 в свои ранние дни: у меня ушло часа 3 на то, чтобы запустить HelloWorld. К сожалению, набор функций, доступных пользователю, весьма ограничен: к примеру, нет доступа к телефонной книге на SIM-карте, низкоуровневой информации о подключении к сотовой сети и тому прочее. Документация по API ещё менее полная, поэтому опираться приходится на примеры (которых два десятка) и include-файлы. Тем не менее, модуль может очень многое вплоть до SSL-подключений: очевидно, производитель сфокусировался на наиболее приоритетных функциях.

Впрочем, программирование китайских микроконтроллеров посредством китайского API надо любить. Для всех остальных производитель начал портировать micropython на этот модуль. Я решил попробовать себя в open-source проекте и продолжить это доброе дело (ссылка в конце статьи).

micropython

logo

Micropython — это open-source проект портирующий cPython на микроконтроллеры. Разработка ведётся в двух направлениях. Первое — это поддержка и развитие общих для всех микроконтроллеров core-библиотек, описывающих работу с основными типами данных в python: объекты, функции, классы, строки, атомарные типы и тому прочее. Второе — это, собственно, порты: для каждого микроконтроллера необходимо «научить» библиотеку работать с UART для ввода-вывода, выделить стэк под виртуальную машину, указать набор оптимизаций. Опционально, описывается работа с железом: GPIO, питание, беспроводная связь, файловая система.
Всё это пишется на чистых С с макросами: у micropython есть набор рекомендованных рецептов начиная с объявления строк в ROM до написания модулей. В дополнение к этому, полностью поддерживаются самописные модули на питоне (главное — не забывать об объёме памяти). Кураторы проекта ставят целью возможность запустить джангу (картинка с буханкой хлеба). В качестве рекламы: проект продаёт собственную плату для студентов pyboard, но также популярны порты для модулей ESP8266 и ESP32.

Когда прошивка готова и залита — вы просто подключаетесь к микроконтроллеру через UART и попадаете в питонский REPL.

$ miniterm.py /dev/ttyUSB1 115200 --raw MicroPython cd2f742 on 2017-11-29; unicorn with Cortex-M3 Type "help()" for more information. >>> print("hello") hello

После этого можно начинать писать на почти обычном python3, не забывая об ограничениях памяти.

Модуль A9G не поддерживается официально (список официально поддерживаемых модулей доступен в micropython/ports, их около десятка). Тем не менее, производитель железа форкнул micropython и создал окружение для порта A9G: micropython/ports/gprs_a9, за что ему большое спасибо. На момент, когда я заинтересовался этим вопросом, порт успешно компилировался и микроконтроллер приветствовал меня REPL. Но, к сожалению, из сторонних модулей присутствовала только работа с файловой системой и GPIO: ничего, связанного с беспроводной сетью и GPS доступно не было. Я решил исправить эту недоработку и поставил себе цель портировать все функции, необходимые для GPS-трекера. Официальная документация на этот случай излишне лаконична: поэтому, пришлось ковыряться в коде.

С чего начать

Первым делом идём в micropython/ports и копируем micropython/ports/minimal в новую папку, в которой будет находится порт. Затем, редактируем main.c под вашу платформу. Имейте ввиду, что вся вкуснятина находится в функции main, где нужно вызвать инициализатор mp_init(), предварительно подготовив для него настройки микроконтроллера и стэк. Потом, для event-driven API, необходимо вызвать pyexec_event_repl_init() и скармливать вводимые через UART символы в функцию pyexec_event_repl_process_char(char). Это и обеспечит взаимодействие через REPL. Второй файл — micropython/ports/minimal/uart_core.c описывает блокирующий ввод и вывод в UART. Привожу оригинальный код для STM32 для тех, кому лень искать.

main.c

int main(int argc, char **argv) { int stack_dummy; stack_top = (char*)&stack_dummy; #if MICROPY_ENABLE_GC gc_init(heap, heap + sizeof(heap)); #endif mp_init(); #if MICROPY_ENABLE_COMPILER #if MICROPY_REPL_EVENT_DRIVEN pyexec_event_repl_init(); for (;;) { int c = mp_hal_stdin_rx_chr(); if (pyexec_event_repl_process_char(c)) { break; } } #else pyexec_friendly_repl(); #endif //do_str("print('hello world!', list(x+1 for x in range(10)), end='eol\\n')", MP_PARSE_SINGLE_INPUT); //do_str("for i in range(10):\r\n print(i)", MP_PARSE_FILE_INPUT); #else pyexec_frozen_module("frozentest.py"); #endif mp_deinit(); return 0; }

uart_core.c

// Receive single character int mp_hal_stdin_rx_chr(void) { unsigned char c = 0; #if MICROPY_MIN_USE_STDOUT int r = read(0, &c, 1); (void)r; #elif MICROPY_MIN_USE_STM32_MCU // wait for RXNE while ((USART1->SR & (1 << 5)) == 0) { } c = USART1->DR; #endif return c; } // Send string of given length void mp_hal_stdout_tx_strn(const char *str, mp_uint_t len) { #if MICROPY_MIN_USE_STDOUT int r = write(1, str, len); (void)r; #elif MICROPY_MIN_USE_STM32_MCU while (len--) { // wait for TXE while ((USART1->SR & (1 << 7)) == 0) { } USART1->DR = *str++; } #endif }

После этого нужно переписать Makefile используя рекомендации / компилятор от производителя: тут всё индивидуально. Всё, этого в идеале должно хватить: собираем, заливаем прошивку и видим REPL в UART.
После оживления micropython необходимо позаботиться о его хорошем самочувствии: настроить сборщик мусора, правильную реакцию на Ctrl-D (soft reset) и некоторые другие вещи, на которых я не буду останавливаться: см. файл mpconfigport.h.

Создаём модуль

Самое интересное — написание собственных модулей. Итак, модуль (не обязательно, но желательно) начинается с собственного файла mod[имя].c, который добавляется Makefile (переменная SRC_C если следовать конвенции). Пустой модуль выглядит следующим образом:

// nlr - non-local return: в C исключений нет, и чтобы их имитировать используется goto-магия и ассемблер. // Функция nlr_raise прерывает исполнение кода в точке вызова и вызывает ближайший по стэку обработчик ошибок. #include "py/nlr.h" // Основные питонские типы. К примеру, структура mp_map_elem_t, статичный словарь, объявлен именно там. #include "py/obj.h" // Высокоуровневое управление рантаймом. mp_raise_ValueError(char* msg) и mp_raise_OSError(int errorcode) находятся именно здесь. // В дополнение, набор функций mp_call_function_* используется для вызова питонских Callable (полезно для callback-логики). #include "py/runtime.h" #include "py/binary.h" // Общий header для всех модулей: тут как хотите так и организовывайте #include "portmodules.h" // Словарь со списком всех-всех-всех атрибутов модуля. Имена задаются через макрос MP_QSTR_[имя атрибута]. MP_OBJ_NEW_QSTR делает питонскую обертку. // В этих двух макросах используются всевозможные оптимизации чтобы не хранить строку в RAM. // Единственная запись на текущий момент - имя модуля в магическом поле __name__ STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, }; // Питонская обёртка вокруг словаря сверху STATIC MP_DEFINE_CONST_DICT (mp_module_mymodule_globals, mymodule_globals_table); // Объявление самого модуля: объект нашего модуля наследует объект базового модуля и содержит список атрибутов сверху const mp_obj_module_t mp_module_mymodule = { .base = { &mp_type_module }, .globals = (mp_obj_dict_t*)&mp_module_mymodule_globals, };

Конечно, порт сам по себе не узнает о константе mp_module_mymodule: её необходимо добавить в переменную MICROPY_PORT_BUILTIN_MODULES в настройках порта mpconfigport.h. Кстати, нескучные обои имя чипа и название порта меняются тоже там. После всех этих изменений можно попытаться скомпилировать модуль и импортировать его из REPL. У модуля будет доступен только один атрибут __name__ с именем модуля (отличный случай для проверки автодополнения в REPL через Tab).

>>> import mymodule >>> mymodule.__name__ 'mymodule'

Константы

Следующий этап по сложности — добавление констант. Константы часто необходимы для настроек (INPUT, OUTPUT, HIGH, LOW и т.п.) Тут всё достаточно просто. Вот, к примеру, константа magic_number = 10:

STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, { MP_OBJ_NEW_QSTR(MP_QSTR_magic_number), MP_OBJ_NEW_SMALL_INT(10) }, };

Тестируем:

>>> import mymodule >>> mymodule.magic_number 10

Функции

Добавление функции в модуль следует общему принципу: объявить, обернуть, добавить (привожу чуть более сложный пример, чем в документации).

// Объявляем STATIC mp_obj_t conditional_add_one(mp_obj_t value) { // Получаем целое int. Если передали строку или любой другой несовместимый объект - нет проблем: исключение вывалится автоматически. int value_int = mp_obj_get_int(value); value_int ++; if (value_int == 10) { // Возврат None return mp_const_none; } // Возврат питонского int return mp_obj_new_int(value); } // Оборачиваем функцию одного аргумента. Для заинтересованных предлагаю посмотреть // runtime.h относительно других вариантов. STATIC MP_DEFINE_CONST_FUN_OBJ_1(conditional_add_one_obj, conditional_add_one); // Добавляем STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, { MP_OBJ_NEW_QSTR(MP_QSTR_magic_number), MP_OBJ_NEW_SMALL_INT(10) }, { MP_OBJ_NEW_QSTR(MP_QSTR_conditional_add_one), (mp_obj_t)&conditional_add_one_obj }, };

Тестим:

>>> import mymodule >>> mymodule.conditional_add_one(3) 4 >>> mymodule.conditional_add_one(9) >>> 

Классы (типы)

С классами (типами) всё тоже относительно просто. Вот пример из документации (ну почти):

// Пустая таблица атрибутов класса STATIC const mp_map_elem_t mymodule_hello_locals_dict_table[] = {}; // Словарная обёртка STATIC MP_DEFINE_CONST_DICT(mymodule_hello_locals_dict, mymodule_hello_locals_dict_table); // Структура, определяющая объект, являющийся типом const mp_obj_type_t mymodule_helloObj_type = { // Наследуем базовый тип { &mp_type_type }, // Имя: helloObj .name = MP_QSTR_helloObj, // Атрибуты .locals_dict = (mp_obj_dict_t*)&mymodule_hello_locals_dict, }; // Добавляем в модуль STATIC const mp_map_elem_t mymodule_globals_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_mymodule) }, { MP_OBJ_NEW_QSTR(MP_QSTR_magic_number), MP_OBJ_NEW_SMALL_INT(10) }, { MP_OBJ_NEW_QSTR(MP_QSTR_conditional_add_one), (mp_obj_t)&conditional_add_one_obj }, { MP_OBJ_NEW_QSTR(MP_QSTR_conditional_add_one), (mp_obj_t)&mymodule_helloObj_type }, };

Тестим:

>>> mymodule.helloObj <type 'helloObj'>

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

// Произвольная над-структура. Да, с именами путаница typedef struct _mymodule_hello_obj_t { // Питонский тип mp_obj_base_t base; // Какие-то данные uint8_t hello_number; } mymodule_hello_obj_t;

Как взаимодействовать с этими данными? Один из самых сложных способов — через конструктор.

// Функция-конструктор, принимающая тип (который, вполне возможно, отличается от mymodule_helloObj_type // по той причине, что тип был наследован чем-то другим), количество аргументов (args и kwargs) и // указатель на сами аргументы в том же порядке: args, kwargs STATIC mp_obj_t mymodule_hello_make_new( const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args ) { // Проверить количество аргументов mp_arg_check_num(n_args, n_kw, 1, 1, true); // Создать экземпляр mymodule_hello_obj_t *self = m_new_obj(mymodule_hello_obj_t); // Положить тип куда надо self->base.type = &mymodule_hello_type; // Присвоить данные self->hello_number = mp_obj_get_int(args[0]) // Вернуть экземпляр return MP_OBJ_FROM_PTR(self); // Второй аргумент в __init__, видимо, проигнорировали } // Конструктор должен сидеть в поле make_new const mp_obj_type_t mymodule_helloObj_type = { { &mp_type_type }, .name = MP_QSTR_helloObj, .locals_dict = (mp_obj_dict_t*)&mymodule_hello_locals_dict, // Конструктор .make_new = mymodule_hello_make_new, };

Из других полей есть ещё .print, и, полагаю, вся остальная магия Python3.

Но make_new вовсе не обязателен для получения экземпляра объекта: инициализацию можно производить в произвольной функции. Вот неплохой пример из micropython/ports/esp32/modsocket.c:

// Другая сигнатура функции: количество аргументов и указатель на аргументы STATIC mp_obj_t get_socket(size_t n_args, const mp_obj_t *args) { socket_obj_t *sock = m_new_obj_with_finaliser(socket_obj_t); sock->base.type = &socket_type; sock->domain = AF_INET; sock->type = SOCK_STREAM; sock->proto = 0; sock->peer_closed = false; if (n_args > 0) { sock->domain = mp_obj_get_int(args[0]); if (n_args > 1) { sock->type = mp_obj_get_int(args[1]); if (n_args > 2) { sock->proto = mp_obj_get_int(args[2]); } } } sock->fd = lwip_socket(sock->domain, sock->type, sock->proto); if (sock->fd < 0) { exception_from_errno(errno); } _socket_settimeout(sock, UINT64_MAX); return MP_OBJ_FROM_PTR(sock); } // Обёртка для функции с 0-3 аргументами STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(get_socket_obj, 0, 3, get_socket);

Привязанные методы (bound methods)

Следующий этап — добавление привязанных методов. Впрочем, это мало чем отличается от всех остальных методов. Возвращаемся к примеру из документации:

// Ещё один пример сигнатуры: количество аргументов строго равно 1 (self) STATIC mp_obj_t mymodule_hello_increment(mp_obj_t self_in) { mymodule_hello_obj_t *self = MP_OBJ_TO_PTR(self_in); self->hello_number += 1; return mp_const_none; } // Обёртка функции одной переменной MP_DEFINE_CONST_FUN_OBJ_1(mymodule_hello_increment_obj, mymodule_hello_increment); // Добавляем в аттрибуты под именем 'inc' STATIC const mp_map_elem_t mymodule_hello_locals_dict_table[] = { { MP_OBJ_NEW_QSTR(MP_QSTR_inc), (mp_obj_t)&mymodule_hello_increment_obj }, }

Всё!

>>> x = mymodule.helloObj(12) >>> x.inc()

Все остальные атрибуты: getattr, setattr

Как насчёт добавления не-функций, использования @property и вообще собственного __getattr__? Пожалуйста: это делается вручную в обход mymodule_hello_locals_dict_table.

// Функция со специфической сигнатурой ... STATIC void mymodule_hello_attr(mp_obj_t self_in, qstr attr, mp_obj_t *dest) { mymodule_hello_obj_t *self = MP_OBJ_TO_PTR(self_in); if (dest[0] != MP_OBJ_NULL) { // __setattr__ if (attr == MP_QSTR_val) { self->val = dest[1]; dest[0] = MP_OBJ_NULL; } } else { // __getattr__ if (attr == MP_QSTR_val) { dest[0] = self->val; } } } // ... идёт прямиком в магический attr const mp_obj_type_t mymodule_helloObj_type = { { &mp_type_type }, .name = MP_QSTR_helloObj, // Словарь больше не используется //.locals_dict = (mp_obj_dict_t*)&mymodule_hello_locals_dict, .make_new = mymodule_hello_make_new, // Вместо него - attr .attr = mymodule_hello_attr, }; 

Что-то больно лаконичный attr получился, скажете вы. Где же все эти mp_raise_AttributeError (прим: такая функция не существует)? На самом деле, AttributeError будет вызван автоматически. Секрет в том, что dest — это массив из двух элементов. Первый элемент имеет смысл «вывода», write-only: он принимает значение MP_OBJ_SENTINEL если значение необходимо записать и MP_OBJ_NULL если его нужно прочитать. Соответственно, на выходе из функции ожидается MP_OBJ_NULL в первом случае и что-то mp_obj_t во втором. Второй элемент — «ввод», read-only: принимает значение объекта для записи, если значение необходимо записать и MP_OBJ_NULL, если его необходимо прочитать. Менять его не надо.

Вот и всё, можно проверять:

>>> x = mymodule.helloObj(12) >>> x.val = 3 >>> x.val 3

Самое интересное — что автодополнение по Таb в REPL по-прежнему работает и предлагает .val! Я, если честно, никак не эксперт в C, поэтому могу только предполагать как это происходит (переопределением оператора ‘==’).

Порт

Возвращаясь к модулю A9G, я описал поддержку всех основных функций, а именно, SMS, GPRS (usockets), GPS, управление питанием. Теперь можно залить что-то вроде этого на модуль и оно будет работать:

import cellular as c import usocket as sock import time import gps import machine # Ожидаем сеть print("Waiting network registration ...") while not c.is_network_registered(): time.sleep(1) time.sleep(2) # Включаем GPRS print("Activating ...") c.gprs_activate("internet", "", "") print("Local IP:", sock.get_local_ip()) # Включаем GPS gps.on() # Отдаём данные на thingspeak host = "api.thingspeak.com" api_key = "some-api-key" fields = ('latitude', 'longitude', 'battery', 'sat_visible', 'sat_tracked') # Какая прелесть, что эта мешанина работает на микроконтроллере! fields = dict(zip(fields, map(lambda x: "field{}".format(x+1), range(len(fields))) )) x, y = gps.get_location() level = machine.get_input_voltage()[1] sats_vis, sats_tracked = gps.get_satellites() s = sock.socket() print("Connecting ...") s.connect((host, 80)) print("Sending ...") # Пока что сокеты мало что поддерживают, поэтому запрос через сырой HTTP. В будущем можно будет использовать библиотеки на чистом питоне для HTTP, SSL и прочего print("Sent:", s.send("GET /update?api_key={}&{latitude}={:f}&{longitude}={:f}&{battery}={:f}&{sat_visible}={:d}&{sat_tracked}={:d} HTTP/1.1\r\nHost: {}\r\nConnection: close\r\n\r\n".format( api_key, x, y, level, sats_vis, sats_tracked, host, **fields ))) print("Receiving ...") print("Received:", s.recv(128)) s.close()

Аудиопроцессор (DSP) в авто, собираем сами!

 Arduino  Комментарии к записи Аудиопроцессор (DSP) в авто, собираем сами! отключены
Ноя 022021
 

Всем здравствуйте! В этом я обзоре я немного погружусь в автозвуковую тему, расскажу и покажу как за 2900р. (всего 2900 р.!!!) можно реализовать проект по изготовлению отдельного аудиопроцессора (DSP) в автомобиль.
Здесь не будет разработки каких-либо жутких схем, изготовления или заказа каких-то страшных плат. Нет, тут будет всё просто, будем собирать устройство из доступных и дешевых покупных комплектующих с интернет-магазинов, сами отлаживать и настраивать, 100%-ая повторяемость.
В результате получим свой аудиопроцессор, с серьезными возможностями для настройки компонентов и корректировки АЧХ, и постараемся решить проблемы звучания аудиосистемы в авто, с которыми сложно и дорого справиться «непроцессорными» способами.

ВВЕДЕНИЕ.

Сразу хочу сказать, что я совсем не болен автозвуковой темой, она меня немного задела, но относительно быстро отпустила. Я глубоко погрузился в эту тему где-то в 2010г. и уже в 2013г. я понял, что добился цели в плане построения своей системы.
Автомобильные аудиофилы отличаются от домашних аудиофилов тем, что первые, для получения системы своей мечты, постоянно заняты сменой компонентов: динамиков, сабвуферов, усилителей, головных устройств, межблоков и кабелей, без перерыва устанавливая и переустанавливая их разными способами в авто, при чем делают это наверное раз в 5 чаще, чем домашние энтузиасты.
Это какой-то абсолютно бесконечных процесс, для многих это серьезное хобби, но могу сказать, что очень дорогое, так как требования и аппетиты быстро растут, стоимость компонентов и время на установку тоже постоянно увеличивается, а отдача и разница в результате всё меньше и меньше. А еще и машина постоянно разобрана и в пучках проводов.

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

Итак, в ходе непродолжительных поисков была собранная следующая система:

Стоимость этих компонентов сейчас немного настораживает (80-90т.р.), но тогда это стоило как минимум в два раза дешевле, курс Евро в те годы был совсем другой. Усилители брал вообще 2-3 месяца БУ, в состоянии новых, но на 30% дешевле, опять последствия того постоянного перебора компонентов у «глубоко увлеченных» автозвуком, но мне только в плюс)).

dd6ffe.png

Для фронта было задействовано поканальное усиление и использованы встроенные развитые фильтры и гейны усилителя E.O.S. AE-475 LE Bi-amping для разделения полос широкополосника SO55neo и мида.
Для разделения полос сабвуфера и мида был использован кроссовер в ГУ. Также в ГУ JVC KW-R900BT были задействованы функции временной задержки каналов для согласования всех источников.

У всей этой системы был один минус – отсутствие точной настройки (фильтры ВЧ/НЧ приходилось крутить отверткой) и полное отсутствие возможностей корректировки АЧХ. Если общий провал в СЧ (из-за размещения мида в дверях в ногах) решился установкой широкополосного динамика ВЧ/СЧ, то отдельные пики и выстрелы АЧХ от массы переотражений в салоне авто решить с помощью ГУ было не возможно, функции эквалайзера ГУ очень бедные, считай их нет.

Тут была необходима установка аудиопроцессора (DSP) для решения основных проблем, но я уже не был готов выложить от 15 до 40 т.р. за решения от HELIX, AUDISON, Alpine и прочих брендов, появились другие приоритеты, поэтому я ездил и слушал так.
Пока я не натолкнулся на решения на базе DSP чипа ADAU1701. На данную тему я писал в своем предыдущем обзоре по внедрению DSP в домашний усилитель. Там же я писал, что буду готовить свой вариант аудиопроцессора в авто.
Подобрав компоненты и схему их подключения, было проработано следующее устройство.

КОМПЛЕКТУЮЩИЕ:

1. Модуль DSP ADAU1701 RDC2-0027v1

В качестве основной платы DSP была выбран модуль от CHIPDIP RDC2-0027v1 на базе чипа ADAU1701 (datasheet) (RDC2-0027v1, SigmaDSP ADAU1701. Модуль цифровой обработки звука. V1)

e58f1c.jpg

Модуль имеет два входа АЦП, 4 выхода ЦАП. Данный модуль обладает диапазонам питающего напряжения 5В — 36В, что хорошо подходит для авто. На самой плате, правда, отсутствует EEPROM, а лишь посадочное место под память в корпусах DIP или SOIC, которую надо приобрести отдельно, что я и сделал при заказе модуля:

24LC64-I/P, Последовательная энергонезависимая память, 64K, 24LC64 [DIP-8]

2. I2S DAC PCM5102

ADAU1701 обладает только 4-мя отдельными аналоговыми выходами ЦАП, что в моем случае уйдет только на поканальный фронт ВЧ/НЧ. Для подключения сабвуфера необходим, как минимум, еще один канал. Для этой цели можно задействовать I2S интерфейс ADAU1701 для подключения дополнительного I2S ЦАП. Я уже опробовал на домашнем усилителе ЦАП на чипе PCM5122, и он меня вполне устроил, поэтому сейчас решил использовать его «младшего брата» PCM5102.
Была приобретена следующая плата:

PCM5102 DAC Decoder I2S Player Assembled Board 32Bit 384K Beyond ES9023 PCM1794 For Raspberry Pi

520e69.jpg

Имеется стерео выход, для подключения по I2S на плате необходимо поставить дополнительно джампер на выводах I2S/LJ, которого в комплекте почему-то не положили.

3. Разъемы RCA

Для подключения аналоговых выходов от DSP и I2C DAC я приобрел недорогие RCA разъемы для изготовления межблочных кабелей. Разъемы мне понравились, вполне качественные, цанговый зажим кабеля, не хуже пресловутых NEUTRIK.

2Pcs/1Pair Gold Plated RCA Connector RCA male plug adapter Video/Audio Wire Connector Support 6mm Cable black&red

5ab633.jpg

4. DC-DC преобразователь для питания PCM5102 DAC

Так как плате DAC PCM5102 требуется питание от 5 до 7 В, то было принято решение поставить маленький DC-DC преобразователь на MP1584, c выставленным напряжением питания 5,2В.
1PCS Great IT power module Adjustable MP1584EN DC DC 3A power step-down descending output module 12 v9v5v3 LM2596 24V

a232fd.jpg

5. Корпус аудиопроцессора

Так как это устройство планировалось как первый прототип (но скорее всего останется на продолжительное использование в текущем автомобиле), то корпус решил сделать простой и быстрый. Долго искал подходящую коробку, пока в электротехническом магазине не нашел интересную клеммную коробку с гладкими стенками DKS:

Коробка ответвит. с гладкими стенками, IP56, 120х80х50мм

58ad2f.jpg
726520.jpg
f448c4.jpg
f9f4a5.jpg

Коробка вообще очень понравилась, прочные плотные стенки, приятный на ощупь пластик, прямо “soft touch”. Я их в руках много разных держал, но эта реально отличная.

6. Сальниковые вводы корпуса

Так как я решил ставить аудипроцессор прямо рядом с усилителем для фронтальных динамиков, то подумал, что было бы глупо ставить RCA гнезда, делать межблочные кабели по 50 см, куча разъемов.
Я решил, что с одной стороны межблочного кабеля я поставлю RCA разъемы для подключения к усилителю, а ответные концы кабелей заведу непосредственно через корпус на выводы модуля DSP. Для сабвуфера всё-таки придется сделать полноценный межблочный кабель, для подключения к RCA выводам I2S DAC. Для ввода кабелей в корпус решил использовать латунные сальниковые вводы:

166273.jpg

7. Плата CY7C68013A

Для подключения, настройки в реальном времени через программный комплекс Sigmastudio и заливки программы в EEPROM модуля DSP ADAU1701 будем использовать плату на чипе CY7C68013A. Брал здесь:
EZ-USB FX2LP CY7C68013A USB logic analyzer core board+Source Code

17caf0.jpg

О данной плате я подробно расписывал в своем предыдущем обзоре, поэтому я размещу информацию из того обзоре здесь под спойлер, чтобы всё было в одном месте:
Настройка и подключение платы CY7C68013A
Плата на базе микросхемы CY7C68013A от Cypress Semiconductor умеет «прикидываться» стандартным интерфейсом USBi от AD для подключения к DSP по USB, c возможностью внесение изменений в on-line режиме и записи проекта в EEPROM, для последующей загрузки при запуска DSP.

На Youtube канале CHIPDIP есть видео по использованию данной микросхемы в работе (ссылка на видео), но плата, которую можно у них приобрести стоит около 1000 р., еще и подключается как-то странно.
На просторах Aliexpress я нашел вот такую плату на микроcхеме CY7C68013A (EZ-USB FX2LP CY7C68013A USB logic analyzer core board+Source Code):

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

e88b41.jpg
8d64c3.jpg
00d14b.jpg

Подключение к ПК через кабель MiniUSB, при подключении загорается красный светодиод:

f5e2b7.jpg

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

Для всего этого набора была подготовлена следующая схема подключения.
Компоненты, которые расположены непосредственно в корпусе, очерчены черным квадратом на схеме:

cc3dad.png

Подготовка корпуса и сборка устройства:

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

На дно нашей клеммной коробки готовим основание из оргстекла для крепления плат внутри корпуса:

8cbe88.jpg
36b23b.jpg
d30b3d.jpg
f4d68a.jpg

Делаем отверстия в полученном основании для крепления его ко дну корпуса на саморезы:

c62b9f.jpg
3e5e49.jpg

Примеряем плату DSP в корпус, такое ощущение, что клеммную коробку делали прямо для данной платы )), намечаем отверстия для крепления платы к основанию. Ставить платы будем на винты и гайки М3, как я делал для домашнего усилителя.

f8cc6b.jpg

Примеряем и сверлим отверстия для установки платы PCM5102 DAC:

a93d74.jpg
bc6754.jpg
3c6051.jpg
bb8743.jpg
1f28b9.jpg
033b39.jpg
4c0050.jpg

Размечаем и сверлим отверстия в корпусе под сальниковые вводы межблочных кабелей:

5244c3.jpg
7d8068.jpg
e425de.jpg
456bd0.jpg

Для подключения платы CY7C68013A к модулю ADAU1701 RDC2-0027v1 я использую простой штекер и гнездо 3.5 Jack, так как нужно всего три провода для подключения. У меня не было панельного гнезда, и размещение его в фронтальной части среди высоких сальниковых вводов тоже было не лучшим решением.
Зато у меня нашлось отдельно гнездо 3.5 Jack на кабель, и я придумал вот такое новое составное гнездо из еще одного сальникового ввода:

12d0a0.jpg
f3748e.jpg
201bb5.jpg
d4fc0f.jpg

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

bbadc2.jpg
bd23e1.jpg
7d5200.jpg
3378e7.jpg
3980c8.jpg

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

79435a.jpg
a19695.jpg
9c4f96.jpg

Начинаем собирать. Размечаем DC-DC преобразователь на дно корпуса всей площадью на 3М скотч, и закрываем сверху нашим основанием:

9f8f0e.jpg
98b02e.jpg

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

00fe75.jpg

Паяем коннекторы и делаем межблоки. В качестве кабеля используется МКЭШ 3 х 0,35 мм2:

513a63.jpg
08faec.jpg

Собираем устройство, соединение платы DSP и PCM5102 DAC делал перемычками:

85a511.jpg
6c74a4.jpg

На кабель питания на плюсовой проводник впаял в разрыв предохранитель 1 А:

8a14c2.jpg

УСТАНОВКА В АВТО:

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

02394d.jpg
9531e3.jpg
733a39.jpg

Предварительно всё подключаем и пробуем, что всё работает:

24c1bd.jpg

После успешного запуска можно окончательно монтировать и подключать:

040212.jpg
1bc971.jpg
6e3df2.jpg
f54239.jpg

Подключаем отдельным межблочным кабелем усилитель сабвуфера:

6cab3e.jpg

НАСТРОЙКА И ЗАПИСЬ ПРОЕКТА:

Настройка и заливка программы проекта в EEPROM платы осуществляется в программном комплексе SigmaStudio. Подробную инструкцию по установке программного обеспечения, драйверов и активизации платы CY7C68013A в качестве интерфейса USBi, для внесения изменений и корректировок в реальном времени в проекте в SigmaStudio, я давал в своем предыдущем обзоре, и размещу ту информацию опять здесь ниже под спойлер:
Софт и драйверы

К указанной под спойлером инструкции для нашего устройтсва необходимо сделать еще пару следующих манипуляции в проекте, для того, чтобы у нас заработал внешний DAC PCM5102 по шине I2S:

В SigmaStudio на вкладке «Hardware Configuration» и нижней вкладке «IC 1-170x\140x Register Control» необходимо выставить и проверить следующие пункты как на скриншоте ниже:

— в блоке «Serial Output 1 (channels 0-7)» поставить галочку на Master Mode, и проверить LRCLK polarity и BCLK polarity
— в блоке «GPIO» выставить:
MP6 — Output Sdata_out0;
MP10 — In Lrclk_out;
MP11 — In Bclk_out

64d26c.png

Для разруливания всего нашего комплекта в авто необходимо было подготовить проект DSP в SigmaStudio. Можно было сделать всё с чистого листа, но я наткнулся на один готовый проект от ребят из MADBIT (http://madbitdsp.com).
Их ранний процессор MadBit DSP 5 был спроектирован по схожей схеме, и также необходимо было использовать SigmaStudio для подготовки проекта и настройки.
Я взял их готовый проект для данного аудиопроцессора, но он был иерархически раскидан по вкладкам, плюс меня не устраивали некоторые используемые модули.

b46dee.png
56f314.png
a1c754.png
2e9001.png
06a96a.png
dc9c45.png

В итоге собрав основные элементы на одной рабочей области, сделав дополнительные обозначения и удобное размещения для быстрой настройки уже сидя в авто, у меня получился следующий проект:

90a45d.png
282d1a.png
1db2c8.png
31d15c.png

У каждого динамика есть свой отдельный параметрический эквалайзер, регулятор уровня, переключатель MUTE, а также есть дополнительный побортный переключатель MUTE (левая/правая сторона, для удобства замеров и настройки), а также блоки задержки сигнала.

Файл проекта у меня получился в двух вариантах, и различается они только способом задания задержки сигнала для канала сабвуфера.

Дело в том, что после замера расстояния до каждого динамика из точки прослушивания, у меня получилось, что правый мид находится дальше (145 см), чем сабвуфер (125см). Во многих статьях говорится, что указывается фактическое расстояние до катушки, и не важно в какую сторону развернут динамик. В соответствии с этим я сделал проект следующим образом (car_dsp_sub_close.dspproj):

7882f8.png

В ходе настройки и тестирования оказалось, что такой задержки, рассчитанной из фактического расстояния, не хватает для «вытягивания» сабвуфера из багажника седана. Скорее всего это связанно с закрытым объемом багажника седана, и более сложным путем НЧ волны, поэтому пришлось вернуть обратно в прежний вид, с первоначальной задержкой всех динамиков фронта относительно сабвуфера (car_dsp_sub_far.dspproj):

05ca1b.png

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

5ca61c.png

Для непосредственной настройки в авто я использовал в принципе тот же комплект, что и в обзоре про DSP для домашнего усилителя:

— Измерительный микрофон;
— USB звуковая карта;
— Room EQ Wizard;
— Плата CY7C68013A c кабелем USB и трехпроводным кабелем для подключения к аудиопроцессору;

Правда в этот раз мне было удобнее разделить на два комплекта, так как очень неудобно работать в SigmaStudio, и одновременно смотреть в окно RTA в REW. Для этих целей пришлось достать с полки старый ноутбук с Windows. (кстати, чуть больше чем за 6 месяцев SSD Plextor куда-то потерял файлы на носителе, система отказалась грузиться, ссылаясь на отсутствие нужных системных файлов, а лег отдыхать он в нормальном рабочем состоянии):

d3576b.jpgea734a.jpg

Для настройки системы в авто я наткнулся на интересный мануал на сайта конторы Audiofrog

Они продают в США аудио оборудование для авто, а также измерительный комплект для настройки аудиосистемы.
У них на странице измерительного комплекта есть мануалы по использованию его с Room EQ Wizard, а также очень добротный документ по настройке аудиосистемы в автомобиле. Очень хороший материал, доступным языком от инженера для простого человека. Очень советую, правда на англ. языке, но на русском языке я таких материалов честно не встречал.

A Straightforward Stereo Tuning Process and Some Notes About Why it Works

Audiofrog UMI-1 Setup Instructions for REW

Также полезный раздел их форума:

www.audiofrog.com/community/tech-tips/

Настройку производил на розовом шуме, побортно, корректировки вносил в реальном времени.
Для более стабильного отражения кривой АЧХ в окне RTA в Room Eq Wizard я использовал не просто розовый шум, а доступный в REW «периодический розовый шум» (Pink Periodic).
В REW, в окне “Generator” выбираем “Pink Periodic”, выставляем “Sequence length” в 16k и указываем настройки формата сохранения WAV файла на выходе. Мне было проще создать WAV файл и запускать его непосредственно с ГУ, чем запускать его с ноутбука через AUX ГУ или на вход аудиопроцессора.

44fa30.png

В настройках окна RTA также выставляем FFT в 16k, и теперь наш график в реальном времени не требует усреднения, а почти статичен, и все изменения, которые мы вносим, мы видим четко и без прыжков и колебаний графика. Очень удобно.

8eb2e6.png

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

b030fa.png
c2169f.png
7dc692.png
e0e1ff.png
afa401.png
ccb4db.png

Провалы АЧХ править бесполезно, сколько дБ не вливай, зачастую толку мало. Попытки жесткой эквализации основной части диапазона вниз до уровня провальных участков АЧХ приводят к жуткому эффекту: на графике с микрофона вроде всё красиво, но слушать трудно, потому что присутствует сильная расфазированность, как будто все динамики подключили в противофазе. Фильтры крутят фазу, а когда их очень много – то получается какая-то «фазовая каша», убедился лично.

Задержку сабвуфера пришлось настроить уже почти на слух, у меня с этим был опыт на ГУ, так что значения задержки в семплах были получены опытным путем. Благо это делается буквально на глазах, просто вбиваем разные значения в ячейке в модуле, жмем Enter и сразу слышим изменения даже без прерывания сигнала.

Теперь о текущих проблемах:

— Питание: в общий сигнал с аудиопроцессора добавился «приятный» звук генератора. Его хорошо слышно на малых громкостях, или когда воспроизведения на ГУ на MUTE или на паузе. Такой звук был в игрушке в “Need For Speed”, когда покупаешь своей машине комплект Turbo )). Подключил аудипроцессор от внешнего AC-DC преобразователя – всё норм, никакого мусора. Нужна гальванически развязанное питание. Заказал изолированный DC-DC преобразователь B1212S 2W (1pcs/lot module authentic B1212S B1212S-2W DIP-4 In Stock, должен помочь;
— Хлопок при выключении: хлопок небольшой, иногда еле заметный, но он есть. Планирую поставить параллельно питанию электролит на 1000-2000 мкФ, c диодом, чтобы ADAU1701 выключался позже усилителей, тем самым избегая хлопка;

— Небольшой шум АЦП: его слышно когда нет сигнала, и естественно его слышно только когда машина заглушена, крутим стартер, и шум уже сливается с другими шумами авто. У меня редко можно встретить ситуации, когда машина заглушена, работает ГУ, но сигнала нет.
Но я все равно воспользовался советом из статьи инженера AD по решению подобных проблем в автомобиле (Minimizing Noise and Power Consumption in Automotive Audio Systems with SigmaDSP), и добавил модуль компрессора для снижения уровня АЦП при отсутствии уровня сигнала. Возможно следует добавить I2S АЦП получше, но меня пока всё устраивает.

6bd278.png

БЮДЖЕТ ПРОЕКТА:

DSP ADAU1701 RDC2-0027v1 – 1100р.
I2S DAC PCM5102 – 255р.
DC-DC преобразователь – 50р.
Разъемы RCA – 460р.
Корпус аудиопроцессора – 120 р.
Сальниковые вводы корпуса, гнезда – 300р.
Плата CY7C68013A – 280р.
Прочее – 300р.

Итого: 2865 р.

И это за полностью рабочий аудиопроцессор в авто!

Владельцы DSP устройств от HELIX, AUDISON и прочих, конечно, закидают меня сейчас тухлыми помидорами, рассказывая, что их процессоры, по ряду параметров (THD, SNR и т.д.) уделает этот бедный ADAU1701. Но спрашивается, зачем всё эти сказочные параметры в автомобиле, с работающим двигателем, вентилятором кондиционера или отопителя, а если еще в движении… В тишине, в гараже, возможно да, но мне кажется, что тогда лучше уж дома. Да и всё равно, если взять новую плату у CHIPDIP на базе ADAU1452 (RDC3-0027v1, SigmaDSP ADAU1452. Модуль цифровой обработки звука. V1) за 1200р., а также прикупить к ней I2S АЦП и пару-тройку I2S ЦАП на Ali и прочих, то HELIX и AUDISON вообще погрустнеют с их ценой, но схожими параметрами.

Планы по доработке:

Сделаю отдельную плату, размещу на ней диод, конденсатор, DC-DC преобразователь и клеммники для подключения, размещу вне аудиопроцессора. По-хорошему, разместить всё это внутри корпуса, но это уже в следующем устройстве.

Заказал потенциометры 10 кОм, и кнопки с фиксацией. ADAU1701 имеет GPIO для подключения кнопок, энкодеров и потенциометров для выполнения различных регулировок. Хочу сделать кнопку отключения блоков задержек, когда еду с семьей, сделать кнопку включения тонкомпенсации на низких уровнях громкости, а также на потенциометрах сделать фильтры Low Shelf до 100 Гц и High Shelf от 14 кГц, для корректировки по необходимости.

Low Shelf фильтр очень актуален для радио, которое работает, когда едем вместе с семьей (кроме сына никто не разделяет моих музыкальных предпочтений). Они на радио так любят компрессировать диапазон, что сабвуфер начинает играть гораздо бодрее, и скатывается больше в бубнеж. Сейчас у меня стоит штатный регулятор уровня (Gain) усилителя сабвуфера E.O.S. AE-500.1, пользуюсь им, но крутить гейн усилителя — это не совсем правильно.

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

Сразу прошу прощения за возможные неточности в терминологии и обозначениях, это не та тема, где я силен, но очень интересуюсь и пытаюсь разобраться.

Пока всё. Есть, наверное, еще много, что дописать, что забыл указать, но и так много, объемные тексты не всегда просто воспринимать. Думаю, дополнительно можно будет разобраться в комментариях.

Материалы и файлы для скачивания:

1. SigmaStudio (дистрибутив);
2. Драйверы для платы Cypress CY7C68013A
3. Программное обеспечение для платы Cypress CY7C68013A (CySuite / CyConsole)
4. Файлы проектов в SigmaStudio для аудиопроцессора, с XLS файлом расчета временных задержек (в архиве два варианта проекта)
5. Файл проекта в SigmaStudio для аудиопроцессора от MadBit DSP 5
6. Схема подключения аудиопроцессора
7. A Straightforward Stereo Tuning Process and Some Notes About Why it Works
8. Audiofrog UMI-1 Setup Instructions for REW

Многополосный усилитель с цифровым DSP и i2S усилит ельными модулями.

 Arduino  Комментарии к записи Многополосный усилитель с цифровым DSP и i2S усилит ельными модулями. отключены
Ноя 022021
 

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

До недавнего времени, использовал в системе ЦАП на AD1853 и ламповый однотактник на 6CA7. Акустические системы Kenwood LS-11EX на Davis KVK 130 под настроение и в целом делал акустику другим. Дома слушать было не когда, да и заниматься творчеством возможности не было тоже.
Но вот снова зачесались руки по паяльнику и микрофону и понеслось)))). Идея создать многополосный усилитель с коррекцией, да еще на современной элементной базе тормозилась очень плохенькими параметрами усилителей Д класса и очень хилых доступных чипов DSP Цифровых сигнальных процессоров.

Первый опыт использования DSP у меня случился при настройке модного трехполосного проекта с использованием процессора Berringer DCX2496. Внутри берринЖера стоит DSP процессор AMD Shark и очень устаревший модуль управления через COM порт RS-232, старенькие ЦАП и АЦП ну и импульсный блок питания не очень высокого качества. Вот там же я понял и проблемные места таких процессоров и их супер преимущества. Основные проблемы – хиленький АЦП на входе и шипение в звуке.
Самый популярный процессор для самодельщиков это ADAU1701. ссылка

Он самый простой в использовании. Я не использовал этот чип по причине интеграции в него простеньких ADC и DAC и малого запаса по вычислительной мощности выраженной в количестве команд на сэмпл.
ссылка
И если современный источник цифровой, то зачем делать сложный путь Цифроаналогового преобразователя в звуковой карте или ЦАП… далее аналогово цифрового преобразования на входе ДСП… далее цифровой обработки в процессоре и очередного цифроаналогового преобразования на выходе ДСП.

С выпуском серии Analog Devices микрочипов DSP ADAU14XX ссылка и микрочипов усилителя SSM3582A ссылка все изменилось. ADAU1452 и ADAU1467 это полностью цифровые процессоры очень мощные с очень большим функционалом. Вычислительная мощность зависит от частоты, на который заточен ДСП в проекте. Но на 48килогерц кажется 1701 имеет 1000 команд на сэмпл, а 1467 имеет 6000 команд на сэмпл. А SSM3582 первое интегрированное решение, где и Дельта сигма ЦАП и усилитель класса Д с дельтасигма модуляцией в одном чипе с КПД 93 процента. ДА еще и небольшой DSP внутри. И на выходе нет огромного дроссельного фильтра и искажения на уровне 0.004%.
Было решено сделать усилитель на таком наборе от Российского производителя Чип и Дип. Ассортимент у них огромный, но поддержка «Рассейская». «Ваши проблемы – это ваши проблемы, у нас все отлично» но об этом позже.
Общая концептуальная схема системы следующая:

1.
Входной преобразователь USB – i2S первоначально был ЧипДип Суперпрайм. НО У меня не получилось его запустить нормально. Выставляю в драйверах Windows 10 64 bit 48 килогерц и получаю на АЧХ дикий срез как фильтром. Выставляю тут же 44.1 и получаю нормальную АЧХ.

ЧипДип отказались комментировать ситуацию и по английски покинули чат. Говорят, все работает нормально. Я естественно подумал что виноват Windows так как используются его стандартные дрова для USB устройства. Накатил сверху ASIO for ALL и пустил через них, да еще с обязательной передискретизацией в 48 попробовал. Работает одинаково криво. Собрал комп с windows 7 64bit та же песня. Забил на такую поддержку и поставил SA9023 – все заработало с полпинка как надо. Два варианта XMOS преобразователей тоже играют все без проблем.этот тоже работает отлично без проблем. Поэтому будьте внимательны – у вас тоже может так криво заработать и помощи ждать не откуда. У меня кучка преобразователей –взял и забыл проблему.

2. DSPO link— удобная платка соединения i2s — соединитель с собственным генератором на 12.288мГц кварце с буферизацией и собственным питанием 5Вольт. Если нет питания 3.3 вольта в гребенке на входе i2s то подает свой клок а если есть – то проводит то что приходит с USB. С USB должно при 48 килогерцах приходить 12.288 мегагерц по моим настройкам сигмастудии (это блок настроек MasterClock). По сути, ДСП переключается на использование собственного генератора а не берет мастерклок с i2s входа, это задается в Сигмастудии.
Сердцем системы является модуль цифровой обработки сигнала ADAU1467.

ссылка

Цифровые входы (I2S) – 4
Цифровые выходы (I2S) – 4
Есть еще кучка программируемых GPIO если вдруг 4 стандартных i2s будет маловато
Максимальная частота дискретизации — 192 кГц
Точность входов/выходов – 32 бит
Вспомогательных каналов АЦП AUX — 8
Стереофонические вход и выход S/PDIF
Интерфейсы управления I2C и SPI (ведущий или ведомый)
Особенности работы данного процессора:
1. Процессор работает на фиксированной частоте проекта, то есть если выставлено в проекте 48 килогерц – значит все. Переключиться в 96 гипотетически можно, но надо менять прошивку контроллером и по идее тактовый генератор тоже перенастраивать. В блоке есть модуль ASRC и входной аудио поток аудио данных можно ресемплировать в частоту DSP на лету. НО MCLK должен оставаться один, ибо он же, по сути, тактовый генератор для ДСП. Либо ставить кварц на плату и тактировать все с него.
2. На плате Чип-Дип отсутствует регулятор напряжения для удешевления, а DSP работает от 3.3 вольт. Китайские платы имеют на борту LDO стабы. Поэтому пришлось докупать RDC1-0028, Двойной DC-DC. Жрет DSP порядка ампера постоянно.
3. Информация на Русском по настройке системы в Сигмастудии оооочень скудная и если не обладать английским без словаря – то врубиться очень сложно. А настроек внутри очень много.

Процессор программируется в Сигмастудии ссылка и в ней можно сделать очень много. Рассмотрим мой проект:
Схема проекта:

1. Модуль ASRC – ресэмплинг всего входящего в 48 килогерц, на частоту работы проекта.
2. Модуль селектора входов переключается одной кнопкой на универсальном пине ввода вывода GPIO16/
3. Модуль автоэквалайзера — автоматическое выравнивание АЧХ по кривой измерения микрофоном в формате MLSSA.
4. Регулятор громкости на резисторе – вход ADC на данном пине вычисляет уровень напряжения на переменном резисторе от 0 до 3.3 вольт и производит регулировку уровня входного сигнала. В таблице модуля вводится шаг изменения и максимальный уровень.
5. Кроссовер двухполосный – здесь задаем количество полос, частоты раздела, различие в уровне полос и тип и крутизну фильтра среза.
6. Коррекция АЧХ на фильтрах для каждой полосы. Вот тут очень приятно настраивать каждую полосу по микрофону «на ходу» не записывая в флешку – просто на лету измерять, вставлять фильтр и все выравнивать. Есть модуль автоматической коррекции по файлу MLSSA. Но руками оказалось гораздо точнее все сделать. Если сильно попотеть, то можно настроить коррекцию на FIR фильтрах, которые не крутят фазу. Это видимо будет отдельная эпопея.
7. Модуль задержки для ВЧ канала. Два динамика играют одни частоты в зоне раздела. И если по фазе у них есть сдвиг, на на ФЧХ будет всплеск и на слух ничего хорошего в этой зоне совместного звучания не будет. Все по микрофону опять же выставляется и видно.
7. Направление на выход i2S.

4
Усилительные модули.
Отдельно расскажу о SSM3582A/

ссылка

SSM3582A — это полностью интегрированный, высокоэффективный стерео усилитель звука класса D с цифровым входом. Cхема модуляции Σ-Δ с расширенным спектром обеспечивает прямое подключение к динамику (без необходимости ставить дроссель для фильтрации остатков ШИМ)и обеспечивает современные аналоговые характеристики, снижая при этом EMI излучения по сравнению с другими архитектурами класса D.

Аудио передается на усилитель в цифровом виде, сводя к минимуму возможность искажения сигнала в цифровой среде. Усилитель обеспечивает выдающиеся аналоговые характеристики с отношением сигнал / шум 106 дБ и низким общим гармоническим искажением + шум (THD + N) 0,004%. При этом нет значительного ухудшения параметров с ростом частоты как у большинства усилителей Д класса с классическим шим модулятором.

Это еще не все. В микросхеме заложена возможность управлять частотой, битностью, громкостью и лимиттером по I2C. НО полноценно использовать модули в моно режиме тоже можно только в TDM. Это вполне реализуемо с использованием модулей ЧИП-ДИП usb-i2s Superprime одной перемычкой, а вот 1467 как показала практика настроить TDM сложнее.

Частота, вернее частотный диапазон усилителя выставляется перемычками. Это несколько ограничивает возможности мультиформатности, но в диапазоне 32-48 вполне реализуемо и юзабельно без перестроек.

Усилитель обладает некоторыми особенностями.

1. Внутри усилителя есть DSP и его так же можно подстраивать в сигмастудии.
Внутри есть переключатель коэффициента усиления. И по дефолту это 19дб. Ибо по дефолту все рассчитано на питание 12 вольт. И чтобы он раскрылся на максимум по мощности ему нужно на вход сделать в ADAU1467 +3 дб а не 0db как минимум. Там же можно настроить тип фильтра на выходе ЦАП.

2. При стандартном использовании, после 12 ватт на канал начинается рост искажений. Но усилитель можно переключить в моно режим и это усилит выходной каскад по току. Роста искажений при этом нет до максимума.

3. Усилитель питать можно 16 вольт. При его КПД на 8ми омную акустику 93 процента это даст ну примерно 27 ватт при условии +3дб усиления от 0 уровня или переключения процессором чипа в 21 дб усиления. Для 4омной акустики КПД около 90 процентов и в итоге получим на выходе порядка 50 ватт.

4. В моно усилитель работает не в i2s а TDM режиме, где в пачке по одним проводам ну как i2s можно цеплять несколько устройств и задавать каждому индекс. При этом задается и ширина окна ТДМ. Вот тут засада. Если с платы СуперПрайм все работало нормально, там перемычкой ставится TDM, то заставить нормально выдавать 1467 TDM на 2 и 3 выход i2s я не смог. Все вроде настраиваю как в даташите, а не АЛЕ. ЧИПовцы честно пытались помочь мне настроить 1467 в TDM, но мы так и не смогли. В итоге забил на ТДМ и выставил на два канала i2s два усилителя в моно режиме. Так оказалось проще и работает.

5. MCLK усилителям внешний c i2s не нужен. МЦЛК в данном проекте используется только для тактирования чипа ДСП.

6. Усилители в моно режиме берут сигнал исключительно левого канала если сигнал просто i2s. Поэтому я занял два канала i2s из четырех. Зачем моно.
Вот из даташита.


7. SSM3582 требует три питания. Силовое 15 вольт, аналоговое и цифровое 5 вольт. Чип Дип поставили все конденсаторы минимальные керамику. По идее надо довесить, даже по даташиту на ldo надо весить порядка 200 микрофарад а не 10. Но это решаемо в данном варианте. Хотя, я видел китайские платы ssm3582– там есть кондеры в питании.
Блеск и нищета экономии.

ссылка

Все это было реализовано в макете.

сразу извиняюсь за фотку — это рабочий макет. Я и не планировал ничего публиковать. Там видно и конденсаторы и дорогие импульсные источники Tapco 3.3 и 5 вольт для отдельного чистого питания ДСП, генератора и аналоговых цепей усилителей.

В макете добавил еще один канал на PCM5102 для экспериментов, ибо был свободный порт i2s. Провода i2S после некоторых испытаний сделал минимально короткими — не длиннее 10см. Корпус тоже ждет своего часа.
Первым усилителем Д класса, который сломал мои стереотипы был клон Ncore Юрия с Украины.
Теперь SSM добавляет теплоты в звуке))) ничего не добавляет вернее.
В рунете уже появились появились полностью цифровые усилители без классической системы ЦАП — Д выход. На ssm3582a делает свои усилители в какой то версии APPLE. Это тенденция — а значит скоро будет такой уход от аналогового АВ массово как в свое время массово соскочили с ламп на транзисторы и ушли от кинескопных ЭЛТ на LCD.

Объединение двух офисов по VPN на Mikrotik

 Arduino  Комментарии к записи Объединение двух офисов по VPN на Mikrotik отключены
Ноя 022021
 

Задача стоит “подключить два удаленных офиса между собой по VPN”.
В обоих офисах стоят маршрутизаторы Mikrotik.

Адресация офисов.

Адресация Офиса 1 (MSK), который будет у нас VPN-сервером:
WAN 88.53.44.1
LAN 192.168.10.0/24
VPN 192.168.60.1
Адресация Офиса 2(SPB), который будет VPN-клиентом:
WAN 88.53.55.2
LAN 192.168.20.0/24
VPN 192.168.60.2

Настройка VPN-server.

1. Первый маршрутизатор в офисе MSK.
Включаем VPN-Server.

/interface l2tp-server server set authentication=mschap2 enabled=yes

L2TP-Server-Enable

2. Создаем пользователя, который к нам будет подключаться.

/ppp secret add local-address=192.168.60.1 name=User password=11225555 profile=default-encryption remote-address=192.168.60.2 service=l2tp

3. Добавляем интерфейс сервера.

/interface l2tp-server add name=l2tp-in2 user=User

L2TP-Serv

L2TP-Serv2

Настройка VPN-клиента.

Второй маршрутизатор в офисе SPB, создаем клиентское подключение к головному офисе в Москве. Пользователь с именем User, пароль 1225555

/interface l2tp-client add allow=mschap2 connect-to-88.53.44.1 disabled=no name="SBP-MSK" password=1225555 user=User

L2tp-client

L2TP-client-general

L2TP-dial-out

Маршрутизация офисов.

Теперь, после создания подключений на маршрутизаторах, нам нужно прописать статически маршруты в локальные сети через VPN на Mikrotik в обоих офисах.

Начнем с первого офиса в MSK:
dst-address – указываем локальную сеть офиса в SPB, к которой будем подключаться.
gateway – шлюз через который будем подключаться к сети, ip VPN клиента.
pref. source – указываем свою локальную сеть, с которой будем выходить.

/ip route add comment="route MSK-SPB VPN" dst-address=192.168.20.0/24 gateway=192.168.60.2 pref-src=192.168.10.1

MskToSpb

Второй офис в SPB:

/ip route add comment="route SPB-MSK VPN" dst-address=192.168.10.0/24 gateway=192.168.60.1 pref-src=192.168.20.1

Route SpbtoMsk

Заключение

Таким образом мы объединили два офиса между собой позволив пользователям чувствовать себя в одной сети и использовать внутренние общие ресурсы.

Если вы не видите общие ресурсы компьютеры офисов между собой или не проходит ping – отключите на обоих машинах firewall и проверьте открытость UDP порта 1701.

Как дать шифровальщикам потопить компанию

 Arduino  Комментарии к записи Как дать шифровальщикам потопить компанию отключены
Ноя 022021
 

Блог компании Сервер Молл Системное администрирование *Антивирусная защита *IT-инфраструктура *Восстановление данных *

image alt text

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

В зависимости от мировоззрения и настроения написанное можно воспринимать как буквально, так и творчески.

Вектор атаки и защита периметра

Чаще всего шифровальщики попадают в инфраструктуру двумя путями – через электронную почту, или снаружи, через RDP. С почтой все понятно: письма «из налоговой» и «из банка» доходят до своих получателей даже через спам-фильтры (лучше их, конечно, отключить вовсе). А вот на втором способе я остановлюсь подробнее.

Для начала нужно открыть RDP наружу – так будет проще работать сотрудникам, без всяких там неудобных VPN. Если шеф требует усилить информационную безопасность, просто повесьте внешний порт RDP на другой. Сканерам это не помешает, а начальник может и успокоится.

image alt text

Брутфорс при включенном аудите неудачных попыток входа

Вирус будет пытаться попасть на ваш сервер с помощью перебора пароля. Чтобы максимально упросить ему эту задачу, проведите следующий «тюнинг»:

  • На терминальном сервере отключите блокировку учетных записей, которая срабатывает после нескольких неудачных попыток входа;
  • Если на сервере терминала работает аналог fail2ban, например, Ts_block, EvlWatcher или RdpGuard, то удалите его немедленно. Такой сервис обеспечит вам блокировку на фаерволе IP–адреса после неудачных попыток подключения. Вы же не хотите мешать взлому, верно?
  • Пароли пользователей и администраторов должны быть максимально короткими и простыми – в идеале, состоять только из цифр. Если вдруг руководство прикажет принять меры, то включите требования к сложности пароля. Это никак не помешает шифровальщику, если не ставить ограничение по длине. Без ограничений по длине пользователи будут использовать словарные пароли, ведь они удобнее сложных комбинаций и проще для подбора.

Когда RDP открыт наружу, у всех пользователей заданы простые пароли, а письма со ссылками на архивы регулярно приходят на почту, то вирус себя ждать не заставит. Следующая задача администратора – облегчить вновь прибывшему достойное кормление в инфраструктуре.

Оптимизируем инфраструктуру

Когда шифровальщик «постучится» к вам в виде письма от «прокуратуры», то система может и насторожиться. Вот пользователь скачал архив, запустил исполняемый файл, но при запуске возникает сообщение:

image alt text

Это означает, что в системе включена политика ограниченного использования программ (SRP – Software Restriction Policies). Эта технология появилась во времена Windows XP и ее принцип работы очень прост: при настроенной политике ни один из исполняемых файлов, кроме разрешенных, не будет запущен. И действительно опасными для системы останутся только эксплойты.

К счастью для шифровальщиков редкие администраторы включают эту политику. Если вашей системе «не повезло» и защита работает, то нужно изменить доменную или локальную групповую политику, поставив по умолчанию уровень безопасности «неограниченный»:

image alt text

Но руководство может обратить внимание на отключение политики. В таком случае для вируса можно открыть другую лазейку. Обычно при настройке SRP разрешается запуск исполняемых файлов из системных папок, но остается без внимания один нюанс: в системных папках есть подпапки, в которых у пользователя есть права на создание файлов. Например, путь C:\Windows\Temp:

image alt text

В параметрах безопасности разрешите создание файлов и их выполнение

Полный список занятных подпапок в системных каталогах можно получить с помощью Powershell или через утилиты вроде DumpSec.

Get–ChildItem C:\Windows\ –recurse | Get–Acl | export–csv filename.csv

Шифровальщикам, попавшим в систему через почту, это, конечно, не поможет. Но если автор вируса получил непривилегированный доступ к серверу, то он сможет закинуть в эти папки исполняемые файлы и зашифровать все, что угодно. Опытный «хозяин» шифровальщика сможет получить также и хэши паролей (особенно, если система использует NTLM), а через них вскрыть хэш перебором и открыть для себя уже привилегированный доступ. Чтобы вместо безопасного Kerberos работал NTLM, достаточно заходить на сетевые ресурсы не по имени, а по IP-адресу.

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

Если политика ограниченного использования программ отключена, то антивирус можно оставить: все равно шифровальщика, который использует установленный архиватор, антивирус сможет поймать только по сигнатурам. При этом UAC нужно отключить.

Теперь вирус гарантированно сможет проникнуть в инфраструктуру и зашифровать полезные данные. Однако для окончательного триумфа этого недостаточно: ведь у вас останутся резервные копии, которые быстро восстановят работоспособность. Поэтому что? Правильно, корректируем настройки резервного копирования – чтобы не мешали…

Настраиваем резервное копирование

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

Есть более изящные способы сделать так, чтобы восстановление системы после атаки шифровальщика стало невозможным:

  • Бэкапы должны быть на одном сервере: шифровальщик их зашифрует, а имеющиеся теневые копии – удалит;
  • Файлы нужно архивировать с расширением .zip или .bak. Упаси биллгейтс, будут файлы .exe или вовсе без расширения – наш «зверек» может их пропустить!
  • Нежелательно делать резервное копирование в облако или на сетевой ресурс, подключаемый по отдельному имени пользователя – так вирусу будет сложно до них добраться;
    Другой хороший вариант – настроить резервное копирование в расшаренную папку с правами «Все — полный доступ».
  • Не следует хранить бэкапы за определенный период: лучше ежедневно создавать резервные копии, затирая предыдущие. И не нужно включать для бэкапа настройки копирования по собственному протоколу в свой репозиторий;
  • Еще один момент, про который не стоит забывать – встроенное средство архивации Windows может делать резервные копии на жесткий диск, невидимый в системе. Это неудобно и вам, и шифровальщику.

Теперь после атаки шифровальщика можно грустно, но уверенно говорить, что резервных копий нет. Это победа!

image alt text

Spora ransomware удаляет теневые копии с помощью команды vssadmin.exe и отключает восстановление в загрузчике. UAC мог бы остановить это действие.

Хотя нет – вы можете сделать завершающий аккорд и стать посредником между организацией и авторами шифровальщиков. Для этого скажите начальнику, что вымогателям платить не надо, но есть компании, занимающиеся расшифровкой. После этого возьмите у него сумму, равную той, которую просят вымогатели плюс накиньте свой процент – и вуаля, к моральному удовольствию прибавилась еще и тихая денежная радость. Можно смело считать себя богом системных интриг и… лучше уволиться.

А теперь серьезно

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

Обидно, что простейшая настройка SRP и закрытый чуть более серьезно периметр позволили бы избежать грустных последствий. Надеюсь, материал поможет кому-то организовать защиту предприятия более разумно или хотя бы задуматься об этом.

Как организовать защищённый доступ при помощи VPN

 Arduino  Комментарии к записи Как организовать защищённый доступ при помощи VPN отключены
Ноя 022021
 

Блог компании «Актив» Децентрализованные сети IT-инфраструктура *Сетевые технологии *

4e38179c0dff4802a7046693544d3bd0.jpeg

Кому нужен VPN?

На март 2017 г. доля вакансий о работе с удаленным доступом, размещенных на hh.ru составляла 1,5% или 13 339 вакансий. За год их число удвоилось. В 2014 г. численность удаленных сотрудников оценивалась в 600 тыс. чел или 1% от экономически-активного населения (15–69 лет). J’son & Partners Consulting прогнозирует, что к 2018 г. около 20% всех занятых россиян будут работать удаленно. Например, до конца 2017 г. Билайн планирует перевести на удаленное сотрудничество от 50% до 70% персонала.

Зачем компании переводят сотрудников на удаленку:

  • Сокращение затрат компании на аренду и содержание рабочих мест.
  • Отсутствие привязки к одной локации дает возможность собирать команду
    проекта, которую никогда нельзя было бы собрать в пределах одного города. Дополнительный плюс – возможность использования более дешевой рабочей силы.
  • Удовлетворение потребности сотрудников в связи с их семейными обстоятельствами.

Мы для себя открыли потребность в VPN более 10 лет назад. Для нас мотиватором предоставления VPN доступа сотрудникам была возможность оперативного доступа в корпоративную сеть из любой точки мира и в любое время дня и ночи.

Путь выбора идеального VPN решения

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

VPN в роутерах

Так называемых “китайских решений” на рынке много. Практически любой роутер имеет функциональность встроенного VPN сервера. Обычно это простое вкл/выкл функционала и добавление логинов паролей для пользователей, иногда интеграция с Radius сервером. Почему мы не стали рассматривать подобное решение? Мы прежде всего думаем о своей безопасности и непрерывности работе сервиса. Подобные же железки не могут похвастаться ни надежной защитой (прошивки выходят обычно очень редко, или не выходят в принципе), да и надежность работы оставляет желать лучшего.

VPN Enterprise класса

Если посмотреть на квадрат Гартнера то на VPN рынке уже давно лидирующие позиции занимают компании, которые производят сетевое оборудование. Juniper, Cisco, Check Point: все они имеют комплексные решения решения, в составе которых есть и VPN сервис.

5118a76a28bc42ecb2e6b85f5d4116ec.png

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

Microsoft VPN

10 лет назад мы были компанией, ориентированной прежде всего на Windows. Microsoft предлагает бесплатное решение для тех, у кого вся инфраструктура построена на их базе. В простых случаях настройка не вызывает сложностей даже у начинающего системного администратора. В нашем случае мы хотели выжать из VPN все с точки зрения безопасности, соответственно, использование паролей было исключено. Мы естественно хотели использовать сертификаты вместо паролей и для хранения ключевой пары использовать свой продукт Рутокен ЭЦП. Для реализации проекта нам нужно было: контроллер домена, радиус сервер и правильно поднятая и настроенная инфраструктура PKI. Подробно на настройке я останавливаться не буду, в интернете есть достаточно много информации по данным вопросам, а правильная настройка PKI вообще может потянуть на десяток статей. Первым протоколом, который мы использовали у себя, был протокол PPTP. Долгое время данный вариант VPN нас устраивал, но в конечном итоге нам пришлось отказаться от него по двум причинам: PPTP работал далеко не везде и мы начинали пользоваться не только Windows, но и другими операционными системами. Поэтому мы стали искать альтернативы. Замечу, что поддержка PPTP не так давно была прекращена apple. Для начала мы решили посмотреть, что еще из протоколов может предложить на Microsoft. SSTP/L2TP. SSTP нас устраивал всем, за исключением того, что он работал только на Windows. L2TP данным недостатком не обладал, но его настройка и поддержание его в работе показались нам достаточно затратными и мы решили попробовать альтернативы. Хотелось более простого решения, как для пользователей, так и для администраторов.

OpenVPN

Мы в компании “Актив” искренне любим open source. Выбирая замену Microsoft VPN мы не могли обойти стороной решение OpenVPN. Основным плюсом для нас было то, что решение «из коробки» работает на всех платформах. Поднять сервер в простом случае достаточно просто. Сейчас, используя docker и, к примеру готовый образ, это можно сделать за несколько минут. Но нам хотелось большего. Нам хотелось добавить в проект интеграцию с Microsoft CA, для того, чтобы использовать выданные ранее сертификаты. Нам хотелось добавить поддержку используемых нами токенов. Как настраивать связку OpenVPN и токены описано к примеру вот в этой статье. Сложнее было настроить интеграцию Microsoft CA и OpenVPN, но в целом тоже вполне реализуемо. Получившимся решением мы пользовались около трех лет, но все это время продолжали искать более удобные варианты. Главной возможностью, которую мы получили, перейдя на OpenVPN, был доступ из любой ОС. Но остались еще две претензии: сотрудникам компании нужно пройти 7 кругов ада Microsoft CA для выписывания сертификата, а администраторам по-прежнему приходилось поддерживать достаточно сложную инфраструктуру VPN.

Рутокен VPN

У нас есть знание, как использовать токены в любых операционных системах, у нас есть понимание, как правильно готовить инфраструктуру PKI, мы умеем настраивать разные версии OpenVPN и мы имеем технологии, которые позволяют управлять всем этим удобным для пользователя образом из окна браузера. Так возникла идея нового продукта.

5dd18ce4b5a848a380f750aa795a8e87.jpg

Настройка Рутокен VPN

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

70efa20510084a57a785c02da8827acd.JPG

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

65bb8dd480de4809a9d1acb38ba80c08.png

773a94ffe6a643b0a8407227860b4d93.png

Третьим шагом необходимо настроить сам VPN сервис. Указать внешний IP, на который будет происходить подключение. Выбрать тип шифрования и адресацию сети.

370a8e9073cd4ff3b7ffc4ba5bcd2264.png

Четвертым шагом настройки мы создаем локальных пользователей, или добавляем их из AD

a5e9546ead4c4ac7a355ab3e0b7ccce1.png

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

Личный кабинет сотрудника

После того, как администратор добавил пользователей, сотрудник может воспользоваться порталом самообслуживания.

dfd8a77319de4ffbab71171abc485e76.png

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

c07098491e38485b97b9cc500ce690f7.png

После установки плагина/расширения нам остается лишь сгенерировать сертификат себе на Рутокен ЭЦП.

11fc934f578e44d6a620298f2c451b24.png

8f6a082846f04b18a6b893931b9533a5.png

И установить клиент под нужную операционную систему:

a5987431460d451aba698062fc84d961.png

Как все это работает?

Немного об аппаратной части. Изначально мы долго думали, какую “базу” использовать для нашего решения, так как нужно было соблюдать баланс между стоимостью, удобством, производительностью. После исследований, что предлагается на рынке, мы остановились на двух вариантах реализации и дальнейшего распространения решения:

  • x86 (Enterprise) – программное решение, которое предоставляется конечному потребителю в виде образа виртуальной машины, который можно развернуть в рамках своей ит-инфраструктуры.
  • Raspberry Pi – уже достаточно известный микрокомпьютер, который обладает вполне неплохой производительностью при не самой высокой стоимости и который можно начать использовать как VPN-сервер уже через 10 минут после того, как его в прямом смысле вынули из коробки.

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

Но изначально, нам все же нужно осуществить настройку сервисов, которые требуются для корректной работы продукта. Настройка сервисов осуществляется на текущий момент специалистами нашей компании в полуавтоматическом режиме. Это значит, что автоматизирован процесс деплоя программного обеспечения и первичных настроек, но инициализация данного процесса пока остается привилегией человека. Во время первичной настройки устанавливаются системные пакеты, python, django, OpenVPN, supervisor, OpenSSL и пр.

А что же дальше? Далее необходимо настроить всю инфраструктуру, которая собственно и отвечает в целом за безопасность. А именно: CA (центр сертификации), PKI (инфраструктура открытых ключей), выписать необходимые ключи и сертификаты.

Создание PKI и CA, а также формирование файла конфигурации OpenVPN-сервера, генерация ключей и выписывание сертификатов осуществляется уже после передачи продукта клиенту. Но это не значит, что для этого необходимо иметь какие-то специфические знания и прямой доступ к операционной системе. Все реализовано в бизнес-логике бэкенда системы администрирования, доступ к которой предоставляется через Web-интерфейс. От клиента требуется только ввести минимальный набор атрибутов (описано выше), после чего стартует процесс инициализации PKI и создания СА. Описывать конкретные вызовы системных команд смысла особого нет, так как уже давно все описано и разжевано до нас. Главное, что мы сделали — это автоматизировали данный процесс, избавив пользователя от необходимости обладать специфическими знаниями в администрировании.

Для работы с ключами и сертификатами мы решили не изобретать велосипед (хотя очень хотелось и до сих пор вынашиваем мысль его изобрести исходя из наших дальнейших планов развития продукта) и используем easy-rsa.

Самый долгий процесс при настройке инфраструктуры – это генерация файла Diffie-Hellman. Мы долго экспериментировали с параметрами и пришли к балансу “качество-производительность”. Хотя были мысли вообще избавиться от данного шага, нагенерировать таких файлов заранее, используя наши серверные мощности и просто “раздавать” их во время первичной инициализации. Тем более, что данные, содержащиеся в этом файле не являются приватными. Но пока мы оставили эти мысли для дальнейших “изысканий”.

Далее необходимо предоставить конечному пользователю механизм самостоятельного создания ключевых пар, формирования запросов на выписку сертификата в CA и собственно получение данного сертификата с записью на токен. А так же необходим клиент, позволяющий установить VPN-соединение с предварительной аутентификацией на токене.

Первую задачу мы решили благодаря нашему плагину который реализует функциональность электронной подписи, шифрования и двухфакторной аутентификации для Web- и SaaS-сервисов. Для того, чтобы выписать сертификат и записать его на токен, пользователь должен установить данный плагин, перейти по ссылке чтобы попасть в личный кабинет сервиса RutokenVPN, предварительно подключив токен к компьютеру (подробнее о плагине можно прочитать на нашем ресурсе )

При инициализации процесса выписывания сертификата, осуществляется запрос на токен для генерации ключевой пары а также запрос на выписку сертификата в CA. Приватный ключ записывается на токен, а запрос на выписку сертификата отправляется в СА, который в свою очередь осуществляет его выписывание и возвращает в ответе. После чего сертификат так же записывается на токен.

Почти все готово для установления VPN-соединения. Не хватает клиента, который “знает”, как работать с сервером и нашими токенами.

0f5b2f292d7f45a1a87926ef52f139bb.jpg

Наш клиент реализован на Electron. Кто не в курсе, что это за зверь, то если совсем кратко – возможность реализовать десктопное приложение, используя js, css и html. Не вдаваясь в подробности, клиент является неким “враппером” над OpenVPN-клиентом, позволяющим осуществлять его вызовы с нужными параметрами. Почему именно так? На самом деле нам было так удобней, хотя выбранное решение и накладывает определенные ограничения.

Так как мы используем токен как носитель ключевой информации, необходимой для аутентификации при установлении VPN-сессии, то нам нужно сконфигурировать OpenVPN-клиент для работы с ним. Провайдером PKCS#11 является библиотека собственной разработки для работы с нашими токенами, путь к которой и прописывается в настройках OpenVPN клиента. Подробнее о ней можно почитать здесь.

При запросе на установку VPN-соединения, запрашивается PIN-код ключа, при корректном вводе извлекается сертификат для аутентификации клиента, осуществляется хэндшейк клиента с сервером и устанавливается VPN-соединение. Знающие люди могут возразить, что не все так просто, но целью данного описания не является рассказать все тонкости работы OpenVPN, а только осветить основные моменты нашей реализации.

Немного о наших планах. Основное, над чем сейчас мы работаем — это реализация ГОСТ-шифрования. Уже пройден достаточно большой путь исследований, позволивший нам максимально приблизиться к ее реализации. В ближайшее время сможем удовлетворить интерес потенциальных клиентов в данной функциональности.

Перехватываем цифровые радиопереговоры, или куд а едут экипажи в 5 утра

 Arduino  Комментарии к записи Перехватываем цифровые радиопереговоры, или куд а едут экипажи в 5 утра отключены
Ноя 022021
 

Давным-давно, в далекой-далекой заднице мира…

Шел апрель 2020 года, ковидная пандемия набирала обороты. Мы с женой, пользуясь тем, что оба стали работать целиком и полностью удаленно, временно улетели из Санкт-Петербурга в свой родной город, чтобы быть рядом с родителями, которым была нужна помощь в эти непростые времена. Местные власти объявили «карантин», и от скуки сидения дома в один из дней мне пришла в голову мысль разобрать завалы хлама в старой квартире. В одной из коробок мне попался ноунеймовый USB DVB-тюнер на чипе RTL2832U с Алиэкспресса, который я когда-то давно заказал за 10$, и тут я призадумался. Вспомнилось, что много-много лет назад я игрался с ним, и в эфире можно было услышать много интересного. «А почему бы не поиграться еще раз?» — возникла в голове мысль, которая и положила начало этой истории.

eb2d2a661551b8d826580d8381cad80e.jpg

Железо

В качестве станции наблюдения был использован старенький ноутбук Lenovo G430, который нашелся в том же шкафу и старенький монитор ViewSonic оттуда же (на самом деле, я не перестаю удивляться, что же только можно найти в этом самом шкафу, но это уже отдельная история). Жесткий диск у машинки сдох окончательно и бесповоротно, поэтому в качестве системного носителя была использована обычная USB-флешка на 32 гигабайта, с которой его родная Windows 8.1 работала вполне себе сносно.

В качестве антенны была использована обычная телевизионная антенна, тут все банально. С одной стороны, не самая лучшая штука по тактико-техническим характеристикам и чувствительности, с другой стороны — покупается за 200 рублей в любом магазине электроники или находится бесплатно в том же шкафу, а частотный диапазон у таких антенн довольно широкий, от 80 до 800 МГц, что уже дает определенный простор для экспериментов.

Антенна и RTL-SDR-свисток с алиэкспрессаАнтенна и RTL-SDR-свисток с алиэкспресса

«Круглая часть» антенны (на фото), предназначенная, по логике, для дециметровых волн, как выяснилось после разборки антенны, была на деле чисто декоративной — к ней не было припаяно вообще никакого провода. Зато «усы» действительно работали, в том числе в дециметровом диапазоне, и регулирование их на размер, равный половине рассчитанной длины волны давало еще немного децибел в нужном диапазоне на анализаторе спектра.

RTL-SDR-свисток у меня был на старом тюнере Elonics E4000, что тоже внесло небольшой отпечаток на происходящее, но об этом позже.

Софт и начало работы

В качестве SDR-тулы был выбран SDR# (сейчас у них появилась версия для .Net Core, не знаю, совместима ли она со старыми плагинами, но ссылка на версию для .Net 4.x там тоже есть). Началось все с установки софта и базовой настройки и проверки. Установка драйверов для свистка делалась по стандартной инструкции с помощью прилагаемой утилитки Zadig и никаких проблем не вызвала.

7c9cac6755a4a45f09f773350dd7b9b1.png

Проверка работоспособности свистка (многие люди говорят, что эти свистки легко умирают из-за статических разрядов со стороны антенны) свелась к простому: что у нас вещает всегда, на известных частотах, и с хорошим уровнем сигнала? FM-радиостанции! Поэтому накрутив шкалу на нужный диапазон, я ткнул в самый сильный сигнал на спектрометре, и в течение полуминуты пришлось слушать, как какой-то мужик с хриплым голосом пел трагичную историю про некоего социально безответственного типа, которому «светила звезда Магадана». Убедившись, что все работает как надо, я отправился исследовать радиоэфир родного города.

В авиадиапазоне не нашлось ничего интересного, то ли потому что я был далековато от аэропорта, то ли просто самолетов в этот момент мимо не пролетало (глянуть на Flightradar24 я как-то не догадался). Послушав немного охранников торгового центра неподалеку, я отправился рыскать по эфиру дальше. И вот, в одном частотном диапазоне, я услышал что-то похожее на звук модема, однако характер передачи (короткими отрезками по 3-10 секунд с длинными паузами) говорил о том, что это, скорее всего, голосовая связь, только с цифровым кодированием. А значит, нужно попробовать ее декодировать, чем мы и займемся.

ce1729953897de1dac7782f312f81b57.png

Декодируем

Для декодирования цифровых форматов передачи существует программа DSDPlus. Существует она в разных инкарнациях: публичная версия 1.101, которая была выпущена в 2015 году и с тех пор не обновлялась, а ее более новые версии распространяются только среди владельцев платной подписки (10 долларов в год, 25 долларов навсегда), хотя одну из относительно свежих версий можно спокойной скачать из раздела загрузок с известного сайта радиолюбителей, правда, вопрос моральной и юридической стороны такого дела остается открытым.

DSDPlus может интегрироваться с SDR# двумя способами.

Первый способ классический: в Windows устанавливается так называемый Virtual Audio Cable, регистрирующий в системе дополнительное мультимедийное устройство для записи и воспроизведения звука и создающий «бридж» между ними. SDR# выводит звук радиоэфира на VAC, а DSDPlus с другой стороны VAC слушает звук и декодирует его.
Я тестировал два вида VAC-софта, первый c https://vb-audio.com/Cable/ и второй c https://vac.muzychenko.net/, оба работают вообще без проблем.

Второй способ: обходимся без велосипедов, SDR# будет лить поток сразу в DSDPlus на localhost через TCP.

Так вот… Публичная версия 1.101 вполне себе хорошо работает с TCP, в более новых версиях протокол поменялся, и автор DSDPlus не поделился его описанием с разработчиком SDR#-плагина, поэтому если вы используете более новую версию DSDPlus, то это получится делать только через виртуальный аудиокабель. А жаль.

Итак, если мы используем DSDPlus через аудиоустройство, то будет удобно использовать DSD Interface плагин для SDR# (инструкция есть тут). Если мы работаем через TCP, то плагин уже точно необходим, и называется он DSDTcp.
Устанавливаются плагины киданием их в папку SDR# и прописыванием DLL’ки в файл Plugins.xml. Сам DSDPlus должен лежать тоже где-нибудь неподалеку.

Плагин предоставляет интерфейс конфигурирования DSDPlus, который выглядит примерно так:

d222cd6cef058f87f28910f738d6393c.png

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

631549bc81741888761e3004f8b7791c.png

Там же есть настройки записи файлов (и с этим связан один странный баг, но об этом позже). На второй вкладке можно оставить все по умолчанию, ведь мы пока еще не знаем, какого именно типа радиосигнал мы будем слушать:

4280126e619cac27128dd7b3df24b77b.png

Не забываем обязательно нажать на «Create command line», иначе ничего не сохранится. Если DSDPlus при старте ругается на нераспознанные аргументы командной строки, то просто удаляем их. Мне помогло, ничего не сломалось 🙂

После этого запускаем DSDPlus кнопкой из плагина, и если все сделано правильно, то как только начнется передача и SDR# начнет принимать радиосигнал, в окошке DSDPlus побегут логи, а из колонок мы услышим декодированный звук:

d1a95f77eb810e2714f24c8b097bbdda.png

Казалось бы, хэппи энд? Нет, не совсем. Очень скоро я заметил, что переговоры «прыгали» по частотам. Несколько секунд на одной частоте, спустя пол минуты следущий сеанс связи — на другой, и так далее, и таких частот набирался чуть ли не десяток. Знающие люди, наверное, прочитав это, поняли, в чем дело, но я в тот момент понял, что мне нужен сканер частот.

Сканируем

И такой плагин для SDR# был. Точнее, есть два плагина. Первый — менеджер частот со сканером: вы забиваете интересующие вас частоты в список, и он поочередно перебирает их, проверяя, ведется ли передача на какой-либо. Второй — именно сканер с поиском частот, он наблюдает за широким спектром, и как только на какой-то из частот появляется сигнал выше определенного уровня на определенное время, он переключается на эту частоту, и заодно ведет статистику времени передачи по разным частотам. Именно им я и воспользовался. Ширина полосы моего RTL-SDR позволила мне встать как раз «в середину» нужного диапазона, чтобы была возможность охватить все интересующие частоты без перестройки тюнера.

Выглядит интерфейс сканера примерно так:

46d73c8c895f8d6c5149b894923c9d06.png

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

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

9a809d10cd9287cd5d1e386281d44940.png

Запись

Я не нахожусь за компьютером круглосуточно, но было весьма интересно знать, о чем говорили в эфире в мое отсутствие. Соответственно, встал вопрос записи. Первая идея была проста: устанавливаем еще один виртуальный аудиокабель и перенаправляем вывод звука DSDPlus на какую-нибудь программу-рекордер. Правда, как оказалось, очень нелегко стабильно найти программу-рекордер, которая бы соответствовала простому набору требований: умела записывать сразу в mp3 или ogg и умела автоматически разделять запись на файлы при паузах в звуке длиннее заданного количества секунд. Хорошо подошел MP3 Recorder Studio, если бы не одно НО — он shareware, бесплатная версия ограничена записью в 30 секунд, и когда переговоры длились более 30 секунд без пауз, программа выплевывала окошко с предложением купить платную версию и запись останавливалась, было необходимо ее перезапускать вручную, что, само собой, было неприемлемо. От покупки полной версии меня остановил тот факт, что на сайте разработчика можно было купить не одну программу, а только целый пакет из кучи утилит за 60$, и тут меня, прямо скажем, задушила жаба.

А потом в голову пришло очевидное: у DSDPlus есть встроенная функция записи. Но и тут все не так уж и гладко. Публичная версия DSDPlus 1.101 имеет весьма странный баг при записи в MP3: запись как будто ведется с ускорением в 2 раза. И это не неправильная частота дискретизации, а именно ускорение: частота дискретизации для самого файла — 8000 герц, и когда в аудиоредакторе ты изменяешь скорость файла на нормальную, фактически происходит срез частот еще в два раза — речь хоть и все еще разборчива, но слушать такое очень неприятно. В непубличной версии DSDPlus этот баг исправлен.

А для пользователей публичной версии есть простой выход: записывать эфир в несжатые WAV-файлы и настроить периодический запуск .bat- или powershell-скрипта, который будет натравливать на них LAME или OGG энкодер и удалять оригиналы.

DSDPlus так же умеет разбивать запись на файлы чтобы не превышать определенную длительность, и писать в отдельный файл таймкоды о том, в какое именно время и откуда именно была произведена запись. Правда, форматом файла почему-то был выбран .srt — в таком формате, например, часто хранятся субтитры к фильмам и сериалам. Для меня это было не очень удобно, поэтому я за один вечер набросал небольшую утилику, которая конвертит эти .srt-файлы от DSDPlus в обычные CUE Sheets, группируя записи по длине пауз между ними, и в результате записанный длинный wav/mp3 файл можно легко разбить на отдельные файлы какой-нибудь программой для split’а аудио, например, mp3splt.

Утилитку можно стащить с моего Github: https://github.com/uprt/srt2cue
Писалось, как я уже сказал, за один вечер и чисто для себя, поэтому код местами кривоват, но работает. Ставьте звездочки, присылайте пулл-реквесты, ага.

А как было правильно?

На самом деле, то, на что я наткнулся — это не просто цифровая, а еще и транкинговая связь. Если говорить очень упрощенно, то в эфире кроме ряда голосовых каналов есть специальный служебный канал, и когда кто-то выходит на связь, там передается информация о том, на какой частоте производится передача. Я, по сути дела, на это забил, просто прикрутив к SDR# сканер частот, но если вы хотите узнать, как же это сделать правильно, то читайте дальше.

Для работы с транкинговой цифровой связью существует специальный софт: UniTrunker. Он как раз умеет слушать и декодировать служебный канал и понимать, на какую частоту нужно перенастроиться в конкретный момент времени. Подробный мануал можно найти вот тут.

Работать он может по-разному:

  1. У вас 2 RTL-SDR приемника, один слушает служебный канал, другой настраивается на нужную частоту для приема.
  2. И служебный, и голосовые каналы влезают в принимаемую полосу вашего приемника — тогда можно обойтись только одним RTL-SDR-свистком.

    Выход точно так же можно направить на DSDPlus, хотя я встречал упоминания, что новые версии юнитранкера умеют декодировать голос сами (но могу ошибаться).

Почему я этим не воспользовался? У меня был тюнер на старом чипе Elonics E4000, а UniTrunker умеет работать только с более новыми приемниками на базе R820T.

Впрочем, решение все равно было. Например, мне попалась на глаза схема, когда
— или запускается сразу два SDR# с двумя тюнерами, один из которых слушает служебный канал, а второй настраивается на голос;
— или когда запускается один SDR# но со специальным плагином, позволяющему ему настраиваться сразу на две частоты в пределах полосы тюнера, выводя оба сигнала на разные аудиоустройства и передавая звук с одной частоты через виртуальный аудикабель в UniTrunker, а звук с другой в DSDPlus.
В этих схемах UniTrunker должен каким-то образом сообщать SDR#, на какую именно частоту надо перенастроиться, и для этого есть специальный плагин для него. Сайт плагина давно уже умер, но хвала web.archive.org (ссылка раз, ссылка два). А сам плагин остался на github’е: https://github.com/walczakp/serial-controller. Для коммуникации между UniTrunker и SDR# разработчик почему-то выбрал виртуальный COM-порт. Я, конечно, не очень понимаю, зачем (что мешало обойтись тем же tcp-сокетом?), но, видимо, так захотелось 🙂

Что можно услышать

Вопрос, который, наверное, интересует всех: что же там можно услышать? Да много чего разного. Для меня основной интерес составили переговоры местных дорожных полицейских. Обычно там все было вполне стандартно: один стоит на горе и высматривает нарушителей, передавая номера и приметы экипажу, стоящему чуть ниже; сообщения о разных ДТП; классическое «тут реверсивное движение забыли на мосту переключить, уже два часа как светофор неправильно горит», и подобное. Правда, пару раз удалось наткнуться на погони в прямом эфире, когда очередной лихач на дорогой машине не остановился по требованию ДПС и в итоге за ним гонялись через весь город. Конец был не героический: у одной машины полицейских кончился бензин, а от другой машины нарушитель ушел по сельхозполям в пригороде. Учитывая, что он был на лендкрузере, а преследователи на чем-то легковом, то, в принципе, не удивительно.

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

Legal disclaimer

И самый главный вопрос: законно ли это? Долгое время существовал проект DPS-FM, который занимался ничем иным, как трансляцией в интернет переговоров ДПС в Петербурге. Они изучали российское законодательство и сделали простой вывод: явного запрета на прослушивание радиопереговоров, передаваемых в открытом (не шифрованном виде) в законах нет, следовательно, это разрешено. Более того, парни даже сделали запрос в Роскомнадзор о легальности такой деятельности и получили такой ответ:

e19a5e808ea223756154d782f868685d.gif

Другое дело, что на некоторых радиолюбительских форумах я встречал упоминания, что незаконно публиковать конкретные частоты, на которых вы услышали что-либо интересное. Обоснование было простое: в ряде документов силовых структур эти частоты перечислены в документах «для служебного пользования», и если вы «разгласите» эту информацию, то могут возникнуть проблемы. С одной стороны, притянуто за уши, а с другой стороны, не забывайте, что это все-таки Россия и ожидать от государства можно всего чего угодно, лучше не ходить по тонкому льду.

Ну и последний вопрос о моральной составляющей вопроса. Я считаю, что это хорошо и правильно. Переговоры изначально передаются в открытом и незашифрованном виде — если бы надо было скрыть от наблюдателей, зашифровали бы. Граждане имеют конституционное право на свободу получения и распространения информации. В конце концов, это общественный контроль над структурами, которые работают на налоги граждан и должны работать на благо граждан.

Удачных исследований радиоэфира!

Электронный редуктор или как кардинально увелич ить крутящий момент коллекторного двигателя пер еменного тока на низких оборотах. Часть 2

 Arduino  Комментарии к записи Электронный редуктор или как кардинально увелич ить крутящий момент коллекторного двигателя пер еменного тока на низких оборотах. Часть 2 отключены
Ноя 022021
 

Журнал РАДИОЛОЦМАН, ноябрь 2019

Алексей Кузьминов

Часть 1

Вебинар «Экономичные решения МЕAN WELL для надежных разработок» (30.09.2021)

Принципиальная схема устройства регулятора-стабилизатора скорости на базе микросхемы U2010B

Схема регулятора-стабилизатора скорости вращения двигателя для дрели «TUNGFULL 1806B» (Рисунок 1), как можно убедиться, не отличается особой сложностью. Здесь необходимо заметить, что нумерация резисторов и конденсаторов схемы Рисунок 1 соответствует оригинальной нумерации на схеме, приведенной в справочном листке на U2010B.

Принципиальная схема стабилизатора скорости вращения электродвигателя 260 Вт на базе микросхемы U2010B.
Рисунок 1. Принципиальная схема стабилизатора скорости вращения электродвигателя
260 Вт на базе микросхемы U2010B.

Входное переменное напряжение выбрано на 10 В больше указанного выше (140 В) и с запасом составило 150 В. Это напряжение с помощью двухконтактной сетевой вилки X7 подается на устройство с ЛАТРа. Вместо него можно использовать и обычный трансформатор со вторичной обмоткой, рассчитанной на напряжение 150 В, или работающий в режиме ЛАТРа, то есть имеющий отвод от первичной обмотки, подключенной к сетевому напряжению 220 В. Главное требование к трансформатору или ЛАТРу – максимальный ток, на который они рассчитаны, при напряжении 150 В должен быть не менее 2 А. Кроме того, пожертвовав некоторой мощностью дрели (10% – 15%), можно использовать известное стандартное напряжение 127 В, полученное с широко распространенного трансформатора 220 В/127 В.

Балластный резистор номиналом 13 кОм (R1), диод СМ4007 (VD1), работающий как однополупериодный выпрямитель, и сглаживающий конденсатор C1 служат для получения напряжения питания микросхемы U2010B (DA1). Это отрицательное напряжение (около –13 В) образуется на выводе 11 (VS) благодаря внутреннему коммутатору, соединяющему вывод 12 (High load), куда подключен анод диода VD1, с выводом 11 (VS), куда подключен минус конденсатора C1, а его плюс подключен к «земле» (GND). Номинал резистора R1 при напряжении питания 220 В по справочному листку составляет 18 кОм. Но поскольку рабочее напряжение, подаваемое на DA1, снижено до 150 В, пропорционально снижен и номинал резистора R1 – до 13 кОм. Мощность резистора R1 – 3 Вт (это проволочный резистор KNP300). При его мощности 2 Вт (рекомендуемой в справочном листке) он достаточно сильно нагревается (по ощущениям автора – до 50 °C и более), нагревая саму плату и её компоненты, а при мощности 3 Вт его температура поднимается не выше 40 °C при достаточно долговременной работе устройства. Светодиод красного свечения LD1, индицирующий перегрузку, подключен к выводам 11 и 12 DA1 с помощью двух двухконтактных разъемов X3 и X4. Разъем X3 – два цанговых штыря с расстоянием 2.54 мм между собой (PSLM-2), впаянные в плату устройства и соединенные с выводами 11 и 12 DA1. К разъему X4 – ответному X3 (два цанговых гнезда, SIP-2) – припаян один конец двухжильного провода (два провода МГТФ-0.1), второй конец которого соединен со светодиодом LD1.

Если представить себе сетевое напряжение в виде синусоиды U(t) = UMAXsin(ωt), то при ωt = 0, π и 2π эта функция пересекает 0 (строго говоря, она пересекает 0 при ωt = nπ, где n – целое). Угол φ, при котором открывается симистор VD2 (BTA24-600CW) в положительной полуволне напряжения, отсчитывается от π в сторону нуля, или, другими словами, это угол π–φ, а угол, при котором открывается симистор при отрицательной полуволне, соответственно, равен 2π–φ. Резисторы R8 и R8_1, общий номинал которых по обозначению справочного листка составляет Rφ, подключены между напряжением питания VS (вывод 11 DA1) и входом VRφ (вывод 14 DA1), управляя напряжением (VRφ) на котором с помощью изменения Rφ можно изменять начальный угол открытия симистора φ. А чем больше угол φ, тем раньше открывается симистор и тем бóльшую площадь соответствующей полусинусоиды он пропускает в нагрузку (в данном случае это мотор М). Другими словами, регулируя Rφ, можно задавать начальную скорость вращения мотора М.

Помимо Rφ на угол φ влияет конденсатор C3, подключенный к выводу Cφ (вывод 3 DA1). Этот конденсатор совместно с Rφ образует RC-цепочку RφCφ (Rφ = R8 + R8_1, Cφ = C3), постоянная времени которой и определяет угол φ. Мотор М подключается к двухконтактной сетевой розетке X1 с помощью двухжильного провода, на одном конце которого установлена двухконтактная сетевая вилка X2, а второй конец соединен с мотором М. Розетка X1 одним контактом (2-й вывод X1) подключена ко входному напряжению (~150 В), а вторым (вывод 1 X1) – к выводу А2 симистора VD2. С вывода OUT (вывод 16 DA1) через резистор R3 на УЭ симистора VD2 подаются короткие импульсы, открывающие его как раз во время, соответствующее углам π–φ и 2π–φ. Для синхронизации с сетевым напряжением, то есть для определения момента перехода сетевого напряжения через ноль (от момента которого и отсчитывается угол φ) используется резистор R2, подключенный между сетевым напряжением (~150 В) и входом VSYNC (вывод 15 DA1). Вывод симистора VD2 A1 через токоизмерительный резистор (параллельно соединенные резисторы R6 и R6_1) подключен к «земле». Напряжения с двух концов токоизмерительного резистора (R6||R6_1) через резисторы R4 и R5 подаются на два входа ISNS (выводы 1 и 2 DA1), служащих для измерения значения тока через симистор. Максимальное напряжение на входах ISNS составляет 0.25 В (по справочному листку). Если учесть, что максимальный ток через симистор составляет 1.88 А (см. выше), нетрудно подсчитать номинал токоизмерительного резистора: 0.25 В/1.88 A = 0.133 Ом. Автор использовал два резистора R6 = 0.15 Ом и R6_1 = 1 Ом, соединенные параллельно, общее сопротивление которых, как нетрудно подсчитать, составляет 0.13 Ом.

На выводе VREF (вывод 8 DA1) формируется опорное напряжение, которое используется тремя потребителями.

Первый потребитель – вход CSOFT (вывод 7 DA1), к которому подключен конденсатор C2, служащий для «мягкого старта» (Soft Start) двигателя после включения питания. Второй вывод конденсатора подключен к напряжению VREF.

Второй потребитель – вход ILOAD (вывод 6 DA1), к которому подключены резистор R11 и параллельно ему конденсатор C5, вторые выводы которых также подключены к опорному напряжению VREF. Вход ILOAD служит для настройки срабатывания защиты по току, то есть при превышении тока определенного порога (например, 1.8 А) срабатывает защита; в этом случае двигатель отключается от входного напряжения, и загорается светодиод LD1. Через некоторое время, если причина срабатывания защиты устранена, на двигатель вновь подается напряжение, и он продолжает работать с той же скоростью, с которой работал до срабатывания защиты. Условием срабатывания защиты является отсутствие подключения к выводу 9 DA1 (MODE – режим) какого-либо напряжения, то есть этот вывод должен оставаться свободным (как на Рисунке 1). Если же этот вывод подключить к VREF, то защита по току отключается, то есть двигатель после превышения тока, например, 1.8 А, продолжает работать (режим «c»).

Третий потребитель VREF – вход CTRL (вывод 4 DA1). К этому входу одновременно подключены два напряжения: первое – с вывода 5 (COMP – Compensation output), служащего для компенсации токовой нагрузки, второе – снятое с движка потенциометра P1, которое через подстроечный резистор R10 и включенный последовательно с ним резистор R10_1 также подключено к входу CTRL. Один из выводов потенциометра P1 через резистор R14 подключен к VREF, а второй, через резистор R7 – к «земле» (вывод 10 DA1). Сам потенциометр P1 расположен вне платы устройства и подключается к ней с помощью 3-штырькового цангового разъема с шагом 2.54 мм (PSLM3 – X5), впаянного в плату. К этому разъему подключается ответный разъем – 3-контактное цанговое гнездо (SIP3 – X6), которое припаяно к одному концу трехжильного провода, а второй его конец припаян непосредственно к P1. Ручка этого потенциометра выведена на лицевую поверхность корпуса устройства (см. далее), а сам потенциометр служит для задания необходимой скорости вращения дрели. Как видно из Рисунка 1, на входе CTRL складываются два напряжения: одно – с вывода COMP, второе – с движка P1 (через R10 и R10_1). Подстроечный резистор R10 служит для настройки компенсации нагрузки, о чем будет подробно рассказано далее. Здесь же, на взгляд автора, необходимо объяснить сам принцип компенсации нагрузки. Этот принцип заключается в следующем.

Выходное напряжение на выводе COMP, в соответствии со справочным листком, прямо пропорционально напряжению, снятому с двух концов токоизмерительного резистора (выводы 1 и 2 DA1) или току, проходящему через него. Но крутящий момент, как было упомянуто выше, прямо пропорционален квадрату тока, то есть увеличение крутящего момента в 2 раза (например, при торможении вала) увеличивает ток через двигатель дрели в 4 раза. Квадратичная зависимость тока от тормозного момента имеет одну особенность, проявляющуюся в том, что при малом крутящем моменте имеет место некая «слепая» зона, в которой на малых скоростях вращения, то есть при малом крутящем моменте при торможении вала ток возрастает незначительно. В этом можно легко убедиться, если, например, рассмотреть две функции: линейную y(x) = x и квадратичную z(x) = x2 на интервале 0 < x < 1. На этом интервале линейная функция y(x) всегда больше квадратичной z(x). И только при x > 1 функция z(x) > y(x). Этот факт приводит к тому, что на самых малых скоростях вал двигателя легко затормозить, поскольку ощутимого увеличения тока при этом не будет, а значит, не будет и компенсации нагрузки, или, другими словами, вал не будет сопротивляться торможению.

Теперь сравним между собой два режима работы. В первом подадим на двигатель напряжение U1 = 220 В, во втором, – например, уменьшенное до U2 = 150 В. Очевидно, что при одной и той же мощности, поданной на двигатель, или при одной и той же скорости вращения ток I150В > I220В. Поскольку мощность, передаваемая на двигатель, пропорциональна площади под полусинусоидой двух разных напряжений (220 В и 150 В), начиная от момента открытия симистора, то есть от угла π–φ до π и от 2π–φ до 2π, то при более низком напряжении (150 В) угол φ150В > φ220В. Другими словами, «слепая» зона при напряжении 150 В существенно меньше таковой при напряжении 220 В, поэтому при напряжении 150 В можно добиться меньшей скорости вращения вне «слепой» зоны.

Как видно из схемы Рисунка 1, на выводе CTRL складываются два напряжения: выходное напряжения с вывода COMP и выходное напряжение, снятое с движка потенциометра P1 с учетом падения напряжения на R10 и R10_1. A угол φ прямо пропорционален напряжению на выводе CTRL. Так вот, принцип компенсации нагрузки состоит в том, что при торможении вала двигателя напряжение на выводе COMP возрастает, а с ним и возрастает напряжение на выводе CTRL, отчего увеличивается угол φ, на двигатель подается бóльшая мощность, что приводит к существенному сопротивлению торможения и сохранению первоначальной скорости вращения, определяемой положением движка потенциометра P1. А подстроечный резистор R10 определяет превалирующее воздействие на вывод CTRL либо напряжения с вывода COMP, либо напряжения, снятого с движка потенциометра P1. При увеличении R10 влияние напряжения с вывода COMP, очевидно, увеличивается, а влияние напряжения, снятого с движка потенциометра P1, уменьшается (и наоборот). Этот принцип и положен в основу настройки схемы.

И последний момент, который нуждается в пояснении. Он связан с использованием трансформатора. Как известно, при увеличении нагрузки на трансформатор его выходное напряжение падает. В связи с этим падает и напряжение питания микросхемы VS. Однако если посмотреть на схему Рисунка 1, то можно заметить, что вывод VRφ, определяющий начальное состояние угла открытия φ симистора (или, в том числе, начальную скорость дрели), соединен с выводом питания VS (через резисторы R8 и R8_1), а не с выводом опорного напряжения VREF, которое практически не зависит от напряжения питания (на то оно и опорное). Это приводит к тому, что при уменьшении напряжения питания VS скорость дрели увеличивается (и наоборот). Таким способом реализуется одна из особенностей работы микросхемы U2010B, состоящая в компенсации изменения входного напряжения (Mains supply variation compensated). Был даже проведен простой эксперимент: уменьшив выходное напряжение ЛАТРа со 150 В до 130 В, можно было убедиться в том, что скорость дрели несколько увеличилась, а при увеличении напряжения со 130 В до 150 В – восстановилась до первоначальной. Таким образом и происходит компенсация падения выходного напряжения трансформатора.

Настройка схемы Рисунок 1 достаточно проста. В самом начале к напряжению на двигателе необходимо подключить стрелочный тестер. Движок потенциометра P1 установить на минимальную скорость вращения, то есть ближе к R14. Вывод 9 DA1 соединить с выводом 8, то есть отключить режим защиты по току (см. справочный листок, режим «c»), чтобы он не мешал настройке.

При включении напряжения питания, если двигатель не вращается совсем или вращается слабо, либо наоборот, вращается очень быстро, изменяют положение движка подстроечного резистора R8, добиваясь приемлемых минимальных оборотов (300 – 500 об/мин). После этого необходимо притормозить вал, например, рукой (лучше в перчатке, чтобы не повредить кожу). Если двигатель легко останавливается, и напряжение, измеренное тестером, не увеличивается, необходимо увеличить R10, при этом скорость вращения уменьшится, и ее необходимо восстановить до первоначального значения, изменяя R8. Если при торможении вала скорость вращения, наоборот, начинает увеличиваться, и при этом напряжение, измеренное тестером, также резко увеличивается, необходимо уменьшить значение R10, что приведет к увеличению скорости, и ее опять необходимо скорректировать, изменив значение R8. Так, путем последовательных приближений добиваются таких значений минимальной скорости, при которых вал будет существенно сопротивляться торможению, а напряжение, измеренное тестером, при торможении также будет увеличиваться (вплоть до напряжения питания при максимальном торможении). После этого необходимо проверить, не увеличивается ли скорость на средних и максимальных оборотах (до примерно 2000 об/мин) при торможении вала. При ее увеличении (перерегулирование) необходимо подкорректировать (уменьшить) номинал резистора R10 и соответственно подкорректировать R8.

Далее необходимо настроить режим срабатывания защиты по току при перегрузке. Для этого вывод 9 отключить от вывода 8, то есть оставить свободным (режим «b»), а вместо R11 подключить потенциометр (переменный резистор) номиналом 200 – 300 кОм. Затем, при существенном торможении вала вплоть до полной его остановки, подобрать номинал R11 так, чтобы при этом режиме торможения загорелся светодиод LD1, с двигателя на короткое время снялось напряжение питания, а при отпускании вала двигатель восстановил первоначальную скорость вращения. После этого, измерив значение переменного резистора R11, установить вместо него постоянный резистор. В данном случае, как видно из схемы Рисунок 1, его номинал равен 82 кОм.

Если предполагается настроить схему для работы с другим типом дрели, то настройка несколько усложняется (но ненамного), однако принцип её остается прежний. В этом случае, вместо R7, R14 и P1 необходимо установить переменные резисторы по 50 кОм, а вместо R8 – переменный резистор 500 кОм. Резистор R14 установить на минимум (0 Ом), движок P1 повернуть к R14, а R7 установить в среднее положение (25 кОм). После настройки, аналогичной вышеописанной в некотором диапазоне P1, измерить значения P1 при минимальной и максимальной скорости, разбить его на два постоянных резистора и один переменный, но уже меньшего номинала (например, 20 кОм), а, если потребуется, аналогично заменить 20 кОм на 10 кОм (как на схеме Рисунок 1).

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

И последнее, что необходимо особенно подчеркнуть, это достаточно высокое напряжение (150 В), которое присутствует на плате. При настройке следует быть очень аккуратным, чтобы ненароком не коснуться этого напряжения. Кроме того, при настройке автор настоятельно рекомендует использовать отвертку с пластиковой ручкой и керамическим шлицем, а ручка потенциометра P1 также должна быть пластиковой, то есть должна быть хорошо изолирована от металлического стержня потенциометра.

Принципиальная схема устройства регулятора-стабилизатора скорости на базе микросхемы U2008B

Как указывалось выше, микросхема U2008B – упрощенная версия U2010B, поэтому схема устройства на ее основе (Рисунок 2) более проста.

Принципиальная схема стабилизатора скорости вращения электродвигателя 480 Вт на баз микросхемы U2008B.
Рисунок 2. Принципиальная схема стабилизатора скорости вращения электродвигателя 480 Вт
на баз микросхемы U2008B.

Хотя наиболее предпочтительным рабочим напряжением для дрели «SKRAB 56000» оказалось напряжение 190 В (см. выше), было решено использовать для этой цели сетевое напряжение 220 В. Это было сделано по двум причинам. Во-первых, напряжение 220 В ненамного отличается от 190 В, в связи с чем для работы устройства не требуется трансформатор 220 В/190 В, что существенно упрощает все устройство. Во-вторых, на основе дрели «SKRAB 56000» были сконструированы циркулярная пила и точило, скорости работы которых почти на порядок больше скоростей при сверлении. Поэтому максимальная и минимальная скорости вращения дрели были выбраны в диапазоне 2000 об/мин (минимальная) и 10000 об/мин (максимальная). В связи с этим, при минимальной скорости в 2000 об/мин даже при работе от напряжения 220 В, как было выявлено из эксперимента, «слепая зона», о которой говорилось выше, отсутствует, поскольку при такой скорости вращения ток, потребляемой дрелью, довольно значителен и поэтому вполне достаточен для его «захвата» петлей компенсации нагрузки в микросхеме U2008B.

Здесь следует заметить, что минимальная и максимальная скорости вращения мини дрели «TUNGFULL 1806B» (300 – 2000 об/мин – см. выше) и мини дрели «SKRAB 56000» (2000 – 10000 об/мин) взяты «не с потолка». Эти скорости были измерены автором достаточно точным способом с помощью головки для поверки газовых счетчиков, оснащенной крыльчаткой (звездочкой), инфракрасным светодиодом и фототранзистором, между которыми она вращается. Для измерения частоты вращения был использован частотомер. Более подробно о подобном способе измерении скорости вращения написано в статье автора [2].

Для получения напряжения питания микросхемы также используется гасящий резистор R1 номиналом 22 кОм (как в справочном листке) мощностью 5 Вт (цементный резистор SQP-5), так как при его мощности в 2 Вт (по справочному листку) его нагрев (по ощущениям автора) составлял более 50-60 °C, тогда как при мощности в 5 Вт – только около 40 °C. Диод SM4007 (VD1) используется для однополупериодного выпрямления погашенного R1 напряжения, а конденсатор C1, включенный между напряжением питания –VS (вывод 5 DA1) и «землей» (вывод 4 DA1), – как сглаживающий. Это напряжение питания через подстроечный резистор R8 и последовательно включенный с ним резистор R8_1 подается на вход Rφ (вывод 6 DA1), предназначенный для начальной установки угла φ открытия симистора BTA24-600CW (VD2). Таким образом, сумма номиналов резисторов R8 и R8_1 определяет номинал Rφ: R8 + R8_1 = Rφ, который совместно с конденсатором C3 (Cφ), подключенным к выводу Cφ (вывод 2 DA1), образует RC-цепочку, RφCφ, постоянная времени которой и определяет начальный угол φ открытия симистора VD2. Резистор R2 включен между сетевым напряжением ~220 В и входом VSYNC (вывод 7 DA1) и служит для синхронизации с сетевым напряжением. Импульсы для открытия симистора VD2 поступают на его УЭ с выхода OUT (вывод 8 DA1) через резистор R3. Мотор М с помощью 2-контактной сетевой вилки X2 подключен к 2-контактной розетке X1 устройства. Как видно из схемы, мотор М оказывается включенным между сетевым напряжением ~220 В и силовым электродом A2 симистора VD2, второй силовой электрод A1 которого через токоизмерительный резистор номиналом 0.1 Ом (R6) подключен к «земле». При максимальном токе 2.5 А (см. выше) максимальное напряжение на R6, как нетрудно подсчитать, составляет 0.25 В, что согласовывается с его максимальным значением по справочному листку.

В отличие от микросхемы U2010B микросхема U2008B имеет только один вход ISNS (вывод 1 DA1), предназначенный для измерения напряжения на токоизмерительном резисторе R6. Фактически – это его потенциал относительно «земли». В микросхеме отсутствуют две опции: защита по току (поэтому в схеме не предусмотрен светодиод и вывод для него) и выход опорного напряжения (VREF), как в U2010B. Кроме того, выход напряжения компенсации нагрузки (COMP) уже соединен с входом CTRL внутри микросхемы. Этот вывод (вывод 3 DA1) так и называется Control input/compensation output. В связи с этим один конец потенциометра P1 через резистор R14 подключен к напряжению питания –VS (а не к VREF, как в U2010B), второй его конец через резистор R7 подключен к «земле», а движок – через подстроечный резистор R10 и последовательно с ним включенный резистор R10_1 – к входу CTRL. Резистор R10 также служит для настройки компенсации нагрузки. Сам потенциометр P1 расположен отдельно от платы (на корпусе – см. далее) и подключается к ней с помощью 3-жильного провода, один конец которого припаян к P1, а второй – к 3-контактному разъему X4, представляющему собой три цанговых гнезда с расстоянием между собой 2.54 мм (SIP-3). Этот разъем подключается к ответному разъему X3, расположенному на плате и представляющему собой 3 цанговых штыря (PSLM-3).

Конденсатор C4 служит для сглаживания напряжения на входе CTRL, поскольку, как уже отмечалось, для получения этого напряжения используется напряжение питания –VS, полученное одополупериодным выпрямителем и имеющее значительные пульсации. Устройство подключается к сетевому напряжению ~220 В с помощью стандартной двухконтактной вилки X5.

Настройка схемы Рисунок 2 абсолютно аналогична настройке схемы Рисунок 1, исключая настройку защиты по току, поскольку такой защиты в U2008B не предусмотрено. Обозначения всех резисторов, используемых для настройки (R8, R10, R7, R14 и P1), схемы на Рисунке 2 – те же, что и на Рисунке 1, поэтому, чтобы не повторяться, подробное описание настройки не приводится.

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

Материалы по теме

  1. Datasheet Atmel U2008B
  2. Datasheet Atmel U2010B
  3. Datasheet STMicroelectronics BTA24
  4. Datasheet Diotec SM4007

Окончание

Делаем свою Time Machine для Линукса

 Arduino  Комментарии к записи Делаем свою Time Machine для Линукса отключены
Ноя 022021
 

Настройка Linux *

После интенсивного пользования time machine на маках и пару ситуаций когда она реально пригодилась (были варианты когда пришлось поставить систему из бэкапов и варант когда пришлось откатывать назад после проблем), возникла мысль а собственно почему такой удобной системы нет на линуксе. После исследования вопроса и опроса знакомых линуксоидов оказалось что:
1. сделать такую систему можно просто за пару минут на коленках
2. странно, но как-то никто собственно не в курсе что это можно поднять настолько быстро.
3. наша time machine для линукса будет с маджонгом и гейшами.

Как раз был ненужный appletv первого поколения из которого было решено сделать небольшой сервер на hardeded linux для сбора логов и всяких вспомогательных целей. После установки hardened gentoo как раз и возник вопрос как его бы бэкапить чтобы весь и сразу диск — чтобы можно было при полном отказе накатить бэкап на новый диск или на полностью новый appletv (хм, если потом такой найду конечно), или выборочно востанавливать удалённые или потерянные файлы просто ссылаясь на опеределенную дату.

Как работает time machine? Довольно просто, первый слепок системы просто копируется как файлы со всеми атрибутами в Backups.backupdb/hostname/YYYY-MM-dd-hhmmss, +делается симлинк Latest указывающий на последний слепок. А уже при втором слепке происходит следующее: сравниваются даты файлов и если файл не поменялся то вместо новой копии файла делается hardlink на файл из предыдущего слепка. Тогда если нет изменений файлов то весь новый слепок будет полностью ссылаться на предыдущий. Слепки будут отличатся только новыми/модифицированными/удалёнными файлами. В результате можно просто удалить любой слепок (каталог типа YYYY-MM-dd-hhmmss) и ничего не поломается. Самая ближайшая ассоциация — умный указатель в c++ например: когда пропадает последняя ссылка на файл (из всех слепков) он и удалится с дисков.

Очень удобная система с точки зрения просмотра предыдущих файлов, их востановления, удаления старых бэкапов итд. Вплоть до восстановления всей системы из слепка.

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

rsync имеет чудесную опцию —link-dest которая как раз и делает всю выше описанную логику по сравнению с предыдущими слепками и создания hardlink-ов. Опция -x исключит все примонтированные файловые системы как /proc /sys /dev итд. —delete будет удалять файлы которые пропадут.

Вся time machine будет одним скриптом как:

#!/bin/sh
date=`date «+%Y-%m-%d-%H%M%S»`
SRC=/
DST=/mnt/backup-hdd/Backups.backupdb/atv

rsync -ax \
—delete \
—link-dest=../Latest \
$SRC $DST/Processing-$date \
&& cd $DST \
&& mv Processing-$date $date \
&& rm -f Latest \
&& ln -s $date Latest

Копируем скрипт в /etc/cron.hourly и вуаля у нас бэкапы как в time machine.
Если наша система слетела, мы можем загрузтся со флешки, отформатировать раздел, и запустить тот же rsync в обратную сторону, потом перегрузится или сделать chroot и система опять рабочая.

Еще положим в /etc/cron.daily простой скрипт который будет удалять hourly слепки предыдущий дней оставляя только 24 за последний день, потом удалять daily слепки за предыдущие месяцы итд — как в apple time machine, только выбирайте вашу последовательность.

Хотим заливать бэкапы по сети на backup сервер? Тоже пожалуста. Делаем авто авторизацию с ssh ключиками и немого меняем скрипт:

#!/bin/sh
date=`date «+%Y-%m-%d-%H%M%S»`
SRC=/
DST=/mnt/backup-server-hdd/Backups.backupdb/atv

rsync -axz \
—delete \
—link-dest=../Latest \
$SRC backup-user@company.com:$DST/Processing-$date \
&& ssh backup-user@company.com \
«cd $DST \
&& mv Processing-$date $date \
&& rm -f Latest»
&& ln -s $date Latest»

Тестируем, 3ГБ система на appletv сравнилась с последним слепком на сервером за минут пять — сервер удалённый — не в локальной сети, соединение было около 1.5MB/s. Мы добавили «-z» для компресии. Неплохо, но если будет расти можно делать не hourly а с большим диапазоном. Надо указать что rsync по сети похоже не передаст «owner:group» файлов — так как будет пользовать пользователя backup-user@… – можно просто сделать дамп всех атрибутов файлов в текст файл и положить в бэкап.

Теперь чего нет у Мак пользователей
1. Гибкая конфигурация с cron.
2. Опция —exclude=PATTERN/—exclude-from=FILE позволяет указать куда более гибкие правила на исключение чем просто указать папки. Например я очень недоволен что time machine бэкапит у меня на маке все *.о файлы — компиляция проекта легко раскидывается на пару гигабайт obj файлов, а сами папки проектов я исключать совсем из бэкапа не хочу.
3. Легко добавить доп логику чтобы делать локи баз данных если нужно
4. Легко сделать также в дополнению к слепку еще соотв слепок только тех файлов что изменились — легко мониторить потом какие файлы были изменены. Так как hardlink-и то места это много не займёт.
5. Добавьте теперь что сами хотите, у вас всё-таки линукс в руках 😉

Update: Пожалуй добавлю список требований к системе резервного копирования который у меня был в голове когда я смотрел на доступные пакеты/системы:
1. Простота использования (rsync: всего одна команда)
2. Доступность (rsync найдёте пожалуй на любом livecd)
3. Зависимости (если у вас слетел диск, вы загрузились с livecd, то теперь надо ставить куда-то пакеты с их зависимостями?)
4. Отсутствие конфиг файлов или их минимум (или теперь сначала искать конфиг руками в бэкапе?)

Система резервного копирования Linux на лету анало г Acronis?

 Arduino  Комментарии к записи Система резервного копирования Linux на лету анало г Acronis? отключены
Ноя 022021
 

Доброго времени суток!
Подскажите есть ли для linux система резервного копирования всего диска без отключения сервера. Аналог Acronis true image и ему подобных. Чтобы после выхода из строя системного диска можно было вставить в сервер новый диск и развернутся из бекапа. так сказать делать слепки жесткого диска.

Сейчас использую rsync по крону.

#!/bin/sh date=`date "+%Y-%m-%d-%H%M%S"` SRC=/ DST=/mnt/backup-server-hdd/Backups.backupdb/atv rsync -axz \ --delete \ --link-dest=../Latest \ $SRC backup-user@company.com:$DST/Processing-$date \ && ssh backup-user@company.com \ «cd $DST \ && mv Processing-$date $date \ && rm -f Latest» && ln -s $date Latest"

Взято тут

Заранее спасибо.

UPD. как вариант рассматриваю DD
что то вроде
# dd if=/dev/sda | of=/bacup_dir/DEVICE.img».
Но есть проблемы:
1. Объем снимка равен объему HDD а на 1 ТБ HDD может быть всего 200ГБ данных.
2. Невозможно развернуть снимок на диске меньшего объема.

ESP32: Аналоговые входы

 Arduino  Комментарии к записи ESP32: Аналоговые входы отключены
Июл 182021
 

ESP32: Аналоговые входы

У платы ESP32 15 аналоговых входов с АЦП (12 бит): 2, 4, 12–15, 25–27, 32–36 и 39. Позволяет представить аналоговое напряжение в цифровом виде с разрядностью 12 бит.

Для получения показаний достаточно вызвать функцию analogRead(GPIO), указав нужный пин.

При этом мы считываем уровень напряжения от 0В до 3.3В, которые распределяются от 0 до 4095.

Для примера подключим потенциометр к пину 34 и будем считывать показания через монитор порта.

 // Соединим потенциометр к пину GPIO 34 (Analog ADC1_CH6) const int potPin = 34; // показания int potValue = 0; void setup() { Serial.begin(115200); delay(1000); } void loop() { // считываем показания potValue = analogRead(potPin); Serial.println(potValue); delay(500); } 

Следует учитывать, что показания не являются строго линейными. Так напряжение от 3.2 до 3.3 всё равно будет выводить значение 4095, аналогично для напряжения от 0 до 0.1, которое будет равно 0.

При использовании WiFi для аналоговых входов используйте пины 32, 33, 34, 35, 36, 39. Остальные могут вызвать проблемы.

Другие функции

Существует свои нестандартные функции для работы с аналоговыми входами.

  • analogReadResolution(resolution) — устанавливает разрешение. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
  • analogSetWidth(width) — аналогичная функция. Можно использовать значение 9 (0 – 511) или 12 (0 – 4095). По умолчанию используется 12 бит
  • analogSetCycles(cycles) — set the number of cycles per sample. Default is 8. Range: 1 to 255
  • analogSetSamples(samples) — set the number of samples in the range. Default is 1 sample. It has an effect of increasing sensitivity
  • analogSetClockDiv(attenuation) — set the divider for the ADC clock. Default is 1. Range: 1 to 255
  • analogSetAttenuation(attenuation) — sets the input attenuation for all ADC pins. Default is ADC_11db. Accepted values:
    ADC_0db: sets no attenuation (1V input = ADC reading of 1088).
    ADC_2_5db: sets an attenuation of 1.34 (1V input = ADC reading of 2086).
    ADC_6db: sets an attenuation of 1.5 (1V input = ADC reading of 2975).
    ADC_11db: sets an attenuation of 3.6 (1V input = ADC reading of 3959).
  • analogSetPinAttenuation(pin, attenuation) — sets the input attenuation for the specified pin. The default is ADC_11db. Attenuation values are the same from previous function.
  • adcAttachPin(pin) — Attach a pin to ADC (also clears any other analog mode that could be on). Returns TRUE or FALSE result.
  • adcStart(pin), adcBusy(pin), resultadcEnd(pin) — starts an ADC convertion on attached pin’s bus. Check if conversion on the pin’s ADC bus is currently running (returns TRUE or FALSE). Get the result of the conversion: returns 16-bit integer.

Арбалеты «Poe Lang»/»Интерлопер»: разберемся не тор опясь

 Arduino  Комментарии к записи Арбалеты «Poe Lang»/»Интерлопер»: разберемся не тор опясь отключены
Июн 122021
 

Арбалеты «Poe Lang»/»Интерлопер»: разберемся не торопясь

| Автор: ingewarr

Даже не верится, что статье «Новые арбалеты: «Poe Lang» наносит ответный удар» сегодня исполнилось три года! Понятно, с тех пор утекло немало воды, и настала пора рассказать о реалиях дня сегодняшнего.

На технических аспектах, плюсах и минусах, а также нюансах эксплуатации новинок останавливаться не будем, хотя бы потому, что особо говорить и не о чем. Пока имеем лишь разного рода полурекламные ролики, видео с первыми отстрелами и сетевые схватки сторонников и противников этих моделей и марки вообще. Вот через годик уже наверняка появится объективная информация от владельцев, включая временной тест на живучесть узлов и расходников не только с ГОСТовскими плечами на 43 кгс, но и с оригинальными охотничьими. В общем, поживем — увидим. А сегодня попытаемся разобраться с самими моделями, поскольку здесь наблюдается некоторая путаница, хотя и без технических подробностей обойтись не удастся.

Во-первых, сразу следует сказать, что всем известный портал «Интерлопера» (arbalet.ru), уже долгое время находившийся в подвешенном состоянии, ныне и вовсе перестал отвечать на запросы потенциальных покупателей. Если в двух словах, то данный ресурс сейчас передал эстафету своему «сменщику» — archezon.ru. Вот туда и следует обращаться со всеми вопросами. Кстати, именно там вы найдете как давно известные образцы, так и новинки, о которых сейчас пойдет речь. По устоявшейся традиции начинаем с младших моделей.

Оглавление

Рекурсивные арбалеты

Давайте оставим в стороне линейку компактных рекурсивных арбалетов «Интерлопер Скорпион» («Jaguar» у «ПоеЛанга»), которая, впрочем, обогатилась серией «Jaguar II» в исполнении булл-пап (на фото).

Кстати, в сравнении с прототипом, описанным в упомянутой выше статье про «ответный удар ПоеЛанга», внешний вид его серьезно изменился (можете сравнить сами). Даже стопоры тетивы (STS) идут в базе. «Jaguar II» выдает до 260 fps (79 м/с) при усилии натяжения 175 фунтов.

Следующая модель несомненно вызовет (точнее, уже вызвала) интерес у поклонников так называемой «тактикульности», то есть ультра-тактического оружейного стиля. Судите сами:

Ну как, не правда ли, производит впечатление?

По классификации самого «Poe Lang» это брутальное изделие с взводом, осуществляемым подствольным рычагом, имеет трудно выговариваемое название «R9 BK DELUXE(CR-090BA)», у нас и в Европе оно более известно под благозвучным именем «Cobra System R9» — совсем другое дело… Производитель декларирует скоростные показатели в 240 fps (73 м/с) при весьма скромном 90-фунтовом усилии натяжения. Ну да, в принципе игрушка, но насколько же крутая! Тут и взрослым дяденькам не зазорно приобщиться:

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

Блочные арбалеты

«Торпеда» ушла на дно…

Давайте посмотрим, удалось ли производителю воплотить в жизнь задумки, о которых мы писали три года назад. Увы, далеко не все…

Не пошла в производство анонсированная тогда серия «Torpedo», за исключением одной модели. По сути, это были «тактические» версии уже знакомых арбалетов:

Узнали? В центре известный на российском рынке вариант «Ифрита», предлагаемый в исполнении «булл-пап» под характерным названием «Тактик». Слева от него перелицованный «Архонт», справа – «Легат». Вот, на фото для сравнения «Torpedo-T» и старый добрый «Архонт»:

Ну да, исполнение булл-пап, телескопический приклад а-ля AR-15… А главное, появилась тогда у меня надежда, что в новой модели за счет компоновки будет устранен чуть ли не единственный недостаток «Архонта» — неудачная развесовка из-за массивной колодки плеч. Но не вышло.

А может, и к лучшему. «Тактических булл-папов» ныне в производственной линейке тайваньцев пруд пруди, и с появлением серии «Торпедо» вполне могла бы уйти в небытие замечательная классическая линейка «Легат» — «Ифрит» — «Архонт». Кстати, и сейчас считаю последний едва ли не самым лучшим образцом охотничьих арбалетов «ПоеЛанга», ведущим свою родословную от легендарного заокеанского «Ten Point Phantom».

Младшие модели охотничьих арбалетов : «Лезвие» и «Фобос»

В остальном же у компании «PoeLang» в минувшие три года все шло как по рельсам. Вышла на рынок младшая модель из линейки полноразмерых блочников — «Blade». На фото она в «полном фарше»:

У нас «Лезвие» можно приобрести и в бюджетном варианте (что-то порядка 20 тысяч рублей) без STS, оптики и гасителей вибрации плеч.

Сразу основные ТТХ:

Скорость стрелы: 340 fps (104 м\c)
Усилие натяжения: 43кг (95 lbs), максимальное 84 кг (185 lbs)
Рабочий ход тетивы: 330 мм
Ширина плеч: 475 мм
Ширина взведенных плечей: 415 мм
Общая длина: 870 – 930 мм
Вес (без комплектации): 2,9 кг
Подходящие стрелы (длина): 20″

На следующей ступеньке в производственной иерархии стоит «Guillotine-М», она же «Интерлопер Фобос»:

ТТХ:

Скорость стрелы: 370 fps (113 м\c)
Усилие натяжения: 43кг (95lbs), максимальное 84 кг (185lbs)
Рабочий ход тетивы: 350 мм
Ширина плеч: 520 мм
Ширина взведенных плечей: 430 мм
Общая длина: 895 мм
Вес (без комплектации): 3,6 кг
Подходящие стрелы (длина): 20″, 22″

В одном ряду с «Фобосом» следовало бы поставить «Жнец-370», по крайней мере — по аналогичным скоростным показателям. Однако, можно сказать, на наших глазах случилось нечто, о чем сейчас мы и расскажем.

Арбалет «Жнец-390» — выбор окончательный

Итак, российская арчери-компания «Интерлопер» сделала окончательный выбор — в качестве младшей модели в линейке «Жнецов» теперь не 370-я модель, а «Жнец-390» (на фото).

Основные ТТХ:

Начальная скорость стрелы: 119 м/с, или 390 fps (футов в секунду)
Усилие натяжения в кг: 43/85
Рабочий ход тетивы в см: 35
Стандарт стрел в дюймах: 20
Ширина в см (не взведенный/взведенный): 46 / 35
Вес (кг): 3,15

А теперь — самое интересное. Его предшественник «Жнец-370«, от которого компания отказалась в пользу более скоростного собрата, имел точно такие же показатели усилия натяжения и рабочего хода тетивы, но при этом отставал на нешуточные в арбалетном мире 20 fps (6 м/с). Откуда же взялся прирост скорости?

Начнем издалека. «Жнецы» — это российская ипостась выпускаемой тайваньским «ПоеЛангом» линейки арбалетов «Ballistic». Европейское отделение компании «EK ARCHERY» (см. последнюю главу данной статьи) именует ее «Accelerator». Причем «Ballistic-370«/»Accelerator-370» до сих пор производится. Мы попытались сравнить внешний вид 370-го и 390-го, поскольку по весу второй при одинаковых основных ТТХ тяжелее на целый фунт (0,45 кг) — хотелось понять, в чем тут дело.

На фото даны два фрагмента — на первом «Accelerator-370», на втором — «Accelerator-390». Заметно, что у последнего несколько иная колодка плеч, а главное — сами блоки. Похоже, что они более агрессивны, чем и обусловлен прирост скоростных показателей. Иного объяснения сему феномену у меня не имеется…

В скобках замечу, что 370-я модель окончательно не покинула отечественный оружейный рынок, она осталась в номенклатуре товаров, реализуемых ТД «Дендра».

Топ-модели новых линеек арбалетов

Тут тоже все в порядке, анонсированные три года назад образцы никуда не делись и уже появились на стеллажах оружейных магазинов. Это старший брат «Гильотины-М» — «Guillotine-Х»:

У нас она куда более известна как «Интерлопер Стикс«.

ТТХ:

Скорость стрелы: 400 fps (122 м\c)
Усилие натяжения: 43 кгс (95 lbs), максимальное 84 кгс (185 lbs)
Рабочий ход тетивы: 370 мм
Ширина плеч: 500 мм
Ширина взведенных плечей: 405 мм
Общая длина: 960 мм
Вес (без комплектации): 4 кг
Подходящие стрелы (длина): 20″, 22″

А теперь современный лидер по скоростным показателям среди всех арбалетов бюджетного сегмента. Не только у «ПоеЛанга», а вообще… Это «Ballistic-410»:

У него, разумеется, существует российский аватар — «Интерлопер Жнец-410«. Итак, ТТХ арбалета-монстра:

Скорость стрелы: 410 fps (125 м\c)
Усилие натяжения: 43 кгс (95 lbs), максимальное 84 кгс (185 lbs)
Рабочий ход тетивы: 375 мм
Ширина плеч: 490 мм
Ширина взведенных плечей: 390 мм
Общая длина: 960 мм
Вес (без комплектации): 3,6 кг
Подходящие стрелы (длина): 20″, 22»

Остается, пожалуй, лишь добавить, что все перечисленные выше модели идут как в черном «тактическом» оформлении, так и в «камуфляже».

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

Арбалеты компании «Ek Archery Research» — тот же «Poe Lang», только в профиль

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

Не секрет, что производителей метательного, да и пневматического оружия на планете не так уж много, по крайней мере куда меньше, чем брендов. Просто одни и те же изделия на разных рынках идут под разными названиями. Например, винтовки «Weihrauch» в США в основном продаются под маркой «Beeman», подобной путанице в смежной области мы посвятили целую статью «Вся правда об «Арбалете Crossbow» и еще немного о названиях«.

Так вот, расположенная в голландском городе Эйндховен компания «EK Archery Research» является европейским представительством известного тайваньского производителя «Poe Lang». Имейте в виду, что у абсолютного большинства моделей имеются и российские аналоги, тоже под другими названиями, но под общей маркой «Интерлопер». Особо повторяться на эту тему не видим смысла, просто приведем несколько наглядных примеров.

При этом семейство «Гильотин» (в России — «Фобос» и «Стикс») в Нидерландах сохранило свои имена.

И наконец, одно важное примечание. Модели, продающиеся под брендом «EK Archery», в отличие от своих более ранних прототипов прошли достаточно серьезную модернизацию. Она затронула не только «обвес», но и основные детали, включая плечи или систему крепления колодки. Поскольку оригинальные поеланговские «Баллистики» у нас официально не представлены, лучше обратить внимание на прошедшие российскую сертификацию их европейские аналоги

Еще статьи по теме:

Арбалет и стрельба из него
Мощный арбалет — что за зверь такой?
Новые арбалеты и луки 2020 года
Арбалет для зверовой охоты
Новые охотничьи арбалеты: единство и борьба противоположностей
Оружейная галерея: арбалетно-охотничий квартет «Леопард», «Легат», «Архонт», «Ифрит»
Вся правда об «Арбалете Crossbow» и еще немного о названиях
«Классика» или «традиция»
Новые модели пневматического оружия 2020. Часть 2

Таблица возможных замен реле различных производ ителей

 Arduino  Комментарии к записи Таблица возможных замен реле различных производ ителей отключены
Июн 012021
 
TIANBO HONGFA BESTAR FEME FINDER FUJITSU GOOD SKY NHG MATSUSHITA/
NAIS
NEC OMRON TYCO/SIEMENS OEG ORIGINAL P&B SONG CHUAN TAKAMISAWA ZETTLER TTI WANJA
690 JT G7G,
G8P
ORU T90,
T91
832 AZ2280,
AZ2290,
AZ2200
691 JT G7G,
G8P
ORU T90,
T91
AZ2210,
AZ2250
692 CS,
CF30
T92 AZ2800,
AZ2850
HJQ-15F-1 HF2100,
HF2120
JT G7G T91,
T9A
AZ210,
AZ2120
TR91(DC)
HJQ-15F-1 HF2150,
HF2110
BS-901-1C-1VDC CGQ NT90(T90) JT G7G,
G8P
T90 T90 ORU T9A,
T90
832,
832A,
835AWP
AZ2150,
AZ2110
TR90 WJ115
HJQ-15F-2 HF2160 852 AZ2160
HF7520 NT76 JV G5CE PCD 201 TRV
HF420 K MHS NV23154 R10 AZ420
TRDH HF8 EM-EMH UDH NT72(4459),
NT72-2
V23148 OUDH OUDE T73 843 LZ AZ8 TR72
TRV4,
TRV4-1U
HFV4 GRL NVF4-1(4-2) B VF-4 ORAL VF4 792H,
896,
896H
AZ973 TR92,
TR93
WJ204
HFD2 BT-2C TF,
TFL2,
ZFH-002
3022 FBR240 JRC-19F(4078) DS2Y MR62 G5V-2,
G6A
V23042,
V23105
T82,
T85
502 R2,
RA,
RY
AZ832,
AZ832P
TRS
TRAW HFKM,
HFKS
ARW-SH 4117 V23072-CI,
A203,
A204,
A205,
A206,
A207,
A208
OARW OAR(W) VKM 861 AZ975,
AZ976
TRM WJ201
TRKP HFKP CAR JQC-4(4120) V23076 VKP 822E,
822U
AZ970,
AZ971
TRP
HJR-78F HFKW FBR51 NG8QN JJM2W,
JJMX
G8QN WJ118
TRFM HVF6 VFM
TRV6,
TRV6-1U
HFV7,
HFV7A
NVF4-3(4-4) VF-7 897 AZ979,
AZ980
TR94 WJ207
HJR4102 HM4100F BS102-1C FBR211SC UA-SS N4100(4100F) G2E V23101,
A201
OUA OUA 842 AZ952,
AZ953
TRG
HJR4102E HM4101F BS101-1C ESH-001 FBR211SE AZ-SH N4100F-2(4100F) V23101,
B201
OUAZ OUAZ T81 842A MZ AZ951 TRBS WJ102K
JGC-4F,
JGC-5F
G3MB
JGX-31F G3NA
JGX-39F G3R
JGX-40F,
JGX-40FA
G3RD,
G3R
JPC-2F G6Y-1
TRDB JQC-12FF NT77 834 AZ766 TRCF
HJR-21FF JQC-21FF BS-115C-1C-12VDC FBR100,
FBR211SE
RUDH NT73 G5L SRUDH SRUDH 801H TRU,
TRD
WJ107
HJR-3FF,
TRKF
JQC-3FF VTA 3611 FBR161-H RW-SH NT73 JS MR301 G5L PCE-H SRUDH T72 833H AZ943 TRU,
TRD
JQC-25F G5G
JQC-26F V23088,
PB
HJR-7FF JQC-7FD,
JZC-7FF
VTA-001 FBR161-HB RUDH 4123,
NT71
JS MR501 G5L-E V23001 SRUDH SRUDH T72 812H,
812BH
CS,
GS
AZ942,
AZ941
TRD WJ108
TR5V JRC-23F EZ,
EZH
FBR21,
FBR22
JRC-23F HY G5V-1 V23111 TSC 804,
823
SY AZ957,
AZ955
TRG5
HJR1-2C JRC-19FD,
JRC27F
ZFH-002 3022 FBR244 GS,
SH-L
DS2Y MR62 G5V-2 V23102,
V23105
OVR ORZ T82,
T85
876 RY AZ821,
AZ822,
AZ831
TRS
JSB-53FA,
JSB-53FC
ST3 H3CT-8 GSVM-4
TRAF JQX-102F GQF JQX-102F LF G4A 302 AZ769,
AZ760
TRK
JQX-10FH,
JQX-10FF
RCP,
RCPT
6012,
6013
MK,
MK2,
MK3
KRPA 703,
703XB,
703XC
JQX-105F JT-N,
JT
G7G,
G8P
ORU ORU T90,
T91
832
JQX-115F,
JQX-115F-Q
M25 41XX FTR-H1,
FTR-F1
RT JW,
JW2
V23077,
RT
RT 845,
881DC
AZ761,
AZ762,
AZ743,
AZ763,
AZ764
JQX-116F HE G7L 841 AZ2400,
AZ2410
JQX-118F M15-E N68F G6RN RYII
HJQ-13F-2C,
HJQ-13F-1C
JQX-13F BS-108-1C-12VDC 56XX RET JQX-13F HL LY1,
LY2
TM SRET,
DRET,
RET
K10 SCLA-S,
SCLA-P,
SCL
MAT AZ164,
AZ168
TRL WJ151
TRA-1 JQX-141FF MI,
MIH
JQX-141FF JW MR71, MR72 G2R OMI OMI RT1,
RT2,
RT3,
RT4
845H AZ742,
AZ763,
AZ764
TRI-A1,
TRI-1C
WJ114
TRA-3 JQX-14FF MZPA-001 4031 FBR611 MI,
SH-L
JQX-14FC1,
JQX-14FC2,
JQX-14FC3
JR1,
JR1A
MR71 G2R RP41 OMI OMI RKA,
RKS
845H-1P,
845H-2P
VS,
VB
AZ697 TRI-H,
TRI-2C,
TRI-2A
WJ112,
WJ113
TRA-2 JQX-14FW MZPA-001 4061 FBR611-K GZF-L JR1AF G2RE RP31 OMI-H RKS 793 VSB AZ755 TRIH,
TRIE
JQX-14FY,
JQX-62F
JQX-62F JR1AF-TMP G5J OMIF OMIF 302 VR
JQX-15FS BS-901-1C-12VDC GU NT90 JT G8P ORU T90 832,
835AWP
AZ2251 WJ115
JQX-37F GPF PCF VF
TRAF JQX-54FE JQX-54FE JM G4F PCF 821-W,
302
VH AZ760 TRK
JQX-54FF G4F PCF 821 AZ2300
TRA-8 JQX-68F M15E 3441 G6RN V23061,
RYII
PCD JS AZ696
TRG-1 JZC-32F,
JZC-32FA
GJ JZC-32F OJE,
OJ
OJE 835 JV AZ767,
AZ765
TRC,
TRA
WJ105
JZC-33F JF JZC-33F JQ G5S RE 892 JY AZ940 TRJ
TRA-4 JZC-36F MXH FTR-H2,
FTR-F2,
HTR-H2,
HTR-F2
JZC-36F LK DGIU G5P-1 SDT SDT AZ672
JZC-38F VM T74 851 VE AZ960
TRA5 JZC-42F LA G5PA-2 OSA
TRGB JZC-43F NG5N LD G5N 202
JZC-48F PE,
RE
JZC-49F,
JZC-49FA
RB NPA PA NY
HJQ-14F JZX-140FF MZPA-002 4052 FBR621 MI,
SH-L
JR2,
JR2A
MR72 G2R RP82 OMI OMI RKA,
RKS
845-2P VB AZ733,
AZ733W
HJQ-22F JZX-18FF BMY-4C-12VDC 55XX RE JZX-18FF HC MY2,
MY3,
MY4
ZT STE,
SRE
KHA SCLB,
SCLD
MAT AZ164,
AZ168
TRY
BP P TQ-2 702 TRQ2
PS TQ-2L 702 TRQ2S
NX TX 902
BT,
BTL
M4,
M4S
502 TRS
M1B,
M1BS
502
4099 JZC-7F TR99
JZC-21F G2U T70
4088 JZC-20F
NT75-1 845H-1P TRIL-H
NT75-2 845H-2P TRIL-E
NT78 895 TR81
NT90T G7P T91 T91 832AWP TR91 WJ116
NT90TP G7P T91 T92 832AWP TRH
4117-2 861T TRM2
NV2R V2R TRE2
NVFM VFM WJ209
NVF VF TR82
HJR-78F,
TRKM
FBR51 R-501
TRB1,
TRB2
NG8N,
NG8ND
G8N,
G8ND2

Операционные усилители: 10 схем на (почти) все случ аи жизни

 Arduino  Комментарии к записи Операционные усилители: 10 схем на (почти) все случ аи жизни отключены
Июн 012021
 

Операционные усилители: 10 схем на (почти) все случаи жизни

Всем привет!

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

ghtwwjr7nnnzz1k0c4r1jnknwfa.jpeg

Введение

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

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

1. Неинвертирующий усилитель

Неинвертирующий усилитель – наверное, наиболее часто встречающаяся схема включения операционного усилителя, она приведена на рисунке ниже.
7xfqtzvdeyztyqtemzak1qpdccw.jpeg

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

VIN=VOUTR2R1+R2

Из этой формулы легко получается коэффициент усиления неинвертирующего усилителя:

k=VOUTVIN=1+R1R2

Рассчитаем и промоделируем неинвертирующий усилитель со следующими параметрами:

  • Операционный усилитель LT1803
  • Коэффициент усиления k=10
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала VINmax=0,1 B
  • Постоянная составляющая входного сигнала ВVIN==0,2 В

Выберем из ряда Е96 кОмR1=9,53 кОм и кОмR1=1,05 кОм. Тогда коэффициент усиления будет равен

k=1+R1R2=1+9,53⋅1031,05⋅103≈10

Результат моделирования данной схемы приведен на рисунке (картинка кликабельна):

pzkwvex2_jmaize3zsmd7agis5y.jpeg

Давайте теперь рассмотрим граничные случаи этого усилителя. Допустим, величина сопротивления резистора ОмR2=0 Ом. При этом мы получим, что коэффициент усиления будет стремиться к бесконечности. На самом деле, конечно, это хоть и очень большая, но все-таки конечная величина, она обычно приводится в документации на микросхему конкретного операционного усилителя. С другой стороны, величина выходного напряжения реального операционного усилителя даже при бесконечно большом коэффициенте усиления не может быть бесконечно большой: она ограничена напряжением питания микросхемы. На практике она зачастую даже несколько меньше, за исключением некоторых типов усилителей, которые отмечены как rail-to-rail. Но в любом случае не рекомендуется загонять операционные усилители в предельные состояния: это приводит к насыщению их внутренних выходных каскадов, нелинейным искажениям и перегрузкам микросхемы. Поэтому данный предельный случай не несет какой-то практической пользы.

Гораздо больший интерес представляет собой другой предельный случай, когда величина сопротивления ОмR1=0 Ом. Его мы рассмотрим в следующем разделе.

2. Повторитель

Как уже говорилось ранее, включение операционного усилителя по схеме повторителя – это предельный случай неинвертирующего усилителя, когда один из резисторов имеет нулевое сопротивление. Схема повторителя приведена на рисунке ниже.
ossguytevw5plhxb5zp7h84yo_g.jpeg

Как видно из формулы, приведенной в прошлом разделе, коэффициент передачи для повторителя равен единице, то есть выходной сигнал в точности повторяет входной. Зачем же вообще нужен операционный усилитель в таком случае? Он выступает в роли буфера, обладая высоким входным сопротивлением и маленьким выходным. Когда это бывает нужно? Допустим, мы имеем какой-то источник сигнала с большим выходным сопротивлением и хотим этот сигнал без искажения передать на относительно низкоомную разгрузку. Если мы это сделаем напрямую, без каких бы то ни было буферов, то неизбежно потеряем какую-то часть сигнала.

Убедимся в этом с помощью моделирования схемы со следующими основными параметрами:

  • Выходное сопротивление источника сигнала 10 кОм
  • Сопротивление нагрузки 1 кОм
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала VINmax=0,1 B
  • Постоянная составляющая входного сигнала ВVIN==0,2 В

Моделирования будем проводить для двух случаев: в первом случае пусть источник сигнала работает на нагрузку через повторитель, а во втором случае — напрямую.
Результаты моделирования приведены на рисунке ниже (картинка кликабельна): на верхней осциллограмме выходной и входной сигналы в точности совпадают друг с другом, тогда как на нижней сигнал на выходе в несколько раз меньше по амплитуде относительно сигнала на входе.

x0jydg7lwhxj3xngyahfbbtfuvs.jpeg

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

3. Инвертирующий усилитель (классическая схема)

В схеме инвертирующего усилителя входной сигнал подается на инвертирующий вывод микросхемы, на него же заведена и обратная связь. Неинвертирующий вход при этом подключается к земле (иногда к источнику смещения). Типовая схема инвертирующего усилителя приведена на рисунке ниже.
a1s0ghupb1aytscfyvovbu_b0m0.jpeg

Для входной цепи инвертирующего усилителя можно записать следующее выражение:

VIN−V−R1=V−−VOUTR2

Где V− — напряжение на инвертирующем входе операционного усилителя.
Поскольку операционный усилитель, охваченный петлей обратной связи, стремится выровнять напряжения на своих входах, то V−=0, и при заземленном неинвертирующем входе получаем

VINR1=−VOUTR2

Отсюда коэффициент усиления инвертирующего усилителя равен

k=VOUTVIN=−R2R1

По инвертирующему усилителю можно сделать следующие выводы:

  1. Инвертирующий усилитель инвертирует сигнал. Это значит, что необходимо применение двухполярного питания.
  2. Величина модуля коэффициента усиления инвертирующего усилителя равна отношению резисторов цепи обратной связи. При равенстве номиналов двух резисторов коэффициент усиления равен -1, т.е. инвертирующий усилитель работает просто как инвертор сигнала.
  3. Величина входного сопротивления инвертирующего усилителя равна величине резистора R1. Это важно, потому что при маленьких значениях R1 может сильно нагружаться предыдущий каскад.

Для примера рассчитаем инвертирующий усилитель со следующими параметрами:

  • Операционный усилитель LT1803
  • Коэффициент усиления k=−10
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала VINmax=0,1 B
  • Постоянная составляющая входного сигнала ВVIN==0,2 В

В качестве резисторов в цепи обратной связи выберем резисторы номиналами кОмR1=10 кОм и кОмR2=100 кОм: их отношение как раз равно десяти.
Результаты моделирования усилителя приведены на рисунке (картинка кликабельна).

lnmzp1pi30iswnwttc4izeivwvs.jpeg

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

Входное сопротивление данной схемы равно кОмR1=10 кОм. А что будет, если источник сигнала будет иметь значительное выходное сопротивление, допустим, эти же 10 кОм? Результат моделирования этого случая представлен на рисунке ниже (картинка кликабельна).

h6u36nz4y0-wztoa6oy1fk0t4ku.jpeg

Амплитуда выходного сигнала просела в два раза по сравнению с предыдущим случаем! Очевидно, что это все из-за того, что выходное сопротивление генератора в этом случае равно входному сопротивлению инвертирующего усилителя. Таким образом, стоит всегда помнить про эту особенность инвертирующего усилителя. Как же быть, если все-таки требуется обеспечить работу источника сигнала с высоким выходным сопротивлением на инвертирующий усилитель? В теории надо увеличивать сопротивление R1. Однако одновременно с эти будет расти и сопротивление R2. Если мы хотим обеспечить входное сопротивление схемы в 500 кОм при коэффициенте усиления 10, резистор R2 должен иметь сопротивление в 5 МОм! Такие большие номиналы сопротивлений применять не рекомендуется: схема будет очень чувствительной к наводкам, пыли и флюсу на печатной плате. Есть ли какие-то выходы из этой ситуации? На самом деле да. Можно, например, использовать буфер-повторитель, который мы рассмотрели в прошлом разделе. А можно еще применить схему с Т-образным мостом в обратной связи, про нее поговорим в следующем разделе.

4. Инвертирующий усилитель с Т-образным мостом в цепи ОС

Схема инвертирующего усилителя с Т-образным мостом в цепи обратной связи приведена на рисунке ниже.
vi-iss1w7topatmybsbsn27h7a4.jpeg

Коэффициент усиления этой схемы равен

k=VOUTVIN=−R2+R3+R2⋅R3R4R1

Рассчитаем усилитель со следующими параметрами:

  • Операционный усилитель LT1803
  • Коэффициент усиления k=10
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала VINmax=0,1 B
  • Постоянная составляющая входного сигнала ВVIN==0,2 В
  • Входное сопротивление кОмR=500 кОм

Расчет показывает, что следящие номиналы резисторов должны сформировать усилитель с Т-образным мостом, отвечающий заявленным требованиям:

кОмR1=499 кОм

кОмR2=R3=22,6 кОм

ОмR4=100 Ом

Результаты моделирования схемы усилителя приведены на рисунке ниже (картинка кликабельна).

uqqcs-vvwmf7vjcbynh1vpaas44.jpeg

Попробуем теперь подключить источник с выходным сопротивлением 10 кОм, как мы это сделали в предыдущем разделе. Получим такую картинку (кликабельно):

szazlxewsyxvj10cykbtho2rtvc.jpeg

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

5. Инвертирующий усилитель в схемах с однополярным питанием

Схемы с однополярным питанием распространены гораздо больше, чем схемы с двухполярным. Вместе с тем, как мы выяснили в прошлых двух разделах, при использовании схемы инвертирующего усилителя у нас меняется знак выходного напряжения, что влечет за собой обязательное применение двухполярного источника питания. Можно ли как-то обойти это ограничение и использовать инвертирующий усилитель в схемах с однополярным питанием? На самом деле можно, для этого надо на неинвертирующий вход усилителя подать напряжение смещения как показано на рисунке ниже
xhlrtbdoenbuzi1g53-f5z091hk.jpeg
Примечание

Расчет этой схемы строится все на том же принципе равенства напряжений на инвертирующем и неинвертирующем входах усилителя. Ток через цепочку резисторов R1-R2 инвертирующего плеча равен.

IR1R2=VOUT−V−R2=V−−VINR1

Отсюда напряжения на инвертирующем входе равно

V−=VOUT⋅R1+VIN⋅R2R1+R2

Напряжение на неинвертирующем входе равно

V+=VREFR2R1+R2

Исходя из принципа равенства напряжения на инвертирующем и неинвертирующем входах получаем

VOUT⋅R1+VIN⋅R2=VREF⋅R2

Таким образом, напряжение на выходе операционного усилителя равно

VOUT=(VREF−VIN)R2R1

Отсюда делаем вывод, что для корректной работы напряжения смещения VREF должно быть больше максимального входного напряжения с учетом подаваемого на вход напряжения смещения.
Промоделируем схему инвертирующего усилителя со следующими параметрами:

  • Операционный усилитель LT1803
  • Коэффициент усиления k=10
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала VINmax=0,01 B
  • Постоянная составляющая входного сигнала ВVIN==0,2 В
  • Напряжение источника смещения ВVREF=0,22 В

Результаты моделирования приведены на рисунке ниже (картинка кликабельна)

rglmha2gn617-q5vii-jieooqua.jpeg

Как видим, мы получили усиленный в 10 раз инвертированный сигнал, при этом сигнал проинвертировался, однако, не залез в отрицательную область.

6. Инвертирующий сумматор

Операционный усилитель можно использовать для суммирования различных сигналов. С помощью резисторов можно задавать «вес» каждого из сигнала в общей сумме. Схема инвертирующего сумматора приведена на рисунке ниже.
hz0r1v3ulhx4l0nwykg1sormro0.jpeg

Расчет инвертирующего сумматора очень прост и основывается на принципе суперпозиции: суммарный выходной сигнал равен сумме отдельных составляющих:

VOUT1=−R4R1VIN1

VOUT2=−R4R2VIN2

VOUT3=−R4R3VIN3

VOUT=−(R4R1VIN1+R4R2VIN2+R4R3VIN3)

Рассчитаем и произведем моделирование инвертирующего сумматора со следующими параметрами:

  • Операционный усилитель LT1803
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала №1 ВVIN1=0,1 В
  • Амплитуда входного сигнала №2 ВVIN2=0,2 В
  • Амплитуда входного сигнала №3 ВVIN3=0,3 В
  • «Вес» сигнала №1 v1=3
  • «Вес» сигнала №2 v2=2
  • «Вес» сигнала №3 v3=1

Для обеспечения требуемых «весов» v1, v2 и v3 выберем следущие номиналы резисторов из ряда Е96:

кОмR1=10 кОм

кОмR2=20 кОм

кОмR3=R4=30,1 кОм

Результат моделирования приведен на рисунке ниже (картинка кликабельна).

7xh7gs2xry9m2qhmjiyoy0lgh54.jpeg

Видим, что выходной сигнал проинвертирован и усилен в соответствии с выражением, приведенным выше. Однако стоит всегда помнить, что приведенное выше выражение верно для постоянных напряжений (либо же мгновенных значений переменного сигнала). Если же сдвинуть сигналы по фазе или если они будут обладать разной частотой, то результат будет совершенно другим. Аналитически его можно рассчитать, воспользовавшись формулами преобразования тригонометрических выражений (в случае, если мы имеем дело с синусоидальными сигналами). В качестве примера на рисунке ниже приведен результат моделирования инвертирующего сумматора для случая сдвинутых по фазе входных сигналов (изображение кликабельно).

h1oscgkz42_uv3geztrvda-pabu.jpeg

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

7. Дифференциальный усилитель

Дифференциальный усилитель предназначен для усиления разности сигналов, поступающих на его входы. Такое включение усилителей широко используется, например, для усиления сигнала с резистора-шунта-датчика тока. Что немаловажно, операционный усилитель в таком включении помимо, собственно, усиления сигнала, давит синфазную помеху.

Схема дифференциального усилителя приведена на рисунке.
esvnnynvzrcoep6uuk4cnfetu08.jpeg

Для дифференциального усилителя можно записать следующие выражения:

VOUT−V−R40=V−−VIN2R3

V+=VIN1R2R1+R2

V+=V−

Решая эту систему уравнений, получаем

VOUT=VIN1R2R1+R2R3+R4R3−VIN2R4R3.

Если мы примем, что

R2R1=R4R3,

то данное выражение упрощается и преобразуется в

VOUT=(VIN1−VIN2)R2R1.

Таким образом, коэффициент усиления дифференциального сигнала определяется отношением R2 к R1.

Эта формула (да и сама схема включения дифференциального усилителя) очень похожа на рассмотренный ранее случай инвертирующего усилителя в схеме с однополярным питанием. Действительно, все так и есть: схема инвертирующего усилителя с однополярным питанием и напряжением смещения есть частный случай дифференциального усилителя, просто в ней на один из входов подается не какой-то переменный сигнал, а постоянное напряжение.

Произведем моделирование схемы со следующими параметрами:

  • Операционный усилитель LT1803
  • Коэффициент усиления k=50
  • Частота входного сигнала кГцF=100 кГц
  • Амплитуда входного сигнала №1 VIN1=0,015 B
  • Амплитуда входного сигнала №2 VIN1=0,01 B
  • Величина усиливаемого сигнала ВΔ=VIN1−VIN2=0,005 В

Результаты моделирования приведены на рисунке ниже (изображение кликабельно).

tfbfayg_2iqvxsnk0hpfbigxwvy.jpeg

Как видим, разница между сигналами VIN1 и VIN2 в 5 мВ оказалась усиленной в 50 раз и стала 250 мВ.

Посмотрим теперь, как дифференциальный усилитель давит синфазную помеху. Для этого подключим к сигналам VIN1 и VIN2 общий генератор белого шума и произведем моделирование, его результаты представлены на рисунке (картинка кликабельна).

tzj9kcji_5cmijyfklwpmovewbo.jpeg

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

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

8. Источник тока

Операционный усилитель при определенном включении может работать как источник тока. Источник тока поддерживает постоянный ток вне зависимости от величины сопротивления нагрузки (в идеальном источнике нагрузка может быть вообще любая, в реальном – не больше какой-либо величины, пропорциональной максимально возможному напряжению, которое может сформировать на ней источник тока). Возможно как минимум две схемы источника тока на операционном усилителе: с плавающей нагрузкой и с заземленной нагрузкой. Схема источника тока с плавающей нагрузкой предельно проста и приведена на рисунке ниже
ixtf9glq-hs1_m_e9r9lkqtnnmy.jpeg

Как видим, на неинвертирующий вход подается опорное напряжение, а в роли нагрузки выступает один из элементов обратной связи. Величина тока при этом определяется следующим выражением

I=VREFR1

Однако все-таки чаще требуется, чтобы нагрузка была заземлена. В этому случае схема немного усложняется: потребуется дополнительный транзистор. Для этих целей лучше брать полевой транзистор: у биполярного транзистора токи коллектора и эмиттера немного отличаются из-за тока базы, что приведет к менее стабильной работе источника тока. Схема источника тока на операционном усилителе с заземленной нагрузкой приведена на рисунке ниже
ypayx6ndlxysvgqy17jhpq2m-fw.jpeg

Величина тока рассчитывается так:

I=VREF−V+R=VREFR(1−R2R1+R2)

Произведем расчет и моделирование источника тока со следующими параметрами:

  • Операционный усилитель LT1803
  • Величина силы тока мАI=10 мА
  • Величина сопротивления нагрузки ОмRload=10 Ом

Для обеспечения заданных характеристик подойдут следующие номиналы сопротивлений резисторов:

ОмR=250 Ом

кОмR1=R2=1 кОм

Результат моделирования источника тока с заданными параметрами представлен на рисунке ниже (изображение кликабельно).

weew-ek2xn5zzyylhdqdh_jo9sw.jpeg

На рисунке приведено два графика. Верхний график показывает величину тока через сопротивление нагрузки, и она равна 10 мА. Нижний график показывает напряжение на нагрузке, оно равно 100 мВ. Попробуем теперь изменить сопротивление нагрузки: вместо 10 Ом возьмем 100 Ом и промоделируем (изображение кликабельно):

6rlvd8ugtqdlctydvrbels4rjyy.jpeg

Как мы видим, через нагрузку течет все тот же самый ток в 10 мА: операционный усилитель отработал изменение нагрузки, повысив на ней напряжение, оно теперь стало равным 1 В. Но в реальности операционный усилитель не сможет поднимать напряжение бесконечно: оно ограничено напряжением источника питания (а зачастую еще и несколько меньше него). Что же будет, если задать сопротивление нагрузки слишком высоким? По сути, источник тока перестает работать. На рисунке ниже пример моделирования источника с сопротивление нагрузки в 1 кОм (изображение кликабельно).

u_n_z1aav3jlpge_s_k6fxm36-e.jpeg

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

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

9. Интегратор на операционном усилителе

Думаю, что все читатели знакомы с классической схемой интегратора на RC-цепочке:
fx9-wop9uqtuzm6zbonmagdnbnq.jpeg

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

Простейшая схема интегратора на операционном усилителе, встречающаяся во всех учебниках, приведена на рисунке ниже.
j2u2yhjgennkegwc93a4vgzoe7u.jpeg

Как видно из рисунка — это инвертирующий интегратор, т.е. помимо интегрирования сигнала, он меняет также и его полярность. Следует отметить, что это требуется далеко не всегда. Еще один серьезный недостаток этой схемы — конденсатор интегратора накапливает в себе заряд, который надо как-то сбрасывать. Для этого можно либо применять резистор, включенный параллельно с конденсатором (однако необходимо учитывать также его влияние на итоговый сигнал), либо же сбрасывать заряд с помощью полевого транзистора, открывая его в нужные моменты времени. По этой причине я решил рассмотреть более подробно другую схему интегратора с использованием операционного усилителя, которая, на мой взгляд, заслуживает больший практический интерес:
jne4hijlwkgkgh0dwvapl26o6bq.jpeg

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

Интегратор можно также рассматривать как фильтр нижних частот. Частота среза АЧХ фильтра высчитывается по формуле

fc=12πR1C1

Тут стоит обратить внимание на один очень важный момент. Надо всегда помнить, что частота среза, рассчитанная выше, верна только для RC-цепочки и не учитывает частотных свойств самого операционного усилителя. Частотными свойствами операционного усилителя можно пренебречь, если мы попадаем в его рабочий диапазон частот, но если мы вдруг выйдем за него, то итоговая частотная характеристика схемы будет совсем не такой, как мы ожидали. Грубо говоря, если у нас RC-цепочка настроена на 1 МГц, а операционный усилитель позволяет работать до 100 МГц – все хорошо. Но если у нас цепочка на 10 МГц, а операционный усилитель работает до 1 МГц – все плохо.

В качестве примера рассчитаем ФНЧ со следующими параметрами частотой среза АЧХ в 1 МГц. Для такой частоты можно выбрать

  • Частота среза АЧХ МГцfc=1 МГц
  • Операционный усилитель LT1803 (Максимальная частота 85 МГц)

Для заданной частоты среза АЧХ подойдут следующие номиналы сопротивления и емкости RC-цепочки:

кОмR1=1,58 кОм

пФC1=100 пФ

Результат моделирования приведен на рисунке ниже (изображение кликабельно). На этом рисунке показаны две частотные характеристики: отдельно для RC-цепочки (красная линия) и для всей схемы целиком (RC-цепочка+операционный усилитель, зеленая линия).

xp4xyxivzcmxcoz6hotczsphawu.jpeg

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

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

juppfxjlgu4tkwmyif7i-0pu_p4.jpeg

10. Дифференциатор на операционном усилителе

Схема простейшего дифференциатора на RC-цепочке известна ничуть не меньше, чем схема интегратора:
be24x3hjhtajqhw-zzbnxt6-r_0.jpeg

Эта схема имеет все тот же недостаток, связанный с высоким выходным сопротивлением, и для его устранения можно аналогичным образом применить операционный усилитель. Схема инвертирующего дифференциатора получается из схемы инвертирующего интегратора путем замены конденсаторов на резисторы и резисторов на конденсаторы, она приведена на рисунке ниже.
60jvlzkvwbkpkdlydug22qkr_98.jpeg

Однако и в этом случае более подробно рассмотрим другую схему, состоящую из классического дифференциатора на RC-цепочке и повторителя на операционном усилителе:
jasdqqez8qy1dznimxirovodo5e.jpeg

Если интегратор мы рассматривали как простейший фильтр нижних частот, то дифференциатор наоборот – фильтр верхних частот. Частота среза АЧХ считается все по той же формуле

fc=12πR1C1

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

В качестве примера рассчитаем ФВЧ с частотой среза АЧХ равной тем же 1 МГц. Для такой частоты можно выбрать все те же номиналы компонентов, которые были в случае ФНЧ:

кОмR1=1,58 кОм

пФC1=100 пФ

Результат моделирования приведен на рисунке ниже (картинка кликабельна). На этом рисунке показаны две частотные характеристики: отдельно для RC-цепочки (красная линия) и для всей схемы целиком (RC-цепочка + операционный усилитель, зеленая линия).

fr5rzvyncx2otxsltbvbhwgh0p4.jpeg

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

Работа дифференциатор при подаче на его вход прямоугольных импульсов приведена на рисунке ниже (изображение кликабельно).

yfnqdljjdmnourupgvhhtmh6ey8.jpeg

Заключение

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

Теги:

В какой последовательности читать Терри Пратчет та

 Arduino  Комментарии к записи В какой последовательности читать Терри Пратчет та отключены
Апр 212021
 

«Плоский мир» – цикл книг Терри Пратчетта, написанных в жанре юмористического фэнтези. Больше 40 книг серии разделены на несколько подциклов, посвящённых разным обитателям плоскоземья. Но что из себя представляет этот Плоский мир?
На самом деле, это огромный диск, который покоится на спинах четырёх слонов, несущихся сквозь космос на спине гигантской черепахи. Этот мир населяют не только люди, но и другие необычные существа: ведьмы, волшебники, гномы, тролли и даже вампиры. Не все из них отличаются гостеприимством и добротой, поэтому неопытным путешественникам важно не заблудиться.
Специально для тех, кто хочет с головой окунуться в Плоский мир, мы составили путеводитель по книгам Терри Пратчетта. Отдельные подциклы можно читать в любом порядке, ведь они мало связаны сюжетной линией. Но если вы не хотите упустить ничего важного, то лучше читать книги по порядку.

1. «Ринсвинд и волшебники»

Первый подцикл Плоского мира посвящён Ринсвинду – единственному волшебнику, который не может сотворить даже самого простого заклятия. Вместо этого он предпочитает удирать со всех ног, когда ему грозит опасность. Но несмотря на все свои недостатки, у Ринсвинда есть одно несомненное достоинство – из всех передряг он всегда возвращается живым и относительно целым. Причём не только сам Ринсвинд, но и его спутники – турист Двацветок и беспощадный старик Коэн-варвар.
Как бы то ни было, именно на Ринсвинда сваливаются самые невероятные приключения и несовместимые с жизнью испытания, перечислять которые нет никакого смысла. Лучше о них почитать.

Книги цикла

1. «Цвет волшебства»
2. «Безумная звезда»
3. «Посох и шляпа»
4. «Эрик, а также Ночная Стража, ведьмы и Коэн-Варвар»
5. «Интересные времена»
6. «Последний континент»
7. «Последний герой: сказание о Плоском Мире»
8. «Незримые академики»

2. «Ведьмы»

Как известно, в Плоском мире волшебником может быть только мужчина. Более того, им может стать только восьмой сын восьмого сына. Но, оказывается, и у девочек бывают способности к магии, и такие девочки обычно становятся ведьмами. Некоторые из них живут в маленьком королевстве Ланкр, например, солидная дама Эсмеральда Ветровоск, бесшабашная старушка Гита Ягг и их ученица Маграт Чесногк. И хотя ведьмам запрещено вмешиваться в жизнь простых людей, вещим сестричкам не раз приходилось спасать свою родину и своих друзей от серьезных неприятностей.
К циклу о ведьмах примыкает подцикл о юной Тиффани – ещё одной ученице ведьм.

Книги цикла

1. «Творцы заклинаний»
2. «Вещие сестрички»
3. «Ведьмы за границей»
4. «Дамы и Господа»
5. «Маскарад»
6. «Carpe Jugulum: Хватай за горло!»

Подцикл «Тиффани Болен»

Книги подцикла продолжают знакомить читателей с жителями Плоского мира, а именно – с ведьмой Тиффани Болен. Этой девочке девять лет, и она уверена, что совсем скоро научится творить добрые заклинания и варить полезные снадобья. Вот только Тиффани живёт на Меловых холмах, где нет достаточно твёрдой породы, необходимой для колдовских навыков. К тому же в этом месте ведьм не любят настолько, что местный барон приказал их топить. Но Тиффани – девочка не из робких, и способна защитить не только себя, но и границы своего мира.

Книги цикла

1. «Маленький свободный народец»
2. «Шляпа, полная неба»
3. «Господин Зима»
4. «Платье цвета полуночи»
5. «Пастушья корона»

3. «Смерть»

Смерть в Плоском Мире – настолько важная персона, что ей посвящён отдельный подцикл книг. То есть, конечно же, не ей, а ему. Ведь в мире Терри Пратчетта смерть – это мужчина, а точнее двухметровый скелет с косой. Он носит чёрный балахон и измеряет время нашей жизни по песочным часам, а ещё он очень любит кошек и жизнь. Смерть успел даже поработать на ферме, вырастить дочку и занять место Санта-Хрякуса, чтобы раздать детям подарки на Страшдество. И всё ради того, чтобы хоть немного почувствовать себя смертным человеком.

Книги цикла

1. «Мор ученик Смерти»
2. «Мрачный Жнец»
3. «Роковая музыка»
4. «Санта-Хрякус»
5. «Вор Времени»

4. «Городская стража»

Цикл рассказывает о нелёгкой службе стражников города Анк-Морпорк, самого славного города Плоского мира. Их девиз – «Двенадцать часов ночи, и всё спокойно!», а основных правил всего три. 1) Научиться бегать не слишком быстро – а то вдруг догонишь! 2) Основной принцип выживания в жестоких схватках – просто не участвуйте в таковых. 3) Не слишком громко кричите, что «всё спокойно», – вас могут услышать. В цикл «Городская стража» входит подцикл о мошеннике Мойсте фон Липвиге.

Книги цикла

1. «Стража! Стража!»
2. «К оружию! К оружию!»
3. «Ноги из глины»
4. «Патриот»
5. «Пятый элефант»
6. «Ночная стража»
7. «Шмяк!»
8. «Дело табак»
9. «Движущиеся картинки»
10. «Правда»

Подцикл «Мойст фон Липвиг»

Однажды Мойсту фон Липвигу выпал шанс начать новую жизнь. До этого были воровство, мошенничество и, как апофеоз, – смерть через повешение. Не то чтобы Мокрицу не нравилась новая жизнь, просто должность Главного Почтмейстера пришлась ему не по душе. Мойст фон Липвиг – приличный мошенник, и слово «работа» точно не про него! Но разве есть выбор у человека, чьим персональным ангелом становится сам патриций Витинари?

Книги цикла

1. «Держи марку»
2. «Делай деньги»
3. «Поддай пару»

Конфигурация микроконтроллера через uart и хранен ие настроек в eeprom на примере mqtt логгера

 Arduino  Комментарии к записи Конфигурация микроконтроллера через uart и хранен ие настроек в eeprom на примере mqtt логгера отключены
Дек 052020
 
  • Пользователи
  • 234
  • 424 публикации

Опубликовано: 31 октября 2017

Привет друзья.

В данной теме пойдет речь о конфигурации микроконтроллера через UART (Universal Asynchronous Receiver-Transmitter) интерфейс. А рассмотрим мы это на примере MQTT логгера. В данном случае, это будет логгер температуры. Мне это устройство потребовалось на работе, даже не мне, а моим коллегам, и оно действительно работает и приносит огромную пользу т.к контроль температуры производится совместно с отличной, на мой взгляд, системой мониторинга Zabbix с оперативными оповещениями, построением графиков, блэк-джеком и… Подробнее о дружбе Arduino и Zabbix можно почитать тут

Но как всегда, есть нюансы. А заключаются они в том, что в будущем, обслуживать армию мелких контроллеров придется людям, которые заняты своими задачами и им попросту некогда изучать Arduino, не говоря уже о серьезных альтернативах, разбираться в том, как прописать нужные значения переменных в программу и загрузить её в микроконтроллер. Все настройки необходимо производить быстро, с явным указанием изменяемого параметра и его значения. Ровно также, как это делается с любым промышленным оборудованием.

И тут на помощь приходит UART

Микросхема UART to USB имеется в большинстве плат семейства Arduino, а там, где её нет, обычно выведены соответствующие «пины». И все это очень облегчает жизнь т.к позволяет общаться с контроллером, просто подключив его к компьютеру напрямую или через переходник, благо их везде навалом, да и стоят они как пачка семечек. Остается только запустить любой терминал, который умеет доставлять в конец строки символ «перевод строки», что известен в народе как «\n«, а в ASCII таблице имеет номер 0A.

Кстати, в Serial мониторе Arduino IDE выставить символ конца строки можно так

uart-to-usb-nl.png

Ну а дальше только, что и остается, как общаться с устройством на той стороне. И тут мы переходим к основному алгоритму программы. Но перед этим хочу отметить, и это ВАЖНО, что за любое упрощение жизни, всякие красивости и прочее, приходиться платить, и цена довольно высока! В данном случае, это ОЗУ микроконтроллера. Поэтому не раскатываем губы, а если очень хочется, то берем следующий по характеристикам микроконтроллер. А начинать мы будем с ATmega328P, что известен в народе как Arduino UNO, Arduino Nano, IBoard v1.1 и т.д по списку. Заканчивать Вы можете чем угодно, хоть ATmega2560, ESP8266 или ESP32. В противном случае, производим оптимизацию кода, отказываемся от громоздких библиотек, или вообще, от Arduino IDE.

Что мы хотим получить

  1. Вся конфигурация микроконтроллера должна храниться в энергонезависимой памяти (ПЗУ) известной нам как EEPROMM.
  2. Если в ПЗУ конфигурация отсутствует, необходимо иметь резервный план. И им станет сброс конфигурации на настройки по умолчанию. Это поведение знакомо всем, особенно по домашним дешевым маршрутизаторам, а значит, интуитивно понятно.
  3. Выводить справку при начале общения пользователя и устройства, на мой взгляд, как манеры высшего общества. Контроллер должен представляться и сообщать всю необходимую информацию о себе и о том, как с ним вести диалог.
  4. Все команды должны быть просты и иметь не двусмысленное значение.
  5. И конечно, мы должны иметь возможность просмотра текущего состояния датчиков или процессов, которыми занимается устройство в свободное от общения с нами время.

Как сохранять конфигурацию в EEPROM

Пожалуй, стоит начать с того, как сохранить конфигурацию микроконтроллера в энергонезависимую память. Для этих целей, в стандартный набор инструментов Arduino IDE входит библиотека для работы с EEPROM.

#include <EEPROM.h>

На данный момент нас интересуют две функции, это чтение и запись

EEPROM.get(address, variable); EEPROM.put(address, variable);

Обе принимают два параметра:

  1. Адрес, начиная с которого будет произведено чтение или запись данных в память
  2. Переменная чье содержимое надо сохранить или в которую нужно из памяти прочитать

Особенность работы этих функция заключается в том, что в зависимости от типа переданной им переменной во втором параметре, будет произведено чтение или запись ровно того количества данных которое соответствует размеру типа этой самой переменной. На простом языке это означает, что если переменная variable будет иметь типа byte, то и работать мы будем с объемом памяти в 1 байт. И тоже самое произойдет с абсолютно любым типом данных пока мы не упремся в размеры самого EEPROM или ОЗУ микроконтролера. Из этого всего следует, что мы можем создать свой собственный тип данных, разместить в нем необходимую нам информацию и всего лишь двумя функциями помещать его в память и извлекать обратно.

И в этом нам поможет пользовательский составной тип — структура (struct). Данный тип позволяет объединить в себе различные типы данных, упорядочить их и присвоить им понятные имена.

Показать содержимое

Это общий пример для большего понимания, как объединить несколько типов данных в одной структуре, получить к ним доступ, записать и прочитать их из EEPROM.

Наша структура будет немного сложнее, но суть остается той же самой.

// Дополнительная структура описывающая IPv4 адреса struct addres { byte a; byte b; byte c; byte d; }; // Структура объекта конфига для хранения в EEPROM struct configObj { addres ip; addres subnet; addres gateway; addres dns; byte mac[6]; byte hex; char server[40]; char topic[40]; } config;

Данная структура хранит сетевые настройки для работы с Ethernet модулем (w5100 и выше) Arduino, базовые настройки для связи с MQTT брокером. Сразу при описании структуры мы объявили новую переменную с именем config с типом нашей структуры.

ВАЖНО: кроме наших данных в структуре имеется дополнительная переменная с именем hex. Её задача, это контроль наличия наших данных в EEPROM. Она всегда должна содержать одно и тоже значение. Представьте ситуацию, что вы взяли контроллер в EEPROM которого находится какая-либо информация (может там чисто, но мы этого не знаем наверняка) и мы прочитаем данные и поместим их в нашу переменную. В итоге мы получим данные которым нельзя доверять, а что еще хуже, это если эти самые данные нарушат работу внешнего оборудования.

Более правильным, на мой взгляд, будет проверка значений по конкретно определенным адресам. Например, мы знаем, что в 16 байте должно быть значение 0xAA и если оно действительно там, то мы убеждаемся, что это наша информация. Естественно, что контрольных точек может быть несколько и разумеется с разными значениями, это увеличит гарантию того, что данные являются нашими, но 100% гарантии не даст. Для более серьезных проектов есть более серьезные методы, например, подсчет контрольной суммы всего набора данных.

Также структура может иметь вложенные структуры, у нас ими являются: ip, subnet, gateway, dns. Вы можете отказаться от такого варианта и записывать данные просто в массив байт, как это было сделано с MAC адресом. Естественно, что обращаться к этим полям нужно по-разному.

Запись данных в поле subnet

config.subnet = {255, 255, 255, 0};

Запись данных в поле mac

byte mac[] = {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}; memcpy(config.mac, mac, 6);

С записью данных в поле server все еще проще

config.server = "mqtt.it4it.club";

Функция, которая возвращает нашу структуру данных с полностью заполненными полями.

// Начальный конфиг configObj defaultConfig() { configObj config = { {192, 168, 0, 200}, {255, 255, 255, 0}, {192, 168, 0, 1}, {192, 168, 0, 1}, {0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02}, 0xAA, // Не трогать! Используется для проверки конфигурации в EEPROM F("mqtt.it4it.club"), F("arduino/serial/config") }; return config; }

К примеру, два последних значения записывать не обязательно, тогда эти поля останутся пусты если использовать данную функцию для возврата к «заводским» настройкам.

Вот пример того, как используя описанную нами структуру, мы проверяем целостность настроек в EEPROM и в случае не совпадения hex значений, загружаем настройки по умолчанию.

const byte startingAddress = 9; bool configured = false; void loadConfig() { EEPROM.get(startingAddress, config); if (config.hex == 170) configured = true; else config = defaultConfig(); configEthernet(); // Функция производящая настройку сети }

Как контроллеру начать понимать, что от него хотят

В Arduino имеется функция, вызываемая каждый раз, когда в передаваемый буфер данных попадает знакомый нам символ перевода строки.

void serialEvent() { // Вызывается каждый раз, когда что-то прилетает по UART // Данные передаются посимвольно. Если в строке 100 символов, то функция будет вызвана 100 раз }

И в контексте обсуждаемой нами программы, мы можем представить ее в следующем виде

void serialEvent() { serialEventTime = millis(); if (console.available()) { char c = (char)console.read(); if (inputCommands.length() < inputCommandsLength) { if (c != '\n') inputCommands += c; else if (inputCommands.length()) inputCommandsComplete = true; } } } 

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

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

Останется только избавиться от них, и самым удобным моментом будет, когда этот поток шлака прекратиться. Чтобы об этом узнать мы будем запоминать время, когда пришел каждый из символов переданной строки перезаписывая соответствующую временную переменную данными о следующем символе и т.д пока поток не иссякнет. И как только расхождение текущего времени CPU и времени, когда поступил последний символ превысит некоторое значение, пусть это будет 1 секунда, мы очистим нашу память. Этот простой механизм напоминающий амнезию позволит избавить нас от лишних проблем.

Переменная отвечающая за размер принимаемого буфера

const byte inputCommandsLength = 60;

Теперь можно переходить к напарнице предыдущей героини и, по совместительству, основной рабочей лошадки — функции обрабатывающей адекватно полученные данные.

void serialEventHandler() { // вызывается в loop и проверяет взведена ли переменная inputCommandsComplete // в полученных данных пытается распознать команды }

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

Разбор serialEventHandler

Полученные данные будут переданы нам в переменной inputCommands с типом String

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

inputCommands.trim();

Далее стоит отсеять команды, не несущие никакой динамической информации, например, help, restart, reset и т.п это предписывающие команды которые заставляют контроллер выполнять строго описанные функции без вмешательства в их работу.

if (inputCommands == F("help")) { consoleHelp(); } else if (inputCommands == F("restart")) { resetFunc(); } else { // Все сложные команды обрабатываются в этом блоке }

Как Вы видите, все очень просто и скучно. Но не в том случае если команда динамическая, то есть содержит не только саму команду (заголовок) но и полезную нагрузку (параметр) которая может меняться раз от раза. Простой пример это команда изменения ip адреса и её варианты:

  • ip 37.140.198.90
  • ip 192.168.0.244
  • ip 10.10.10.88

В данном случае, нам стоит понять, относится ли данная команда именно к ip адресу. Для этого в наборе String имеется отличный метод, позволяющий производить сравнение переданного ему параметра с началом строки.

if (inputCommands.startsWith(F("ip"))) { // Строка inputCommands начинается с пары символов "ip" }

Если все идет так, как мы задумали, то нам стоит отделить динамическую часть — наш параметр, от заголовка и получить полезную нагрузку. В этом нам поможет, опять же из набора String, метод substring позволяющий получать часть строки с указанием начального и конечного символа подстроки. Последний параметр указывать не обязательно и в таком случае мы получим всю строку начиная с указанного символа.

inputCommands.substring(4)

В данном случае начиная с 4-его и заканчивая последним. И как Вы успели заметить, отсчет мы начинаем не с третьего символа, что соответствует нашей строке без вступительного «ip», а на один больше т.к между заголовком и параметром имеется разделяющий символ в виде пробела.

Далее, полученную строку мы передадим в функцию, занимающуюся разбором на компоненты и принимающую следующие параметры:

  1. Указатель на переменную с типом char, для этого нам потребуется преобразовать наш тип String
  2. Символ разделителя, что для IPv4 является точка «.»
  3. Указатель на массив типа byte, которому будет присвоен результат разбора
  4. Количество искомых элементов в строке
  5. И система счисления, подразумеваемая в качестве исходной для записи элементов подстроки
/* Парсинг https://stackoverflow.com/questions/35227449/convert-ip-or-mac-address-from-string-to-byte-array-arduino-or-c */ void parseBytes(const char* str, char sep, byte* bytes, int maxBytes, int base) { for (int i = 0; i < maxBytes; i++) { bytes[i] = strtoul(str, NULL, base); str = strchr(str, sep); if (str == NULL || *str == '\0') break; str++; } }

В нашем случае выглядеть это будет следующим образом

byte ip[4]; parseBytes(inputCommands.substring(4).c_str(), '.', ip, 4, 10);

А дале все становится еще проще, попросту проверить попадает ли наш ip адрес, в список правильных адресов. И самой простой проверкой послужит проверка первого байта адреса на несоответствие не угодным нам сетям (0, 127, 255)

if (ip[0] != 127 and ip[0] != 255 and ip[0] != 0) { // Производим необходимые нам действия с ip адресом, например, запись в конфиг config.ip = {ip[0], ip[1], ip[2], ip[3]}; }

Вы в праве реализовать собственные проверки, какие только душе угодны.

Также хотелось бы отметить, что обрабатывать некоторые параметры проще и быстрее через их короткие записи. К таким можно отнести маску подсети устройства. Например, привычный дня нас адрес 192.168.0.1 с маской подсети 255.255.255.0 можно записать в виде 192.168.0.1/24, где цифра 24 указывает нашу подсеть в краткой форме. А, следовательно, мы можем записать несколько кратких форм масок подсети в следующем виде:

  1. subnet 255.255.255.0 или subnet 24
  2. subnet 255.255.0.0 или subnet 16
  3. subnet 255.0.0.0 или subnet 8

Это основные маски, и я не описывал все существующие т.к в этом нет нужды, но если Вам интересно, то почитать про них можно в wikipedia.

if (inputCommands.startsWith(F("subnet"))) { String input = inputCommands.substring(8); if (input == F("24")) config.subnet = {255, 255, 255, 0}; else if (input == F("16")) config.subnet = {255, 255, 0, 0}; else if (input == F("8")) config.subnet = {255, 0, 0, 0}; else { // Все остальные маски попадают в этот блок byte subnet[4]; parseBytes(input.c_str(), '.', subnet, 4, 10); config.subnet = {subnet[0], subnet[1], subnet[2], subnet[3]}; } }

MAC адрес хранится у нас в виде массива байт. Его перезапись другим массивом производится с помощью функции memcpy

if (inputCommands.startsWith(F("mac"))) { byte mac[6]; parseBytes(inputCommands.substring(4).c_str(), ':', mac, 6, 16); memcpy(config.mac, mac, 6); }

Изменение адреса MQTT сервера

if (inputCommands.startsWith(F("server"))) { String server = inputCommands.substring(8); server.trim(); if (server.length() < 40) server.toCharArray(config.server, 40); }

В принципе теперь понятно, как производить получение, разбор и сохранение конфигурации в EEPROM микроконтроллера.

Как это выглядит на практике

Заливаем программу в микроконтроллер и подключаемся к Arduino по usb или через переходник. Открываем терминал и нас приветствуют краткой справкой с описанием доступных команд.

-

Настройки ESP32

 Arduino  Комментарии к записи Настройки ESP32 отключены
Дек 052020
 

АЦП в ESP32 http://www.bizkit.ru/2019/05/11/13827/

ESP32 и Ардуино https://habr.com/ru/post/404685/

ESP32:Примеры/Режим глубокого сна: пробуждение при помощи таймера http://wikihandbk.com/wiki/ESP32:%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B/%D0%A0%D0%B5%D0%B6%D0%B8%D0%BC_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D1%81%D0%BD%D0%B0:_%D0%BF%D1%80%D0%BE%D0%B1%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80%D0%B0

ESP32 и часы реального времени DS3231 http://digitrode.ru/computing-devices/mcu_cpu/2524-esp32-i-chasy-realnogo-vremeni-ds3231.html
Библиотека RTClib https://github.com/adafruit/RTClib
ESP32 и Flash память: записываем, храним и читаем постоянную информацию http://digitrode.ru/computing-devices/mcu_cpu/1746-esp32-i-flash-pamyat-zapisyvaem-hranim-i-chitaem-postoyannuyu-informaciyu.html#sel=18:10,18:12
ESP32 WROOM DevKit v1: распиновка, схема подключения и программирование http://wiki.amperka.ru/products:esp32-wroom-wifi-devkit-v1

ESP32:Прошивки/Установка платы ESP32 в IDE Arduino http://wikihandbk.com/wiki/ESP32:%D0%9F%D1%80%D0%BE%D1%88%D0%B8%D0%B2%D0%BA%D0%B8/%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%BF%D0%BB%D0%B0%D1%82%D1%8B_ESP32_%D0%B2_IDE_Arduino

Using the ESP32 with RTC DS3231 module https://www.hackster.io/shaddow1201/using-the-esp32-with-rtc-ds3231-module-de9d85

Полезное для работы с SIM800

 Arduino  Комментарии к записи Полезное для работы с SIM800 отключены
Дек 052020
 

GPS-трекер для авто с отправкой данных на сервер с использованием GSM/GPRS шилда https://cxem.net/arduino/arduino170.php

GPRS связь с сервером через SIM800L и Arduino https://2150692.ru/faq/62-gprs-svyaz-cherez-sim800%7C-i-arduino
AT соманды на русском https://www.otvetimpochemy.ru/sim800l-at-komandy-na-russkom/

GSM-модуль SIM800L: часть 2 — программирование, звонки, прием/отправка SMS, управление по SMS https://codius.ru/articles/GSM_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_SIM800L_%D1%87%D0%B0%D1%81%D1%82%D1%8C_2

5 December, 2020 16:31

 Arduino  Комментарии к записи 5 December, 2020 16:31 отключены
Дек 052020
 

Используем Ардуино симулятор вместо самой платы

Симуляторы Ардуино позволяют новичкам и профессиональным проектировщикам учиться программировать и тестировать идеи.

Содержание[показать]

Моделирование событий

Моделирование событий в реальном времени было основой многих отраслей. На протяжении многих лет некоторые крупные процессы симуляции были областью аэронавтики и авиации. Сегодня симуляторы Ардуино позволяют всем новичкам и профессиональным проектировщикам учиться программировать и тестировать идеи, не опасаясь потери энергии впустую вместе со своими деньгами.

Симуляторы Arduino — отличные платформы для программистов и дизайнеров, которые хотят изучить основы проектирования и схемотехники. Успех таких программ связан с тем, что он предоставляет вам возможность учиться, не опасаясь повредить устройство. Кроме того, студенты, у которых могут возникнуть проблемы с приобретением электрооборудования, не имея понятия о том, как они будут функционировать, могут понять многие нюансы через пробы и ошибки с помощью этих симуляторов. Это сэкономит вам много денег и времени.

Еще одно большое преимущество симуляторов Ардуино заключается в том, что он поддерживает построчную отладку, поэтому пользователь точно знает, где и в какой строке он или она сделал что-то не так. Симуляторы существуют в различных формах и разработаны для совместимости с основными операционными системами — Windows, Linux и Mac OS. Поэтому, чтобы упростить поиск отличного симулятора Arduino, созданного для экосистемы вашего компьютера мы составили список самых популярных программ.

Симулятор Ардуино от PaulWare

PaulWare’s Arduino Simulator

Как следует из названия, этот симулятор Arduino был создан разработчиком по имени Пол. Симулятор с открытым исходным кодом и собрал свою собственную долю фанатов, которые одновременно добавляют свои идеи и создают учебники о том, как использовать симулятор. Этот бесплатный продукт был сделан преимущественно для экосистемы Windows и обеспечивает достаточную поддержку для новичков.

Основными компонентами, которые он обеспечивает для поддержки вашего проекта, являются светодиодный кратковременный выключатель, матричная клавиатура 4 на 4, матричная клавиатура 4 на 4 с ЖК-дисплеем, поворотный переключатель и т.д. YouTube видео предоставит вам достаточно информации для начала использования этого симулятора Arduino.

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

Simduino для iPad

Этот продукт — платный, разработанный для использования на экосистеме смарт-устройств Apple. Это комплексный симулятор, который позволяет вам узнать о программировании и электронике на платформе Arduino. Он обеспечивает достаточную поддержку большинства языков программирования Arduino C и может использоваться для запуска нескольких проектов в соответствии с потребностями пользователя.

Скачать на iTunes

Статьи и уроки по тегам
Статьи про АрдуиноArduino Статьи про Raspberry PiRaspberry Статьи про PythonPython Статьи про C++C++ Статьи про АндроидAndroid Статьи про PHPPHP Статьи про JavascriptJavascript Статьи про Visual Studio CodeVSC Статьи про IFTTTIFTTT Статьи про BlynkBlynk Статьи про BluetoothBluetooth Статьи про GitGit РоботыРоботы Умный домУмный дом АудиоАудио ДатчикиДатчики СветСвет МоторыМоторы

Эта программа имеет отличный рейтинг на iTunes. Хорошая поддержка помогает своим пользователям понять детали и описания, доступные пользователям на официальном сайте. Приблизительно за 2 доллара вы получите отличный Ардуино симулятор, совместимый с вашим iPad.

ArduinoSim

Скачать с sourceforge

Это кросс-платформенный симулятор Arduino, который выполняет то, что он обещает, обеспечивая отличную платформу для обучения программированию и дизайну схем. Хотя программа не имеет открытого исходного кода этот симулятор бесплатный и дает вам возможность работать в операционных системах Windows и Linux. ArduinoSim был создан на Python для интеграции с окружающей средой Arduino.

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

Arduino Simulator для PC

Сайт: virtronics.com.au

Это также один из лучших симуляторов Arduino по нескольким причинам. Эти причины включают в себя его кросс-платформенные функции, эскизные проекты, отладочные эскизы и возможность удобно и легко разрабатывать сложные идеи. Может работать как на Windows так и для Linux. Пользователи также могут выбрать ЖК-дисплей и тип платы Arduino: Mega, Nano и Leonardo.

Важно отметить, что программа не с открытым исходным кодом, и его функции разрабатываются и дополняются его разработчиками. Существует также много вспомогательной документации и примеров проектов. К сожалению, продукт относительно дорогостоящий стоимостью около 20 долларов США. Но с такими большим количеством функций и отличным инструментом отладки, Arduino Simulator для ПК — отличный выбор, если вы готовы инвестировать немного ваших денег.

Emulare Arduino Simulator

Скачать Emulare

Заинтересованы в многозадачности Arduino? Тогда Emulare — ваш лучший выбор. Этот инновационный симулятор предоставляет пользователю возможность одновременного моделирования нескольких проектов Arduino без каких-либо сбоев. Он также объявлен как кросс-платформенный симулятор из-за того, что он поддерживает как операционные системы Linux, так и Windows.

Emulare был создан для, преимущественно, электротехнических проектов и оснащен богатой библиотекой объектов. Emulare сосредотачивается на микроконтроллерах ATMega, которые позволят вам встраивать целые схемы с элементами памяти AVR, кнопками, переключателями, таймерами, светодиодами и другими компонентами. Удивительно, но Emulare со всеми его функциями и компонентами абсолютно бесплатна и обладает достаточной поддержкой, чтобы помочь пользователям понять ее особенности.

Simulator for Arduino

Продукт, разработанный virtronics, является полнофункциональным симулятором, доступным для студентов и начинающих в мире электроники, всех тек, кто ищет отличный симулятор Arduino. Это кросс-платформенный симулятор, который поддерживается как операционными системами Linux, так и Windows.

Особенности этого симулятора и некоторые его преимущества включают: учебное пособие, освещающее основы скетчей Ардуино; тестирование набросков идей, чтобы увидеть рабочие шаблоны, отладить ваши соединения и разработать виртуальные презентации для новых клиентов. Также важно отметить, что Simulator for Arduino — это не приложение с открытым исходным кодом, но оно бесплатно.

Включить звук

Yenka

Скачать Yenka

Yenka — отличный симулятор, который студенты и опытные пользователи могут использовать для обучения и преподавания основ программирования и схем. Как и большинство Ардуино симуляторов из нашего списка, он оснащен всеми необходимыми функциями для проверки эскизов/идей, отладки ваших проектов и разработки сложных проектов без ввода аппаратного обеспечения в эксплуатацию.

Yenka широко используется преподавателями, преподающими основы электроники, но из-за стоимости студентам она может быть не по карману. Это кросс-платформенный симулятор, который работает как в операционной системе Linux, так и в Windows. Несмотря на стоимость программа может быть идеальным тренажером Ардуино для вашего личного использования.

AutoCAD 123D

Перейти на сайт Autodesk

Роль Autodesk в разработке электрических схем на протяжении многих лет нельзя переоценить. 123D — это еще одно из предложений компании Autodesk совместимых с Arduino. Во-первых, важно отметить, что 123D — это приложение САПР, которое имеет специальную функцию для проектирования схем. Поэтому при загрузке бесплатного приложения вы получите как приложение САПР, так и симулятор Ардуино.

Как и другие симуляторы, упомянутые выше, 123D — действительно отличный инструмент для изучения основ программирования Arduino и проектирования схем. Приложение работает на Windows и экосистеме Android. Оно также имеет очень большую базу ресурсов и поддержку (как и большинство продуктов Autodesk) для разработки схем или обучения с нуля. Это приложение настоятельно рекомендуется большинству пользователей.

LTSpice Arduino Simulator

Перейти на LTSpice

x450

Ис­ка­ли эпок­сид­ную смо­лу? Кли­кай­те

Про­да­вец: Арт­лайн Кре­а­ти­ви­ти. ОГР­НИП: 313334020600012

LTSpice — это бесплатный универсальный и точный симулятор схем с возможностью моделирования программ и проектов, разработанных для экосистемы Arduino. Симулятор поставляется с множеством функций, которые были разработаны, чтобы упростить симуляцию, и включают в себя его атрибуты схем и форм сигналов.

Это один из немногих симуляторов, который поддерживается как платформами Windows, так и Mac OS. Он очень рекомендуется большим количеством онлайн-ресурсов для облегчения процесса обучения. Как было сказано ранее, симулятор абсолютно бесплатный.

PSpice

Скачать PSpice

Каждый студент, занимающийся электротехникой и электроникой, должен был столкнуться с PSpice в течение месяцев, потраченных на изучение основ проектирования схем и программирования. Но для тех кто не знает что такое PSpice — это интуитивный симулятор, который можно использовать для моделирования Arduino из-за множества функций, интегрированных в приложение. PSpice поддерживается операционной системой Windows и Linux и поставляется в разных модулях или типах.

Студенты могут использовать PSpice Lite, который абсолютно свободен, чтобы изучить основы программирования Ардуино, в то время как компании, преподаватели и другие эксперты могут использовать платный PSpice. PSpice в настоящее время используется в различных отраслях промышленности — автомобилестроении, образовании, энергоснабжении и т.д.

Circuit Lab

Перейти на сайт Circuit Lab Arduino Simulator

Circuit Lab Arduino Simulator — простой схематичный и мощный инструмент моделирования. Этот симулятор был разработан после PSpice, и он был построен преимущественно для использования электриками и инженерами электроники. Его функции позволяют пользователю изучить внутреннюю работу Arduino, реализовать отладку проектов и схем проектирования.

Приложение Circuit Lab не является бесплатным, и это может быть ограничивающим фактором для студентов, которые ищут доступный симулятор Arduino для работы. Приложение работает как в операционных системах Windows, так и в Linux. Развитие программы держится на большом сообществе и имеет достаточное количество вспомогательных материалов, тематических исследований и примеров, которые рассказывают о его возможностях и использовании.

Симулятор EasyEDA

Скачать EasyEDA

Включить звук

Вот еще один из моих фаворитов благодаря своим особенностям, удобству использования и широкой поддержке основных операционных систем. EasyEDA хорош для обучения программированию и дизайну схем в Windows, Linux, Mac OS и Android — этим немногие могут похвастаться.

Это связано с ценой, которая может быть препятствием для некоторых. Помимо этого, существует множество учебных материалов, а также онлайн-сообщество, посвященное обсуждению возможностей EasyEDA.

Circuits-cloud Simulator

Перейти на сайт circuits-cloud.com

Среди всех приложений выше не было еще варианта моделирования в браузере. Тогда как Circuits-cloud — отличный симулятор Ардуино, который может быть использован кем-либо для изучения основ. Приложение разработано только с базовыми конструктивными особенностями, чтобы сделать эскиз и симуляцию веселой и легкой для понимания новичками. Приложение также бесплатное!

Systemvision

Перейти на сайт systemvision.com

Systemvision — еще один яркий облачный симулятор, который можно рассмотреть для симуляции схем Arduino. Это бесплатный онлайн-инструмент с функциями, которые вам помогут изучить и создать проекты. Также вы сможете поделиться своими идеями со своими сверстниками или клиентами, чтобы получать мгновенную обратную связь. Приложение вокруг себя собрало большое сообщество и имеет отличную поддержку со стороны создателей.

Proteus от Labcenter

Скачать Proteus Simulator

Это отличный симулятор Ардуино, который сочетает в себе простоту со множеством функций, для легкого моделирования Arduino. Программа совершила прорыв в различных отраслях, в том числе; автомобильной, интернете-вещей (IOT) и образовании. Совместима с Windows и Linux и стоит, конечно, дорого. Вы можете узнать больше о программе, версиях и сообществе на сайте программы labcenter.com.

Raspberry, OrangePi и Телеграмм бот

 Arduino  Комментарии к записи Raspberry, OrangePi и Телеграмм бот отключены
Дек 052020
 

Создаем бота https://electronicparts.ru/svoimi-rukami/raspberry-pi-i-telegram-sozdaem-bota-dlya-upravleniya-ustrojstvami.html
Распиновка OrangePI https://micro-pi.ru/orange-pi-pinout-pin-definition-gpio/#GPIO_26
Работа с пинами OrangePI https://orangepi.su/content.php?p=112
Установка Armbian https://docs.armbian.com/User-Guide_Getting-Started/

Удаленное управление Octoprint https://3dtoday.ru/blogs/maniak26/remote-control-octoprint-or-protect-me-fully/

Создаем бота Telegram и используем с Raspberry Pi https://arduinoplus.ru/bot-telegram-raspberry-pi/

Установка и настройка WiringOP/WiringPi на Orange Pi PC https://micro-pi.ru/wiringop-wiringpi-%D0%BD%D0%B0-orange-pi-pc/

WiringOP Library на Orange Pi. GPIO с использованием языка Cи. https://pcminipro.ru/orangepi/wiringop-wiringpi-na-orange-pi/
Гитхаб Телебот https://github.com/smartnode/telebot еще https://github.com/denzen84/telebot
CLI telegram-бот для отправки данных для Raspberry/Orange Pi https://forum.adsb.in/f25/cli-telegram-bot-dlya-otpravki-dannyh-dlya-raspberry-orange-pi-2214/

Полноценный почтовый сервер с iRedMail на Ubuntu

 Arduino  Комментарии к записи Полноценный почтовый сервер с iRedMail на Ubuntu отключены
Ноя 272020
 

Полноценный почтовый сервер с iRedMail на Ubuntu

Тематические термины: iRedMail, Ubuntu, Postfix, Dovecot, Roundcube, POP3, IMAP, PTR, SPF, DKIM

После установки iRedMail мы получим почтовый сервер со следующими возможностями:

  • Управление почтовыми ящиками с помощью веб-интерфейса.
  • Поддержка виртуальных доменов и почтовых ящиков.
  • Подключение к ящикам по POP3 и IMAP.
  • Хранение данных в СУБД.
  • Возможность работать с почтой удаленно с помощью браузера.
  • Шифрование при передаче сообщений.
  • Защита от СПАМа и вирусов.
  • Защита сообщений от попадания в СПАМ.

Подготовка
Установка почтовой системы
Настройка iRedMail
Отключение Graylisting
Проверка отправки сообщения
Защита от попадания в СПАМ
Установка сертификата
Разрешить небезопасные подключения
Дополнительные настройки
Лимит на размер вложения
Аналоги

Подготовка сервера

Задаем правильное имя сервера:

vi /etc/hostname

mail.dmosk.ru

… или командой:

hostnamectl set-hostname mail.dmosk.ru

* имя сервера должно быть в формате FQDN, в противном случае мы получим ошибку << ERROR >> Please configure a fully qualified domain name (FQDN) in /etc/hosts before we go further.

Заданное имя сервера должно разрешаться в IP-адрес через DNS. Если на момент установки это невозможно, создадим запись в файле hosts:

vi /etc/hosts

127.0.0.1 mail.dmosk.ru

Останавливаем веб-сервер apache (в данном примере будет использоваться nginx):

systemctl stop apache2

systemctl disable apache2

* если не остановить apache и попытаться установить nginx, мы получим ошибку Errors were encountered while processing: nginx-full.

Установка iRedMail

Заходим на страницу iredmail.org/download.html и копируем ссылку на скачивание последней версии почтового сервера:

Ссылка для скачивания iRedMail

Теперь используем ссылку для загрузки дистрибутива на сервере:

wget https://github.com/iredmail/iRedMail/archive/1.2.tar.gz

И распаковываем скачанный архив:

tar zxvf 1.2.tar.gz

Переходим в каталог с распакованным установщиком:

cd iRedMail-*/

И запускаем скрипт установки:

bash iRedMail.sh

Запустится мастер настроек. В первом окне с приветствием ответьте Yes.

В окне Default mail storage path оставляем /var/vmail и задаем свой путь для хранения сообщений:

Вводим путь хранения сообщений

В следующем окне Preferred web server желательно оставить Nginx:

Выбираем веб-сервер

В окне Choose preferred backend used to store mail accounts выбираем Mariadb:

Выбираем СУБД для хранения информации о почтовых ящиках

И задаем пароль для пользователя СУБД:

Вводим пароль для пользователя sql

На следующем шаге вводим наш первый почтовый домен:

Вводим пароль для пользователя sql

Теперь вводим пароль для управления почтовыми ящиками:

Пароль для управления почтовыми ящиками

В окне Optional components выбираем все доступные компоненты:

Выбираем все доступные компоненты iRedMail

В самом конце вводим Y, чтобы подтвердить введенные настройки.

Начнется установка почтового сервера. В зависимости от производительности, процесс может занять от 10 до 20 минут. В конце система предложит активировать брандмауэр — соглашаемся вводом Y.

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

shutdown -r now

Настройка iRedMail

Создание пользователя

Открываем браузер и в адресной строке вводим https://IP-адрес_сервера/iredadmin/

Откроется страница входа в панель управления. Вводим логин postmaster@dmosk.ru и пароль (пароль и домен dmosk.ru — данные, которые мы вводили при установке iRedMail).

Создадим первого пользователя. Для этого переходим по AddUser:

Создание нового пользователя

Заполняем поля и создаем пользователя:

Заполняем поля для нового пользователя

Отключение Graylisting

Graylisting — мощное оружие против СПАМа, но с существенным минусом — все входящие сообщения, отправленные с определенного домена в первый раз будут приходить с задержкой. На момент тестирования это создает массу неудобств.

Для отлючения серого списка, добавляем права на редактирование следующему файлу:

chmod u+w /opt/iredapd/settings.py

После открываем его:

vi /opt/iredapd/settings.py

Находим перечисление плагинов:

plugins = [«reject_null_sender», «reject_sender_login_mismatch», «greylisting», «throttle», «amavisd_wblist», «sql_alias_access_policy»]

И вырезаем greylisting.

Возвращаем права:

chmod u-w /opt/iredapd/settings.py

Перезагружаем iredapd:

systemctl restart iredapd

Проверяем работу сервера

Для проверки сервера можно выполнить тестовую отправку и получения писем.

Отправка

Открываем браузер и в адресной строке вводим https://IP-адрес_сервера/mail/

Откроется панель для работы с почтой — вводим логин и пароль от созданного пользователя (логин должен быть с доменом, в нашем примере, test1@dmosk.ru)

Нажимаем Написать сообщение и отправляем тестовое сообщение на один из своих адресов:

Написать сообщение в roundcube

Получение

Для возможности получать письма, необходимо прописать в DNS для нашего домена запись типа MX.

Пример такой записи:

MX 10 mail.dmosk.ru

* где MX — тип; 10 — приоритет (таких записей может быть несколько); mail.dmosk.ru — имя нашего почтового сервера (на данное имя необходима также запись типа А).

После создания такой записи необходимо подождать от 1 до 8 часов, так как настройки DNS могут применяться не сразу.

Защищаем сообщения от попадания в СПАМ

Чтобы другие почтовые системы не принимали наши письма за СПАМ, выполняем следующие рекомендации:

А-запись в DNS

Для FQDN-имени почтового сервера должна быть создана А-запись в DNS. Пример записи:

mail.dmosk.ru A 90.156.242.197

Создаем PTR-запись для внешнего IP-адреса

Она должна вести на имя сервера (в данном примере, mail.dmosk.ru). Чтобы создать такую запись, нужно написать обращение Интернет-провайдеру или хостеру виртуальной машины. Пример записи:

171.23.222.83.in-addr.arpa name = mail.dmosk.ru

* данная запись соответствует IP-адресу 83.222.23.171.

Добавляем SPF-запись для домена

Эта запись создается в DNS для домена, от которого идет отправка сообщений. Пример:

dmosk.ru text = «v=spf1 +mx -all»

Прописываем DKIM в DNS

Для начала, смотрим ключ, который был сформирован во время установки iRedMail:

amavisd-new showkeys

Пример ответа:

dkim._domainkey.dmosk.ru. 3600 TXT (
«v=DKIM1; p=»
«MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNu0ZlYkq8pKsp131jnoZ+Ief»
«zcSP1WxGzGQXssg3yiRGBlqsRGBnnKgitrsPYTZbzqqL+/rW0ptGNhAqfTWHvMia»
«+f4RSMLJPMREFtakVEZvTIK5iZvxuCZpVhvM6ldadTLAxbcupX38yMfJV73EwCHK»
«d2mdqfW+emSW/paUwQIDAQAB»)

Копируем DKIM и создаем в DNS запись TXT. Пример:

dmosk.ru text = «v=DKIM1; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHNu0ZlYkq8pKsp131jnoZ+IefzcSP1WxGzGQXssg3yiRGBlqsRGBnnKgitrsPYTZbzqqL+/rW0ptGNhAqfTWHvMia+f4RSMLJPMREFtakVEZvTIK5iZvxuCZpVhvM6ldadTLAxbcupX38yMfJV73EwCHKd2mdqfW+emSW/paUwQIDAQAB»

Создать другую подпись DKIM

Генерируем новый ключ:

amavisd-new genrsa /var/lib/dkim/dmosk2.ru.pem 1024

* где dmosk2.ru — новый домен, для которого мы сгенерируем подпись dkim.
* некоторые системы не работают с ключами более чем 1024 бит.

Задаем права на созданный файл:

chown amavis:amavis /var/lib/dkim/dmosk2.ru.pem

chmod 0400 /var/lib/dkim/dmosk2.ru.pem

Открываем конфигурационный файл amavisd

vi /etc/amavisd.conf

Находим строчку:

dkim_key(‘dmosk.ru’, «dkim», «/var/lib/dkim/dmosk.ru.pem»);

И добавляем радом с ней новую. Получится так:

dkim_key(‘dmosk.ru’, «dkim», «/var/lib/dkim/dmosk.ru.pem»);
dkim_key(‘dmosk2.ru’, «dkim», «/var/lib/dkim/dmosk2.ru.pem»);

Теперь находим строчку:

@dkim_signature_options_bysender_maps = ( {

«dmosk.ru» => { d => «dmosk.ru», a => ‘rsa-sha256’, ttl => 10*24*3600 },

И также после нее добавляем новую. Должно получиться:

@dkim_signature_options_bysender_maps = ( {

«dmosk.ru» => { d => «dmosk.ru», a => ‘rsa-sha256’, ttl => 10*24*3600 },
«dmosk2.ru» => { d => «dmosk2.ru», a => ‘rsa-sha256’, ttl => 10*24*3600 },

Перезапускаем amavisd:

amavisd-new restart

Политика DMARC

Данная политика определяет, что делать с письмом, которое не проходит проверку. Подробнее о DMARC.

Для создания данной политики необходимо в DNS добавить TXT запись, примерно, такого содержания:

_dmarc.dmosk.ru. 3600 IN TXT «v=DMARC1; p=quarantine; sp=none; pct=100; fo=0; rua=mailto:postmaster@dmosk.ru»

* данная запись означает, что все письма, которые не прошли проверку, необходимо отправить в карантин, а отчет написать на ящик postmaster@dmosk.ru.

Ящик abuse

По аналогии с тем, как мы создавали тестовую учетную запись, необходимо создать ящик abuse@… На данный ящик могут приходить жалобы на СПАМ. Стоит время от времени просматривать его (или настроить переадресацию), и реагировать на жалобы.

Установка сертификата

Вместе с iRedMail создается самоподписный сертификат, которому по умолчанию, не доверяют другие системы. Если мы хотим, чтобы пользователи не видели предупреждений об использовании потенциально не безопасного сертификата, можно установить последний, выданный акредитованным центром сертификации. Мы же рассмотрим, как получить для iRedMail бесплатный сертификат от Let’s Encrypt (подробнее в статье получение сертификата от Let’s Encrypt).

Откроем на редактирование файл:

vi /etc/nginx/sites-enabled/00-default-ssl.conf

… и добавим в секцию server:

server {

location ~ /.well-known {
root /usr/share/nginx/html;
allow all;
}

}

Перечитаем конфиг nginx

systemctl reload nginx

Устанавливаем утилиту для получения сертификата:

apt-get install certbot

И получаем сертификат командой:

certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /usr/share/nginx/html/ -d mail.dmosk.ru

* подробнее параметры описаны в статье получение сертификата от Let’s Encrypt. Обратите внимание, что в данном примере мы получим сертификат для узла mail.dmosk.ru.

Удаляем старые сертификаты:

\rm /etc/ssl/private/iRedMail.key

\rm /etc/ssl/certs/iRedMail.crt

И создаем симлинки на полученные:

ln -s /etc/letsencrypt/live/mail.dmosk.ru/cert.pem /etc/ssl/certs/iRedMail.crt

ln -s /etc/letsencrypt/live/mail.dmosk.ru/privkey.pem /etc/ssl/private/iRedMail.key

* cert.pem и iRedMail.crt — открытые ключи (public); privkey.pem и iRedMail.key — закрытые (private); mail.dmosk.ru — узел, для которого был получен сертификат. Обратите внимание, что в нашем примере прописаны пути до сертификатов от Let’s Encrypt — если у вас свои сертификаты, пути должны быть соответствующими.

Перезапускаем следующие службы:

systemctl restart iredapd

systemctl reload nginx

Для автоматического продления сертификата создаем в cron задачу:

crontab -e

Добавим:

0 0 * * 1,4 /usr/bin/certbot renew && systemctl reload nginx && systemctl restart iredapd

Разрешить соединение без STARTTLS

После установки iRedMail, система будет требовать от клиента безопасного соединения по TLS. При необоходимости, можно отключить данную возможность.

Отключение для SMTP

Открываем конфигурационный файл postfix:

/etc/postfix/main.cf

Задаем следующие настройки:


smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
#smtpd_tls_auth_only = yes

* где smtpd_sasl_auth_enable разрешает или запрещает аутентификацию; smtpd_sasl_security_options — дополнительные опции для аутентификации; smtpd_tls_auth_only — разрешает соединение SMTP только по TLS. В данном примере мы разрешаем аутентификацию, запрещаем анонимные соединения и комментируем опцию, которая требует только безопасного соединения.

Перезапускаем postfix:

systemctl restart postfix

Отключение для IMAP/POP3

Открываем конфигурационный файл dovecot:

vi /etc/dovecot/dovecot.conf

Задаем следующие настройки:

ssl = yes
disable_plaintext_auth = no

* где disable_plaintext_auth запрещает аутентификацию без защиты; ssl задает опцию защиты (в данном примере, разрешить, но не требовать).

Перезапускаем dovecot:

systemctl restart dovecot

Дополнительные настройки

Настройка лимита на объем вложения

По умолчанию, допустимый размер отправляемого вложения, отправленного через iRedMail может быть размером не больше 15 Мб. Для увеличения этого порога вводим команду:

postconf -e «message_size_limit = 52428800»

* в данном примере выставлен лимит в 50 мб.

Генератор DSS OLED 128×64 SPI STM32F3

 Arduino  Комментарии к записи Генератор DSS OLED 128×64 SPI STM32F3 отключены
Ноя 272020
 

Генератор DSS OLED 128×64 SPI STM32F3

Генератор DSS OLED 128x64 SPI STM32F3

  • 0.1Hz ~ 2.0 mHz
  • WaveTable 2048x12bit
  • sinus, пила, обратная пила, треугольник, прямоугольник, pulse
  • STM32F303K6 LQFP32, Ext 8 MHz, Voltage 3.3 V
  • OLED 128×64 SSD1306 (SPI)

Вращение энкодера — смена частоты (в формате 1-2-5)

Кнопка энкодера — смена формы сигнала

Длинное нажатие кнопки — изменение контрастности индикатора

Генератор DSS STM32F303K6 OLED 128x64 SPI

Схема генератора DSS OLED

Выход генератора на DAC1_OUT2 Port A5 (11 вывод STM32F303K6 LQFP32)

Схема SPL7

Синус 2048 точек 12 бит

Пульс 2048 точек 12 бит

Прошивка 2019-04-26 кварц 25мГц

Прошивка 2018-11-20

Прошивка 2018-06-16

Программируем Ардуино «по воздуху» через ESP-link

 Arduino  Комментарии к записи Программируем Ардуино «по воздуху» через ESP-link отключены
Ноя 272020
 

Программируем Ардуино «по воздуху» через ESP-link

112У меня дома трудится масса устройств умного дома. Большая часть из них использует недорогие платы Arduino Pro Mini или микроконтроллеры Atmega328 с прошитым ардуиновским бутлоадером. Иногда, с приходом новых идей, требуется перепрограммирования всех этих устройств. Монтаж-демонтаж контроллера, встроенного в какую нибудь люстру то еще удовольствие. Скакать под потолком с ноутбуком тоже удовольствие ниже среднего. В последних сборках я устанавливаю микроконтроллеры на съемных панельках, что позволяет вынуть его, запрограммировать и вставить обратно.

Но как хотелось бы вдумчиво поотлаживать свои устройства прямо на месте. Думал для этих целей применить Serial Bluetooth адаптеры. Но недавно один хороший человек на форуме esp8266.ru с ником dao89 надоумил воспользоваться «народным! WiFi модулем ESP8266 и прошивкой ESP-link.

Возможности проекта ESP-link

  • Прозрачный шлюз между Wi-Fi и последовательным портом для отладки и обмена данными
  • Программирования микроконтроллеров AVR/Arduino модулей ESP8266, LPC800 и других с последовательным интерфейсом по «воздуху» через WiFi.
  • Встроенные протокол STK500V1 для загрузки файла с прошивкой AVR через встроенный WEB-сервер.
  • Отправка HTTP REST запросов через интернет
  • MQTT клиент для связи микроконтроллера с сервисами

Установка ESP-link

По ссылке качаем последнюю версию ESP-link. Я выбрал стабильную версию 2.1.7. Архив прошивки содержит четыре бинарных файла boot_v1.4(b1).bin, blank.bin. user1.bin и user2.bin и два скрипта на языке Shell для прошивки через порт и через WiFi. Я программирую ESP8266 под Windows с использованием утилиты XTCOM (подробнее описано мной в этой статье).

Для модулей с объемом памяти 512Кбайт

  • boot_v1.4\(b1\).bin загружаем по адресу 0x0000
  • user1.bin — 0x1000
  • blank.bin 0x7E000

Для модулей с объемом памяти 4Мбайт

  • boot_v1.4\(b1\).bin загружаем по адресу 0x0000
  • user1.bin — 0x1000
  • blank.bin 0x3FE000

Файл user2.bin служит для прошивки ESP «по воздуху» и в данный момент не используется

Теперь можно перейти к настройке модуля. Подключение к нему стандартное. Пока модуль «не прописан» в WiFi сети он работает как открытая точка доступа с именем типа ESP_012ABC (на некоторых модулях ai-thinker-012ABC) . После подключения нужно зайти через браузер на http://192.168.4.1 на WEB-страницу модуля.

На этой странице можно настроить GPIO модуля для подключения к RESET микроконтроллера, а также подключения дополнительных светодиодов индикации. Есть выбор «предустановленных» конфигураций портов в зависимости от типа модуля и назначения.

ESP-link Home

На странице WiFi можно настроить подключение к беспроводной сети, а также настроить статический IP-шник модуля, что я и делаю, так как постоянно подключаться к ESP как к точке доступа мне не удобно.

ESP-link WiFi

Следующая в меню страничка — это консоль микроконтроллера, вернее его последовательного порта. Среди настроек, очистка окна и настройка скорости. Подключив RX/TX порта микроконтроллера к TX/RX ESP-шки и установив правильную скорость, сразу видим в реальном времени отладочную информацию, выдаваемую контроллером в этот порт. Настройка скорости — это очень важная функция, о которой расскажу позже.

ESP-link mC console

Настройку MQTT и REST я пока пропускаю, так как моя цель не сбор информации, а удаленная отладка и прошивка микроконтроллера. Возможно об этом будет одна из моих следующих статей

ESP-link REST&MQTT

Последняя страничка посвящается любителям копаться в системных журналах. Туда выводится отладочная информация по работе ESP-link

ESP-link debug log

Ну вот, теперь у меня есть настроенный ESP-link. Я к нему подключил Arduino Pro Mini. Ножку DTR посадил на GPIO13 ESP-шки (настраивается на первом экране)

Настройка виртуального COM-порта в Windows

Теперь можно настраивать виртуальные COM-порт на компьютере. Для начала проверяю, что наш порт доступен по сети. Для этого захожу по TELNET-ом на 23-й или 2323 порт нашего ESP-link. (Так как TELNETа в Windows 7 нет, то использую для этого установленную у меня программу PUTTY. Данные, которые я видел в консоли через WEB-интерфейс вижу и в TELNET-клиенте.

ESP-link PUTTY

Осталось настроить виртуальный COM-порт на моем компьютере и связать его с ESP-link. Для этого устанавливаю Tibbo Device Server Toolkit под Widows. Запускаю VSP-manager и настраиваю виртуальный порт

Настройка виртуального COM порта

Все. Виртуальный COM10 связанный с моим ESP-link по 23 порту настроен.

Настройка виртуального COM-порта

Теперь, открывая его в среде Arduino IDE я могу работать с удаленным микроконтроллером через ESP-link. Контроль состояния виртуального порта можно посмотреть в мониторе, который TIBBO вывешивает в трее

tibbo4

Нюанс по скорости прошивки

Небольшой нюанс по скорости. Для прошивки нужно выставлять скорость в консоли ESP-link, прописанную в c:\Program Files (x86)\Arduino\hardware\arduino\avr\boards.txt для конкретного типа контроллера. В моем файле Arduino Pro Mini это 115200, для того же контроллера на Atmega168 — 19200. Мой перешитый на OPTIBOOT контроллер — 57600. Для программирования мне потребовалось установить эту скорость в настройках «по умолчанию» виртуального COM-порта

tibbo2

Эту же скорость нужно установить в консоли микроконтроллера ESP-link

esp-link3-2

После этих манипуляций удаленный AVR контроллер программируется так же как и подключенный к локальному порту USB-TTL конвертера. Разве что немного медленнее и не каждый раз, если связь WiFi неустойчивая.

При переходе в режим отладки требуется переключить скорость консоли в нужную (какая установлена в Serial.begin()

Подводя итоги

Повозившись с настройками я получил метод удаленной отладки и программирования любых Ардуино-контроллеров и AVR-с загрузчиком по последовательному порту (и наверняка многих других МК). Более того, я получил удаленную консоль для любых последовательных интерфейсов, например, от различных GPS и GSM модулей. Теперь осталось собрать ESP-шку в какой нибудь корпус, запитать от аккумулятора (мало ли у меня где-то под потолком будут проблемы с питанием) и наделать разъемов для быстрого подключения к различным контроллерам.

К недостаткам данного метода можно отнести его достаточно сложную настройку, некоторую тормознутость при прошивке и при работе консоли, а так же необходимость установки скорости прошивки/отладки (что не требуется при работе в том же Arduino IDE по локальным портам).