Paso 4: Firmware
Los voltajes de termistor son muestreados, convertidos a temperatura y enviados via Bluetooth a la aplicación de EvoThings en el smartphone.
Para convertir el voltaje a un valor de resistencia en el grano, se utiliza una ecuación lineal simple. La derivación de la ecuación se presenta como una imagen. En lugar de convertir el valor muestreado a tensión, ya que el ADC y el voltaje de entrada se hace referencia a la misma tensión de la batería, podemos utilizar el valor del ADC en vez de la tensión. Para el ADC de 10 bits haba, voltaje de la batería completa dará como resultado un valor ADC de 1023 para que usar este valor como Vbat. El valor real de la resistencia del divisor es una consideración importante. Medir el valor real de la resistencia del divisor de 100K y utilice el valor medido en la ecuación para evitar una innecesaria fuente de error debido a la tolerancia de la resistencia.
Una vez calculado el valor de la resistencia, el valor de la resistencia se convierte en temperatura usando la ecuación de Steinhart-Hart. Esta ecuación se describe en detalle en la Wikipedia.
Porque tenemos 2 puntas de prueba, tenía sentido para encapsular la funcionalidad de la sonda en una clase de C++.
La clase encapsula los coeficientes de la ecuación de Steinhart-Hart, el valor de la resistencia nominal del divisor y el puerto analógico para que el termistor está conectado. Un único método, la temperatura, convierte la ADC valor a un valor de la resistencia y luego utiliza el Steinhart-Hart ecuación para determinar la temperatura en Kelvin. El valor devuelto resta cero absoluto (273.15K) de la temperatura calculada para proporcionar el valor en grados Celsius.
El poder de la Lightblue Bean es evidente en el hecho de que toda la funcionalidad de Bluetooth es aplicada esencialmente en 1 línea de código que escribe los valores muestreados de la temperatura en una zona cero datos en la memoria de Bluetooth.
Bean.setScratchData(TEMPERATURE_SCRATCH_IDX, (uint8_t*)&temperature[0], 12);
Cada valor muestreado es representado por un flotador que ocupa 4 bytes. El área de datos rasguño puede llevar 20 bytes. Estamos utilizando sólo 12 de ellos. Hay 5 zonas de datos rasguño podría transferir hasta 100 bytes de datos utilizando datos de rasguño.
El flujo básico de eventos es:
- Compruebe para ver si tenemos una conexión Bluetooth
- Si es así, las temperaturas de la muestra y escribir en el área de datos cero
- Dormir 200ms y repetir el ciclo.
Si no está conectado, el firmware pone el chip ATMEGA328P dormir durante mucho tiempo. El ciclo del sueño es importante para la conservación de energía. El chip ATMEGA328P entra en modo de baja potencia y permanece allí hasta que se interrumpe por el módulo de Bluetooth LBM313. El LBM313 genera una interrupción para activar la ATMEGA328P al final del período de sueño solicitados, o cuando se realiza una conexión de Bluetooth a la haba. Está habilitada la funcionalidad de WakeOnConnect, explícitamente llamando al Bean.enableWakeOnConnect(true) setup().
Es importante tener en cuenta que el firmware funcionará con cualquier aplicación de cliente BLE. Todo el cliente tiene que hacer es los bytes de la temperatura del Banco de datos del rasguño de la tira y reagruparlas en números de punto para la exhibición o procesamiento flotante. La aplicación de cliente más fácil para mí era usar EvoThings.