Abe Estrada

Timbre

Soy fan de la Raspberry Pi y siempre estoy buscando proyectos que me entretengan y sean funcionales. Uno de mis proyectos anteriores no era tan funcional por lo que se quedó un poco en el olvido.

Navegando por la red encontré un proyecto que era fácil y útil, un timbre para la casa que puede enviar una alerta a cualquier dispositivo de la casa (teléfonos inteligentes, tablets o computadoras). Así que decidí ir en busca de un timbre inalámbrico que tuviera un led y la fuente de energía fuera de 3v, para no tener que depender de un ‘relay’ y hacer la conexión directa a la RPi. Después de visitar varias tiendas de autoservicio y ferreterías, encontré este timbre:

Lo abrí y verifiqué con un multímetro que la corriente que mandaba al led fuera menor de 3v, que es la permitida para no echar a perder la RPi, luego quité el led y puse dos cables que van directamente a la RPi. Así cada vez que el timbre es activado, en vez de que prenda el led, le va a mandar la señal a la RPi y por medio de software puedo detectar cuando esa señal es recibida.

El código básico para detectar que la señal ha sido enviada es el siguiente:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, sys, time, datetime
import RPi.GPIO as GPIO

def main():
    PIN = 4
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

    while True:
        time.sleep(0.02)
        if (GPIO.input(PIN)):
            now = datetime.datetime.now().time()
            print '%s' % (now)
            time.sleep(5)

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print 'Interrupted'
        GPIO.cleanup()
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)

Explicando rápidamente lo que hace el script anterior es que esta en un ciclo infinito con un retraso de 0.02 segundos para evitar tener el CPU al 100%, luego detecta si hay una entrada en el PIN 4 (el PIN 5 es ‘tierra’), si es así pone la fecha y hora de ese momento y espera 5 segundos que es lo que dura el sonido del timbre.

Creo que existe una forma más óptima de tener un ciclo infinito sin necesidad de utilizar time.sleep(0.02) pero aún no lo he hecho. Por ahora esa es mi implementación.

Yo le agregue que mandara un mensaje con una foto tomada de una cámara ip que tengo instalada en la puerta utilizando Pushbullet creando un canal privado para que solo las personas autorizadas puedan recibir los mensajes. Hasta ahora ha funcionado perfectamente, aunque quisiera encontrar un timbre de mejor calidad.