STM32F303 ile SHT35 sıcaklık ve nem sensörü projesi

SHT35 Sensör Projesi

Bu projenin amacı nedir?

STM32F mikrodenetleyicisini kullanarak SHT35 sensörünün basit bir projesini yapacağız. projeyi daha kolay kurabilmek için Gebra SHT35 Nem ve Sıcaklık Sensör Modülü ve GebraBit STM32F303 olmak üzere iki hazır modül kullanıyoruz. Bu iki modül, işi kolaylaştırmak için GebraBit ekibi tarafından sağlanan SHT35 sensörü ve STM32F mikro denetleyicisinin gerekli minimum elemanlarını içerir.

Bu projeye başlamak için neye ihtiyacımız var?

bu projeyi gerçekleştirmek için bazı donanım ve yazılımlara ihtiyacımız var. Bu donanım ve yazılımların başlıkları aşağıdaki tabloda sizlere sunulmuştur ve her birinin üzerine tıklayarak hazırlayabilir/indirebilir ve başlamaya hazırlanabilirsiniz.

GEREKLİ DONANIMGEREKLİ YAZILIM
ST-LINK/V2 ProgrammerKeil uVision Programmer – (Nasıl kurulur ?)
STM32 Microcontroller – ( Gebra STM32f303 )STM32CubeMX Program – (Nasıl kurulur ?)
Gebra SHT35 Nem ve Sıcaklık Sensör Modülü

STM32CubeMX Ayarları

I2C ayarları

Gebra STM32F303 ile Gebra SHT35 I2C aracılığıyla iletişim kurmak için Connectivity->I2C kısmından Fast Mod‘u seçin ve PB8 ve PB9 pinlerini SCL ve SDA olarak seçin

Not: Eğer başka bir mikroişlemci kullanıyorsanız veya i2c için başka pin kullanmak istiyorsanız istediğiniz pine tıklayıp i2c1_scl , i2c1_sda pinleri seçebilirsiniz

RCC / Clock ayarları

Gebra STM32F303‘de harici kristalin (External Crystal) bulunması nedeniyle “RCC” kısmında “Crystal/Ceramic Resonator”i seçiyoruz:

Daha sonra Clock Configuration sayfasından PLLCLK modunu seçiyoruz ve diğer gereklı ayarları yapıyoruz (daha fazla bilgi için tıklayınız)

Debug & Programming ayarları

bu modülde  Debug&Programming sırasında pin sayısını azaltmak için “SWCLK” ve “SWDIO” pinleri için “SYS” bloğunda “Debug” kısmından “Serial Wire” seçeneğini seçiyoruz.

Project Manager ayarları

“Project Manager” ayarları aşağıdaki gibidir, burada “MDK-ARM” versiyon “5.32” kullandık. eğer siz kodlamak için başka bir İDE kullanıyorsanız Toolchain seçeneğinden kullandığınız İDE’yi seçmeniz gerekecek

Yukarıdaki tüm ayarları tamamladıktan sonra GENERATE CODE seçeneğine tıklıyoruz.

Source Code

Projenin kütüphanesi (Library)

GebraMS, çeşitli sensör ve entegrelerin modüler tasarımına ek olarak, kullanıcıların yazılım kurma ve geliştirme işlemlerini kolaylaştırmak için C dilinde çeşitli yapılandırılmış ve donanımdan bağımsız kütüphaneler (Library) sağlamaya çalışır. Bu amaçla, kullanıcılar, istedikleri modülün kütüphanesini “.h” ve “.c” dosyasını (Başlık ve Kaynak) olarak indirebilirler.

GebraMS tarafından sağlanan projenin kütüphanesini projenize ekleyerek ( projeye dosya nasıl eklenir ) kodumuzu kolayca geliştirebiliriz. ilgili dosyaları projenin sonunda veya sağ tarafta ilgili sayfalar kısmında bulabilirsiniz

Kütüphanede tanımlanan tüm fonksiyonlar tüm detaylarıyla yorumlanmakta ve fonksiyonların argümanlarında alınan tüm parametreler ve dönüş değerleri kısaca açıklanmaktadır. Kütüphaneler donanımdan bağımsız olduğundan kullanıcı istediği compiler’e kolaylıkla kütüphaneyi ekleyebilir ve istediği mikroişlemci ve geliştirme kartı ile geliştirebilir.

GebraBit_SHT35.h başlık dosyası

Bu dosyada sensörün veya entegrenin veri sayfası baz alınarak tüm adres kayıtları, her kaydın değerleri “Numaralandırma” şeklinde tanımlanır. Ayrıca SHT35 sensörünün kasası ve SHT35 sensör iç bloklarının her birine ilişkin konfigürasyonlar GebraBit_SHT35 adı ile bir “STRUCT” şeklinde tanımlanmıştır. Son olarak Debug Session ortamında her blokla ilgili tüm konfigürasyonlar gerçek zamanlı olarak görülebilmektedir.    

USER REGISTER MAP

The registry map or sensor commands are defined in this section:

C
/************************************************
*              USER REGISTER MAP               *
***********************************************/
#define SHT35_I2C                                   &hi2c
#define SHT35_SOFT_RESET_TIME                       5
#define SHT35_ADDRESS                               0x44
#define SHT35_WRITE_ADDRESS                         ((SHT35_ADDRESS<<1)|0)
#define SHT35_READ_ADDRESS                          ((SHT35_ADDRESS<<1)|1)
#define SHT35_READOUT_PERIODIC_MEASUREMENT_RESULT   0xE000
#define SHT35_ART                                   0x2B32
#define SHT35_BREAK_STOP                            0x3093
#define SHT35_SOFT_RESET                            0x30A2
#define SHT35_HEATER_ON                             0x306D
#define SHT35_HEATER_OFF                            0x3066
#define SHT35_READOUT_STATUS_REGISTER               0xF32D
#define SHT35_CLEAR_STATUS_REGISTER                 0x3041
/*----------------------------------------------*
*           USER REGISTER MAP End              *
*----------------------------------------------*/

 SHT35_Ability Enum

The ability to activate or deactivate different parts of the sensor is defined in this enum:

C
typedef enum Ability
{
    Disable = 0 ,
    Enable
}SHT35_Ability;

SHT35_Single_Shot_Mode Enum

The values of this enum are used to select different sensor measurement modes in Single Shot mode:

C
 typedef enum Single_Shot_Mode
  {
   SHT35_HIGH_REPEATABILITY_CLOCK_STRETCHING      =  0x2C06 ,
   SHT35_MEDIUM_REPEATABILITY_CLOCK_STRETCHING    =  0x2C0D ,
   SHT35_LOW_REPEATABILITY_CLOCK_STRETCHING       =  0x2C10 ,
   SHT35_HIGH_REPEATABILITY_NO_CLOCK_STRETCHING   =  0x2400 ,
   SHT35_MEDIUM_REPEATABILITY_NO_CLOCK_STRETCHING =  0x240B ,
   SHT35_LOW_REPEATABILITY_NO_CLOCK_STRETCHING    =  0x2416
  }SHT35_Single_Shot_Mode;

SHT35_Periodic_Data_Acquisition_Mode Enum

The values of this enum are used to select different sensor data acquisition modes in periodic mode:

C
 typedef enum Periodic_Data_Acquisition_Mode
  {
   SHT35_HIGH_REPEATABILITY_0P5_MPS_FREQUENCY      =  0x2032 ,
   SHT35_MEDIUM_REPEATABILITY_0P5_MPS_FREQUENCY    =  0x2024 ,
   SHT35_LOW_REPEATABILITY_0P5_MPS_FREQUENCY       =  0x202F ,
   SHT35_HIGH_REPEATABILITY_1_MPS_FREQUENCY      =  0x2130 ,
   SHT35_MEDIUM_REPEATABILITY_1_MPS_FREQUENCY    =  0x2126 ,
   SHT35_LOW_REPEATABILITY_1_MPS_FREQUENCY       =  0x212D ,
   SHT35_HIGH_REPEATABILITY_2_MPS_FREQUENCY        =  0x2236 ,
  SHT35_MEDIUM_REPEATABILITY_2_MPS_FREQUENCY      =  0x2220 ,
  SHT35_LOW_REPEATABILITY_2_MPS_FREQUENCY         =  0x222B ,
  SHT35_HIGH_REPEATABILITY_4_MPS_FREQUENCY       =  0x2334 ,
  SHT35_MEDIUM_REPEATABILITY_4_MPS_FREQUENCY     =  0x2322 ,
  SHT35_LOW_REPEATABILITY_4_MPS_FREQUENCY        =  0x2329 ,
  SHT35_HIGH_REPEATABILITY_10_MPS_FREQUENCY      =  0x2737 ,
  SHT35_MEDIUM_REPEATABILITY_10_MPS_FREQUENCY    =  0x2721 ,
  SHT35_LOW_REPEATABILITY_10_MPS_FREQUENCY       =  0x272A
 }SHT35_Periodic_Mode;

