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

Reply via email to