Archivo

Archivo para la categoría ‘Raspberry Pi’

Usar un sensor de puerta magnetico en un Raspberry Pi

Domingo, 3 de Enero de 2016 Sin comentarios

Ya ví cómo controlar un relé, ahora le agregaré un sensor de puerta para que cuando ésta se abra pueda ejecutar una acción, como activar un relé.

Materiales

  • Raspberry Pi (sigo usando el 2, pero también debería servir el 1)
  • Sensor magnético
  • Cable para conectar ambas cosas, se necesitarán varios metros dependiendo de la distancia.

 

 

image

 

Conexión

Por el extremo del sensor se deben conectar los dos cables y se debe instalar junto a la puerta o ventana a monitorear

image

 

En el extremo del Raspberry se debe conectar un cable por un pin GND y el otro en cualquier pin GPIO. Para encontrar los pins y su función puedes usar el siguiente esquema

GPIO_Pi2

Ésta es la conexión que hice

image

Como verán tengo conectadas más cosas, así que destaqué en rojo las conexiones del sensor, que corresponden a los pines 7 (GPIO4) y 9 (GND).

Con las conexiones realizadas ahora pasaré a la parte de software

Programación

Aquí usé la librería de GPIO para python con el siguiente código

import time
import RPi.GPIO as io

io.setmode(io.BCM)

door_pin = 4

io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP)

while True:
        if io.input(door_pin):
                print(“PUERTA ABIERTA!”)
        time.sleep(0.5)

La variable door_pin está fijada con el valor del pin BCM

image

 

Finalmente basta con ejecutar la aplicación con python nombrescript.py y activar el sensor abriendo la puerta, se mostrará el mensaje “PUERTA ABIERTA!” cada 0,5 segundos mientras la puerta esté abierta, si la cierras dejará de aparecer el mensaje.

Ahora modificaré el código para que además de mostrar ese mensaje active un relé

import time
import RPi.GPIO as io

io.setmode(io.BCM)

door_pin = 4
rele_pin = 21

io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) 
io.setup(rele_pin, io.OUT)

while True:
        if io.input(door_pin):
                print(“PUERTA ABIERTA!”)
                time.sleep(1.5)
                io.output(rele_pin, False)
        else:
                io.output(rele_pin, True)
        time.sleep(0.5)

El relé está configurado para que por defecto esté desactivado, por lo que al activar la puerta enciende el relé y viceversa. En caso de que esté configurado a la inversa el relé basta invertir el valor pasado al pin (io.output(rele_pin, XX) intercambiar False por True y viceversa en las dos veces que aparece en el código)

Aquí están destacados los pines correspondientes al relé en verde

image 

2 = DCC, 39 = GND, 40 = GPIO21

Categories: Raspberry Pi Tags: , ,

Control de un Rele con Raspberry Pi 2

Martes, 8 de Septiembre de 2015 Sin comentarios

Hace unos días compré un Relé (o Relay como se dice en inglés) con la idea de controlar circuitos eléctricos, inicialmente encender y apagar una lámpara (220V).

Materiales

  • Raspberry PI (yo usé el 2 B+, pero también debería funcionar con el 1)
  • Un relé, la cantidad de canales de éste dependerá de cuántos circuitos quieran controlar.
  • Cables para conectar el relé con el raspberry a los pines GPIO.

image

Relé de 2 canales, aquí estoy sólo usando uno.

image

Raspberry PI 2, he tenido que quitar la tapa de la carcasa para tener acceso a los pines GPIO. Como SO tiene instalado Raspbian en una microSD de 8 GB.

 

Éste es el resultado final

image

Para llegar a ese resultado son 2 partes, primero la conexión del relé al circuito a controlar y al raspberry, y luego la programación del raspberry para controlar el relé.

image

Cada canal (corresponde a cada “caja azul”) del relé tiene 3 conexiones

image

En el central debe ir uno de los cables y el segundo puede ir en el primero o tercero, según si deseas que el circuito esté abierto o cerrado cuando el relé está apagado o no está recibiendo energía (estado “por defecto”). Eso lo puedes diferenciar según las líneas que están unidas en el pin 2-3 y para el pin 1 no lo está.

En mi caso para probar dejé conectado el 2-3, para que quede cerrado el circuito por defecto.

Para probar conecté los extremos de los cables a una lámpara y a un enchufe y como por defecto está cerrado el circuito la lámpara se encendió. Si conectaron los 1-2 la lámpara debería permanecer apagada.

 

