docs: add article on GPIO

This commit is contained in:
Oleg Kalachev
2019-04-18 18:20:03 +03:00
parent d09dfba905
commit 17916f931c
2 changed files with 95 additions and 0 deletions

View File

@@ -47,6 +47,7 @@
* [Камера \(компьютерное зрение\)](camera.md)
* [Светодиодная лента](leds.md)
* [Визуализация с помощью rviz](rviz.md)
* [Работа с GPIO](gpio.md)
* [Ультразвуковой дальномер](sonar.md)
* [Лазерный дальномер](laser.md)
* [Работа с SITL](sitl.md)

94
docs/ru/gpio.md Normal file
View File

@@ -0,0 +1,94 @@
# Работа с GPIO
GPIO (General-Purpose Input/Output) это тип пинов на Raspberry Pi, напряжение на которых можно программно подавать и измерять. Также на этих пинах реализован аппаратный <abbr title="Широтно-импульсная модуляция">ШИМ</abbr> (<abbr title="Pulse-width modulation">PWM</abbr>).
> **Info** Используйте [распиновку](https://pinout.xyz), чтобы понять, какие из пинов на Raspberry Pi поддерживают GPIO.
Для работы с GPIO на [образе для RPi](microsd_images.md) предустановлена библиотека [`pigpio`](http://abyz.me.uk/rpi/pigpio/). Чтобы взаимодействовать с этой библиотекой запустите соответствующий демон:
```bash
sudo systemctl start pigpiod.service
```
Для включение автозапуска демона `pigpiod` используйте команду:
```bash
sudo systemctl enable pigpiod.service
```
Пример работы с библиотекой:
```python
import time
import pigpio
# инициализируем подключение к pigpiod
pi = pigpio.pi()
# устанавливаем режим 11 пина на вывод
pi.set_mode(11, pigpio.OUTPUT)
# включаем сигнал на 11 пине
pi.write(11, 1)
time.sleep(2)
# отключаем сигнал на 11 пине
pi.write(11, 0)
# ...
# устанавливаем режим 12 пина на ввод
pi.set_mode(12, pigpio.INPUT)
# считываем состояние 12 пина
level = pi.read(12)
```
Для определения номера пина используйте [распиновку Raspberry Pi](https://pinout.xyz).
## Подключение сервоприводов
Большинство сервоприводов управляются с помощью ШИМ сигнала, причем крайним положениям привода соответствуют сигналы шириной приблизительно 1000 и 2000 мкс. Значения для конкретного сервопривода могут быть выяснены экспериментально.
Подключите сигнальный провод сервопривода к одному из GPIO-пинов Raspberry. Для управления сервоприводом, подключенного к 13 пину, используйте такой код:
```python
import time
import pigpio
# устанавливаем режим 13 пина на вывод
pi.set_mode(13, pigpio.OUTPUT)
# устанавливаем на 13 пине ШИМ сигнал в 1000 мкс
pi.set_servo_pulsewidth(13, 1000)
time.sleep(2)
# устанавливаем на 13 пине ШИМ сигнал в 2000 мкс
pi.set_servo_pulsewidth(13, 2000)
```
## Подключение электромагнита
<!-- TODO схема -->
Для подключения электромагнита используйте MOSFET-транзистор. Подключите транзистор к одному из GPIO-пинов Raspberry Pi. Для управления магнитом, подключенным к 15 пину, используйте такой код:
```python
import time
import pigpio
pi = pigpio.pi()
# устанавливаем режим 15 пина на вывод
pi.set_mode(15, pigpio.OUTPUT)
# включаем электромагнит
pi.write(15, 1)
time.sleep(2)
# отключаем электромагнит
pi.write(15, 0)
```