Tabla de contenido:

Calendario de pared inteligente: 5 pasos
Calendario de pared inteligente: 5 pasos

Video: Calendario de pared inteligente: 5 pasos

Video: Calendario de pared inteligente: 5 pasos
Video: El SECRETO para administrar TU TIEMPO con ÉXITO ⏰️ #briantracy #consejos #reflexion 2024, Mes de julio
Anonim
Calendario de pared inteligente
Calendario de pared inteligente

Mi esposa y yo teníamos un calendario de pared de papel clásico, en el que marcamos fechas importantes. También usamos el calendario de Google en nuestros teléfonos inteligentes para marcar eventos, por lo que esto significó un doble trabajo. Así que decidí construir una especie de calendario de pared inteligente, que mostrará nuestros recordatorios, eventos y algunos otros datos. Como tengo varias partes electrónicas viejas por ahí, mi objetivo era reutilizarlas tantas como fuera posible y construir el calendario con el menor costo posible.

En este tutorial, le mostraré cómo construir un calendario de pared inteligente, mostrando eventos de varias cuentas de Google. También mostrará la hora, la fecha, el clima, la temperatura y alguna información adicional. Será alimentado por una computadora Raspberry Pi con un sensor de movimiento de sensor infrarrojo pasivo (PIR) adjunto, de modo que la pantalla se encienda cuando se detecte movimiento en la habitación, pero se apague después de unos minutos de inactividad. Este tutorial se basa en varios otros tutoriales que encontré en Internet y les daré los enlaces para una mejor comprensión. Se necesitan algunos conocimientos básicos de programación (HTML, Python,…).

Paso 1: el hardware

Como se mencionó anteriormente, traté de reutilizar la mayor cantidad de piezas electrónicas antiguas para mantener bajos los costos. Sin embargo, tuve que comprar algunos artículos, por lo que enumeraré todo lo que sea necesario para la construcción.

- Un kit de Raspberry Pi. Inicialmente usé mi antiguo modelo 2 de algún otro proyecto. Funcionó, pero la edición y recarga de la página web me llevó mucho tiempo, así que finalmente cambié al modelo 3, que funciona con mayor fluidez https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313 & _nkw = frambuesa + pi + kit & _sacat = 0

- Pantalla LCD. Usé la pantalla de mi vieja computadora portátil, así que solo necesitaba comprar la placa de controlador LVDS y la fuente de alimentación https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=hdmi+ controlador + LVDS + placa y _sacat = 0

- Caja de almacenamiento de plástico para la electrónica

- Sensor de movimiento infrarrojo pasivo

- Sensor de temperatura / humedad AM2302

- Carpeta deslizante de plástico negro para marco LCD

- Varios cables (HDMI, 5,5 mm para alimentación de CC, cables de puente de placa de prueba sin soldadura,…)

Paso 2: creación de la pantalla LCD

Creación de la pantalla LCD
Creación de la pantalla LCD
Creación de la pantalla LCD
Creación de la pantalla LCD
Creación de la pantalla LCD
Creación de la pantalla LCD

Usé la pantalla LCD de mi vieja computadora portátil obsoleta. Hay varios tutoriales sobre cómo hacer esto, seguí este:

www.instructables.com/id/How-to-reuse-the-old-LCD-Screen-of-your-broken-Lap/

Desmonté la cubierta de mi vieja computadora portátil, saqué la pantalla LCD y luego pedí la placa de controlador LVDS correcta. Le proporcioné al vendedor el código del producto, que se puede encontrar en la parte posterior de la pantalla LCD, en mi caso es LP171WE3 (TL) (A2); vea la etiqueta inferior derecha en la última imagen, y luego me envió el LVDS correspondiente. Tenga en cuenta que también necesitará la fuente de alimentación para la pantalla, así que pídale al vendedor que se la envíe también. También compré una bonita caja de plástico de 14,5 × 7,5 × 2 cm para encajar bien en la placa del controlador y colocarla en la parte posterior de la pantalla LCD.

Ahora la pantalla LCD tiene un marco metálico, lo que no se ve bonito. Inicialmente lo pinté con aerosol de negro, pero la pintura comenzó a desprenderse. Así que tomé cuatro carpetas deslizantes de plástico negro, que generalmente se usan para encuadernar hojas de papel, las recorté en consecuencia y las coloqué para cubrir el marco. Esto se veía bien, así que conecté todos los cables, conecté HDMI a mi vieja Raspberry Pi y Voila, ¡funcionó! Había una imagen en la pantalla, así que estaba listo para continuar con el siguiente paso: qué información mostrar en la pantalla y cómo mostrarla.

Paso 3: configuración del software

Cuando buscaba en Internet algunas pistas sobre cómo crear un calendario, me inspiré en esta página https://dakboard.com/site. Proporcionan el producto terminado (la pantalla, la computadora y el software de trabajo), pero también tienen un excelente tutorial para la solución de bricolaje (https://blog.dakboard.com/diy-wall-display/). Te recomiendo que sigas este tutorial, al menos en la primera parte con las instrucciones sobre cómo preparar y configurar el sistema en Raspberry, para que el navegador cargue automáticamente la página web deseada al arrancar.

