Ir ao conteúdo

Posts recomendados

Postado

Olá pessoal, gostaria da opinião de vocês sobre um projeto que pensei em fazer.

Como vocês ai do sul sabem, aqui no nordeste, tudo que choveu ai no Sudeste e no Norte, faltou aqui... Ainda é mês de maio e já não há pastos e todos sentem que a seca que começou agora aqui é a pior dos últimos 25 anos!!

Preciso, junto com uns colegas, fazer um bom sensor de umidade e temperatura pra jogar isso num display ou via serial, etc...

O famoso LM35 é fácil de usar e já faço uso dele em projetos aqui, agora, como eu usaria um sensor de umidade?

Olhem esse sensor de umidade e de temperatura: site e o datasheet dele.

Parece ser uma ótima aquisição, mas não sei onde comprar o dito cujo aqui no Brasil. A comunicação dele é I2C, quais os pics que suportam esta comunicação? Eu só usei até hoje nos PICs Serial, LCD, ADC e PWM, nunca usei I2C. Alguém já usou esse protocolo? Alguém conhece outro sensor?

Olhem abaixo o esquema de ligação dele:

imagemzfo.jpg

Aguardo Ajuda

Postado

Sobre o I2C, a maioria dos PICs já têm um hardware interno para essa comunicação, mesmo que não tivesse, é uma comunicação bem fácil de emular. Tenho exemplo de códigos em C e assembly, qual compilador você está usando?

Sobre o sensor, esse é difícil mesmo de encontrar. Encontrei na farnell http://www.farnellnewark.com.br/sensordeumidadedigital,product,18M2988,4560058.aspx. Mas o preço está exorbitante!

Postado

Eu uso o CCS 4.78

Esse ai que você viu na farnell é o mesmo do que eu citei, mas é muito caro!! Tudo na farnell é caro demais... :mad:

Alguém sabe um outro sensor de umidade? pode ser separado do de temperatura, até hoje usei o LM35 e não tive problemas com ele... As leituras batem certinho com os termômetros daqui.

Mas sensor de umidade eu nunca vi pra vender nos sites de componentes que compro.

O PIC16F877A (que é o que mais uso, tem os seguintes periféricos de comunicação):

1-A/E/USART, 1-MSSP(SPI/I2C)

Postado

Eu usei o DHT-11, que mede temperatura e umidade do ar, e comprei ele no Mercado Livre, bem baratinho.

É um sensor do tipo 1-Wire ( mas não é padrão exato ! ), não tem uma precisão enorme, mas para uso simples funciona muito bem. Comparei a temperatura com um LM35, e a diferença sempre foi menor do que 1 grau, entre 0 e 50 graus.

Se quiser ver como ele funciona, eu usei ele no Tutorial com Basic, e expliquei bastante para facilitar aos iniciantes, segue o link para te facilitar, ok ?

http://forum.clubedohardware.com.br/showpost.php?p=5553520&postcount=1

E o melhor de tudo para voce é que pode utilizar qualquer PIC, pois o protocolo tipo 1-Wire ( é parecido com 1-Wire mas não segue o padrão ... ) é simulado com qualquer pino, e o código-fonte que usei em Basic pode ser passado pro PIC facilmente.

Bons usos !

Paulo

Postado

Quanto tempo não passo por aqui =D...

O SHT1x e 7x não são I2C, em algum lugar do datasheet está escrito (não me lembro onde). Eu já usei 2 deles, são ótimos por sinal, repetitibilidade excelente mas realmente são caros. Na época comprei no mercado livre 2xSHT11 por R$100,00 mas não sei se encontra ainda.

No início estava usando esse driver para simular (proteus):

http://www.ccsinfo.com/forum/viewtopic.php?t=28564

Dava um erro na medição então eu resolvi criar um driver, o erro ficou igualzinho hehe!

Uns amigos meus usaram o DHt11 e falaram que ele é muito bom mesmo...

Postado

Oi test man, faz tempo mesmo hein ????

Eu comprei o DHT11 no ML, paguei uns R$ 12,00, e realmente funcionou muito bem. Aliás, comprei 2, e ambos deram exatamente as mesmas leituras tanto em temperatura como em umidade. Mas a precisão não é das maiores, a umidade é +- 5% e a temperatura creio que é +- 2 graus.

Paulo

Postado

Pessoal, achei no Mercado Livre o sensor DHT-11 por 19,00 reais.

Nesse site tem este esquema de ligação com PIC

DHT11_PIC16F.jpg

No site tem o código em C, acho que é para MikroC.

Site

Alguém pode me ajudar a traduzir pra CCS? Meu conhecimento é pouco. Ou então dar uma luz ai de como é essa comunicação, como armazenar em váriável, que tipo de variável usar e se precisa fazer algum calculo antes de apresentar em LCD.

