Domotizando VI – Captura de datos

Vamos a mejorar un poco el programa de captura de datos en la raspberry.

Tal y como lo tenia hasta ahora, lo que hace es buscar en 200 iteraciones el elemento de más valor y darme la tensión de pico, pero como digo, vayamos un paso más allá y hagamos que se puedan capturar (y posteriormente graficar: esto pa otro capi) los datos.

El primer planteamiento que se me ocurre es este:

Captura de pantalla 2016-05-30 a las 19.12.02.png

(Atención a la imagen de fondo donde he buscado en internet la equivalencia en linux de la función de la api de windows GetTickCount() :PPP)

Pues lo que decía; lo primero que podemos pensar es grabar los datos en un archivo … al fin y al cabo, es la mejor forma de tener almacenada la última lectura.

Está muy claro que la escritura del fichero tenía que ser fuera del bucle de captura de datos para poder capturar el mayor número de datos posible. Vamos paso a paso:

while (uiCheckPoint_2 – uiCheckPoint_1) < 20) //por qué? muy sencillo:

La frecuencia que nos llega a casa es 50Hz => 50 ciclos por segundo => 1 ciclo en 0.02 segundos = 20 ms. Facil, no? Lo que hago es comprobar un ciclo completo y como realmente tengo el amplificador operacional que ademas rectifica la señal… realmente me bastaría con 1 semiciclo (o sea 10 ms de lectura) pero vamos allá a ver que leemos con 20.

En la siguiente línea está el primer error *grave* del que me di cuenta: Hacer operaciones en coma flotante chupa muchísimos recursos, y más teniendo en cuenta que estamos hablando de resolución de milisegundos en la captura. Así pues, la línea donde hago la operación de obtener la intensidad directamente  en valor de amperios es una cagada. Por eso el código, cambiado así:

Captura de pantalla 2016-05-30 a las 19.18.26.png

Es sin duda mucho más efectivo… Con la primera versión (captura de arriba) hacía una captura de la increíble cantidad de 10 muestras (si, lamentable) sin embargo, con esta versión en la que leo y opero a posteriori (después de la captura) capturo bastantes más datos:

Captura de pantalla 2016-05-30 a las 19.18.06.png

como bien se puede ver 😉

Vamos a ver los datos de forma bonita con Matlab:

Captura de pantalla 2016-05-30 a las 19.33.35.png

Lo se, lo sé, la resolución es realmente …. lamentable !! Hay que replantearse un poco el programa para ver cómo se podría mejorar esa birria 😉

Se me ocurre así a botepronto alguna idea pero …. no se… voy a ir buscando los apuntes de sistemas informáticos en tiempo real … que me temo que los voy a necesitar para salir de esta…

ACTUALIZACION:

Pues me he venido a la cocina y he puesto una sarten para meterle caña a tope a la vitro:

Ahí queda eso. Parece un biberón o algo, pero al menos tiene mas forma de onda… jeje casi 12 Amperios de consumo la castaña de la vitro con un fuego a tope … (Iberdrola frotandose las manos ….)

Solve-It GE07: Nivel 1


Aprovechando un momento de aburrimiento sumo con el movil a mano y no el ordenador. He abierto el nivel 1 de solveit de la GE07 y me encuentro con la imagen anterior.

Basta darle un par de vueltas para leer *casi* “clarisimamente”:

‘clarisimamenteesteniveleseasypeasy:)’

Basta empezar en la letra de arriba a la izquierda y comenzar a leer en diagonal.

PD: Primer post publicado desde el movil! ;P

ACTUALIZACION:

Estaba intentando meter la contraseña que he puesto anteriormente y no funcionaba … sencillamente es “easypeasy” sin nada más 😉

Solve-It GE09: Nivel 1

Ayer enredando por los tabs del navegador me topé con la página de hack-its y le di a bulto a 1 de ellos. Me topé con esto:

