mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 21:19:35 +00:00
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:
BIN
docs/assets/IR_reciver_connection.png
Normal file
BIN
docs/assets/IR_reciver_connection.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 83 KiB |
BIN
docs/assets/IR_transmitter.png
Normal file
BIN
docs/assets/IR_transmitter.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.8 KiB |
BIN
docs/assets/IR_transmitter_connection.png
Normal file
BIN
docs/assets/IR_transmitter_connection.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 88 KiB |
@@ -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
235
docs/ru/ir_sensors.md
Normal 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 - имя одной из заданных при настройке кнопок
|
||||
Reference in New Issue
Block a user