O LM35 tem de fazer toda aquela coisa de pegar o valor da variável, multiplicar aqui, dividir ali atc... Com esse DHT11 precisa fazer esse processo?

Eis o código de MikroC que quero passar pra CCS para entender o que é feito.

// LCD module connections

sbit LCD_RS at RB2_bit;

sbit LCD_EN at RB3_bit;

sbit LCD_D4 at RB4_bit;

sbit LCD_D5 at RB5_bit;

sbit LCD_D6 at RB6_bit;

sbit LCD_D7 at RB7_bit;

sbit LCD_RS_Direction at TRISB2_bit;

sbit LCD_EN_Direction at TRISB3_bit;

sbit LCD_D4_Direction at TRISB4_bit;

sbit LCD_D5_Direction at TRISB5_bit;

sbit LCD_D6_Direction at TRISB6_bit;

sbit LCD_D7_Direction at TRISB7_bit;

sbit Data at RA0_bit;

sbit DataDir at TRISA0_bit;

char message1[] = "Temp = 00.0 C";

char message2[] = "RH = 00.0 %";

unsigned short TOUT = 0, CheckSum, i;

unsigned short T_Byte1, T_Byte2, RH_Byte1, RH_Byte2;

void StartSignal(){

DataDir = 0; // Data port is output

Data = 0;

Delay_ms(25); // Low for at least 18us

Data = 1;

Delay_us(30); // High for 20-40 us

DataDir = 1; // Data port is input

}

unsigned short CheckResponse(){

TOUT = 0;

TMR2 = 0;

T2CON.TMR2ON = 1; // Start TMR2 while waiting for sensor response

while(!Data && !TOUT); // If there's no response within 256us, the Timer2 overflows

if (TOUT) return 0; // and exit

else {

TMR2 = 0;

while(Data && !TOUT);

if (TOUT) return 0;

else {

T2CON.TMR2ON = 0;

return 1;

}

}

}

unsigned short ReadByte(){

unsigned short num = 0, t;

DataDir = 1;

for (i=0; i<8; i++){

while(!Data);

TMR2 = 0;

T2CON.TMR2ON = 1; // Start TMR2 from 0 when a low to high data pulse

while(Data); // is detected, and wait until it falls low again.

T2CON.TMR2ON = 0; // Stop the TMR2 when the data pulse falls low.

if(TMR2 > 40) num |= 1<<(7-i); // If time > 40us, Data is 1

}

return num;

}

void interrupt(){

if(PIR1.TMR2IF){

TOUT = 1;

T2CON.TMR2ON = 0; // stop timer

PIR1.TMR2IF = 0; // Clear TMR0 interrupt flag

}

}

void main() {

unsigned short check;

TRISB = 0b00000000;

PORTB = 0;

TRISA = 0b00100001;

CMCON = 7;

INTCON.GIE = 1; //Enable global interrupt

INTCON.PEIE = 1; //Enable peripheral interrupt

// Configure Timer2 module

PIE1.TMR2IE = 1; // Enable Timer2 interrupt

T2CON = 0; // Prescaler 1:1, and Timer2 is off initially

PIR1.TMR2IF =0; // Clear TMR INT Flag bit

TMR2 = 0;

Lcd_Init();

Lcd_Cmd(_Lcd_Clear);

Lcd_Cmd(_LCD_CURSOR_OFF);

do {

Delay_ms(1000);

StartSignal();

check = CheckResponse();

if (!check) {

Lcd_Cmd(_Lcd_Clear);

Lcd_Out(1, 1, "No response");

Lcd_Out(2, 1, "from the sensor");

}

else{

RH_Byte1 = ReadByte();

RH_Byte2 = ReadByte();

T_Byte1 = ReadByte();

T_Byte2 = ReadByte();

CheckSum = ReadByte();

// Check for error in Data reception

if (CheckSum == ((RH_Byte1 + RH_Byte2 + T_Byte1 + T_Byte2) & 0xFF))

{

message1[7] = T_Byte1/10 + 48;

message1[8] = T_Byte1%10 + 48;

message1[10] = T_Byte2/10 + 48;

message2[7] = RH_Byte1/10 + 48;

message2[8] = RH_Byte1%10 + 48;

message2[10] = RH_Byte2/10 + 48;

message1[11] = 223; // Degree symbol

Lcd_Cmd(_Lcd_Clear);

Lcd_Out(1, 1, message1);

Lcd_Out(2, 1, message2);

}

else{

Lcd_Cmd(_Lcd_Clear);

Lcd_Out(1, 1, "Checksum Error!");

Lcd_Out(2, 1, "Trying Again ...");

}

}

}while(1);

}

  • Curtir 1
  • 3 anos depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...