Sensores Sensirion SHT1x

Olá,

Há uns dias recebi uma amostra do sensor (SHT11) de humidade/temperatura da empresa Sensirion.

Depois de ler e rever o respectivo datasheet, não consigo obter a resposta de ACK bit do sensor depois de transmitir.

Não me esqueci da resistencia (10K) pull-up no pino de DATA. Como o envelope, donde era transportado o SHT11, chegou em más condições leva-me a pensar que o sensor possa estar danificado.

Por isso, a minha pergunta é se alguma alma caridosa já conectou algum SHT1x ao seu Arduino com sucesso e se pode partilhar o codigo de programação ou ficheiro pde.

Sei que sou bastante novo no tema Arduino e que já estou a planear altos voos, no entanto, conectar un SHT11 a um AVR era un sonho que tentava realizar á muito tempo.

Muito obrigado,
Pardalito.

Sensirion Page: http://www.sensirion.com/
SHT1x Page: http://www.sensirion.com/en/02_sensors/03_humidity/00_humidity_temperature_sensor/02_humidity_sensor_sht11.htm
SHT1x Datasheet: http://www.sensirion.com/en/pdf/product_information/Data_Sheet_humidity_sensor_SHT1x_SHT7x_E.pdf

Eu tenho alguma experiencia, estou a fazer um trabalho com o sensor sht71 que é muito semelhante e ja consegui resultados bastante boms
um abraço

Olá,

Há uns dias recebi uma amostra do sensor (SHT11) de humidade/temperatura da empresa Sensirion.

Depois de ler e rever o respectivo datasheet, não consigo obter a resposta de ACK bit do sensor depois de transmitir.

Não me esqueci da resistencia (10K) pull-up no pino de DATA. Como o envelope, donde era transportado o SHT11, chegou em más condições leva-me a pensar que o sensor possa estar danificado.

Por isso, a minha pergunta é se alguma alma caridosa já conectou algum SHT1x ao seu Arduino com sucesso e se pode partilhar o codigo de programação ou ficheiro pde.

Sei que sou bastante novo no tema Arduino e que já estou a planear altos voos, no entanto, conectar un SHT11 a um AVR era un sonho que tentava realizar á muito tempo.

Muito obrigado,
Pardalito.

Sensirion Page: http://www.sensirion.com/
SHT1x Page: http://www.sensirion.com/en/02_sensors/03_humidity/00_humidity_temperature_sensor/02_humidity_sensor_sht11.htm
SHT1x Datasheet: http://www.sensirion.com/en/pdf/product_information/Data_Sheet_humidity_sensor_SHT1x_SHT7x_E.pdf

eu tenho 2 desses sensores.
São bem legais de usar.
Fiz uma mini estação meteorologica com ele.
Não tenho nenhum exemplo em C (Arduino)
Porem já usei ele com basic.
Acho que lendo o código, dá para adaptar alguma coisa, já que o sensor é i2c.
Se quiser o código, basta pedir.

tenta esse:

/*

*/

int dataPin = 8;
int sckPin = 9;

void resetSHT()
{
pinMode(dataPin,OUTPUT);
pinMode(sckPin,OUTPUT);

shiftOut(dataPin, sckPin, LSBFIRST, 255);
shiftOut(dataPin, sckPin, LSBFIRST, 255);

digitalWrite(dataPin,HIGH);
for(int i = 0; i < 15; i++){
digitalWrite(sckPin, LOW);
digitalWrite(sckPin, HIGH);
}
}

//Specific SHT start command
void startSHT()
{
pinMode(sckPin,OUTPUT);
pinMode(dataPin,OUTPUT);
digitalWrite(dataPin,HIGH);
digitalWrite(sckPin,HIGH);
digitalWrite(dataPin,LOW);
digitalWrite(sckPin,LOW);
digitalWrite(sckPin,HIGH);
digitalWrite(dataPin,HIGH);
digitalWrite(sckPin,LOW);
}

