diff --git a/docs/assets/IR_reciver_connection.png b/docs/assets/IR_reciver_connection.png new file mode 100644 index 00000000..52b43300 Binary files /dev/null and b/docs/assets/IR_reciver_connection.png differ diff --git a/docs/assets/IR_transmitter.png b/docs/assets/IR_transmitter.png new file mode 100644 index 00000000..6a3018c4 Binary files /dev/null and b/docs/assets/IR_transmitter.png differ diff --git a/docs/assets/IR_transmitter_connection.png b/docs/assets/IR_transmitter_connection.png new file mode 100644 index 00000000..f6cc5f9d Binary files /dev/null and b/docs/assets/IR_transmitter_connection.png differ diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index c4626905..2fc15453 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -61,6 +61,7 @@ * [Протокол MAVLink](mavlink.md) * [Работа с логами PX4](flight_logs.md) * [Калибровка камеры](calibration.md) + * [Работа с ИК датчиками](ir_sensors.md) * Учебник * [Теория и видеоуроки](lessons.md) * [Учебно-методическое пособие](metod.md) diff --git a/docs/ru/ir_sensors.md b/docs/ru/ir_sensors.md new file mode 100644 index 00000000..34d94c6f --- /dev/null +++ b/docs/ru/ir_sensors.md @@ -0,0 +1,235 @@ +# Работа с ИК-датчиками на Raspberry Pi 3 + +## Подключение ИК-приемника + +Большинство ИК-приемников работают и подключаются одинаково. У таких приемников есть 3 пина для подключения: G/GND – земля, V/VCC – питание 5В, S/OUT – сигнал. + +ir reciver connection to raspberry + +> **Hint** Сигнальный порт не обязательно должен подключаться к порту GPIO 17, данный пин можно изменить во время [настройки портов in/out](#in/out). + +## Настройка ИК-приемника и работа с модулем LIRC + +LIRC (Linux Infrared Remote Control) – стабильная и проверенная библиотека с открытым кодом, которая позволяет отправлять и получать команды по инфракрасному порту. LIRC поддерживается Raspbian. + +Для установки модуля LIRC нужно подключить вашу Raspberry Pi к интернету и выполнить консольные команды: + +```bash +sudo apt-get update +sudo apt-get install lirc +``` + +> **Hint** Для корректного редактирования системных файлов требуется иметь права доступа администратора, используйте `sudo` при вызове редактора текста. + + +После установки модуля нужно отредактировать файл `/etc/modules` и добавить в него строки: + +``` +lirc_dev +lirc_rpi gpio_in_pin=18 gpio_out_pin=17 +``` + +Где: + ++ `gpio_in_pin` – пин входа от приемника ++ `gpio_out_pin` – пин выхода для передатчика + +Обновите следующую строку в файле `/boot/config.txt`: + +``` +dtoverlay=lirc-rpi,gpio_in_pin=18,gpio_out_pin=17 +``` + +Добавьте следующие строки в файл `/etc/lirc/hardware.conf`. При отсутствии данного файла создайте его вручную. + +``` +LIRCD_ARGS="--uinput --listen" +LOAD_MODULES=true +DRIVER="default" +DEVICE="/dev/lirc0" +MODULES="lirc_rpi" +``` + +Обновите следующие строки в файле `/etc/lirc/lirc_options.conf` + +``` +driver = default +device = /dev/lirc0 +``` + +Все требуемые настройки сделаны, теперь нужно перезагрузить соответствующий демон. Для этого выполните: + +```bash +sudo service lircd resart +``` + +После перезагрузки проверьте его статус, вызвав команду: + +```bash +sudo /etc/init.d/lircd status +``` + +Если вы все сделали правильно, то статус работы должен быть `active`. +Перед проведением тестирования лучше будет перезагрузить Raspberry Pi командой `sudo reboot`. + +Чтобы проверить, что установленный модуль LIRC работает, выключите демон `lircd` и вызовите соответствующую команду: + +```bash +sudo /etc/init.d/lircd stop +mode2 -d /dev/lirc0 +``` + +Теперь, направив ИК-передатчик на ваше устройство и нажав несколько кнопок, вы должны увидеть что-то похожее на это: + +``` +space 402351 +pulse 135 +space 7085 +pulse 85 +space 2903 +pulse 560 +space 1706 +pulse 535 +``` + +> **Hint** В ситуации, если вы используете ИК-передатчик (TV-пульт, пульт от кондиционеров, и т. д.) и во время проверки вы не получаете сигнал, возможно ваш пульт использует другую частоту передачи сигнала. При использовании приемников типа TSOP 22XX рабочая частота приема сигнала будет в диапазоне от 30 до 50 кГц. + +## Запись своей конфигурации ИК-пульта + + + +В случае, если вы хотите использовать свой ИК-передатчик, вам нужно записать его характерные настройки с помощью прилагающегося модуля `irrecord`. Для этого вам нужно выключить демон `lircd` и вызвать соответствующую команду. Во время клабирбровки пульта точно выполняйте все написанные интсрукции. + +> **Hint** Обратите внимание, что на последнем шаге калибровки вам нужно будет задать наименования кнопок, которые вы захотите расшифровать программно. Для того чтобы посмотреть список доступных имен, вызовите команду `irrecord --list-namespace`. + +```bash +irrecord -d /dev/lirc0 ~/lircd.conf +``` + +Если у вас успешно получилось записать конфигурацию вашего пульта, в папке `/home/pi/` должен был появиться файл `введенное-имя.lircd.conf`. Теперь вам нужно перенести записанный конфигурационный файл в рабочую папку `lirc` и перезагрузить демон: + +``` +sudo cp ~/lircd.conf /etc/lirc/lircd.conf +sudo /etc/init.d/lirc restart +``` + +Для того чтобы проверить, распознается ли записаная вами конфигурация, вывзовите соответствующий модуль. Теперь при нажатии на кнопки, которые вы записали в ранее созданной конфигурации, в терминал будет выводиться отладочная информация о том, какая кнопка была нажата. + +``` +irw +``` + +Если вы все сделали правильно, то вы увидите выход похожий на: + +TODO Добавить реальные строчки раскодированных сигналов пульта + +``` +000000007689718e 01 KEY_OK +``` + +Это значит, что ваша конфигурация корректно распознается программой и теперь вы можете запрограммировать нужные вам действия в случае нажатия определенной клавиши. + +## Работа с ИК-датчками в Python + +Чтобы иметь возможность использовать сигналы с ИК-приемника в Python программах, требуется установить пакет `python-lirc`, для этого используйте команду: + +``` +sudo apt-get install python-lirc +``` + +Для корректного получения информации в собственном скрипте нужно создать файл `lircrc`, в котором будут храниться настройки ваших кнопок и программный ответ в случае их вызова. + +Данный файл создается в той же папке, из которой будет вызван ваш скрипт, по умолчанию это `/home/pi/`. + +Для того чтобы создать требуемый файл используйте любой текстовый редактор: + +```bash +sudo nano .lircrc +``` + +Формат данного файла должен быть примерно таким: + +``` +begin +prog = myprogram +button = KEY_1 +config = one +end + +begin +prog = myprogram +button = KEY_2 +config = two +end +``` + +Где: + ++ `prog` – имя программы, которое вы будете вызывать в своем скрипте ++ `button` – наименование клавиши, которое вы вводили во время настройки пульта ++ `config` – информация, которая будет передана вашей программе в случае нажатия указаной клавиши + +Все настройки выполнены и теперь можно переходить непосредственно к программированию ИК-сигналов. + +Для этого нужно создать Python скрипт, который будет принимать значения нажатых клавиш и выполнять в соответствии с ними требуемые действия. +Пример такого скрипта: + +```python +import lirc +import fly_module + +# ... + +sockid = lirc.init('myprogram') + +inf = lirc.nextcode() +if inf[0] == 1: + print('You pressed key 1') +elif inf[0] == 2: + print('You pressed key 2') + +lirc.deinit() +``` + +## Работа с ИК-передатчиком + +Для того, что бы работать с ИК-передатчиком, подключите его к тем портам, которые указывали [при настройке](#in/out). + +IR transmitter connection to raspberry + +IR transmitter scheme + +> **Hint** В случае, если вы используете готовую плату ИК-передатчика, подключите ее к нужным пинам Raspberry в соответсвии с маркировкой пинов, точно так же как и с приемником. + +Если все правильно подключено, то можно отправлять сигналы заданные на моменте [настройки пульта](#remote_control), используя команду: + +```bash +irsend SEND_ONCE deviceName keyName +``` + +Где: + ++ SEND_ONCE - параметр отвечающий за то, посылаете вы один сигнал или он передается как от зажатой кнопки ++ deviceName - имя пульта, которое вы давали во время его [настройки](#remote_control) ++ keyName - имя одной из кнопок, которые были вами заданы во время настройки пульта + +Для того чтобы работать с `irsend` внутри вашего скрипта требуется установить модуль `python-irsend`, для этого используйте команду: + +```bash +pip install py-irsend +``` + +Чтобы использовать `irsend` импортируйте библиотеку и вызовите соответствующую команду: + +```python +from py_irsend import irsend + + + +irsend.send_once('YourRemote', ['YourKey']) +``` + +Где: + ++ YourRemote - название вашего пульта указанное при настройке ++ YourKey - имя одной из заданных при настройке кнопок