SHT35_ Command_Status Enum

To know the status of commands sent to the sensor, the values of this enum are used:

C
 typedef enum Command_Status
 {
    LAST_COMMAND_PROCESSED       = 0 ,
    LAST_COMMAND_NOT_PROCESSED   = 1
 }SHT35_Command_Status;

SHT35_ Checksum_Status Enum

This enum is used to know the checksum status

C
 typedef enum Checksum_Status
 {
 ECKSUM_CORRECT               = 0 ,
    LAST_WRITE_CHECKSUM_FAILED  = 1
 }SHT35_Checksum_Status;

SHT35_Measurement_Time Enum

This enum is used to choose when to convert data values

C
 typedef enum Measurement_Time
 {
   HIGH_REPEATABILITY_15_mS      =  15 ,
   MEDIUM_REPEATABILITY_6_mS     =  6  ,
   LOW_REPEATABILITY_4_mS        =  4  ,
 }SHT35_Measurement_Time;

SHT35_ Heater Enum

Using this enum, the sensor internal heater is turned off or on:

C
 typedef enum Heater
 {
    HEATER_ENABLE  = SHT35_HEATER_ON ,
    HEATER_DISABLE = SHT35_HEATER_OFF
 }SHT35_Heater;

SHT35_Alert_Pending_Status Enum

Using this enum, the status of sensor notifications and warnings is checked:

C
 typedef enum Alert_Pending_Status
 {
   NO_PENDING_ALERT           = 0,
   AT_LEAST_ONE_PENDING_ALERT   = 1
 } SHT35_Alert_Pending_Status;

SHT35_CRC_Status Enum

Using this enum, the status of the CRC check is specified

C
 typedef enum CRC_Status
 {
    CRC_ERROR = 0 ,
    CRC_OK
 }SHT35_CRC_Status;

SHT35_Alert Enum

For sensor temperature and humidity alerts, this enum is used

C
typedef enum Alert
{
  NO_ALERT = 0,
  ALERT    = 1
} SHT35_Alert;

SHT35_Reset_Status Enum

By using this enum, the sensor reset status is specified

C
typedef enum
 {
    NOT_DETECTED = 0 ,
    DETECTED
 }SHT35_Reset_Status;

SHT35 struct

All sensor properties, calibration coefficients and sensor data are defined in this “struct” and All the information and configuration implemented on the sensor are stored in this “structure” and you can see the changes in each part of the sensor in the “Debug Session” environment.

C
typedef    struct SHT35
  {
      uint8_t                              Register_Cache;
      SHT35_Reset                          RESET;
      uint16_t                             COMMAND;
      SHT35_Single_Shot_Mode               SINGLE_SHOT_MODE;
      SHT35_Periodic_Mode                  PERIODIC_MODE;
      SHT35_Measurement_Time               MEASUREMENT_TIME;
      HTU31D_Ability                       ART;
      uint16_t                             STATUS_REGISTER;
      SHT35_Alert_Pending_Status           ALERT_PENDING;
      SHT35_Heater                         ON_CHIP_HEATER;
      SHT35_Alert                          HUMIDITY_ALERT;
      SHT35_Alert                          TEMPERATURE_ALERT;
      SHT35_Command_Status                 COMMAND_STATUS;
      SHT35_Checksum_Status                CHECKSUM;
      uint8_t                              SHT35_CRC;
      SHT35_CRC_Status                     CRC_CHECK;
      uint8_t                              ADC_RAW_DATA[ADC_RAW_DATA_BUFFER_SIZE];
      uint16_t                             RAW_TEMPERATURE;
      uint16_t                             RAW_HUMIDITY;
      float                               TEMPERATURE;
      float                                HUMIDITY;
 //   double                               PARTIAL_PRESSURE;
 //   double                               DEW_POINT;
 }GebraBit_SHT35;

Declaration of functions

