User avatar
actkk2000
Posts: 1309
Joined: Wed Apr 02, 2014 3:22 am

Portarretrato +Supercapacitor +Reloj/Temp +Sensor Movimiento

Thu Jul 23, 2015 6:37 pm

Hola gente,

Este seria el segundo (gran?) proyecto en que trabajo con Raspberry Pi B (RPI), luego de este que estuvo en funcionamiento durante un par de años y que le fui agregando todo tipo de cosas:
http://www.raspberrypi.org/forums/viewt ... 76&t=73731
Ahora surgio otra necesidad y de paso se abrieron nuevas posibilidades...

Advierto que el articulo es largo y hablo de cosas y proyectos que hago referencia en otros posts, incluso de otros foros y a veces tambien en ingles, pero es para detallar un poco mas la experiencia, ya que involucra varios temas que me interesan y quiero dejar registro de todo. Tambien lo voy a ir actualizando en partes para poder separar los temas involucrados.
Por otro lado el proyecto se podria realizar de cualquier otra forma o directamente no hacerlo, ya que seguro se pude considerar que no es una de las mejores aplicaciones para RPI.
Igual gracias por leer y perdon si cansa un poco (o mucho) ...


Saltar a "Actualizacion con Supercapacitores y Conversor Step-down": viewtopic.php?p=793325#p793325
Saltar a "Actualizacion con Reloj digital y Sensor de Temperatura": viewtopic.php?p=793720#p793720
Saltar a "Actualizacion con Sensor de Movimiento y Reloj Ascii": viewtopic.php?p=793826#p793826


Introduccion

El año pasado a mi madre se le rompio un portarretrato digital (PRD) como este:
http://www.p4c.philips.com/cgi-bin/dcbi ... SPF1237/12
Primero dejo de funcionar la fuente (un cargador de 5V de 650mA) asi que le puse uno mas grande que tenia.
Al tiempo volvio a fallar pero esta vez no era el cargador, probe con otro pero el PRD ya no arrancó mas.
Lo abri pero por dentro solo tiene 2 placas, una base y una mas pequeña para controlar la botonera.
Como es un sistema propietario supuse que la unica manera seria cambiar la placa base, que seguro el repuesto podria costar lo mismo que un PRD nuevo, si es que lo conseguia...

Resulta que el cargador que le habia puesto es de una placa Cubietruck (CT) que use para otro proyecto, pero que al momento de romperse el del PRD, tambien la CT estaba sin funcionar, por lo que estaba en desuso.
CT es un producto de otro fabricante pero que es mas potente que RPI, puede correr Android y soporta discos SATA, aunque tambien es mas caro:
http://cubieboard.org/model/cb3/
http://cubieboard.org/tag/cubietruck/
http://cubieboard.org/2013/06/22/the-2n ... iscussion/

