Create new article about ir sensors (#104)

* Create new artile ir_sensors.md

Create new article about ir sensors and their compatibility wit python.

* docs: edit ir_sensors.md

* Fix markdown mistake

* Add new article about IR sensors

* Add some fix and information about IR transmitter

* Add some fix

* Add info about py-irsend

* Change connections images

* Edit summary.md

* Edit
This commit is contained in:
Alamoris
2019-02-19 15:43:10 +03:00
committed by Oleg Kalachev
parent ea5923be24
commit 781d0132f2
5 changed files with 236 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -61,6 +61,7 @@
* [Протокол MAVLink](mavlink.md)
* [Работа с логами PX4](flight_logs.md)
* [Калибровка камеры](calibration.md)
* [Работа с ИК датчиками](ir_sensors.md)
* Учебник
* [Теория и видеоуроки](lessons.md)
* [Учебно-методическое пособие](metod.md)

235
docs/ru/ir_sensors.md Normal file
View File

@@ -0,0 +1,235 @@
# Работа с ИК-датчиками на Raspberry Pi 3
## Подключение ИК-приемника
Большинство ИК-приемников работают и подключаются одинаково. У таких приемников есть 3 пина для подключения: G/GND земля, V/VCC питание 5В, S/OUT сигнал.
<img src="../assets/IR_reciver_connection.png" height="500px" alt="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` при вызове редактора текста.
<a name="in/out"></a>
После установки модуля нужно отредактировать файл `/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 кГц.
## Запись своей конфигурации ИК-пульта
<a name="remote_control"></a>
В случае, если вы хотите использовать свой ИК-передатчик, вам нужно записать его характерные настройки с помощью прилагающегося модуля `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).
<img src="../assets/IR_transmitter_connection.png" height="500px" alt="IR transmitter connection to raspberry">
<img src="../assets/IR_transmitter.png" height="200px" alt="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 - имя одной из заданных при настройке кнопок