void writeByteSHT(byte data)
{
pinMode(sckPin,OUTPUT);
pinMode(dataPin,OUTPUT);

// digitalWrite(dataPin,LOW);
shiftOut(dataPin,sckPin,MSBFIRST,data);

pinMode(dataPin,INPUT);

//Wait for SHT15 to acknowledge by pulling line low
while(digitalRead(dataPin) == 1);

digitalWrite(sckPin,HIGH);
digitalWrite(sckPin,LOW); //Falling edge of 9th clock

//wait for SHT to release line
while(digitalRead(dataPin) == 0 );

//wait for SHT to pull data line low to signal measurement completion
//This can take up to 210ms for 14 bit measurments
int i = 0;
while(digitalRead(dataPin) == 1 )
{
i++;
if (i == 255) break;

delay(10);
}

//debug
i *= 10;
Serial.print("Response time = ");
Serial.println(i);
}

//Read 16 bits from the SHT sensor
int readByte16SHT()
{
int cwt = 0;
unsigned int bitmask = 32768;
int temp;

pinMode(dataPin,INPUT);
pinMode(sckPin,OUTPUT);

digitalWrite(sckPin,LOW);

for(int i = 0; i < 17; i++) {
if(i != 8) {
digitalWrite(sckPin,HIGH);
temp = digitalRead(dataPin);
// Serial.print(temp,BIN);
cwt = cwt + bitmask * temp;
digitalWrite(sckPin,LOW);
bitmask=bitmask/2;
}
else {
pinMode(dataPin,OUTPUT);
digitalWrite(dataPin,LOW);
digitalWrite(sckPin,HIGH);
digitalWrite(sckPin,LOW);
pinMode(dataPin,INPUT);
}
}

//leave clock high??
digitalWrite(sckPin,HIGH);

// Serial.println();

return cwt;
}

int getTempSHT()
{
startSHT();
writeByteSHT(B0000011);
return readByte16SHT();
}

int getHumidSHT()
{
startSHT();
writeByteSHT(B00000101);
return readByte16SHT();
}

void setup() {
pinMode(dataPin,OUTPUT);
pinMode(sckPin,OUTPUT);

Serial.begin(9600); // connect to the serial port

Serial.println("Resetting SHT...");
resetSHT();
}

void loop () {
delay(2000);
Serial.println("Starting Temperature/Humidity reading...");
int temp = getTempSHT();
Serial.print("Temprature:");
Serial.println(temp);

temp = getHumidSHT();
Serial.print("Humidity:");
Serial.println(temp);
}

:smiley: Agora Sim...

Perfeito... No entanto tanto os valores de temperatura/humidade diferem muito do meu termometro que tenho em casa.

SHT11: 24,5 - Term: 22
SHT11: 54% - Term: 65%

Com outro SHT11:
SHT11: 23,5 - Term: 22
SHT11: 60% - Term: 65%

Para a precisao que dizem que o SHT11 tem penso que variam bastante... Algum comentario??

Formulas SHT11:
temp = -40 + 0.01 * val;
humid = -4.0 + 0.0405 * val + -0.0000028 * val * val;

Obrigado,
Pardalito.

:smiley: Agora Sim...

Perfeito... No entanto tanto os valores de temperatura/humidade diferem muito do meu termometro que tenho em casa.

SHT11: 24,5 - Term: 22
SHT11: 54% - Term: 65%

Com outro SHT11:
SHT11: 23,5 - Term: 22
SHT11: 60% - Term: 65%

Para a precisao que dizem que o SHT11 tem penso que variam bastante... Algum comentario??

Formulas SHT11:
temp = -40 + 0.01 * val;
humid = -4.0 + 0.0405 * val + -0.0000028 * val * val;

Obrigado,
Pardalito.

Não sei lhe informar.
Nunca usei o sensor com Arduino e fiz comparações.

Eu já tive problemas em ler os canais Ad do mega8.
A solução encontrada foi ler 10 x e tirar uma média.
Quem sabe não teras que fazer isso com os valores lidos pelo i2c do sensor temp/hum.
é uma idéia.

Testei o sensor aqui e comparei com o termômetro que tenho e tive resultados bons.

Mas o ponto que eu queria comentar é outro. Pessoal, o código postado pelo silverbolt funciona muito bem, porém, é preciso prestar atenção em um detalhe...
O SHT recebe 3 bits de endereço (000) e 5 de comando (00011 para temperatura e 00101 para umidade), totalizando 8. Se observarem bem a linha abaixo, só há 7 bits:

writeByteSHT(B0000011);

Na função de leitura de umidade está correto.

No começo, mesmo com esse erro, o sensor ainda funciona e fornece o valor correto, mas com o tempo pode apresentar problemas. Perdi um sensor assim :confused: