Mostrando entradas con la etiqueta Memoria. Mostrar todas las entradas
Mostrando entradas con la etiqueta Memoria. Mostrar todas las entradas

Funcionamiento global

Antes de empezar a programar he pensado que es conveniente definir completamente la comunicación inalámbrica ya que es el punto central del proyecto y al ser nexo entre maestro y esclavo condiciona totalmente el funcionamiento de estos. Es por esto que esta entrada define en esencia el funcionamiento tanto del sensor como del transceptor y en algunos casos detalles del software de representación de datos.

Comunicación inalámbrica

Para reducir el consumo la comunicación debe evitar largos periodos de "polling" en el canal. Es por esto que se ha decidido que la comunicación se realizará acorde al funcionamiento del sensor.

El funcionamiento básico consiste en que el sensor realiza una medida cada periodo configurable (este periodo es muy prolongado respecto a la velocidad de funcionamiento de los microcontroladores por lo que la mayor parte de ese tiempo el microcontrolador se encuentra en modo de bajo consumo) ,envía el dato medido y entra en modo de bajo consumo esperando a realizar otra medida. Lógicamente este funcionamiento descrito muestra un tipo de comunicación unidireccional, el sensor no puede recibir datos. Por supuesto se necesita una comunicación bidireccional por lo que se debe añadir al funcionamiento del sensor la acción de ver si le han enviado algo, recibirlo y procesarlo.

No es eficiente dedicar el tiempo entre medidas al "muestreo" (polling) del canal debido al elevado consumo que introduciría. Es por esto que se ha decidido que el polling del canal se realizará durante un instante de tiempo cuya duración sea la necesaria para que el tiempo de procesado y respuesta del maestro permita la recepción del paquete. Para advertir al maestro de cuándo podrá realizar el envío de los datos, el polling se realizará tras enviar las medidas el sensor, es decir, el sensor enviará las medidas y dejara un tiempo ajustado para recibir datos.

De este modo, la dinámica de la comunicación consistirá en el envío de las medidas al maestro por parte del sensor; el sensor se mantendrá un tiempo a la escucha, tiempo que el maestro aprovechará para enviar los comandos oportunos al sensor. Una vez el sensor recibe los datos, inmediatamente deja de estar a la escucha, procesa los datos y entra en modo de bajo consumo esperando la medida siguiente. Esto se aprecia en la tabla siguiente.

Mapa de funcionamiento y consumo.
Estado t medida HR t medida Tª envio datos t en el aire t espera recepción espera medida
Micro duerme lee duerme lee envía duerme pon RX duerme
Transceptor duerme carga datos transmite duerme recibe apagado
Sensor mide mide duerme

Esta tabla muestra gráficamente la función de cada dispositivo del sensor en cada estado resaltando las funciones a razón del consumo que suponen. El consumo se muestra en forma de gradiente, siendo el azul el de menor consumo y el rojo más oscuro el de mayor.

Tal y como se aprecia, para reducir el consumo estático del nodo, se ha decidido desconectar el transceptor durante el tiempo entre medidas ya que su consumo estático, en modo reposo 12µA, es elevado en proporción al resto.

Iniciar la conexión inalámbrica:

Se debe permitir la conexión en caliente por lo que el proceso de conexión de un nuevo sensor a la red se muestra a continuación.

El maestro está escuchando (polling) contínuamente por el canal en el que esté trabajando. El sensor se sitúa junto al maestro y se enciende. Una vez encendido, el sensor envía el paquete de "conexión inicial" el cual contiene su dirección y la configuración de su sensor y de su transceptor.

Cuando el maestro recibe dicho paquete, actúa asignando a la dirección recibida, la del sensor, un número de identificación (ID) de menor tamaño que la dirección y posteriormente se la envía al sensor. A partir de ahora la comunicación del sensor con el maestro contendrá la ID que le indicará al maestro quién le está enviando el paquete. En el caso en el que el sensor no reciba respuesta del maestro, cambiará de canal y lo volverá a intentar. Si esto tampoco funcionase, se podría intentar hacer un cambio de potencia y volver a realizar el barrido de canales. Si todo esto falla, el sensor entrará en reposo y lo indicará con su indicador luminoso LED.

Una vez el maestro ha recibido el dato MY_NAME_IS del sensor y le ha respondido, manda la configuración, la dirección y la ID asignada al sensor al PC para ser procesada y mostrada por el software de representación.

Cuando el software de representación recibe los datos del sensor enviados por el maestro, este crea una nueva clase que contiene los paneles que se mostrarán para cada sensor pasándole los datos recibidos al constructor. Esto produce una ventana la cual contiene una gráfica donde se muestran los datos de HR y Tª y una serie de etiquetas y botones que permiten mostrar los datos del sensor y configurar el sensor.

Configurar el sensor:

Una vez establecida la conexión, para configurar el sensor el usuario interactúa mediante el software de representación. El software envía un comando que contiene la ID del sensor a modificar al maestro, el cual almacena en el "buffer FIFO" de la ID el comando a enviar para que el sensor actúe como se ha pedido. El "buffer" consiste en un array donde se van almacenando los comandos que se le quieren enviar a una ID (sensor) determinada; esto es así debido a la naturaleza de la comunicación.

Cuando un dato del sensor es recibido por el maestro, el maestro mira si el buffer correspondiente está vacío, en caso contrario, manda todos los comandos posibles (cada paquete puede contener hasta dos comandos) contenidos en el buffer.

Cuando el sensor recibe el dato, actúa en consecuencia y envía un paquete de respuesta el cual es interpretado por el maestro como cambio realizado correctamente y es comunicado al software de representación.

Una vez el sensor ha contestado, continúa con el funcionamiento normal. Esto supone una modificación del tiempo entre lecturas.

Estudio preliminar: El software de control en el PC

Se realizará una aplicación para configurar los nodos de la red y para mostrar los valores de cada nodo. Esta aplicación debe ser preferentemente gráfica y debe ser capaz, como mínimo, de permitir al usuario acceder a toda la información de la red de medida, temperatura y humedad relativa en cada uno de los puntos de medición, así como modificar el período de actualización de los datos o ver un histórico de medidas.

En primer lugar, es importante seleccionar el lenguaje de programación con el que se realizará. Existe multitud de lenguajes de programación que permiten programación de entornos gráficos. Son los lenguajes orientados a objetos los que permiten programación de entornos gráficos, tales como C++, C#, Java, Phyton, MSVisualBasic, etc. Sin embargo, hay lenguajes no orientados a objetos que también lo permiten como por ejemplo C haciendo uso de la librería GTK y libglade.

Dado que normalmente se utilizan APIs intermedias entre el sistema operativo y la aplicación para facilitar la programación gráfica, como por ejemplo las API de BorlandC++, la aplicación resultante queda ligada a un único sistema operativo. No obstante, los lenguajes de programación interpretados como Java y Phyton, mantienen una relativa independencia con sistema operativo. Sin embargo, los lenguajes interpretados son típicamente más "lentos". Puesto que la velocidad en esta la aplicación no es crítica, se optará por un lenguaje interpretado dada la ventaja de ser multiplataforma.

De los lenguajes interpretados se ha optado por el lenguaje de programación Java por poseer mejores herramientas para su desarrollo.

El lenguaje de programación Java fue desarrollado por Sun Microsystems a principio de los 90. En el lenguaje de programación Java, el código fuente, de extensión .java, se compila, mediante el compilador de java (javac), obteniéndose un fichero de extensión .class. Estos ficheros no contienen código nativo de la plataforma del compilador; en su lugar contienen bytecodes, el lenguaje máquina de la máquina virtual Java (Java VM).

Es esta máquina virtual la encargada de convertir el lenguaje bytecodes a el lenguaje máquina específico de la arquitectura en la que sea ejecutado, por tanto la máquina virtual es específica de la arquitectura, tal y como muestra la figura siguiente.

Como la máquina virtual está disponible para diferentes sistemas y arquitecturas, el mismo fichero compilado .class, puede ser ejecutado en distintas arquitecturas.

Personalmente, desconozco el lenguaje de programación Java. No obstante tengo nociones básicas de programación orientada a objetos por lo que no espero que me sea complicado aprender a programar Java. Una de las ventajas de Java es su documentación, Sun tiene unos tutoriales muy completos (ver referencias) y existe multitud de bibliografía sobre el lenguaje. Además NetBeans, un entorno multiplataforma iniciado por Sun y ahora libre es muy cómodo y completo para la programación, soporta completamente todas las versiones de Java (Java SE, Java EE, Java ME), y dispone de diversas herramientas como un constructor de interfaces gráficas o soporte para el depurado línea a línea.

Referencias

Sun Microsystems The Java Tutorials.

Selección de componentes: Batería, estimación de consumo.

Se han seleccionado todos los componentes que forman el nodo sensor salvo la batería. Para poder seleccionar la batería, es preciso realizar una estimación preliminar del consumo que tendrá el sistema. Esta estimación se ha realizado con los datos disponibles, los facilitados por el fabricante, y ha precisado un esbozo del funcionamiento del nodo sensor y de los componentes que lo forman.

Funcionamiento del nodo sensor

Una primera aproximación al funcionamiento del nodo sensor se puede observar en la figura siguiente.

Se trata de un funcionamiento cíclico y se puede describir en los siguientes pasos:

  1. El sensor realiza una medida de humedad relativa.
  2. El sensor realiza una medida de temperatura.
  3. El microcontrolador alimenta al transceptor y lo configura.
  4. El transceptor envía los datos medidos.
  5. El transceptor entra en modo de recepción durante un tiempo determinado.
  6. El microcontrolador procesa el dato recibido y le corta la alimentación al transceptor.
  7. El microcontrolador entra en modo reposo durante múltiplos de cinco segundos.

Estos estados se han agrupado según el estado de los componentes. De este modo se tiene:

  1. Medida de HR y de Temperatura. El transceptor no está alimentado, no supone un consumo de corriente, el sensor está midiendo y el microcontrolador está en modo reposo.
  2. Transmisión. El transceptor se encuentra en modo de transmisión, el sensor y el microcontrolador en reposo.
  3. Recepción. El transceptor se encuentra en modo de recepción, el sensor y el microcontrolador en reposo.
  4. Configuración del transceptor. El transceptor y el sensor se encuentran en reposo y el microcontrolador se encuentra activo.
  5. Activo. En este estado se han agrupado las instrucciones ejecutadas por el microcontrolador a lo largo del funcionamiento. En este estado el transceptor y el sensor están en reposo y el microcontrolador se encuentra activo.
  6. Reposo. El transceptor no está alimentado, el sensor y el microcontrolador estan en reposo.

Para la estimación, se ha tomado el peor escenario posible, es decir el transceptor transmitiendo a la máxima potencia a una tasa de 250KB, el sensor midiendo a la máxima resolución y realizándose una medida cada cinco segundos. El microcontrolador se supone alimentado a 3 voltios, activo a 4MHz, con el watchdog activo durante el reposo y con el resto de periféricos desactivados.

Para obtener la duración del estado de transmisión, se ha supuesto que se enviarán 10bytes, 2 de dirección, 2 de CRC y 6 de datos donde 4 son las medidas de HR y Temperatura y los otros dos uno para el comando y el otro para la identificación del nodo. De este modo, se ha podido obtener el tiempo de transmisión utilizando la fórmula, facilitada por el fabricante, 1/250Kbps * (10+1).

Para el estado de Configuración del transceptor se ha supuesto una comunicación con el microcontrolador a 1Mhz.

Con este escenario, se han obtenido dos estimaciones, una para los valores facilitados por el fabricante denominados típicos y otra para los denominados máximos. Estas estimaciones se han realizado obteniendo la carga que supone cada estado que se define como la corriente que consume el sistema durante por su duración(Amperios por segundo). Estas cargas individuales se han sumado obteniéndose la carga total, la cual, dividida por la duración total del ciclo de estados, indica el consumo promedio de corriente. Esto se ha representado en las tablas siguientes.

Valores típicos

Valores máximos

En resumen, se ha estimado que el consumo promedio de corriente estará comprendido entre los 35µA y los 39µA.

Descripción del proyecto

¿En qué consiste el proyecto?

El proyecto consiste en el diseño y prototipado de una nube de sensores inalámbricos. Dicha nube se conecta con un ordenador que muestra los datos de los sensores y los controla. Cada sensor que forma la nube, se alimenta de forma autónoma.

El proyecto es de apoyo a una investigación en la que se necesitan medidas de humedad relativa y temperatura, tanto en laboratorio como en intemperie. Puesto que ya existe un sistema sensor, se aprovecharán dichos sensores. Pese a que el sensor ya viene dado, se debe diseñar el sistema sensor con código fácilmente reutilizable para una fácil adaptación a otro tipo de sensor. También se debe lograr un bajo coste del sistema completo dado que se realiza con fondos de la investigación.

