{"id":631,"date":"2010-11-10T00:00:19","date_gmt":"2010-11-09T23:00:19","guid":{"rendered":"http:\/\/www.zigbe.net\/?p=631"},"modified":"2010-11-10T00:00:19","modified_gmt":"2010-11-09T23:00:19","slug":"midiendo-la-energia-25-tachannnnnnnn","status":"publish","type":"post","link":"https:\/\/blog.whatsbee.net\/?p=631","title":{"rendered":"Midiendo la energ\u00eda: 25 Tachannnnnnnn!!!"},"content":{"rendered":"<div class=\"mceTemp mceIEcenter\">\u00a0<\/div>\n<p>Al fin!!, \u00a0he resuelto el \u00faltimo problema (conocido).<\/p>\n<p>En el bucle principal del firmware de la PDU vamos leyendo la informaci\u00f3n de voltajes y corrientes instant\u00e1neas para calcular los valores y sus integrales (vamos a llamar a esta parte el integrador). Tenemos que recoger entre 2000 y 3000 valores en el intervalo aproximado de un segundo, el timing de la funci\u00f3n es cr\u00edtico, si se para para hacer algo los valores calculados no ser\u00e1n correctos. Esto hay que hacerlo para cada puerto.<\/p>\n<p>Con una periodicidad definida tenemos que enviar los paquetes con la informaci\u00f3n al gateway (vamos a llamar a esta parte el enviador).<\/p>\n<p>Constantemente tenemos que monitorizar la radio, para ver si recibe alg\u00fan paquete con un comando, apagar un rel\u00e9 por ejemplo (a esta parte le llamaremos el escuchador).<\/p>\n<p>Cada una de las tres cosas se van ejecutando a periodicidades definidas en el bucle principal, eso ha generado un problema que no me esperaba. Lo que me esperaba es que si enviaba un comando para desacrivar un rel\u00e9 en el momento en el que estaba funcionando el integrador, este se almacenar\u00eda en la cach\u00e9 del puerto serie, en el momento que le tocara el turno al escuchador el paquete ser\u00eda procesado, el \u00fanico problema ser\u00eda la espera de un segundo entre el env\u00edo de la orden y el apagado del rel\u00e9, en el peor de los casos. La realidad es que el paquete se pierde. Puede parecer una \u00abchorrada\u00bb, se vuelve a enviar y ya est\u00e1, pero recordemos que la funci\u00f3n de esto es trabajar en remoto, y que habitualmente el estado del puerto se cambia en los drivers del gateway (en todos los casos que he visto), con lo que remotamente creer\u00edamos que un puerto est\u00e1 apagado cuando no lo est\u00e1 en realidad.<\/p>\n<p>Siguiendo una secuencia l\u00f3gica lo que hay que utilizar es una interrupci\u00f3n, una interrupci\u00f3n dispara una funci\u00f3n en el firmware en base a un cambio de estado en una entrada (entre otras posibilidades). El primer problema es que no he sido capaz de ver o de configurar una interrupci\u00f3n activada por el puerto serie en un Arduino. A grandes males grandes remedios, como si que podemos activar una interrupci\u00f3n por el puerto digital 2 (la interrupci\u00f3n cero), he conectado el pin RX de la UART al puerto 2 con una resistencia (se ve soldada en la foto) y he habilitado las interrupciones en el puerto 2.<\/p>\n<div id=\"attachment_632\" style=\"width: 510px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/11\/whirePDU.jpg\"><img aria-describedby=\"caption-attachment-632\" loading=\"lazy\" class=\"size-full wp-image-632\" title=\"whirePDU\" src=\"http:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/11\/whirePDU.jpg\" alt=\"\" width=\"500\" height=\"356\" srcset=\"https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/11\/whirePDU.jpg 500w, https:\/\/blog.whatsbee.net\/wp-content\/uploads\/2010\/11\/whirePDU-300x214.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><p id=\"caption-attachment-632\" class=\"wp-caption-text\">Rework de la PDU<\/p><\/div>\n<p>Esto ha sido m\u00e1s complicado de lo que parece, porque en el puerto digital 2 del micro ten\u00eda el primer rel\u00e9, por lo que he tenido que cablearlo al puerto digital 6.<\/p>\n<p>El sketch responde a la interrupci\u00f3n, pero por alg\u00fan motivo el stack de xbee no funciona dentro de la interrupci\u00f3n (esas cosas pasan, lo de las interrupciones es un poco rarito). Como no lo consigo despu\u00e9s de un par de horas de trabajo busco una alternativa.<\/p>\n<p>El inegrador es sensible al tiempo, segmenta la onda senoidal y lo que no puede tener son periodos diferentes, as\u00ed que a\u00f1ado a ese bucle una comprobaci\u00f3n, le digo que si el pin RX se pone en estado b\u00e1sico que abandone inmediatamente ese bucle y se vaya a leer el puerto serie. Si se interrumpe esa lectura no se tiene en cuenta, se espera a recibir el paquete y despu\u00e9s se vuelve a leer el mismo puerto. Tal como me imaginaba funciona!!!<\/p>\n<p>Aunque ahora ya soy capaz de recibir todos los paquetes me queda una inquietud, \u00bfy si pasara algo que hiciera que se perdiera un paquete?, el driver cambiar\u00eda el estado y nos seguir\u00eda enga\u00f1ando. Traslado el control de la monitorizaci\u00f3n de los pines al micro. En el momento en el que se cambie el estado de un rel\u00e9 el driver va a enviar el estado \u00abPendiente\u00bb, inmediatamente vamos a leer el puerto para confirmar el estado real del mismo. Funciona!!!!<\/p>\n<p>La conclusi\u00f3n, funciona la PDU, sin ning\u00fan problema, est\u00e1 integrada con el entorno de Digi y podemos trabajar con los actuadores, la versi\u00f3n beta est\u00e1 acabada.<\/p>\n<p>En el camino como veis el circuito ha sufrido varios cambios:<\/p>\n<ul>\n<li>Por error cableamos la entrada de medici\u00f3n de tensi\u00f3n a una puerta digital en lugar de anal\u00f3gica (Solucionado).<\/li>\n<li>El condensador electrol\u00edtico de filtro de la alimentaci\u00f3n estaba infradimensionado (Solucionado),<\/li>\n<li>La fuente de alimentaci\u00f3n no aguanta una radio Xbee pro y los rel\u00e9s (he puesto una radio no pro y asumo que no voy a\u00a0desactivar tres rel\u00e9s simultaneamente hasta que resuelva el problema)<\/li>\n<li>El puerto serie para la depuraci\u00f3n era el mismo que el de la radio (a la derecha de la foto podeis ver una \u00f1apa que lo soluciona)<\/li>\n<li>He cableado el puerto digital 2 al 6 para poder a\u00f1adir la resistencia (No era necesario)<\/li>\n<\/ul>\n<p>Y todav\u00eda quedan las mejoras que enumeramos en un post anterior, alguna mejora del firmware, alguna sencilla del driver, etc. minucias&#8230;.<\/p>\n<p>Arreglar\u00e9 cosas un par de d\u00edas, rehar\u00e9 la placa con un formato que quepa en una PDU de verdad y a otra cosa mariposa.\u00a0 Al final estoy contento con el resultado \ud83d\ude42<\/p>\n<ul>\n<li>Tenemos una PDU que mide energ\u00eda, no solo corrientes como algunas del mercado.<\/li>\n<li>Tenemos feedback del estado real de los puertos, no una aproximaci\u00f3n en el driver que nos puede enga\u00f1ar.<\/li>\n<li>Tendremos hasta 8 o 12 puertos.<\/li>\n<li>La PDU est\u00e1 perfectamente integrada con la red de Digi.<\/li>\n<li>Podremos \u00abfeatures\u00bb avanzadas como cortar la corriente en el paso por cero.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0 Al fin!!, \u00a0he resuelto el \u00faltimo problema (conocido). En el bucle principal del firmware de la PDU vamos leyendo la informaci\u00f3n de voltajes y corrientes instant\u00e1neas para calcular los valores y sus integrales (vamos a llamar a esta parte&hellip; <br \/><a class=\"read-more-button\" href=\"https:\/\/blog.whatsbee.net\/?p=631\">Leer m\u00e1s<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0},"categories":[14,17,9,10],"tags":[28,35,37,56,75,76,102,109,110,111,173,175,197],"_links":{"self":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/631"}],"collection":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=631"}],"version-history":[{"count":0,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=\/wp\/v2\/posts\/631\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=631"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=631"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.whatsbee.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=631"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}