Por desgracia una mala manipulacion de mi parte para insertarlo en el case (http://cubieboard.org/2014/02/27/ewell- ... ar-behind/), ya que tuve que presionar bastante para que entrara, sumado a posiblemente una falla en alguna soldadura provoco que la CT empezara a tener fallas, como no arrancar o quedarse colgada, hasta que dejo de funcionar definitivamente. Asi que el cargador de 5V 2A quedo al vicio por un tiempo...

Luego de un par de meses como pisapapeles, decidi probar de vuelta traerla a la vida, hasta que por suerte lo logre presionando la placa en sentido contrario al que use para meterla en el gabinete, confirmando un problema de soldadura, posiblemente de la memoria que era lo que daba error al querer reinicializarla.
Una vez funcionando de vuelta decidi darle uso como reemplazo del PRD roto, utilizando precisamente Android, XBMC, el monitor TFT que ya no usaba de la Raspberry y un adaptador de VGA a video compuesto RCA.
Todo estaria documentado en estos posts del foro de cubieboard junto con otras cosas (pero en ingles) por si a alguien le interesa:
http://www.cubieforums.com/index.php/topic,3147.0.html
http://www.cubieforums.com/index.php/topic,3150.0.html
http://www.cubieforums.com/index.php/topic,3163.0.html
http://www.cubieforums.com/index.php/topic,3164.0.html

La historia hubiera terminado aqui de no ser por dos motivos:
1- El adaptador VGA a RCA empezo a fallar a los meses, mostrando la pantalla distorsionada como si tuviera una interferencia y que no pude arreglar de ninguna manera. Y cambiarlo por algo mejor como un adaptador HDMI a RCA me iba a costar lo mismo que una RPI nueva...
2- Tenia ganas de probar Raspberry Pi 2 (RPI2), por lo que en principio iba a cambiar la RPI y reemplazarla, liberando precisamente una placa con salida nativa de video compuesto con RCA. Y como dije en mi pais me costaba lo mismo que un adaptador de video...

De paso a la placa CT le daria mejor uso como Android TV poniendola en una pantalla TV led de 24" pero que no es Smart, de forma tal que se pudiera usar con Netflix, Spotify, Youtube, Chrome y demas cosas de Google play:
http://www.cubieforums.com/index.php/topic,3821.0.html

Construccion:

Volviendo al PRD, lo logico era usar nuevamente XBMC pero como aqui no tenia Android, supuse lo mejor usar Raspbmc que ya lo conocia y es muy estable, ya que el proyecto se movio a OSMC y es la ultima version por lo que no es necesario actualizarla:
http://www.raspbmc.com/index.html

Basicamente era seguir de nuevo estos pasos sin tener en cuenta el monitor HDMI:
http://www.instructables.com/id/How-to- ... igita/all/
y salteando a la ultima pagina donde esta esto referido a screensaver:
http://kodi.wiki/view/Add-on:Picture_Sl ... creensaver

Otro tema era ver de usar todos componentes que ya tuviera de antes, sin tener que comprar en lo posible nada, ya sea reciclando o hurgando en los cajones...
Lo primero entonces era volver a lo basico, sacar la RPI del rack donde estaba y ponerla en una caja. En una de tantas compras a China me habia quedado una cajita acrilica sin armar, asi que la ensamblé, y por el momento deje pegado el sensor de temperatura, hasta ver que hacer con eso (click en las fotos para agrandar)(ver Post1 - "Actualización con medidor de temperatura:"):

ImageImageImage

Luego estaba el tema de alimentar la RPI y el monitor TFT que es de 12V. Lo ideal seria usar una sola fuente y para eso lo mejor era esta placa conversora de 12V a 5V USB que tenia puesta CT junto con su propia fuente de 12V 1.2A y que ya no era necesaria para el Android TV:
http://cubieboard.org/2013/09/24/how-to ... ubieboard/
En ese caso puse la parte de arriba que ya no usaba del case original que compre para la RPI, porque en el rack solo usaba la base (ver Post1 - "fotos del montaje"):

ImageImageImage

Los pulsadores los tenia guardados y pensaba usarlos uno (rojo) para reset y el otro (negro) para apagado. La ficha USB me sobro de un cable que use para armar el switch USB (ver Post1 - "Actualización con Lapdock:")
La idea de los pulsadores surgio para no tener que usar un teclado en la operacion normal para encender y apagar el PRD, ya que un boton de reset sirve tambien para encender la RPI y con otro boton se podria enviar una señal a uno de los pines para apagarla. Todo siguiendo los pasos este articulo:
http://www.raspberry-pi-geek.com/Archiv ... spberry-Pi

Tambien pense mejor dejarle puesta la tapa del case para mantener separado el circuito de alimentacion de la RPI:

ImageImageImage

Un problema que habia tenido con el anterior diseño es que los cables del monitor quedaban sueltos y desprolijos, por lo que se me ocurrio meterlos en otro case que tenia para que quedaran guardados. El "case" en este caso es de otro SOC que tengo llamado Banana Pi (BPI) que adquiri para, en su momento, reemplazar la CT rota:
http://www.lemaker.org/article-42-1.html
Lo que buscaba en ese proyecto era usar algo mejor que RPI pero que fuera lo mas compatible posible, y en realidad CT no lo era. BPI en cambio fue pensada como una copia mejorada de RPI con el mismo hardware de CT (o casi).
Hay logs de ese proyecto (aunque tambien en ingles) aqui:
http://www.lemaker.org/forum.php?mod=vi ... omuid=1602
http://www.bananapi.org/2014/11/sharing ... na-pi.html

Ahora era cuestion de enroscar un poco los cables de alimentacion y señal de video y ponerlos dentro del case BPI y luego empezar a montarlo como base de lo que seria una pequeña torre de gabinites acrilicos (que parece ser el diseño que mejor me va, construir apilando):

ImageImage

Faltaria entonces atornillar la tapa a la base del case de RPI para que no se mueva:

ImageImageImage

Y luego hacer la conexion de video hacia la RPI y cerrar la tapa con el encastre:

ImageImageImage

Luego poner los botones y soldar los cables que irian hacia la RPI, y finalmente conectarlos al puerto GPIO:

ImageImageImage

Por ultimo poner el gabinete con la alimentacion en la parte superior y conectar la alimentacion. Esta vez se unio con cinta adhesiva transparente (scotch), para mantener el efecto "acrilico":

ImageImage
ImageImage

Asi quedaba listo el ensamblaje.
Respecto del software, ademas de Raspbmc iba a ser necesario agregar un par de scripts que sirvieran tanto para apagar el dispositivo con el boton de apagado cuando sea necesario, como asi tambien un script que apagara automaticamente el PRD a una hora determinada, por ejemplo a la noche antes de dormir.
Ya para el encendido automatico, no seria posible hacerlo desde la misma RPI pero quiza con esto (no lo probé):
viewtopic.php?p=222137#p222137

Un inconveniente que tuve con Raspbmc, y estimo que por tener interface XBMC, es que casi nunca me dejaba apagar con un simple comando "shutdown" como si podia con Raspbian.
Cualquiera fuera el modo, "shutdown" o "halt", incluso con "reboot", la mayoria de las veces se quedaba colgado sin completar.
La unica manera de hacerlo fue con el parametro "-f" para forzar el reinicio o apagado, pero mucho no me convencia "forzar" las cosas, aunque no quedaba otra...
Tambien tuve que instalar la libreria RPI.GPIO de Python:
viewtopic.php?f=32&t=22026

El metodo que mejor resulto de los scripts fue el "while Loop" de aqui:
http://www.raspberry-pi-geek.com/Archiv ... (offset)/4
Salvo que cambie por el pin 16 y el comando:

Code: Select all

os.system("sudo halt -f -p")
Respecto del apagado automatico, con cronjob seria posible hacerlo:

Code: Select all

crontab -e
y agregar al final la linea, por ejemplo para apagar a la medianoche:

Code: Select all

0 0 * * * /sbin/halt -f -p
Mas (mucho) acerca de cronjob aqui:
viewtopic.php?f=66&t=59520
Por supuesto que todo seria posible siempre y cuando la RPI tenga conexion a Internet para tomar la hora.

Otro inconveniente es que cuando se apaga la RPI, el TFT no se apaga solo y al no recibir señal muestra un cartel bastante brillante en fondo azul que dice "No signal". Asi que hay que apagarlo manualmente. Eso no pasaba cuando estaba conectado a CT porque de esa placa tomaba los 12V de alimentacion desde un conector que tiene para discos SATA de 3.5", por lo que conviene apagar el monitor antes total a la hora predeterminada la RPI se apaga por si misma.

Solo faltaba configurar el addon "Picture Slideshow Screensaver" para que se active al minimo tiempo, es decir 1 minuto de inactividad y el periodo de rotacion de las fotos y ya estaba todo listo:
http://forum.kodi.tv/showthread.php?tid=154032

Y por fin el test de funcionamiento!: :)