Para una aproximación al proyecto, he realizado un diagrama de bloques, que es el siguiente:

Nota: No he nombrado los bloques de la imagen porque no me acaba de convencer las calificaciones de bloque sensor y bloque maestro.

La descripción del diagrama se puede dividir en dos, dependiendo del origen y destino de los datos.

  1. Sensor → Ordenador

    El sensor transforma una variable física en un dato electrónico y dicho dato se procesa mediante el microcontrolador (μC). Una vez procesado el dato, éste es enviado por radiofrecuencia a través del transceptor. El dato es recibido mediante el transceptor del maestro, y es interpretado y enviado al ordenador por el microcontrolador (μC).

  2. Ordenador → Sensor

    El ordenador se comunica con el maestro enviándole los datos (destino incluido). El microcontrolador (μC) procesa el dato y lo envía a través del transceptor al bloque sensor de destino, el cual, mediante el transceptor, detecta el dato, lo procesa y actúa en consecuencia, usando el microcontrolador (μC).

El punto más importante del diagrama (y por tanto del proyecto) es la comunicación entre bloques. Una parte crucial de la comunicación es el protocolo, el cual establece en mayor parte el consumo de los bloques. Puesto que el bloque sensor está limitado en consumo, su comportamiento fijará el protocolo óptimo. Por tanto, para definir un protocolo idóneo, primero debo definir el comportamiento del bloque sensor.

Una primera aproximación al funcionamiento del bloque sensor es que consiste en realizar una medida y enviarla cada cierto tiempo. Como consecuencia, el sistema estará activo durante un corto periodo de tiempo; durante la medida y el envío. Durante el tiempo de espera a la siguiente medida, el consumo debe ser mínimo; por tanto esta primera aproximación implica que no se puede tratar de un protocolo que necesite una comunicación constante (como el polling), es más bien una comunicación puntual, breve.

De esta primera aproximación he obtenido las especificaciones de cada módulo las cuales me ayudarán a la hora de la selección de los componentes que forman cada uno:

Bloque sensor

  • Bajo consumo, buscando una duración máxima de la batería (o un tiempo mínimo X de funcionamiento).
  • Bajo costo de los componentes.
  • Distancia mínima entre los sensores y el maestro de X metros.
  • Fácil uso.
  • Permitir la conexión en caliente de los sensores.
  • Permitir un elevado número de sensores.

Bloque maestro

  • Bajo consumo para su uso en portátiles y para una alimentación desde el ordenador.
  • Fácil uso.

De las especificaciones, disminuyendo así el nivel de abstracción, obtengo las especificaciones técnicas para cada componente de cada bloque:

Microcontrolador (μC) del bloque sensor

  • Bajo consumo; con modos de ahorro y con periféricos para controlar el consumo y monitorizar la batería.
  • Con bastante memoria para tener la opción de almacenar medidas si el maestro está caído u ocupado.
  • Fácilmente programable.
  • Con empaquetado tipo DIP para el prototipado (esta no es muy importante).
  • Con buenas herramientas para el desarrollo.

Microcontrolador (μC) del bloque maestro

  • Bajo consumo.
  • Con bastante memoria para tener la opción de almacenar medidas si el ordenador está caído.
  • Con periféricos integrados para la conexión con un ordenador (p.e. RS-232), preferiblemente que permita alimentación desde el PC (p.e. USB).
  • Fácilmente programable.
  • Con empaquetado tipo DIP para el prototipado (esta no es muy importante).
  • Con buenas herramientas para el desarrollo.

Transceptores

  • Bajo consumo y con modos de ahorro.
  • Debe permitir una conexión inalámbrica robusta:
    • Debe trabajar en una banda permitida (p.e. Banda ISM).
    • Estaría bien que tuviese un método de comprobación de errores en la transmisión (p.e. CRC)
    • Debe tener un ajuste de potencia de transmisión y una alta sensibilidad de recepción para disminuir el consumo ajustando la potencia necesaria.
  • Debe disponer de un módulo DIP para su prototipado ya que las limitaciones del laboratorio no permiten ruteado para altas frecuencias ni PCB de varias capas.