At the end of this file, all the functions for reading and writing in SHT35 registers, sensor configuration and receiving data from the sensor are declared:

C
/********************************************************
   *  Declare Read&Write SHT35 Register Values Functions *
   ********************************************************/
  extern void GB_SHT35_Write_Command(GebraBit_SHT35 * SHT35 , uint16_t cmd);
  /********************************************************
   *       Declare MS5611 Configuration Functions         *
   ********************************************************/
  extern void GB_SHT35_Soft_Reset ( GebraBit_SHT35 * SHT35 )  ;
  extern void GB_SHT35_CRC_Check( GebraBit_SHT35 * SHT35 , uint16_t value, uint8_t crc) ;
 extern void GB_SHT35_On_Chip_Heater ( GebraBit_SHT35 * SHT35 , SHT35_Heater heater )   ;
 extern void GB_SHT35_Read_Serial_Number ( GebraBit_SHT35 * SHT35  )    ;
 extern void GB_SHT35_Read_Diagnostic ( GebraBit_SHT35 * SHT35  )   ;
 extern void GB_SHT35_Configuration(GebraBit_SHT35 * SHT35)  ;
 extern void GB_SHT35_Start_Conversion ( GebraBit_SHT35 * SHT35   )   ;
 extern void GB_SHT35_Read_Raw_Temperature_Humidity( GebraBit_SHT35 * SHT35 )  ;
 extern void GB_SHT35_Temperature ( GebraBit_SHT35 * SHT35 )  ;
 extern void GB_SHT35_Humidity ( GebraBit_SHT35 * SHT35 )   ;
 extern void GB_SHT35_Dew_Point( GebraBit_SHT35 * SHT35  ) ;
 extern void GB_SHT35_initialize( GebraBit_SHT35 * SHT35 )  ;
 extern void GB_SHT35_Get_Data(GebraBit_SHT35 * SHT35);

“main.c” dosyasının açıklaması

GebraBit SHT35 modülü tarafından gerekli olan enum’lar ve fonksiyonlar yapılara eklendi. Bir sonraki bölümde, GebraBit_SHT35 yapı tipinin SHT35_Module adlı bir değişkeni (bu yapı GebraBit_SHT35 başlığındadır ve GebraBit_SHT35 kütüphane açıklama bölümünde açıklanmıştır) GebraBit SHT35 modülünün yapılandırması için tanımlanmıştır:

C
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
GebraBit_SHT35 SHT35_Module;
/* USER CODE END PTD */

kodun bir sonraki kısmında, GB_SHT35_initialize (&SHT35_Module) ve GB_SHT35_Configuration (&SHT35_Module) fonksiyonlarını kullanarak GebraBit SHT35 modülünü ayarlıyoruz ve son olarak programın while kısmında sensörden veriler okunarak nem ve sıcaklık değerleri sürekli olarak alınıyor:

C
/* USER CODE BEGIN 2 */
GB_SHT35_initialize(&SHT35_Module);
GB_SHT35_Configuration(&SHT35_Module);
    /* USER CODE END 2 */
 
   /* Infinite loop */
   /* USER CODE BEGIN WHILE */
   while (1)
   {
     /* USER CODE END WHILE */

     /* USER CODE BEGIN 3 */
		GB_SHT35_Get_Data(&SHT35_Module);
  }
   /* USER CODE END 3 */
}

STLINK V2

STM32CubeMX kullanarak Keil projesini oluşturup kütüphaneyi ekledikten sonra STLINKV2 adaptörünü kullanarak STLINK V2 programlayıcıyı Gebra STM32F303‘e bağlıyoruz.

STLINK V2 programlayıcısını Gebra STM32F303’e bağladığınızda, modüle güç vermeye gerek kalmaz çünkü besleme voltajını doğrudan STLINK V2 programlayıcısından alacak.

Sonra Build (F7) a tıklayıp Build Output penceresin olası hatalar için kontrol ediyoruz.

Son olarak “Debug” moduna girip “SHT35_Module”ü “watch” penceresine ekleyip programı çalıştırdığımızda GebraBit SHT35 modülünün nem ve sıcaklığındaki değişiklikleri görebiliriz:

Yorum ve puanlarınızla Gebra ekibinin kaliteyi artırmasına yardımcı olun

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Alışveriş Sepeti
Scroll to Top