Ir al contenido principal

Encender una bombilla de forma remota

ENCENDER UN BOMBILLA EN FORMA REMOTA (IOT) DESDE EL MÓVIL U ORDENADOR USANDO LA RASPBERRY PI Y UN RELÉ OPTOACOPLADO







Cómo se hizo 



Materiales
  • Alargador
  • Tabla de prototipos con cable IDE
  • Cable con conector macho
  • Porta bombilla y bombilla de 50W 220AC 
  • Raspberry Pi (controlará el interruptor del relé)
  • Board de relés de 4 canales (solo se necesita 1 canal). Acoplará la salida de la Pi (5VAC) para el circuito de potencia (230 VAC, 10 A).
  • Tres jumpers macho hembra
  • Herramientas básicas para cortar, atornillar y pelar cables
  • Polímetro  o tester para verificar la corriente.

Procedimiento


1) Instalación de la bombilla

2) El cable de AC220V, está formado por dos cables dentro de un forro, cortamos uno de ello el marrón o el azul (cualquiera de ellos) para colocar el relé en serie a manera de interruptor en dos de sus bornes. El común siempre se conecta.

Cable de AC230V cortado
Colocación en los bornes del relé, en este caso NC y C
Hemos disidido colocarlo de esta manera (NC yC), por los motivos siguientes:
Si  perdemos el control del relé, se apaga la Raspberry Pi, o por el motivo que sea, la bombilla quedará apagada.
Cuando la bombilla este apagada, no tenemos consumo de energía en la Pi para accionar la bobina del relé.

 3) Conectamos a la board de relés: el cable jumper negro a GND, el cable jumper marrón IN1 y cable rojo a VCC




Conexionado de la tabla de prototipado "breadboard" o protoboard a la tabla de relés

En la raspberry Jumper rojo a la salida de 5VCC, jumper negro a GND y jumper marrón a GPIO12



Optoacopladores, son las cajitas negras

Programar el GPIO desde la bash
Bash es la consola por defecto en la mayoría de sistemas Linux.
Estos apuntes están basados en Geekytheory. 

Es la manera más larga e incómoda a la hora de hacerlo, pero funciona perfectamente. Sirve para probar que todo funciona. Más abajo escribiremos un pequeño programa que facilita el uso, en el lenguaje de programación Python.

Hacer accesible el GPIO 4 "export"
La manera de la que vamos a acceder a los GPIO (en este caso al 12) es como si fuesen directorios. Podemos utilizar comandos como 'ls', 'cat' o 'echo', entre otros, para conocer la estructura y contenidos de los directorios.
Ahora mismo no tenemos ningún pin accesible. Ni de entrada ni de salida. Tenemos que crearlo nosotros mismos. Queremos tener acceso al GPIO 12, así que introducimos el siguiente comando:

echo 4 > /sys/class/gpio/export

Hacer el pin de salida "echo out"
Tras esto, el sistema ha creado un archivo con una estructura GPIO que corresponde al número 12. A continuación, tenemos que informar a la Raspberry Pi de si el pin va a ser de salida o de entrada. Como lo que queremos es encender una bombilla, el GPIO 17 será de salida. Introducimos el siguiente comando:
echo out > /sys/class/gpio/gpio4/direction



Asignarle un valor al pin (apagado o encendido)"echo 0" o "echo 1"
Con esto, el sistema ya sabe que el pin será de salida. Ahora tendremos que darle valores. Existen dos posibles: 0 (apagado), 1(encendido)
Nota: dependerá de como este conexionado a los bornes del relé.

Para encenderla bombilla "1"

echo 1 > /sys/class/gpio/gpio4/value

Para apagar la bombilla"0"

echo 0 > /sys/class/gpio/gpio4/value

Todos juntos
echo 4 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio4/direction
echo 1 > /sys/class/gpio/gpio4/value
echo 4 > /sys/class/gpio/unexport

 
Eliminar el acceso al GPIO 4 "unexport"
Una vez hayamos acabado de encender y apagar la bombilla, tendremos que eliminar la entrada GPIO creadas, es decir, el GPIO 12. Para ello introduciremos el siguiente comando:
echo 4 > /sys/class/gpio/unexport
Con esto, ya sabemos crear, eliminar y cacharrear con los pines GPIO para encender y apagar la bombilla. Todos sabemos que esto es algo incómodo, así que lo ideal sería crear un programa, por ejemplo en Python, que nos ayude a gestionar nuestros GPIO.

Programación en sh (bash)
Se puede ejecutar desde la consola directamente o crear u script desde nano y guardarlo con la extensión .sh, debería uno para encender y otro para apagar.

Programación en python

PASO 1. INSTALACIÓN DE LA LIBRERÍA GPIO PARA PYTHON EN LA RASPBERRY

Fuente:  Rasperry Pi Fundation

GPIO
Usando Pythonen tu Raspberry Pi abriras la oportunidad de conectar al mindo real a través de los pins GPIO. Esto lo puedes hacer con la librería RPi GPIO. Esta preinstalada en las imagenes recientes de Rasbian, pero si tienes una versión vieja puedes instalarla con:
sudo apt-get install python-rpi.gpio
O
sudo apt-get install python3-rpi.gpio


Para acceder a los pines GPIO tú tendrás que acceder como "root" so run sudo python, sudo ipython or sudo idle &.

In your Python script (or in the REPL), import the GPIO module, set the board mode to that of your preference, set up the pins you want to use and turn them on:

Dentro de tu script, deberás importar el módulo, configurar el modo que tú prefieras de tú tarjeta, configurar los pines a usar y encenderlos:

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)  # set board mode to Broadcom

GPIO.setup(17, GPIO.OUT)  # set up pin 17
GPIO.setup(18, GPIO.OUT)  # set up pin 18

GPIO.output(17, 1)  # turn on pin 17
GPIO.output(18, 1)  # turn on pin 18

Installing Python packages

PASO 2: PROGRAMA PYTHON PARA HACER UN ENCENDIDO  DE LA BOMBILLA EL TIEMPO DESEADO


 Programa en lenguaje python, escrito con nano "editor de texto" y guardado como "encender_bombilla.py". Recuerda la extensión al final del nombre ".py"



## SALIDA GPIO 17
## Encender una bombilla durante un tiempo programable en minutos
# Creado por Carlos Avalos
# https://chitoraspberrypi.blogspot.com.es
# El rele estara conectado a los bornes C, NC


#CONFIGURACIONES
import RPi.GPIO as GPIO #importamos la libreria GPIO
import time # importamos modulo de tiempo
GPIO.setmode(GPIO.BCM) # configuramos los GPIO con la disposicion BCM
GPIO.setup(17, GPIO.OUT) ## GPIO 17 sera de salida   

tiempo = float(input("Indique el tiempo encendida (en minutos)?: "))# entrad$
GPIO.output(17, 1) ## Hace el GPIO 17 de salida con 5VCC (HIGH)
print "Bombilla encendida" #estado actual de la bomilla
time.sleep(tiempo*60)# para el programa el tiempo indicado
# tiempo * 60 para utilizar minutos en vez de segundos
GPIO.output(17, 0) ## corta el flujo de 5VCC, apaga la bombilla
print "Bombilla apagada"# muestra el estado de la bombilla
GPIO.cleanup() ## limpieza de los GPIO y fin de programa
print "ten un buen dia"
print "visita https://chitoraspberrypi.blogspot.com.es"



Fuentes consultadas

Comentarios