Esto funcionó muy bien, sin embargo, estaba buscando una solución, que podría personalizarse más según mis deseos. Decidí configurar mi propio servidor web y crear una página web, que mostrará información adicional además del calendario. Elegí Wordpress.org porque está bien documentado y cuenta con un buen apoyo y una gran comunidad para ayudarlo. Aquí está el tutorial sobre cómo instalar Wordpress en Raspberry Pi: https://projects.raspberrypi.org/en/projects/lamp-web-server-with-wordpress. Con Wordpress instalado, llegó el momento de diseñar mi página de inicio. Puede utilizar uno de los muchos temas proporcionados o diseñar desde cero. De todos modos, se necesitan algunos conocimientos de programación HTML para ello.

He diseñado mi página, de modo que en el lado izquierdo se muestra el calendario (https://sl.wordpress.org/plugins/google-calendar-events/), mientras que en el lado derecho se muestran la hora y la fecha (https://www.timeanddate.com/clocks/free.html y https://www.arclab.com/en/kb/htmlcss/display-date-time-javascript-php-ssi.html). El pronóstico del tiempo es de esta página (https://www.1a-vreme.si/vremensko-okno/), que proporciona un widget de pronóstico para las ciudades eslovenas, pero supongo que también se pueden encontrar widgets para otros países en Internet. La temperatura se recopila mediante el sensor AM2302 (https://www.ebay.com/sch/i.html?_from=R40&_trksid=m570.l1313&_nkw=AM2302+&_sacat=0), como se explica al final de este capítulo. En la parte inferior hay un simple temporizador de cuenta regresiva diaria, que muestra cuántos días quedan para algún evento (es interesante que mis hijos sepan cuántos días tendrán que esperar por algo). En el borde superior derecho está el complemento MetaSlider (https://wordpress.org/plugins/ml-slider/), que se desliza aleatoriamente a imágenes seleccionadas de mi familia. Además, utilicé el complemento Background Slider (https://sl.wordpress.org/plugins/background-slider-master/) para mostrarme una imagen aleatoria para un fondo más agradable.

Como se mencionó anteriormente, la temperatura interior se recopila mediante el sensor AM2302. Hay muchos tutoriales sobre cómo obtener la temperatura, seguí este: https://www.modmypi.com/blog/am2302-temphumidity-sensor. Más tarde moví este sensor a otra Raspberry Pi con Home Assistant ejecutándose, porque es más fácil leer y publicar valores usando su componente de sensor DHT (https://www.home-assistant.io/components/sensor.dht/). Home Assistant también puede recolectar la temperatura exterior usando varios componentes climáticos, usé el componente YR.no (https://www.home-assistant.io/components/sensor.yr/). Con eso, escribí un script de automatización para recopilar la temperatura interior / exterior de estos componentes y escribirlos en un archivo de texto, que luego se muestra en mi calendario de pared. Para obtener más información sobre Home Assistant, consulte la página de inicio (https://www.home-assistant.io/).

Paso 4: Opcional - Apagado de la pantalla

Ahora tenemos nuestro calendario configurado y funcionando, tal como nos gusta. Pero no queremos que la pantalla esté encendida las 24 horas del día, los 7 días de la semana. Solo queremos que se encienda cuando hay alguien en casa. Además, no queremos que se encienda en medio de la noche, cuando vamos al baño, ¡es demasiado brillante! Por lo tanto, conectaremos un sensor de infrarrojos para notar cuándo hay alguien frente a él y agregaremos algunos límites de tiempo, cuando debería encenderse.

Tenga en cuenta que mis habilidades de programación son bastante limitadas, por lo que lo siguiente no podría ser óptimo, ya que lo elegí de varios foros y tutoriales en línea, pero básicamente funciona. Aún así, cualquier recomendación es bienvenida. Primero, comenzaremos con la prueba para encender / apagar el monitor manualmente. Para eso, crearemos dos archivos (por ejemplo, monitor_on.sh y monitor_off.sh) y escribiremos algún código en ellos. La forma más fácil de hacer esto es iniciar sesión en su Raspberry usando SSH y escribir

sudo nano monitor_on.sh

y escriba el siguiente código

tvservice --preferred;

startx / usr / bin / graphical_launcher `fgconsole`

Presione CTRL + X para guardar y salir, luego cree el segundo archivo

sudo nano monitor_off.sh

y escriba el siguiente código

tvservice --off;

Nuevamente, presione CTRL + X para guardar y salir. Haga que estos archivos recién creados sean ejecutables:

sudo chmod + x monitor_on.sh

sudo chmod + x monitor_off.sh

Ahora para probar si estos comandos funcionan, escriba

sudo./monitor_off.sh

sudo./monitor_on.sh

El monitor ahora debería apagarse y encenderse en consecuencia. He notado que en Raspberry Pi 2, el monitor tardó casi 10 segundos en encenderse. En Raspberry Pi 3, tarda entre 1 y 2 segundos. A continuación, conectaremos un sensor de infrarrojos, que activará estos scripts. Nuevamente, hay muchos tutoriales sobre cómo configurar Raspberry Pi y PIR, seguí este: https://www.instructables.com/id/PIR-Sensor-Interfacing-With-Raspberry-Pi/. Básicamente, cree un archivo con el editor nano (por ejemplo, motion_sensor.py) y escriba el código Python apropiado en él. A continuación se muestra el ejemplo de mi archivo:

importar RPi. GPIO como GPIOimport timeimport sysimport subprocessimport datetime as dtimport osGPIO.setwarnings (False) # GPIO.setmode (GPIO. BOARD) GPIO.setmode (GPIO. BCM) GPIO.setup (17, GPIO. IN) #PIRturned_off = Falselast_motion time.time () SHUTOFF_DELAY = 180 # seconds while True: i = GPIO.input (17) if i == 0: #Cuando la salida del sensor de movimiento es BAJA, apague el monitor si no está apagado y time.time ()> (last_motion_time + SHUTOFF_DELAY): imprime "Sin intrusos", iturned_off = Truetime.sleep (1) subprocess.call (['/ home / pi / monitor_off.sh'], shell = True) elif i == 1: #Cuando la salida del sensor de movimiento es ALTO, encienda el monitor imprima "Intruso detectado", itime.sleep (1) last_motion_time = time.time () sys.stdout.flush () si se apagó y dt.datetime.now (). hour> 5 y dt.datetime. now (). hour <23: turn_off = Falsesubprocess.call (['/ home / pi / monitor_on.sh'], shell = True) if _name_ == '_main _': try: main () excepto KeyboardInterrupt: GPIO.cleanup ()

Tenga en cuenta que "GPIO.setup (17, GPIO. IN)" indica que el pin de salida del PIR está conectado al pin 17 en Raspberry Pi. El pin depende de si define GPIO.setmode (GPIO. BOARD) o GPIO.setmode (GPIO. BCM). La diferencia se explica aquí: https://raspberrypi.stackexchange.com/questions/12966/what-is-the-difference-between-board-and-bcm-for-gpio-pin-numbering. Tengo # delante de GPIO. BOARD, por lo que se ignora y se usa GPIO. BCM.

Fíjate en la línea

SHUTOFF_DELAY = 180 # segundos

Aquí se indica cuánto tiempo ha estado encendido el monitor desde que se detectó el último movimiento, antes de que se apague. Esto es útil porque no quiero que el monitor se apague / encienda constantemente cuando paso junto a él, pero quiero mantenerlo encendido durante algún tiempo, antes de que se apague. Elegí el intervalo de 180 segundos, de modo que el monitor se apaga unos 3 minutos después de que se detecta el último movimiento.

Finalmente, esta línea

if turn_off y dt.datetime.now (). hour> 6 y dt.datetime.now (). hour <23:

indica que el monitor solo se enciende entre las 6:00 y las 23:00, por lo que no me molesta durante la noche. Las líneas

imprimir "No intrusos", i

y

imprimir "Intruso detectado", i

son solo para probar la secuencia de comandos, puede eliminarlos más tarde, cuando lo tenga funcionando. Ahora prueba el script:

sudo python motion_sensor.py

Debería ver los mensajes "Intruso detectado", si mueve la mano por encima del sensor, de lo contrario, será "No intrusos". Cuando este script esté probado y esté funcionando, configúrelo para que se inicie en el arranque:

sudo nano ~ /.config / lxsession / LXDE-pi / autostart

y agregue la siguiente línea

@sudo / usr / bin / python /home/pi/motion_sensor.py

Por supuesto, debe especificar el nombre de archivo correcto del script de Python que creó.

Paso 5: cuelga el calendario

Con todo listo, es hora de colgar el calendario en la pared.

Inicialmente, estaba pensando en ocultar la Raspberry Pi detrás de la pantalla LCD, para que solo se necesitara un cable (alimentación de CC). Pero como Raspberry funciona con 5V y la pantalla LCD funciona con 12V, necesitaría un transformador adicional. Además, la carcasa de la Raspberry es bastante gruesa, lo que significa que la pantalla LCD estaría a unos 3 centímetros de la pared. Así que abandoné esto y solo dejé los componentes electrónicos LCD detrás de la pantalla LCD, por lo que ahora está a menos de 1 centímetro de la pared. Adquirí dos cables de 5 metros de largo, uno HDMI y otro de 5,5 mm para alimentación de CC. Ambos cables son blancos, como la pared, lo que significa que no destacan mucho. Instalé la pantalla LCD en la pared y coloqué la frambuesa en la parte superior del refrigerador en la pared opuesta, por lo que básicamente está oculta, pero aún así es de fácil acceso.

Recomendado: