User Tools

Site Tools


Writing /var/lib/dokuwiki/data/meta/teaching/ie0117/proyectos/2013/ii/alarma_para_casa_usando_piface_del_raspberry_pi.meta failed
teaching:ie0117:proyectos:2013:ii:alarma_para_casa_usando_piface_del_raspberry_pi

Alarma de Casa Usando el Piface de Raspberry Pi

Elaborado por: Luis Alvarado Villalta

Objectivo General

El objetivo general es hacer uso del raspberry pi como dispositivo electrónico principal y de su PiFace para programar en este la lectura en forma secuencial y cíclica de varios dispositivos de alarma (ya sea interruptores de puertas, señal digital detectora de movimiento por radar etc.) La señal de alarma se dará de varios modos: sirena, aviso a algún medio externo como por ejemplo un bíper y una conexión a la red internet para dar aviso.

Objectivos Especificos

• El primer objetivo es estudiar y comprender el uso del ordenador Raspberry Pi.

• Después se pretende comprender el duncionamiento del PiFace para Raspberry Pi.

• Estudiar con mucho cuidado las precauciones que se deben tener presentes al hacer uso de los puertos GPIO del ordenador ya que hay limitaciones de voltajes y corrientes máximas a respetar para no dañar el ordenador

• Programar el ordenador de manera que lea en forma secuencial los varios puertos a través de la interface PiFace que se conecta a los mismos pines del GPIO y si alguno de ellos detecta una señal de alarma ,el ordenador genere varias señales de aviso ,utilizando algunos puertos de salida, y los relays para activar dispositivos de alarma como sirenas o luces.

• Programar el dispositivo de manera que pueda conectarse a la red de manera que de señal de aviso, como enviar un email.

• Diseñar las interfaces necesarias para poder conectar las salidas y entradas del raspberry pi con los dispositivos a leer y a activar ya que el controlador nuestro solo tiene entradas y salidas digitales

• Emplear los 4 pulsadores que poseen la interface PiFace para introducir alguna clave o contraseña y que esta sea verificada correctamente por el programa.

Descripcion de Hardware

Raspberry Pi

Raspberry Pi es un ordenador de placa reducida o (placa unica) (SBC) de bajo costo, desarrollado en Reino Unido por la Fundación Raspberry Pi, con el objetivo de estimular la enseñanza de ciencias de la computación en las escuelas.

El diseño incluye un System-on-a-chip Broadcom BCM2835, que contiene un procesador central (CPU) ARM1176JZF-S a 700 MHz (el firmware incluye unos modos “Turbo” para que el usuario pueda hacerle overclock de hasta 1 GHz sin perder la garantía),9 un procesador gráfico (GPU) VideoCore IV, y 512 MB de memoria RAM (aunque originalmente al ser lanzado eran 256 MB). El diseño no incluye un disco duro ni unidad de estado sólido, ya que usa una tarjeta SD para el almacenamiento permanente; tampoco incluye fuente de alimentación ni carcasa.

Se emplea el Raspberry Pi debido a muchas comodidades como su bajo costo, poderoso dispositivo, programacion libre y abierta, sencilla implementación disponible y poco espacio fisico. Para más información puede visitar el sitio web:

http://www.raspberrypi.org/

El PiFace

PiFace Digital está diseñado para ser conectado al puerto GPIO de la Raspberry Pi. Con PiFace digital se puede detectar el estado de un interruptor, por ejemplo, un sensor de una puerta, un botón o cualquier otro tipo de interruptores. Una vez que se ha detectado el estado, usted puede escribir su propio software para el Raspberry Pi que determine cómo responder a ese estado del interruptor. Usted puede conectar las salidas a motores eléctricos, actuadores, LEDs…

Características

Se conecta directamente al puerto GPIO de la Raspberry Pi. • 2 relés de conmutación.

• 4 Interruptores táctiles.

• 8 entradas digitales.

• 8 salidas open-Collector.

• 8 indicadores LED.

• Fácil de programar en Python, Scratch y C.

• Emulador gráfico y simulador.

• Los relés se pueden utilizar para conmutar tensiones de hasta 20 V (máx.) y corrientes de hasta 5A (Max).

PiFace Board

Software empleado

En el Raspberry Pi se pueden instalar muchas plataformas sin embargo se decide emplear uno de los sistemas más utilizados que es Raspbian. Este es un sistema operativo libre basado en Debian optimizado para el Raspberry Pi.

Estas imagenes se pueden descargar del sitio web: http://www.raspberrypi.org/downloads

y despues serán grabadas en la tarjeta SD para dicha instalación.

Implementacion

Script

El Programa se desarrolla en Python:

#!/usr/bin/env python3
#Proyecto 2 .alarma para casa. Luis Alvarado V.
import pifacedigitalio #se importa para usar las funciones del piface
import smtplib # se importa libreria smtp para enviar correo
 
#declaracion de variables globales
 
x=0 # 0 significa desarmado y 1 es armado
y1=0   #primer digito 
y2=0   #segundo digito
y3=0	#tercer digito
 
 
 
#los siguientes procesos no se ejectan hasta que sean invocados por una interrupcion
 
def primer_digito(event): #reconoce el primer digito mediante un conteo de las pulsaciones
	global y1 #se declara que se va a usar la variable global 
	y1=y1+1
	print("primer digito:", y1)
	if(y1==20): #se reinicia despues de 20
		y1=-1	
 
def segundo_digito(event): #reconoce el segundo digito mediante un conteo de las pulsaciones
	global y2#se declara que se va a usar la variable global
	y2=y2+1
	print("segundo digito:",y2)
	if(y2==9): #se reinicia despues de 9
		y2=-1
 
def tercer_digito(event): #reconoce el tercer digito mediante un conteo de las pulsaciones
	global y3 #se declara que se va a usar la variable global
	y3=y3+1
	print("tercer digito",y3)
	if(y3==9): #se reinicia despues de 9
		y3=-1
 
def help(event): #Modo activacion inmediata
	global x
	if(x==1): #hace la pregunta: esta activada si es asi realice el bloque
		print("Ayuda! Alarma Activada!")
		pifacedigital.relays[0].value=1 #enciende el relay 0 y automaticamente enciende led 0
 
 
		#enviar email
		TO = 'luisalvarado87@gmail.com'
		SUBJECT = 'Alerta. Alarma Activada'
		TEXT = 'Alarma Activada.'
 
		# Gmail Sign In(ingresar a gmail)
		gmail_sender = 'luisalvarado87@gmail.com'
		gmail_passwd = 'xxxxxxxxxx'
 
		server = smtplib.SMTP('smtp.gmail.com', 587)
		server.ehlo()
		server.starttls()
		server.login(gmail_sender, gmail_passwd)
 
                #cuerpo del mensaje, se agregan parametros
		BODY = '\r\n'.join(['To: %s' % TO,
		                    'From: %s' % gmail_sender,
		                    'Subject: %s' % SUBJECT,
		                    '', TEXT])
 
		try:#intentar enviar
		    server.sendmail(gmail_sender, [TO], BODY)
		    print ('email sent')
		except:
		    print ('error sending mail')
 
		server.quit()	#salir de servidor	
 
 
 
 
def wait_help(event): #este proceso activara la alarma con un retardo
	global x
	if(x==1):
		print("Tiene 30 seg, ingrese clave")
		#for i in range(0,10000):
			#for j in range(0,1000):
				#a=0
		print("Fin de cuenta")
 
