Desde 2012 la Raspberry Pi ha ido creciendo de gran popularidad, estando hoy en día posicionada como una de las placas de desarrollo de referencia. Uno de sus rivales clásicos en los últimos tiempos están siendo las Orange Pi, una placa fabricada por Shenzhen Xunlong ,con un diseño similar pero basado en procesadores de Allwinne y con un precio bastante inferior a falta de 1 conector USB
Esta placa de desarrollo “low cost” es ademas abierta y hackeable compitiendo abiertamente con otras tantas existentes donde la mas destacable es también la Banana Pi , pretendiendo todas ellas competir con la Raspberry Pi.
Hablando de esta versión, la Orange Pi ,se vende en dos versiones, una básica de bajo coste y otra denominada Orange Pi Plus.
Como ejemplo de uso de GPIO ,vamos a conectar un sensor PIR HC-SR501 a una OrangePi, pero la idea y concepto es aplicable también a una Raspberry Pi utilizando por ejemplo la librería Python RPi.GPIO
El modelo HC-SR501HC-SR501 es un Sensor infrarrojo de bajo coste (menos de 2€ por modulo en Amazon) con placa de circuito de control donde se pueden ajustar la sensibilidad y el tiempo de retención gracias a dos resistencias ajustables que dispone en un lateral.
La gama de voltaje de trabajo es DC 5V-20V con un consumo de corriente de menos de 60uA. La salida es binaria digital siendo el voltaje de salida de 3,3 V para un nivel alto o “1” logico y 0V para el cero lógico (no detección de movimiento).
Lo primero que hacemos es conocer el pinout del HC-SR501, pero rápidamente al ver la serigrafía de la placa, queda perfectamente claro :GND para la masa , VCC para la alimentación (que tomaremos desde la Orange Pi ) y un pin de salida (OUT) que será el que nos indique si ha detectado algún movimiento.
Luego lleva un par de resistencia variables o potenciómetros que nos permiten ajustar los parámetros de sensibilidad y duración de la señal, es decir, durante cuanto tiempo vamos a querer que en pin OUT tener la salida informada.
El primer potenciómetro hacia la derecha sirve para ajustar la distancia de modo que el , rango de detección aumenta (unos 7 metros), por el contrario, la gama de detección disminuye (unos 3 metros).
El otro potenciómetro rotándolo a la derecha sirve para retrasar el retardo de sensor a tiempos más largos (sobre 300s).Si se gira la contrario el retardo sera corto (sobre 5).
En cuanto a las conexiones del sensor a la placa no pueden ser mas sencillas:
- El sensor HC-SR501 funciona a 5v, por lo buscamos los pines que nos proporcionan la alimentación ,los cuales corresponden a los pines 4 y 6 de la referencia CONN de la Orange Pi.
- El pin de salida del HC-SR501 con el estado del sensor se puede conectar por ejemplo al puerto 7 de GPIO ( al conector número 7)
Primero y si no lo tenemos instalado,teniendo conectado la Orange pi a Internet via cable etherenet, debemos instalar el acceso al repositorio de código git usando el siguiente comando:
orangepi@OrangePI:~$ sudo apt-get install git
Vamos a utilizar la librería en Python orangepiPCgpio_pyH3 para acceder los puerto de conexión GPIO’s. Ésta librería la podéis encontrar en el GitHub del usuario duxingkei33 seidno resumidamentes una adaptación de la librería pyA20 0.2.1 que se utiliza en la placa A20-OLinuXino-MICRO.
Vamos a clonar primero el repositorio:
git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3.git
Y ahora para instalar ejecutamos:
cd orangepi_PC_gpio_pyH3
sudo python setup.py install
Una vez tenemos conectado nuestro sensor HC-SR501 a nuestra placa OrangePi, vamos a generar un pequeño script de ejemplo para leer el valor del conector GPIO 7 tal y como lo veremos en el código el port.PA6:
from pyA20.gpio import gpio
from pyA20.gpio import port
from pyA20.gpio import connector
gpio.init()
gpio.setcfg(port.PA6, gpio.INPUT)
while True:
if gpio.input(port.PA6) == 1:
print “PA6/PIN 7 = 1”
else:
print “PA6/PIN 7 = 0”
El código es muy sencillo y pasamos a describir:
- Mediante gpio.init() inicializamos el modulo,acción que siempre haremos los primero cuando usemos el Gpio.
- La linea gpio.setcfg(port.PA6, gpio.INPUT) configura PA6 como entrada.Cómo información adicional, si miramos dentro del código de la librería orangepiPCgpio_pyH3 el fichero mapping.h tiene la relación entre PUERTO y CONECTOR. Por ejemplo, el pin utilizado en el ejemplo lo encontraremos definido así (“PA6” cómo 7): “PA6”, SUNXI_GPA(6), 7 }.Como curiosidad puede sorprender que el pinout del conector GPIO 7 corresponda al nombre del puerto PA6 . La librería pyA20 utiliza esta nomenclatura de puertos ya que la placa a la que está orientada originariamente (no ésta modificación/adaptación) tiene diferentes fuentes de GPIO’s y es una forma de darles un nombre único dentro de todas las conexiones.
- Por ultimo tenemos un bucle while desde el que nunca saldemos y en el que constantemente se esta mirando el estado del pin pintando en pantalla en función del estado, obteniendo un mensaje u otro.
Para ejecutar el script ,observe que la inicialización del módulo requiere root, por lo que el script de Python lo tenemos que ejecutar con sudo
El ejemplo es muy sencillo y únicamente lo que hace es leer el valor del sensor, que puede ser “0” (no detecta movimiento) o “1” (se detecta movimiento) y pintar en pantalla el resultado ,pero obviamente se puede mejorar mucho mas , dentro del bucle while por ejemplo añadiendo código para enviar un correo al detectar movimiento o por ejemplo enviar el dato a un repositorio de IoT como Cosm.com .
Fuente aqui
…