ImageImage

En definitiva, el listado de materiales hasta aca (por suerte ya los tenia todos de antemano):
1- Raspberry Pi B (podria ser cualquier modelo, incluso el A, pero para tener Internet mejor con conexion a red)
2- Memoria SD de al menos 4GB (mejor si es de mas capacidad para poder guardar mas fotos)
3- Gabinetes acrilicos (3) (tambien puede ser cualquier cajita o gabinete a eleccion)
4- Tornillos a rosca (6) (4 para la base y 2 para la tapa de cajita BPI)
5- Pulsadores circuito abierto (2) (los mas pequeños posibles)
6- Resistencias de 1K(1) y 10K(1) ohm y un par de pines para plaquetas (o sino se podria soldar el cable de reset directamente)
7- Monitor 7" TFT (tambien puede ser HDMI o LVDS)
8- Cables de colores, preferentemente tipo dupont (Hembra/Hembra para conectar o Macho/Hembra para soldar)
9- Fuente de alimentacion 12V 1.2 A (si es mas amperaje mejor)
10- Addon Cubietruck conversor 12V a 5V (tambien puede ser cualquier regulador o conversor step-down)
11- Ficha USB para extraer 5V de alimentacion (conectar el otro extremo a pines 2 y 6 de RPI)
12- Teclado para hacer la configuracion (luego ya no es necesario para el funcionamiento)
13- Cable de red para conexion a Internet (tambien se podria utilizar un dongle Wifi)
14- Precintos de plastico para ajustar cables (bridas)
15- Un circulo de goma (eva?) que viene en los bulks de DVDs para ajustar el cable de video
16- Soldador para electronica, estaño y espagueti termocontraible (para aislar soldaduras)

Nota: La fuente podria ser solo de 5V y se podria quitar el addon si el monitor fuera cualquier otro.

Slds!
Last edited by actkk2000 on Sat Jul 25, 2015 12:21 am, edited 12 times in total.
Robot +Camara +Sensores +Encoder +Servo +Matriz8x8 +Joystick:
https://www.raspberrypi.org/forums/viewtopic.php?f=76&t=130470

User avatar
actkk2000
Posts: 1309
Joined: Wed Apr 02, 2014 3:22 am

Re: Portarretrato +Supercapacitor +Reloj/Temp +Sensor Movimi

Thu Jul 23, 2015 10:30 pm

Actualizacion con Supercapacitores y Conversor Step-down:

Hasta aqui ya habia cumplido con los objetivos de, por un lado reemplazar el PRD que no funcionaba y por otro utilizar materiales que tenia sin usar o que se pudieran reutilizar, por lo que en principio no tuve que gastar nada para armarlo.
Pero en el proceso encontre algo que tenia guardado que quedo pendiente de otro proyecto, un par de Supercapacitores (SC) para armar un modesto sistema de backup para cortes de energia: https://www.openhacks.com/page/producto ... -4.7F-2.7V

La idea surgio anteriormente al utilizar CT con el lapdock y alimentarla directamente desde alli con el puerto USB, sin usar una fuente externa. La razon era que al momento de cerrar la tapa se producia un corte de energia momentaneo que se restablecia inmediatamente al terminar de apoyar la tapa, provocando que el dispositivo se apagara y volviera a iniciar. Lo mismo pasaba al volver a abrir la tapa.

Habia leido acerca de mini UPS para RPI asi como tambien sistemas caseros para lapdock. Asi que era cuestion de probarlo por mi mismo (aunque fuera en forma mas improvisada):
https://www.indiegogo.com/projects/juic ... -pi#/story
http://juice4halt.com/
http://hackaday.com/2014/04/03/raspberr ... apacitors/
http://www.element14.com/community/comm ... ock-tricks

Aclaro que no se trataba de mantener la energia para que el PRD siga funcionando, o sea no necesitaba baterias, sino dar el tiempo justo y necesario para apagarlo de forma correcta ante un corte. Tampoco habia sido la idea con CT, solo mantenerla un segundo mientras se cerraba o abria la tapa, pero aqui queria ir mas lejos.
Como en ese momento la CT paso al proyecto de PRD, no la utilice mas con el lapdock y los SC quedaron guardados.

Primero conecte directamente los SC y ver si eran capaces de mantener la energia tiempo suficiente antes de apagarse la RPI por falta de voltaje. Como son capacitores de 2.7V, son necesarios 2 conectados en serie para que soporten los 5V de la fuente entre los 2 (en teoria aguantarian en total 5.4V), o sea unir el contacto positivo de 1 con el negativo del otro, y conectarlos a los 5v, por ejemplo pines 4 y 14 de RPI.