def cargar_codigo(event):
	global y1 #se usaran las variables globales
	global y2
	global y3
	global x
 
	print("verificando codigo")
 
	#se verica que el codigo sea correcto, si es asi realice el bloque de arme o desarme
	if(y1==12 and y2==6 and y3==3):
		if(x==0):#si esta desactivada 
			print("codigo correcto. Armando!")
			x=1
 
			#encender led[7] = armado
			pifacedigital.leds[7].turn_on() #led7 encendido significa armado
			print("Armado")
 
 
			#Activar 2 opciones:	
 
			#opcion 1: modo en casa
			if(pifacedigital.input_pins[4].value==1):#si esta a tierra el interrup 4
				print("Modo En casa")
				pifacedigital.leds[5].turn_on() #encender leds 4,5,6
				pifacedigital.leds[4].turn_on() #al encender estos leds tengo control sobre los sensores 
				pifacedigital.leds[6].turn_on() #o regiones que deseo armar segun el modo
 
 
			#opcion 2: modo NO en casa	
 
			elif(pifacedigital.input_pins[4].value==0):# si NO esta a tierra el interruptor 4
				print("Modo NO en casa")
				pifacedigital.leds[5].turn_on() #encender leds 3,4,5
				pifacedigital.leds[4].turn_on() #al encender estos leds tengo control sobre los sensores 
				pifacedigital.leds[3].turn_on() # o regiones que deseo armar segun el modo
 
 
		elif(x==1):#pregunta... si esta activada haga el bloque de desarme
			print("codigo correcto. Desarmando!")
			x=0
			pifacedigital.relays[0].value=0
			pifacedigital.leds[7].turn_off()
			pifacedigital.leds[5].turn_off()
			pifacedigital.leds[4].turn_off()
			pifacedigital.leds[1].turn_off()
			pifacedigital.leds[3].turn_off()
			pifacedigital.leds[6].turn_off()
 
			print("Desarmada!")
 
	else: #Si el codigo introducido no coincide
		print("Codigo erroneo, Intente de nuevo")
	y1=0
	y2=0
	y3=0
 
 
##Esta seccion se ejecuta justo despues de la declaracion de variables globales del principio
 
pifacedigital=pifacedigitalio.PiFaceDigital() #Se crea un objeto para usar las funciones de PiFace
pifacedigital.relays[0].value=0 #Apagando relay en caso de que este activado al inicio
 
listener=pifacedigitalio.InputEventListener(chip=pifacedigital) #Se crean las interrupciones
 
 
#escuchar interrupcion en el canal 0 cuando caiga el voltaje a Tierra, llamar el proceso primer_digito, 
#e ignorar interrupciones en este canal por 0.4 segundos
listener.register(0,pifacedigitalio.IODIR_FALLING_EDGE,primer_digito, settle_time=0.4)
 
#Las demas interrupciones siguen el mismo modelo
#escuchan un canal, llaman un proceso, e ignoran las interrrupciones en este canal durante 0.4s
listener.register(1,pifacedigitalio.IODIR_FALLING_EDGE,segundo_digito, settle_time=0.4)
listener.register(2,pifacedigitalio.IODIR_FALLING_EDGE,tercer_digito, settle_time=0.4)
listener.register(3,pifacedigitalio.IODIR_FALLING_EDGE,cargar_codigo, settle_time=0.4)
listener.register(5,pifacedigitalio.IODIR_FALLING_EDGE,help, settle_time=0.4)
listener.register(6,pifacedigitalio.IODIR_FALLING_EDGE,wait_help, settle_time=0.4)
 
#active escuchar interrupciones
listener.activate()

Problemas

Entre los problemas encontrados:

• El Raspberry Pi consume más corriente de la que puede proveer un cargador de celular por ejemplo. Cuando se le conectan las interfaces como teclado, mouse, PiFace… el consumo ronda los 750mA. Esto hizo necesario la aplicacion de una fuente de corriente externa más potente para solventar el problema, pues se apagaba y bloqueba debido a la caída de voltaje con otras fuentes.

• Parece que el Raspberry Pi y el PiFace se han diseñado para otros climas no tan humedos, pues note una increible sensibilidad en la deteccion de las entradas de los puertos.

Conclusiones

• Este proyecto sin duda alguna me abrió los ojos respecto a la implementación de Python y la inimaginable cantidad de proyectos y opciones que se podrían plantear. • El Raspberry Pi es muy funcional y poderoso, sobretodo tomando en cuenta su valor monetario. Sin embargo, si es sensible a la manipulación inadecuada.

teaching/ie0117/proyectos/2013/ii/alarma_para_casa_usando_piface_del_raspberry_pi.txt · Last modified: 2022/09/20 00:08 (external edit)