Captura de pantalla 2016-05-17 a las 12.46.07.png

Dado que se trata de un solve it de nivel 1, no tenía que ser dificil así que me puse a pensar un rato en él mientras … ejem… estaba en el baño (no daré más detalles al respecto :P)

“Otra de cículos” … el número PI. El siguiente paso era comprobar todos esos dígitos de PI. Dado que es un solve-it y no un hack-it, entiendo que no habrá que hacer muchos malabarismos con los números a la hora de buscar alguna clave (esperemos…).

En cualquier página web que encuentres utilizando google te dan tantos decimales de pi como quieras imaginar. Cogí una de esas páginas y corté los decimales para ponerlos tal y como están en el enunciado del solve-it.

Utilizando Meld podremos ver más rápidamente dónde están los valores (si los hubiera) que son diferentes:

Captura de pantalla 2016-05-18 a las 11.48.49.png

Estaba *casi* claro, alguna particularidad tendría que tener el número PI que nos ofrecía marcan.

Hay dígitos diferentes. El problema de meld (para nuestro caso concretamente) es que cuando encuentra una diferencia la marca y busca la correspondencia posterior que sea correcta (me explico como el culo, lo se). Lo que quiero decir es que Meld no nos está dando exactamente los decimales de PI que son distintos de unos a otros. Así pues, dado que no son excesivos números y como digo, se trata de un Solve-It, me puse a comparar “a mano” y a hacer un mapa de los valores diferentes:

Captura de pantalla 2016-05-18 a las 11.55.43.png

“Parece” como que se ve algo pero nada claro realmente …. vamos a ver si conseguimos arrejuntar todo un poco y verlo más nítido:

Captura de pantalla 2016-05-18 a las 11.59.08.png

Y ahí tenemos algo parecido a:

M4tH3rR0r

Domotizando V – Captura y polyfit-ing

Y vamos llegando al final de la etapa (de potencia :P). Hoy tocaba probar todo el invento en conjunto, y me refiero a hacer lectura analogica de la señal del amplificador en la propia raspberry y que nos diese un valor legible (es decir, potencia real consumida, o Amperios, que viene siendo lo mismo).

Para ello, he de decir que he perdido mucho mas tiempo a la tarde intentando configurar el wifi de la raspberry (con el pincho usb) que haciendo las pruebas y haciendo el miniprograma en C, pero bueno.

Había que empezar por conectar a la raspberry los periféricos que vamos a utilizar. Estos son: el CAD i2c y el amplificador+rectificador. Así ha quedado el montaje final:

IMG_4631.JPG

Antes de aventurarme a hacer nada más, había que realizar el programa en C para hacer la lectura de datos.

Hay que tener en cuenta que el amperimetro nos va a dar de 0 a 3.3V siendo esto equivalente a 0 Amperios eficaces y 21 Amperios eficaces respectivamente. Así pues, lo primero que he hecho ha sido coger un amperímetro más decente (ya que ha aparecido hoy uno que tenía por casa) y he realizado varias mediciones más que las veces anteriores.

Captura de pantalla 2016-05-11 a las 17.09.06.png

También como las veces anteriores, he tirado de matlab para meter esos datos y sacar una aproximación, que luego usaremos en el programa en C:

Captura de pantalla 2016-05-11 a las 18.15.54.png

Estas son las mediciones, siendo V el voltaje de pico. Hay que tener en cuenta que esos voltajes son valores digitales una vez pasan el CAD y según las características del CAD estos valores van de 0 a 255 con 0 a 3.3V respectivamente. Con esta información, tenemos que sacar los valores correspondientes en “digital” a esos valores de voltaje analógicos. La solución es bien sencilla; basta una regla de 3:

Si 3.3V -> 255 => xV -> y donde y = round(x*255/3.3). Y el resultado en el caso de este ejemplo es:

Captura de pantalla 2016-05-11 a las 18.20.40.png

Los datos están redondeados por defecto ya que una señal digital no puede tener decimales….

Hecho esto, calculamos los coeficientes para hacer mínimos cuadrados, que como en el capitulo anterior hice se hace con polyfit:

Captura de pantalla 2016-05-11 a las 18.22.44.png

Teniendo estos valores nos bastará realizar la siguiente operación, directamente con el valor digital leido del CAD, para obtener la corriente REAL medida:

A_eficaz = 0.0001*lecturaCAD*lecturaCAD + 0.0595*lecturaCAD + 0.1422;

Así pues, podemos pasar directamente a hacer el programa en C en la misma raspberry.

Captura de pantalla 2016-05-11 a las 18.27.08.png

A la hora de hacer el programa para la lectura de la intensidad el único problema que encontramos es el hecho de que estamos midiendo una onda senoidal rectificada (o sea con la parte negativa invertida) a 50Hz, con lo que estamos leyendo un montón de valores de entre 0 a x.xV; así que hay que filtrar los PICOS de esa onda senoidal. Para ello, la primera aproximación que se puede hacer es el trozo de programa de la parte superior (que funciona bastante bien, pero por supuesto, será mejorable).

Lo que hacemos es durante 200 ciclos de programa hacer lecturas de la entrada analógica y quedarnos con el máximo valor que nos de ésta (entrada analógica conectada al puerto 2 del CAD, que es el libre, para no tener que sacar ningún jumper de los que vienen para pruebas). Después de 200 ciclos de intentos de lectura del valor máximo ‘asumimos’ que tenemos el valor bueno y es entonces cuando entra el “else” y representa el valor real de intensidad para ese valor maximo leido.

Se resetean el contador y la lectura del valor máximo y entonces se imprime en pantalla el valor calculado según la recta de regresión. Este valor representado se queda ahí, hasta que hayan pasado otros 200 ciclos y se haya calculado un valor máximo nuevo.

Y eso es todo! luego actualizo el post y subo un vídeo que he hecho con el movil de lectura en tiempo real.

ACTUALIZADO: http://www.youtube.com/watch?v=WRk26tdGEk8

Próximo objetivo ….. hacer una interfaz web con esta información y colocar ya todo en su sitio en casa!!

 

Domotizando IV – Leyendo con osciloscopio

IMG_4576.JPG

Bueno bueno bueno … después de 3 semanas en la siempre maravillosa Alemania sin hacer nada más que trabajar, retomo esta castaña … Me he agenciado ya el osciloscopio (bajo la caja del mismo, el pequeño souvenir que me traje de las tierras teutonas 😉

Pues tocaba probar el osciloscopio.

Me he pasado por las oficinas del trabajo hoy “casi” exclusivamente a recoger el osciloscopio que me ha prestado un compañero para seguir haciendo pruebas. Hoy tocaba probar hacer la lectura de la señal de salida del amplificador para ver qué demonios tenemos ahí y, más que nada, ajustar los voltajes para no cascar el módulo de conversión analógica de la raspberry pi…

He de decir que me ha costado más conseguir los drivers y la aplicación de visualización de Hantek en internet, que lograr hacer funcionar el maravilloso cacharro (imagen superior). Efectivamente, no tengo lector de CD y menos lector de CD ‘enano’ con lo que => internet is the next step …

He probado el generador de onda cuadrada que viene para colocar y probar la lectura de la sonda en el oscilo y voilá, fácil y rápido, como debería de ser todo en esta vida … :

IMG_4578.JPG

(Maldita pantalla reflectante…)

Hecho esto había que probarlo en el sitio en cuestión y me ha preocupado un poco el hecho de que el osciloscopio utiliza 2 puertos USB y bueno… el macbook tiene, pero uno a cada lado. Menos mal que los chinos fabricantes de esta genialidad de oscilo piensan un poquito en todo el mundo:

IMG_4579.JPG

Pues si, he de decir que siempre que me he topado con una mierda de estas que requería 2 USBs (mayormente discos duros) a nadie se le había ocurrido hacer la separación grande para este tipo de situaciones en las que tienes un puerto en mataporculo con respecto al otro …

Una vez conectado, encendemos, Windows, instalación de apps y drivers de windows, etc… lo normal. Conectamos todo y vemos a ver qué leemos.

 

 

 

Bieen, parece que estamos leyendo algo … y lo mejor es que estamos leyendo una señal rectificada y … oye, a 50Hz con lo que parece que vamos por el buen camino…

IMG_4583

Ahora hay que hacer varias mediciones y ver qué datos se leen para cada una de ellas. Para ello la verdad es que me he tardado en dar cuenta que iba a necesitar de una pinza amperimétrica de las de verdad … y joder ya tengo de eso? toca hacer la llamada a mi Aita.

Parece que efectivamente tiene una aunque del pleistoceno … asumiremos que las medidas que da son buenas (igual es mucho asumir, pero no tengo tiempo de ponerme a buscar más pinzas ahora mismo).

Bueno, medida aquí, medida allá he sacado finalmente esta tablucha:

IMG_4588.JPG

Hora de pasar a Matlab a pensar un ratillo…

Captura de pantalla 2016-05-09 a las 17.03.00.png

Introduciendo a pelo los 4 datos que tengo me sale eso. Podríamos dar por hecho que más o menos el sensor es lineal (aunque asumir eso habiendo cogido unicamente 4 puntos mierder decir que asegurar que es lineal es un poco como para que algún profesor de la universidad me suspenda ipsofácticamente instrumentación electrónica; pero yo a lo mío).

Es evidente que no he llegado al límite de medición del amperímetro (30A), pero según la pinza amperimétrica-chancra de la era del mismísimo Tesla, he alcanzado más o menos 9.5A, que es cuando el voltaje de pico en el oscilo es 2.26V.

Viendo esto resulta bastante evidente que cuando leamos 30A nos vamos a pasar FIJO de los 3.3V de pico. No obstante probamos:

Captura de pantalla 2016-05-09 a las 17.47.28.png

(Siempre he querido utilizar la función polyfit con un sentido xD)

Haciendo con mínimos cuadrados (totalmente innecesario pero ei! es gratis) he aproximado la recta y he calculado que más o menos cuando estemos leyendo 3.3V en la salida del amplificador, estaríamos midiendo 14Aef (unos 3000W). Con esto tendríamos el problema de que si nos pasamos de 3000W en la potencia de casa… posiblemente freiríamos el CAD de la raspberry…

Vamos a reajustar esa recta para hacer que a 20Aef ==> 3.3V (sé que haciendo esto corresmos el riesgo de pasarnos de los 3.3V de pico, pero me baso sencillamente en que, 20A (4400W) no tengo contratados en casa así que … confío me cortará iberdrola la potencia antes de que se queme nada 😛 😛

Captura de pantalla 2016-05-09 a las 18.07.52.png

Haciendo eso genero otra recta que sería la que me interesa a mí, y como podemos ver a 10.2Aef, estaríamos generando en la salida del amplificador una tensión de pico de 1.7V. Así pues, ahora sencillamente basta mover el potenciómetro del amplificador operacional con la medida de 10A (los 2 secadores conectados a fuego en mi caso) hasta que en el osciloscopio leamos 1.68V de pico:

IMG_4589

Y lo tenemos ! (insisto… suponiendo que la pinza amperimétrica esté bien …….)

El potorro que he montado para hacer todas estas pruebas queda resumido aquí:

IMG_4590

(El cuchillo era para mover el potenciómetro … no tenía ningún destornillador a mano)

Mañana más… A ver si puedo probar mañana a hacer lecturas analógicas en la raspberry de forma correcta… me gustaría poder visualizar la onda, y comparar los resultados con los de hoy del oscilo.

Cada día se pone más chunga la cosa …. jejeje