Temperatura y Humedad Bluetooth BLE

          El objetivo es hacer un sensor de temperatura y humedad (si, otro más) con transmisión por BT de baja energía y conseguir un consumo mínimo en reposo. Solo permanece en espera el BT, el resto, tanto el sensor  HDC1080 como el Arduino Pro Micro están apagados hasta solicitar una lectura.

          El bluetooth es un módulo de bajo consumo JDY-23. Se puede configurar fácilmente con comandos AT con un conversor USB-Serial y el software Termite. Solo he cambiado el nombre AT+ NAMEJDY-23JopapaBLE2  y  AT+STARTEN0 para que siempre entre en modo Sleep si no recibe una solicitud de conexión. Tener en cuenta que en este modo y para ahorrar consumo el LED del módulo estará siempre apagado.
          Manual en PDF aqui
         

          El consumo del módulo es de 200µA en Sleep y sube a 2mA cuando recibe una petición de conexión.

          La parte importante de este montaje es que su pin STAT esta a nivel bajo en reposo y pasa a alto cunado el BT se activa. Esto no permite dar tensión al Arduino y al sensor HDC1080 que siempre están apagados y con consumo cero.
          El esquema del circuito con el sensor HDC1080 de alta precisión. Normalmente solo hay un consumo de 0,2mA ya que HDC1080 y Arduino están desconectados. Al recibir una petición de conexión, el pin STAT pasa a alto haciendo que el transistor 2N2222 y de tensión a los otros dos elementos. El consumo sube a unos 11mA. Realizamos la lectura y desconectamos del BT que vuelve a modo Sleep.
          En la conexión serie solo se usa un cable entre Arduino(Tx) y BT(Rx). 

          La alimentación es con pila de litio. Con carga máxima de 4 voltios no se han dañado ningún componente. Un punto interesante es que el voltaje mínimo de funcionamiento del sensor HDC1080 es de 2,7v lo que significa que si no recibimos lecturas es que la batería en nivel mínimo y es hora de cambiarla. Creo que con una pila de litio 18650 alimentaria al circuito largo tiempo dependiendo de las veces que le solicitemos información.
          Pendiente de montaje en una caja adecuada.
          La información de temperatura y humedad puede recibirse en el teléfono con la aplicación Serial Bluetooth Terminal o con aplicación programada. Yo la he hecho en App Inventor.


Programa Arduino

#include <Wire.h>
#include "ClosedCube_HDC1080.h"
#include <SendOnlySoftwareSerial.h>

ClosedCube_HDC1080 hdc1080;
SendOnlySoftwareSerial Bluetooth(3); //tx

String temperatur;
String humeda;

void setup() {
  Serial.begin(9600);
  Bluetooth.begin(9600);
  hdc1080.begin(0x40);


void loop(){
  double temperatura = hdc1080.readTemperature();
  double humedad = hdc1080.readHumidity();
//Para ver en monitor serial 
  Serial.print("Temperatura = ");
  Serial.print(temperatura);
  Serial.print("ºC  Humedad = ");
  Serial.print(humedad);
  Serial.println("ºC");

/*Para ver en App SerialBT
  Bluetooth.print("T: ");
  Bluetooth.print(temperatura);
  Bluetooth.print("°C---H: ");
  Bluetooth.print(int(humedad));
  Bluetooth.println("%");*/

//Para ver en app Android
  Bluetooth.print(temperatura);
  Bluetooth.print(",");
  Bluetooth.print(int(humedad));  //sin decimales
  delay(2000);
}
TyH_BLE.apk
//Para tarjeta Digispark
#include <Wire.h>
#include <HDC1080JS.h>
#include <SendOnlySoftwareSerial.h>

SendOnlySoftwareSerial Bluetooth(3); //tx
HDC1080JS tempsensor;

void setup() {
  Wire.begin();
// Wire.setClock(400000); //set clock speed for I2C bus to maximum allowed for HDC1080
  Bluetooth.begin(9600);
  tempsensor = HDC1080JS();
  tempsensor.config(); 


void loop(){
  tempsensor.readTempHumid();
  float temp = tempsensor.getTemp();
  float humed = tempsensor.getRelativeHumidity();

//Para ver en App SerialBT
//  Bluetooth.print("T: ");
//  Bluetooth.print(temp);
//  Bluetooth.print("°C---H: ");
//  Bluetooth.print(int(humed));
//  Bluetooth.println("%");

//Para ver en app Android
  Bluetooth.print(temp);
  Bluetooth.print(",");
  Bluetooth.print(int(humed));  //sin decimales
  delay(2000);
}
Menu