El mejor lugar para acomodarlos era por supuesto el case de BPI que aun tenia un poco de lugar sin utilizar (click en las fotos para ampliar):

ImageImage
ImageImage

Finalmente encender el conjunto y cargarlos un rato largo, para luego desconectar la fuente de alimentacion y ver si la energia se mantenía:

ImageImage
ImageImage

Por suerte lograba sostenerse por unos 10 segundos, seria suficiente para enviar un apagado por script si encontraba una forma de detectar inmediatamente la falta de energia electrica.
Primero hice el intento con esto en forma casera:
http://www.hackerspace-ffm.de/wiki/inde ... i_EDLC_UPS
Pero no me resultó, quiza porque no segui el esquema al pie de la letra...

Para empezar los SC que tenia eran de menor capacidad. Ademas utilice unos diodos que tenia pero eran de 1A y no 3A como pedia y tampoco tenia las resistencias de potencia, le puse unas comunes.
Lo que paso es que los diodos y resistencias conectadas para evitar retroalimentacion se calentaban mucho (estaba advertido en las instrucciones del esquema) lo que sumado a que los SC eran menores, la energia almacenada se consumia mas rapido y al final no daba tiempo para detectar la caida de voltaje.

Probe desconectar esa parte y dejar al menos las resistencias de 100 ohm que decia eran para balancear la carga y evitar un mayor desgaste de los SC. Tampoco funcionaron bien, seguian descargandose mas rapido de lo que lo hacian anteriormente.
En definitiva nada de eso funciono y lo termine descartando, por lo que necesitaba otra forma de deteccion de falta de alimentacion.

Alli me acorde que habia descubierto gracias a otro post de este foro (viewtopic.php?p=627760#p627760) que actualmente existen cosas mejores y mas optimizadas que un regulador de voltaje, como es un conversor o fuente de alimentacion switch step-down (FSD) y tambien me interesaba probarlo.
En este caso si tuve que comprarlo en mi proveedor local, ya que no lo habia hecho antes: https://www.openhacks.com/page/producto ... bE9YvlVhHw

Entonces una primera solucion seria regular esta pequeña FSD a 3.3V y conectarla a uno de los pines GPIO para detectar cualquier variacion en la entrada, lo que supondria que es un corte de energia y se enviaria un apagado inmediato.
Pero esto supondria probablemente al estar tambien conectada a la fuente principal una retroalimentacion que la mantendria funcionando, lo que significaria un engaño y no detectaria a tiempo la caida de voltaje.

Por desgracia eso fue exactamente lo que paso, por lo que este metodo tampoco servia, al menos de esta manera.
Un lastima porque iba a conectar la FSD a un par de pines extra que traian 12V y que quedaron del montaje anterior con CT, pero que aqui ya no tendrian uso...

Aqui unas fotos de la FSD, pruebas y pines:

ImageImage
ImageImage

La ultima alternativa entonces seria agregar una fuente extra. En este punto parecera un desproposito y que seria mejor comprar alguna de esas mini UPS para RPI, pero ademas que localmente no las conseguia, ya tenia los SC y FSD, que deberia descartar por otra cosa, o mejor aun no seguir intentando porque por un PRD no valia la pena tanto esfuerzo...

Pero por suerte tenia guardada una vieja fuente de 12V 300 mA, y dado que su unica funcion seria alimentar el FSD para entregar 3.3V en un pin GPIO, no tendria realmente que soportar ninguna carga. Tambien le conecte un led rojo que tenia, para indicar que los 3.3V estaban funcionando. De paso cambie el boton de apagado porque el que tenia era de menor calidad y se rompio, por lo que ahora el "rojo y blanco" seria encendido y el "rojo y negro" apagado:

ImageImage

Asi que ahora solo faltaba el software. En este caso supuse que lo mejor seria utilizar el otro script que proponian aqui para apagado de RPI, ya que es mas sensible a los cambios de estado (Ver "Listing 1 Interrupt Method:")
http://www.raspberry-pi-geek.com/Archiv ... (offset)/4

Nuevamente cambie de pin esta vez por el 17 y el comando tambien el mismo de antes:

Code: Select all

os.system("halt -f -p")
Al momento de probarlo funciono de maravillas, pero luego durante las pruebas descubri sin querer que era demasiado sensible a los cambios, de forma tal que al encender una lampara conectada en las cercanias, el PRD se apagaba.
Asi que recurri de nuevo al mismo script de antes con "While Loop", y resulto ser igual de efectivo y no apagar el PRD por cualquier motivo.

Ya solo faltaba entonces colocarlo en el lugar donde iba a quedar definitivamente y ocupando el mismo lugar del anterior PRD, es decir detras de una computadora para que no se vea y dejando solo visible en un estante cercano el TFT para mostrar las fotos:

ImageImage
ImageImage

Digamos que no me quise rendir, pero tampoco significa que SC y FSD sean componentes obligatorios del PRD, se pueden obviar totalmente pero a mi me sirvieron para aprender algo. Igual quedo todo bonito y funcional...

Para esta parte se agregaron entonces estos materiales (compré items 2 y 4):
1- Supercapacitores 4.7F / 2.7V (2) (si fueran de mayor capacidad mucho mejor)
2- Fuente switching conversor step down regulable de 3A (podria ser de menor amperaje)
3- Fuente de alimentacion de 12V (podria ser de menor voltaje, con 5V deberia funcionar)
4- Pulsador circuito abierto (reemplazo del que se rompio por inferior calidad)
5- Led rojo de 3mm y resistencia de 220 ohm para conectarlo (puede ser de cualquier color y tamaño)
6- Pines para conectar en el conversor step down (4) (la placa viene solo con perforaciones)
7- Tester o multimetro digital para medir voltaje y regular 3.3V (tambien podria ser solo voltimetro)

Nota: el conversor step down y la fuente podrian quitarse y dejar solamente los supercapacitores para mantener energia en caso de microcortes o variaciones de electricidad (brownout).

Slds!
Last edited by actkk2000 on Sat Jul 25, 2015 12:13 am, edited 3 times in total.
Robot +Camara +Sensores +Encoder +Servo +Matriz8x8 +Joystick:
https://www.raspberrypi.org/forums/viewtopic.php?f=76&t=130470

User avatar
actkk2000
Posts: 1309
Joined: Wed Apr 02, 2014 3:22 am

Re: Portarretrato +Supercapacitor +Reloj/Temp +Sensor Movimi

Fri Jul 24, 2015 6:25 pm

Actualizacion con Reloj digital y Sensor de Temperatura:

Para los que hayan seguido mis proyectos de RPI, BPI y CT, encontraran que todos tienen un elemento en comun, que está en cada uno de ellos y que sin embargo no parece tener tanta relacion pero que aparece reiteradamente...
Ese elemento en comun es un Relog Digital (RD) :P, construido o al menos diseñado en lo posible en el formato de Display de 7 Segmentos (D7S):

ImageImageImage

Asi que este proyecto de PRD no podia ser menos y tambien tener un D7S presente en un RD...
Primero se me ocurrio poner el display Clockatoo del anterior montaje de RPI, pero midiendolo pense que en este caso iba a quedar un poco grande. Aunque en realidad aun no sabia donde ponerlo, porque si lo ponia en la parte superior no se iba a ver. Ademas tampoco tenia ganas de desmontarlo porque si ponia una RPI2 en su lugar iba a faltar el D7S.

Al buscar en los cajones las cosas que tenia guardadas sin uso encontre 2 display que podrian servir:
1- https://www.openhacks.com/page/producto ... %28Rojo%29
2- https://www.openhacks.com/page/producto ... -Segmentos

El primero tenia el inconveniente de ser del mismo tamaño que el de Clockatoo, ademas de no contar con ningun tipo de circuito de manejo.
Al conectarlo iba a necesitar varias resistencias e iba a consumir mas energia, y tenia que descifrar el pinout.
El segundo en cambio era mas pequeño y esteticamente iba a quedar mejor, asi como tambien ya tenia montado un circuito transistorizado para manejarlo, por lo que no iban a ser necesarias resistencias al conectarlo, y el pinout estaba serigrafiado y bien claro.

Asi que me decidi por el segundo aun sin estar seguro de donde ponerlo.
Pero esta vez no tenia la facilidad de conexiones como fue en los casos anteriores que estaban por I2C. Esta vez debia usar un pin GPIO por cada pin del display, 12 en total, es decir 7 para los segmentos, 1 para el punto y 4 para los digitos. Quiza me salvaria de las resistencias, pero no de los cables.

Encontre varios articulos que hacen referencia a manejar displays de 7 segmentos en forma multiplexada como es en este caso, es decir dirigiendo los datos a cada digito segun sea necesario:
https://projects.drogon.net/7-segment-l ... pberry-pi/
http://www.instructables.com/id/Control ... ith-a-Ras/
http://rpi.science.uoit.ca/lab/ssdispay/
http://learn.pimoroni.com/tutorial/170p ... it-display
viewtopic.php?f=37&t=113904
http://rpiplus.blogspot.com.ar/2013/06/ ... 4-bit.html

Incluso este era especificamente de mi display, aunque lleva tambien al codigo de Gordon del primer enlace:
viewtopic.php?f=45&t=97384
Pero probe todos, ya sea con WiringPi o Python y en ningun caso funcionaba bien, o no mostraba nada o mostraba caracteres erroneos, a tal punto que estaba por darme por vencido cuando por suerte encontre este producto:
http://www.pimuxclock.co.uk/Home/

No es que lo fuera a comprar, sino que se parecia mucho a lo que tenia y el codigo del programa era en Python, bastante versatil y permitia adaptarlo facilmente. Probe primero con http://www.pimuxclock.co.uk/basicclock_2_r1.py
Al principio tambien fallaba, tenia el mismo comportamiento erratico e inesperado de las otras pruebas, asi que lo fui probando por partes para tratar de dar con el problema, hasta que finalmente di con la respuesta.

El problema era que el display se controlaba a la inversa de otros D7S de anodo comun, o sea positivo comun.
Este display en vez de activar los digitos con 1 o sea positivo, lo hacia con 0, es decir con negativo.
Asi que en realidad tenia que invertir en el codigo las llamadas a los pines de digitos de forma que estuvieran en 1 al iniciar y cambiarlas a 0 para activarlos.

Tambien tuve que cambiar los pines ya que estaba diseñado para RPI2 de 40 pines y yo solo tenia 26, por lo que debia ajustarlo a los que estaban disponibles (usa formato BCM):

Code: Select all

#segments

segA = 25
segB = 24
segC = 23
segD = 18
segE = 17
segF = 27
segG = 22
segDP = 10

#Characters   [ left to right view display from front ] 

char1 = 7
char2 = 8
char3 = 9
char4 = 11
Y reescribir todo el mapa de caracteres dejando por defecto en 1 los segmentos que no se usaban para dibujar los numeros:

Code: Select all

        if char == '0':
                GPIO.output([segG,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segB,segC,segD,segE,segF,segDP,dispt],GPIO.LOW)
        elif char == '1':
                GPIO.output([segA,segD,segE,segF,segG,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segB,segC,dispt],GPIO.LOW)
        elif char == '2':
                GPIO.output([segF,segC,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segB,segD,segE,segG,segDP,dispt],GPIO.LOW)
        elif char == '3':
                GPIO.output([segE,segF,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segB,segC,segD,segG,segDP,dispt],GPIO.LOW)
        elif char == '4':
                GPIO.output([segA,segD,segE,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segB,segC,segF,segG,segDP,dispt],GPIO.LOW)
        elif char == '5':
                GPIO.output([segB,segE,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segC,segD,segF,segG,segDP,dispt],GPIO.LOW)
        elif char == '6':
                GPIO.output([segB,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segC,segD,segE,segF,segG,segDP,dispt],GPIO.LOW)
        elif char == '7':
                GPIO.output([segD,segE,segF,segG,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segB,segC,segDP,dispt],GPIO.LOW)
        elif char == '8':
                GPIO.output([char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segB,segC,segD,segE,segF,segG,segDP,dispt],GPIO.LOW)
        elif char == '9':
                GPIO.output([segE,char1,char2,char3,char4],GPIO.HIGH)
                GPIO.output([segA,segB,segC,segD,segF,segG,segDP,dispt],GPIO.LOW)
        else:
                GPIO.output([segA,segB,segC,segD,segE,segF,segG,dispt,char1,char2,char3,char4],GPIO.LOW)
Aqui un par de capturas del D7S, conexiones y de cuando por fin funciono:

ImageImage
ImageImage

Al investigar un poco mas, vi que el siguiente script habilitaba la posibilidad de utilizar un sensor de temperatura DS18B20 alternando de tanto en tanto la informacion en el display :
http://www.pimuxclock.co.uk/enhancedclock_2_r1.py
Inmediatamente me acorde que tenia uno de esos sensores aun unido a la RPI, asi que procedi a despegarlo y conectarlo al puerto GPIO con 3 cables dupont hembra/hembra y una resistencia de 4.7K ohm, para luego configurarlo para hacerlo funcionar con este tutorial:
https://learn.adafruit.com/adafruits-ra ... re-sensing
En este caso cambie en el programa de Pi-Mux el pin de conexion 1-wire por el 4 BCM:

Code: Select all

tempkey = 4
Para ese entonces ya tenia en claro donde colocar el D7S en el PRD. Se me ocurrio ponerlo junto con la computadora (AIO) en la parte frontal, ayudando a sostenerlo usando el cable de conexion y una de las patas de la AIO.
Pero como los cables dupont hembra/hembra que tenia no eran lo suficientemente largos, tuve que hacer una prolongacion usando unos de tipo macho/hembra y sellando la union con un poco de cinta aisladora negra:

ImageImage

A mi entender una vez colocado en el lugar quedo muy bonito y discreto, no es tan grande como para distraer demasiado la atencion pero si lo suficientemente atractivo al informar la hora y temperatura ambiente del lugar:

ImageImage

Por supuesto que para que este reloj funcione correctamente es necesario tener bien la hora en la RPI, y en este caso se hace tomando la hora desde Internet.

Materiales que se agregaron para la construccion de esta parte (por suerte ya tenia todos los elementos):
1- Display de 4 digitos y 7 segmentos anodo comun (podria ser catodo comun pero habria que modificar el programa)
2- Sensor digital de temperatura DS18B20 (no usar sensor analogico)
3- Resistencia de 4.7K ohm para conectar DS18B20 (soldar entre pin de datos y alimentacion)
4- Cinta aisladora negra para sellar la union de cables dupont (puede ser cualquier cinta)

Nota: si se utiliza otro display de 7 segmentos que no tenga circuito de manejo incorporado, agregar a la lista de materiales 8 resistencias de entre 220 y 470 ohm (o mas), dependiendo del brillo que se quiera obtener. Tambien se podria utilizar el programa original de Pi-Mux sin necesidad de alterar el mapa de caracteres.

Slds!
Last edited by actkk2000 on Sat Jul 25, 2015 12:14 am, edited 2 times in total.
Robot +Camara +Sensores +Encoder +Servo +Matriz8x8 +Joystick:
https://www.raspberrypi.org/forums/viewtopic.php?f=76&t=130470

User avatar
actkk2000
Posts: 1309
Joined: Wed Apr 02, 2014 3:22 am

Re: Portarretrato +Supercapacitor +Reloj/Temp +Sensor Movimi

Sat Jul 25, 2015 12:09 am

Actualizacion con Sensor de Movimiento y Reloj Ascii:

Cuando parecia que todo estaba resuelto, vi que aun quedaban sin utilizar 2 pines del puerto GPIO de la RPI.
Y ya que estaba casi todo lleno pense entonces en terminar de utilizarlos todos de buena una vez...
Por un momento dude en utilizarlos porque se trataba de los pines I2C que ya tienen incorporados resistencias pull-up de 1.8K ohm, y supuse que podian alterar el funcionamiento de cualquier cosa que quisiera conectar que no fuera con interface I2C.

No obstante resulta que eso no iba a ser inconveniente si cambiaba de posicion un pin del D7S ya que al estar transistorizado no iba a sufrir ninguna perdida, asi que reacomode un par de pines destinados a segmentos, quedando así liberados los pines BCM 27 y 2:

Code: Select all

#segments

segA = 25
segB = 24
segC = 23
segD = 18
segE = 3
segF = 17
segG = 22
segDP = 10
Entonces el pin 27 podria utilizarlo para conectar algo que tambien tenia pendiente y que me interesaba experimentar, que en este caso es un Sensor Infrarrojo de Movimiento (PIR).
Esto venia a colacion ya que lo habia visto anteriormente en otros posts y articulos, como por ejemplo estos:
viewtopic.php?f=76&t=108115&p=752929&hilit=pir#p752929
http://www.aoakley.com/articles/2014-09 ... sensor.php

Pero uno en especial me llamo la atencion ya que se aplicaba especificamente a un PRD:
http://www.ofbrooklyn.com/2014/01/2/bui ... -detector/
De esta manera iba a tener una forma de apagar la pantalla cuando no hubiera nadie presente en la habitacion para ver las fotos.

Como tampoco habia comprado un PIR anteriormente tuve que proceder a conseguirlo:
https://www.openhacks.com/page/productos/id/891
Conecte el PIR con un led de prueba, salte directamente a la parte del programa pir.py de la pagina del PRD "viviente" y lo modifique para los pines que disponia:

Code: Select all

PIR_PIN = 27       # 13 on the board
LED_PIN = 2
Al probarlo vi que funcionaba bien la deteccion de movimiento dibujando una serie de puntos en la pantalla y deteniendose cuando no detectaba movimiento, incluso se podia regular la sensibilidad y duracion de la señal enviada por el dispositivo con los pequeños potenciometros.

Respecto del led, como lo conecte a un pin con una impedancia incorporada no necesitaba agregarle otra resistencia, aunque siempre quedaba con una pequeña tension que alcanza para iluminarlo un poco, y cuando el programa lo activaba se iluminaba mas fuerte. Decidi dejarlo de esa manera para tener siempre un indicador visual del PIR, aunque fuera solo un agregado estetico.

El problema surgio a la hora de querer utilizar la parte del apagado del monitor por inactividad en el area.
Al querer usar el comando "tvservice" como explica en el articulo, me doy cuenta que si desconectaba la pantalla quedaba con el molesto cartel azul brillante de "No Signal", ya que el TFT no tiene una forma de ahorrar energia si no tiene señal de entrada.

Cuando recurri al segundo comando que menciona, "chvt", tampoco funciono, pero porque nuevamente la interface XBMC impedia tomar control de la pantalla y asi alternar entre terminales para pasar a otra que estuviera en negro.
Sucede que el programa estaba pensado para Raspbian, asi al ejecutar "chvt 2" pasaba a otra terminal y "chvt 7" la traia de vuelta. Pero nada de eso funcionaba aqui...

Lamentablemente eso ya no tenia solucion, asi que no me quedo otra alternativa que migrar todo el sistema a Raspbian y dejar de usar Raspbmc y XBMC para el salvapantallas.
Aproveche e hice una instalacion nueva de Raspbian que por suerte no necesitaria agregar ninguna libreria de Python.
Tambien deshabilite el inicio de la interface grafica con raspi-config y siguiendo estos pasos hice que inicie directamente con el usuario pi ya logueado:
http://www.opentechguides.com/how-to/ar ... start.html

Luego procedi a probar nuevamente el script "pir.py" junto con "monitor_off.sh" y "monitor_on.sh" y si funciono, salvo que los cambie para que llamando a la interface grafica (7) que no existia quedara la pantalla en negro y a la terminal logueada (1) volviera a mostrar la pantalla:

Code: Select all

[email protected] ~ $ cat monitor_off.sh 
chvt 7

[email protected] ~ $ cat monitor_on.sh 
chvt 1
Ya habiendo solucionado eso pase todos los scripts anteriores y fotos a la nueva instalacion.
Solo faltaba reemplazar el addon de screensaver de XBMC por el programa que mencionaban estas instrucciones para hacer el slideshow de las fotos, que se llama "fbi" y crear luego "slideshow.sh". A "fbi" tuve que instalarlo simplemente con:

Code: Select all

sudo apt-get install fbi
Y cuando por fin parecia que se completaba todo, mi obsesion con los relojes me ataco una vez mas...
Aunque quedaba muy bien poner en negro la pantalla para ahorrar energia, aun asi a veces y dependiendo desde donde viniera uno y el angulo de entrada, tardaba un poco en reaccionar, probablemente porque el PIR no fuera muy bueno o sensible, asi que muchas veces se podia ver la pantalla apagada para luego cambiar al acercarse.

Asi que se me ocurrio que en vez de poner una pantalla en negro se podria tener otra sesion logueada con otro usuario en otra terminal, pero ejecutando permanentemente algun tipo de reloj en pantalla, preferentemente hecho con caracteres ascii.
Para no crear otro usuario podria usar "root" y siguiendo las instrucciones previas de autologin modifique "inittab" para el terminal 2:

Code: Select all

2:23:respawn:/bin/login -f root tty2 </dev/tty2 >/dev/tty2 2>&1
Buscando encontre un reloj muy bueno y hasta divertido llamado Pong Clock:
https://bitbucket.org/donclark/pypong-clock
https://bitbucket.org/donclark/pypong-c ... h%20PyGame
https://www.youtube.com/watch?v=c4_0Fo_beaU
Pero por desgracia tampoco dejaba alternar entre terminales :(

Ya finalmente encontre uno sencillo y de solo caracteres ascii que si funcionaba perfectamente para cambiar de terminal el cual lo ejecutaria desde otro script slideshow2.sh:
http://webonastick.com/vtclock/

Y la mejor manera de lograr que se carguen automaticamente programas diferentes por usuario seria modificando los archivos ".profile" de cada uno y agregarles los scripts correspondients al final de todo.
Para "pi":

Code: Select all

[email protected] ~ $ sudo nano .profile
sudo /home/pi/slideshow.sh
ctrl x
Para "root":

Code: Select all

[email protected] ~ $ sudo nano /root/.profile
/home/pi/slideshow2.sh
ctrl x
[email protected] ~ $ cat slideshow2.sh
/home/pi/vtclock/vtclock
Ahora si ya estaba todo listo para el montaje final, con PIR incorporado. Tuve que usar otro sobrante del cable que use para armar el switch USB (ver enlace Post1 - "Actualización con Lapdock:") y ensamblarle un conector de 3 pines para el PIR, luego lo monte en un plastico junto con el led y que encajaria en la base de la AIO. El conector macho era para "pinchar" otro conector hembra que ya estuviera conectado a un pin de "ground" en la RPI, porque se me habian acabado los pines libres de alimentacion (click en las fotos para ampliarlas):

ImageImage
ImageImage

Y por fin llego la hora de completar el trabajo, y poner el PIR en su lugar en la otra pata de apoyo de la AIO mientras llega la señal a traves del cable por detras:

ImageImage

Por si no se habia visto, aqui tambien se pueden apreciar el DS18B20 y las dos fuentes de alimentacion de 12V:

Image Image

Y aqui esta la vista del conjunto completo funcionando, incluyendo una captura de "vtclock". Como se puede apreciar todo quedo bastante discreto:

ImageImage
ImageImage

Lista de materiales que se agregaron para el armado de esta parte del proyecto (compré el nro. 1):
1- Sensor Infrarrojo de Movimiento (es el mismo que se usa con Arduino)
2- Cable para extender la conexion hacia el Sensor Infrarrojo (en mi caso use un USB con 5 conexiones)
3- Led rojo transparente (tiene mejor iluminacion)
4- Conector hembra de 3 pines para conectar al Sensor Infrarrojo y pines hembra para conectar el led (2)
5- Una base de plastico y tornillos pequeños (2) para montar el Sensor y led (puede ser cualquier cosa de plastico que sirva)

Nota: si se utiliza otro pin que no sea I2C para conectar el led, agregar a la lista de materiales una resistencia de entre 220 a 1K ohm dependiendo del tipo de led y brillo que se quiera obtener. Se veria totalmente apagado cuando no reciba señal.

Conclusion

Como conclusion diré que quede muy satisfecho (y mi madre tambien) con el resultado de todo el proyecto ya que al final logre implementar todo lo que queria hacer, aprender durante el proceso, utilizar bastantes cosas que tenia en desuso y hasta tener un justificativo para comprar la RPI2.

Como mejoras al proyecto seguro que hay miles, pero como bien dije al principio quiza esta aplicacion no es la mejor que existe para RPI pero a mi me sirvio de mucho implementarla. Igual voy a enumerar algunas que se podrian hacer pero no creo que yo las haga por el momento:

1- Utilizar RPI2 en vez de RPI para tener mas pines GPIO disponibles y no tener que amontonar conexiones, como fue incluso en algun caso una sobre otra para tomar alimentacion o masa (ground).

2- Si se tuvieran mas pines quiza se podrian utilizar los de interface I2C para agregar un modulo de reloj en tiempo real (RTC) para no depender de Internet para tener la hora correcta:
https://www.openhacks.com/page/productos/id/64

3- Sino se podria utilizar un modulo wifi para conectarse a Internet en vez de cable ethernet. Yo lo probe con Raspbmc en la primera etapa de armado, pero el modulo que tengo no funciono con Raspbmc. Lo extraño es que anteriormente lo habia usado con Raspbian y funcionaba bien. De todas formas no lo probe con la nueva version que arme con Raspbian.

4- Conectar un monitor HDMI que tenga ahorro de energia en caso de no tener señal para utilizar "tvservice -o" y apagarlo cuando el PIR no detecte a nadie en la habitacion. Tambien posibilitaria tener mejor definicion para apreciar las fotografias.

5- Utilizar un buen sistema de backup de energia o mini UPS para mantener mas tiempo encendida la RPI ante un corte de energia, y posibilitar asi enviar un apagado que no sea forzado por estar demasiado limitado en el tiempo disponible. Algunas opciones (no las encontre localmente):
http://www.piups.net/
http://www.modmypi.com/raspberry-pi/bre ... s/ups-pico
https://www.pi-supply.com/product/pi-up ... pberry-pi/

6- Se podria reemplazar el boton de apagado (y el de encendido?) con un control remoto con sensor infrarrojo (buscar en este articulo IR photo-diode):
http://raspberrypi.stackexchange.com/qu ... r-shutdown


Si llegaron hasta aqui les agradezco enormemente su atencion y por tomarse el tiempo de leer todo el articulo.
Ojala que les sirva aunque sea como guia para otras cosas que quieran implementar.
Por mi parte tratare que el proximo proyecto sea mejor que este.
:D

Slds!
Robot +Camara +Sensores +Encoder +Servo +Matriz8x8 +Joystick:
https://www.raspberrypi.org/forums/viewtopic.php?f=76&t=130470

Return to “Español”