ngoprek sht11 (sensor suhu dan kelembaban)


dulu semasa kuliah pengen beli sensor sht11 ga kebeli. maklum belum punya duit sendiri. sekarang akhirnya kesampaian juga ngoprek SHT 11. sensor ini aslinya murah banget. tapi karena eh karena harganya melambung tinggi jadi 350 rebu.  maklum indonesia negara yang sangat maju sekali dalam bidang perdagangan. tiap hari motor buatan luar negeri pasti ada yang beli.

di INDONESIA motor seperti gorengan, tinggal ambil saja bayar belakangan juga bisa. dan saya pastikan project GO GREEN ga bakalan sukses selama kredit motor masih gamapang syaratnya dan laku keras.

saya aktivis kredit motor saja lah dan anti go green,

ini dia sensor sht 11 nya

untuk dasar teorinya biar orang lain saja yang bahas. saya cari cari di internet kebanyakan pakai bascom avr, saya convert ke bahasa c gaul code vision. support juga pastinya untuk avr gcc.

//=================================================================
//sht
//==============================================================
void StartSignal()
{       
    ddr_data_out;
    data_hi;;  
    delay_us(1);
    clk_lo;    
    delay_us(1);
    clk_hi;           //Clock pertama
    delay_us(1);
    data_lo;   
    delay_us(1);
    clk_lo; 
    delay_us(1);
    clk_hi;           //Clock pertama
    delay_us(1);
    data_hi;;  
    delay_us(1);
    clk_lo;
    ddr_data_out;       // PortA.0 sbg Output       
}

void ResetSHT (void)
{
    unsigned char i;
    ddr_data_out;   
    data_hi;
    clk_lo;         
    for (i=0; i<=8; i++)
      {
        clk_hi;     //Kirim Data (ShtClock rising edge), 9 kali
        clk_lo;
      }
    StartSignal();        //Transmission Start 
}

void SHTWait()
{
    unsigned char i;
    ddr_data_out;
    data_hi;          //Pin ShtData sebagai input
    ddr_data_in;
    for (i=0; i<250; i++)
      {                     
        TimeOut=(PIND&4)>>2;
        if(!((PIND&4)>>2))break;
        delay_ms(1);
      }      
}

void SHTWriteByte (unsigned char data)
{
    unsigned char i;
    ddr_data_out;       
   
    for(i = 8;i > 0; i–)
    {
        if(data & (1 << (i – 1)))data_hi;
        else data_lo;
        clk_hi;        //Kirim Data (ShtClock rising edge)
        delay_us(10);
        clk_lo;
    }
   
    ddr_data_in;
    clk_hi;             
    AckBit = (PIND&4)>>2;       //Ambil sinyal acknowledge
    delay_us(10);
    clk_lo;;
}

//Receive Data dan kirim bit “AckBit” (‘0’ untuk ACK atau ‘1’ untuk NACK)
void SHTReadByte ()
{
    unsigned char i;
    DataRead = 0x00;
    ddr_data_out;
    data_hi;          //Pin ShtData sebagai input
    ddr_data_in;
    for (i=0; i<8; i++)
      {
        DataRead<<=1;
        clk_hi;
        DataRead |=(PIND&4)>>2 ;  //Ambil Data (MSB first)
        delay_us(10);
        clk_lo;
      }
    ddr_data_out;   
    if (AckBit==1) data_hi;   //Kirim Noacknowledge
    else data_lo;             //Kirim Acknowledge
    clk_hi;         
    delay_us(10);
    clk_lo;
}

// Pembacaan Temperature dari SHt11
void SHTReadTemp (void)
{       
    StartSignal();
    SHTWriteByte(0x03);      //Command Measure Temperature
    if (AckBit==0)
      {
        SHTWait();           //Tunggu sampai pengukuran selesai
        if (TimeOut==0)
          {
           AckBit=0;                    //Kirim ACK untuk menerima byte berikutnya
            SHTReadByte();              // Ambli Byte MSB
            DataTempSHT = DataRead;
            DataTempSHT <<= 8;
            AckBit=1;                   //Kirim NACK untuk mengakhiri pengambilan data
            SHTReadByte();
            DataTempSHT |= DataRead;   //Ambil byte LSB
           
            DataRead = DataTempSHT;           
          }
      }
}

void SHTReadHumidity (void)
{
    StartSignal();
    SHTWriteByte(0x05);   //Command Measure Humidity
    if (AckBit==0)
      {
        SHTWait();
        if (TimeOut==0)
          {
            AckBit=0;
            SHTReadByte();
            DataRHSHT = DataRead;
            DataRHSHT <<= 8;
            AckBit=1;
            SHTReadByte();
            DataRHSHT |= DataRead;
           
            DataRead = DataRHSHT;
          }
      }
}

itu puisi dari saya

8 thoughts on “ngoprek sht11 (sensor suhu dan kelembaban)”

  1. bang itu kan baru prosedur2 inisialisasi kirim perintaah,nunggu respon,nunggu data,dsb.Naah main void nya urut2annya biar datanya tu sensor bsa gantian gmn?soale sya biasanya klo gak I2C yg setiap divicenya punya alamt sya gunain mux sbgai pengganti chip Enable

  2. mas, mau nny.
    di datasheetny kan wiring sht-11 tu maksimal hanya 10cm.
    nah, carany untuk pemasangan wiring diatas 3m gmn ya mas?
    apakah perlu op-amp.
    mohon pencerahannya.
    #makasih

  3. Mas, aku minta tolong nih contoh program Bascom AVRnya untuk bisa baca sensor GY-81 untuk gyro,accelero,compas, dan pressure. Makasih ya sebelumnya. Ditunggu lho….

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s