Ahora debo proceder a conectar los cables para el Raspberry (no olvides desconectar el circuito primero)

image

Para ello usé un cable como éste

imageimage

 

En el relé los pines están etiquetados GND-IN1-IN2-VCC. El primero y el último son para energizar el relé y el segundo y tercero corresponden a los canales, cuya cantidad corresponderá a la cantidad de canales del relé que hayas comprado.

Como sólo ocuparé el primer canal conectaré únicamente el IN1.

Por el lado del Raspberry he conectado estos pines

image

De izquierda a derecha corresponden al relé los VCC-GND-IN1, correspondientes a los pines 2 (DC 5v), 6 (GND) y 18 (GPIO 24) del Raspberry.

 

Finalmente falta configurar el Raspberry para controle el puerto GPIO, para ello utilicé Raspbian que instalé. Una vez instalado puedes entrar por SSH o por terminal conectando monitor y teclado.

Primero tienes que instalar la librería “wiringPi”, la que proveerá de la utilidad “gpio”. Ejecuta estos comandos

apt-get install git-core
clone git://git.drogon.net/wiringPi
cd wiringPi/
./build

Ya tienes instalado wiringPi, ahora para inicializar el pin debes correr este comando

gpio -g mode 24 out

Y ahora para encender

gpio write 5 1

Y para apagar

gpio write 5 0

La explicación de los números la puedes obtener con el comando “gpio readall”

image

 

Para comodidad puedes poner estos tres comandos en scripts para correrlos más fácilmente

Categories: Raspberry Pi, Servidores Tags:

Instalar modulo RTC en el Raspberry Pi

Sábado, 10 de Enero de 2015 2 comentarios

Un Raspberry Pi no cuenta con la capacidad de mantener la fecha y hora cuando está apagado. Para suplir esto al iniciar el Sistema Operativo obtiene vía Internet (por NTP) la fecha y hora, pero si no hay conexión a Internet se debe introducir estos datos manualmente.

Un computador común puede mantener la hora ya que cuenta con un módulo RTC que hace esta función, pero el Raspberry no cuenta con este módulo, por eso no puede mantener la hora.

Sin embargo este módulo se puede instalar aparte por los pines GPIO que trae el raspberry, esto es útil para cuando el raspberry no tenga Internet o sea un modelo sin red integrada como el A.

El módulo que compré es como el de la imagen en DealExtreme por US$ 2.99, link: http://www.dx.com/p/ds3231-raspberry-pi-rtc-board-real-time-clock-module-for-arduino-black-277258#.VLFjZNW-97Y

image

Su instalación es muy sencilla, además no sobresale de la placa del raspberry por lo que no afecta a la carcasa del raspberry.

Imagen del raspberry sin el módulo

RPI-SinModulo

Primero hay que apagar y desconectar el raspbery, luego el módulo debe colocarse en los conectores GPIO del raspberry como muestra la siguiente imagen

RPI-ConModulo

Aquí el raspberry con el módulo instalado y la carcasa

RPI-ConCase

Una vez que se instaló el módulo se enciende el raspberry y se debe configurar el Sistema Operativo para que la utilice, para ello se debe realizar lo siguiente:

Primero se debe editar el archivo /etc/modprobe.d/raspi-blacklist.conf y comentar la línea “blacklist i2c-bcm2708” dejándola así “#blacklist i2c-bcm2708”. Una vez habilitado el módulo se puede reiniciar o también cargarlo inmediatamente con “modprobe i2c-bcm2908”.

Luego se debe notificar al SO del nuevo módulo con el comando

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device

Ahora se puede probar si funciona el módulo corriendo “hwclock”

image

En mi caso aparece la hora correcta, pero en tu caso puede que salga una fecha y hora incorrecta debido a que aún no se ha establecido en el módulo, para ello se debe tener la fecha y hora correcta en el sistema y luego actualizar el módulo ejecutando “hwclock –w”

Finalmente para que al iniciar el sistema active el módulo y actualice la fecha/hora desde éste se debe editar el archivo /etc/rc.local y antes de donde dice “exit 0” agregar

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device
hwclock –s

image

Categories: Raspberry Pi Tags:

Instalar rtorrent + rutorrent en Debian

Viernes, 8 de Agosto de 2014 Sin comentarios

Rtorrent es un cliente bittorrent por terminal disponible en los repositorios de varias distribuciones de linux, mientras que rutorrent es una aplicación web que se conecta a rtorrent para que se puedan manejar vía navegador los torrents.

image

La versión de los repositorios no cuenta con soporte para ser controlado remotamente, por lo que es necesario descargar el código fuente de rtorrent, libtorrent y xmlrpc-c para compilarlos manualmente y luego instalarlos.

Antes de comenzar debes instalar los programas requeridos para compilar

apt-get install gcc pkg-config libssl-dev g++ make libncurses5-dev libsigc++-2.0-dev libcurl4-openssl-dev subversion screen nano

Primero debes compilar XMLRPC-C

svn co http://svn.code.sf.net/p/xmlrpc-c/code/advanced xmlrpc-c
cd xmlrpc-c
./configure
make
make install

Luego libtorrent

wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.3.tar.gz
tar zxvf libtorrent-0.13.3.tar.gz
cd libtorrent-0.13.3
./configure
make
make install

Posteriormente rtorrent, el que se instalará con soporte de xmlrpc-c compilado anteriormente

wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.3.tar.gz
tar zxvf rtorrent-0.9.3.tar.gz
cd rtorrent-0.9.3
./configure –with-xmlrpc-c
make
make install
ldconfig

Ahora se debe configurar rtorrent, crearemos un usuario y las carpetas requeridas

useradd torrent
mkdir –p /home/torrent/rtorrent/{.session,download}
cp rtorrent-0.9.3/doc/rtorrent.rc /home/torrent/.rtorrent.rc
chown –R torrent:torrent /home/torrent/rtorrent

Luego debes editar la configuración

nano /home/torrent/.rtorrent.rc

Y cambiar

directory = /home/torrent/rtorrent/download
session = /home/torrent/rtorrent/.session
scgi_port = localhost:5000

Como servidor web usaré nginx en lugar de apache, por ocupar menos recursos, lo que es más apropiado para el Raspberry PI.

apt-get install nginx php5-fpm apache2-utils

(apache2-utils es para el comando htpasswd mencionado más adelante, no incluye el servidor web)

mkdir /var/www
cd
wget http://dl.bintray.com/novik65/generic/rutorrent-3.6.tar.gz
wget http://dl.bintray.com/novik65/generic/plugins-3.6.tar.gz
tar xvf rutorrent-3.6.tar.gz -C /var/www
tar xvf plugins-3.6.tar.gz -C /var/www/rutorrent
chown www-data:www-data -R /var/www/rutorrent
tar xvf rutorrent-3.6.tar.gz -C /var/www
tar xvf plugins-3.6.tar.gz -C /var/www/rutorrent
htpasswd -c /var/www/rutorrent/.htpasswd (nombreusuario)
chown www-data:www-data -R /var/www
nano /etc/nginx/sites-available/default

Donde dice nombreusuario reemplaza por el nombre de usuario deseado para ingresar a rutorrent, luego introduce dos veces una contraseña.

En el archivo default edita lo siguiente

root /var/www;
index index.php index.html index.htm;

Descomenta las líneas para activar PHP

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        # NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini

        # With php5-cgi alone:
#       fastcgi_pass 127.0.0.1:9000;
#       # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
}

Luego de estas líneas agregar

location /RPC2 {
        include scgi_params;
        scgi_pass 127.0.0.1:5000;
}

location /rutorrent {
        auth_basic “Restricted”;
        auth_basic_user_file /var/www/rutorrent/.htpasswd;
}

Si deseas activar HTTPS repite los pasos anteriores en la sección “server { listen 443; …”

Reinicia los servicios

service nginx restart
service php5-fpm restart

Finalmente debes ajustar unos parámetros de la configuración de rutorrent

nano /var/www/rutorrent/conf/config.php

Edita las siguientes líneas para especificar las rutas de curl y stat

“curl” ==> ‘/usr/bin/curl’, // Something like /usr/bin/curl. If empty, will be found in PATH.
“stat” ==> ‘/usr/bin/stat’, // Something like /usr/bin/stat. If empty, will be found in PATH.

Si ingresas a rutorrent aparecerá que no se pudo conectar a rtorrent, porque aún no se ha iniciado. Para iniciarlo inicia sesión como torrent, corre el comando screen y luego rtorrent. El comando screen permitirá cerrar la terminal y dejar rtorrent ejecutándose en segundo plano.

Fuentes:

rtorrent + rutorrent con nginx: http://vassie.me/rtorrent-and-rutorrent-on-ubuntu-server-with-nginx/

rtorrent + rutorrent con apache: http://www.adminsehow.com/2013/11/installing-rtorrentrutorrent-on-debian-7-wheezy/