My guess
Your AD converters have a voltage reference that works even when battery is
low. But your analog input voltage to temperature and relative humidity drops
faster. (Or the other way around)
/RogerL
----- Ursprungsmeddelande -----
> Hi to all,
>
> I am developing an application to sense temperature and relative
> humidity, using Telosb motes.
>
> The application is Java. When running the application, it receives the
> temperature and humidity values correctly. But after a while, the
> value of the temperature begins to rise and rise, reaching 124.23 °
> (limit of sensor SHT11) and the humidity exceeds 100%. Furthermore,
> the battery voltage begins to decrease.
>
> Where is the problem:
> - NESC application
> - Java application
> - Calibrate the sensors. ¿how to?
>
> Here are the files NESC:
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> #ifndef TMOTESKY_H
> #define TMOTESKY_H
> enum {
> NREADINGS = 2,
> DEFAULT_INTERVAL = 1000,
> AM_TMOTESKY_STRUCT = 0x93
> };
>
> typedef nx_struct tmotesky_struct {
> nx_uint16_t version;
> nx_uint16_t interval;
> nx_uint16_t id;
> nx_uint16_t count;
> nx_uint16_t Temp;
> nx_uint16_t ITemp;
> nx_uint16_t TSR;
> nx_uint16_t PAR;
> nx_uint16_t Humedad;
> nx_uint16_t Voltage;
> nx_uint16_t tipoUmbral;
> nx_uint16_t transmision;
> nx_uint16_t umbralSuperior;
> nx_uint16_t umbralInferior;
> } tmotesky_struct_t;
>
> #endif
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> configuration TmoteSkyAppC {
> }
>
> implementation {
> components TmoteSkyC;
> components MainC;
> components ActiveMessageC;
> components LedsC;
> components new TimerMilliC();
> components new SensirionSht11C() as TempSensor;
> components new SensirionSht11C() as HumSensor;
> components new VoltageC() as VoltageSensor;
> components CC2420ActiveMessageC as LplRadio;
> components new AMSenderC(AM_TMOTESKY_STRUCT);
> components new AMReceiverC(AM_TMOTESKY_STRUCT);
>
> TmoteSkyC.Boot -> MainC;
> TmoteSkyC.RadioControl -> ActiveMessageC;
> TmoteSkyC.AMSend -> AMSenderC;
> TmoteSkyC.Receive -> AMReceiverC;
> TmoteSkyC.Timer -> TimerMilliC;
> TmoteSkyC.ReadTemp -> TempSensor.Temperature;
> TmoteSkyC.ReadHum -> HumSensor.Humidity;
> TmoteSkyC.ReadVolt -> VoltageSensor;
> TmoteSkyC.Leds -> LedsC;
> TmoteSkyC.LowPowerListening -> LplRadio;
> }
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > >
> #include "Timer.h"
> #include "TmoteSky.h"
>
> module TmoteSkyC {
> uses {
> interface Boot;
> interface SplitControl as RadioControl;
> interface AMSend;
> interface Receive;
> interface Timer<TMilli>;
> interface Read<uint16_t> as ReadTemp;
> interface Read<uint16_t> as ReadHum;
> interface Read<uint16_t> as ReadVolt;
> interface Leds;
> interface LowPowerListening;
> }
> }
>
> implementation {
> message_t sendbuf;
> bool sendbusy;
> tmotesky_struct_t local;
> bool suppress_count_change;
>
> nx_uint16_t tUmbral;
> nx_uint16_t USuperiorTemp;
> nx_uint16_t UInferiorTemp;
> nx_uint16_t USuperiorHum;
> nx_uint16_t UInferiorHum;
> nx_uint16_t USuperiorTSR;
> nx_uint16_t UInferiorTSR;
> nx_uint16_t idTemp;
> nx_uint16_t envioEvento;
> nx_uint16_t envioInicial;
>
> // Uso de los LEDs para reportar comportamientos
> void report_problem() { call Leds.led0Toggle();}
> void report_sent() { call Leds.led1Toggle(); }
> void report_received() { call Leds.led2Toggle(); }
>
> event void Boot.booted() {
> local.interval = DEFAULT_INTERVAL;
> local.id = TOS_NODE_ID;
> USuperiorTemp=10000;
> UInferiorTemp=9000;
>
> if (call RadioControl.start() != SUCCESS){
> report_problem();
> }
>
> local.transmision = 0; /*inicia sin transmitir nada*/
> envioEvento = 0;
> envioInicial = 0;
> }
>
> void startTimer() {
> call Timer.startPeriodic(local.interval);
> }
>
> event void RadioControl.startDone(error_t error) {
> startTimer();
> }
>
> event void RadioControl.stopDone(error_t error) {
> }
>
> event message_t* Receive.receive(message_t* msg, void* payload,
> uint8_t len) {
> tmotesky_struct_t *omsg = payload;
>
> report_received();
> local.transmision = omsg->transmision;
> local.tipoUmbral = omsg->tipoUmbral;
> local.umbralSuperior = omsg->umbralSuperior;
> local.umbralInferior = omsg->umbralInferior;
> local.interval = omsg->interval;
> idTemp = omsg->id; //extrae ID anterior del msg recibido
>
> startTimer();
>
> if (omsg->count > local.count) {
> local.count = omsg->count;
> suppress_count_change = TRUE;
> }
> return msg;
> }
>
> void envio() {
> if (!sendbusy && sizeof local <= call AMSend.maxPayloadLength()) {
> memcpy(call AMSend.getPayload(&sendbuf,sizeof(local)), &local,
> sizeof local);
> if (call AMSend.send(AM_BROADCAST_ADDR, &sendbuf, sizeof local)
> == SUCCESS)
> sendbusy = TRUE;
> }
> if (!sendbusy)
> report_problem();
>
> if (!suppress_count_change)
> local.count++;
>
> suppress_count_change = FALSE;
>
> if (call ReadTemp.read() != SUCCESS)
> report_problem();
>
> if (call ReadHum.read() != SUCCESS)
> report_problem();
>
> if (call ReadVolt.read() != SUCCESS)
> report_problem();
> }
>
> void MsgTipoUmbral(int tipoUmb) {
> if (tipoUmb == 1) {
> local.umbralSuperior = USuperiorTemp;
> local.umbralInferior = UInferiorTemp;
> }
> if (tipoUmb == 2) {
> local.umbralSuperior = USuperiorHum;
> local.umbralInferior = UInferiorHum;
> }
> if (tipoUmb == 3) {
> local.umbralSuperior = USuperiorTSR;
> local.umbralInferior = UInferiorTSR;
> }
> if (tipoUmb == 4) {
> USuperiorTemp = local.umbralSuperior;
> UInferiorTemp = local.umbralInferior;
> }
> if (tipoUmb == 5) {
> USuperiorHum = local.umbralSuperior;
> UInferiorHum = local.umbralInferior;
> }
> if (tipoUmb == 6) {
> USuperiorTSR = local.umbralSuperior;
> UInferiorTSR = local.umbralInferior;
> }
> }
>
> event void Timer.fired() {
> switch(local.transmision) {
> case 0 : call Leds.set(0);
> if (envioInicial == 0){
> envio();
> envioInicial = 1;
> }
> break;
> case 1 : envio();
> break;
>
> case 2 : MsgTipoUmbral(local.tipoUmbral);
> local.transmision=0;
> envio();
> break;
>
> case 3 : if(local.id == idTemp) {
> local.id = local.tipoUmbral;
> }
> break;
>
> }
> envioEvento++;
> }
>
> event void AMSend.sendDone(message_t* msg, error_t error) {
> if (error == SUCCESS)
> report_sent();
> else
> report_problem();
>
> sendbusy = FALSE;
> }
>
> event void ReadTemp.readDone(error_t result, uint16_t data) {
> if (result != SUCCESS) {
> data = 0xffff;
> report_problem();
> }
> local.Temp = data;
> }
>
> event void ReadHum.readDone(error_t result, uint16_t data) {
> if (result != SUCCESS) {
> data = 0xffff;
> report_problem();
> }
> local.Humedad = data;
> }
>
> event void ReadVolt.readDone(error_t result, uint16_t data) {
> if (result != SUCCESS) {
> data = 0xffff;
> report_problem();
> }
> local.Voltage = data;
> }
> }
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > >
>
> You are the experts, I am here to learn.
> Salu2, regards!!!
>
> _______________________________________________
> Tinyos-help mailing list
> [email protected]<mailto:[email protected]>
> https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help
>
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help