پروژه Arduino با سنسور SHT35

هدف این پروژه چیست؟

هدف این پروژه، واسط کردن سنسور دما و رطوبت SHT35 با Arduino برای اندازه‌گیری و پایش دقیق شرایط محیطی است. SHT35 با ارائه اندازه‌گیری‌های دقیق دما و رطوبت نسبی، برای کاربردهایی مانند پایش اقلیم، کنترل کیفیت هوای داخلی و سیستم‌های کشاورزی ایده‌آل است. کاربران می‌توانند با خواندن داده‌ها به‌صورت لحظه‌ای، سیستم‌هایی طراحی کنند که به تغییرات دما و رطوبت واکنش دینامیک نشان می‌دهند و در کاربردهای مختلف محیطی و صنعتی عملکرد و اطمینان را افزایش می‌دهند.


در این آموزش چه چیزهایی خواهیم آموخت؟

  • اتصال سنسور SHT35 به Arduino و برقراری ارتباط I2C
  • استفاده از یک کتابخانه موجود برای ساده‌سازی یکپارچه‌سازی سنسور و ارتقاء درک پردازش داده‌های I2C
  • خواندن داده‌های دقیق دما و رطوبت از سنسور و تفسیر آنها برای کاربردهای واقعی
  • پیاده‌سازی پروژه‌های مبتنی بر سنسور برای پایش محیطی و کنترل اقلیم و کسب مهارت‌های عملی در ایجاد سیستم‌های واکنشی بر اساس شرایط محیطی

این راهنمای عملی، اطلاعات ارزشمندی درباره یکپارچه‌سازی سنسور با Arduino و پایش داده‌های لحظه‌ای محیطی ارائه می‌دهد.

برای شروع این پروژه به چه چیزهایی نیاز داریم؟

برای اجرای این پروژه به سخت‌افزار و نرم‌افزار نیاز داریم. عناوین این سخت‌افزارها و نرم‌افزارها در جدول زیر به شما ارائه شده است و می‌توانید با کلیک بر روی هر یک، آن را تهیه/دانلود کرده و برای شروع آماده شوید.

سخت افزارهای مورد نیازنرمافزارهای مورد نیاز
Arduino ProgrammerArduino IDE
Arduino Development Board- ( Arduino UNO )
ماژول سنسور رطوبت و دما Gebra SHT35

GebraMS برای راحتی شما، کتابخانه‌های ویژه‌ای را برای اکثر پروژه‌های آردوینو آماده کرده است.
شما باید کتابخانه آماده شده توسط GebraMS را دانلود کرده و آن را به Arduino IDE خود اضافه کنید.

ابتدا، همان‌طور که در تصویر زیر نشان داده شده است، ماژول Gebra SHT35 را به این صورت به Arduino UNO متصل می‌کنیم:

سورس کد

کتابخانه پروژه (Library)

جبرابیت علاوه بر طراحی ماژولار انواع حسگرها و قطعات مجتمع، برای سهولت در نصب و توسعه نرم‌افزار توسط کاربران، مجموعه‌ای از کتابخانه‌های ساختاریافته و مستقل از سخت‌افزار را به زبان C ارائه می‌دهد. در این راستا، کاربران می‌توانند کتابخانه‌ی مربوط به ماژول مورد نظر خود را در قالب فایل‌های “.h” و “.c” دانلود کنند.

با افزودن کتابخانه‌ی ارائه‌شده توسط جبرابیت به پروژه (راهنمای افزودن فایل به پروژه)، می‌توانیم به‌راحتی کد خود را توسعه دهیم. فایل‌های مربوطه را می‌توانید در انتهای پروژه یا در بخش صفحات مرتبط در سمت راست مشاهده کنید.

تمام توابع تعریف‌شده در کتابخانه با جزئیات کامل توضیح داده شده‌اند و کلیه پارامترهای ورودی و مقادیر بازگشتی هر تابع به‌صورت مختصر شرح داده شده است. از آنجا که این کتابخانه‌ها مستقل از سخت‌افزار هستند، کاربر می‌تواند آن‌ها را به‌سادگی به کامپایلر دلخواه خود اضافه کرده و با میکروکنترلر یا برد توسعه مورد نظر خود استفاده کند.

USER REGISTER MAP

نقشه رجیستر یا دستورات سنسور در این بخش تعریف شده‌اند:

C
/************************************************
 *              USER REGISTER MAP               *
 ************************************************/
#define SHT35_SOFT_RESET_TIME                         5
#define SHT35_ADDRESS                                0x44
#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

توانایی فعال یا غیرفعال کردن بخش‌های مختلف سنسور در این enum تعریف شده است:

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

SHT35_Single_Shot_Mode Enum

مقادیر این enum برای انتخاب حالت‌های مختلف اندازه‌گیری سنسور در حالت Single Shot استفاده می‌شوند:

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

مقادیر این enum برای انتخاب حالت‌های مختلف جمع‌آوری داده‌های سنسور در حالت دوره‌ای (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

برای اطلاع از وضعیت دستورات ارسال‌شده به سنسور، از مقادیر این enum استفاده می‌شود:

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

SHT35_ Checksum_Status Enum

این enum برای اطلاع از وضعیت چکسام (checksum) استفاده می‌شود:

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

SHT35_Measurement_Time Enum

این enum برای انتخاب زمان تبدیل مقادیر داده استفاده می‌شود:

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

با استفاده از این enum، گرم‌کن داخلی سنسور روشن یا خاموش می‌شود:

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

SHT35_Alert_Pending_Status Enum

با استفاده از این enum، وضعیت اعلان‌ها و هشدارهای سنسور بررسی می‌شود:

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

SHT35_CRC_Status Enum

با استفاده از این enum، وضعیت بررسی CRC مشخص می‌شود:

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

SHT35_Reset_Status Enum

با استفاده از این enum، وضعیت ریست سنسور مشخص می‌شود:

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

SHT35 struct

تمام خصوصیات سنسور، ضرایب کالیبراسیون و داده‌های سنسور در این «struct» تعریف شده‌اند و همه اطلاعات و تنظیمات اعمال‌شده روی سنسور در این «structure» ذخیره می‌شوند و می‌توانید تغییرات هر بخش از سنسور را در محیط «Debug Session» مشاهده کنید.

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

در انتهای این فایل، تمام توابع مربوط به خواندن و نوشتن در رجیسترهای SHT35، پیکربندی سنسور و دریافت داده‌ها از سنسور اعلام شده‌اند:

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);

فایل منبع Gebra_SHT35.c

این فایل به زبان C نوشته شده و تمامی توابع با جزئیات کامل کامنت‌گذاری شده‌اند. پارامترهای ورودی و مقادیر بازگشتی توابع به‌صورت واضح توضیح داده شده‌اند. بنابراین فقط به این توضیحات اکتفا می‌کنیم و کاربران را برای اطلاعات بیشتر مستقیماً به این فایل ارجاع می‌دهیم.

برنامه نمونه در Arduino

پس از اتصال ماژول به Arduino و افزودن کتابخانه به IDE، به مسیر زیر بروید:
File > Examples > GebraBit_SHT35 > Temp-Humid

توضیح فایل نمونه

enumها و توابع مورد نیاز ماژول Gebra SHT35 به ساختارها اضافه شده‌اند. در بخش بعدی، یک متغیر به نام SHT35_Module از نوع ساختار Gebra_SHT35 (که در هدر Gebra_SHT35 تعریف شده و در بخش توضیحات کتابخانه شرح داده شده است) برای پیکربندی ماژول Gebra SHT35 تعریف شده است:

C
GebraBit_SHT35 SHT35;

در بخش بعدی کد نوشته شده، با استفاده از توابع
GB_SHT35_initialize(&SHT35_Module)
و
GB_SHT35_Configuration(&SHT35_Module)
ماژول Gebra SHT35 را تنظیم می‌کنیم و در نهایت در بخش حلقه while برنامه، داده‌ها از سنسور خوانده شده و مقادیر رطوبت و دما به‌صورت پیوسته دریافت می‌شوند:

C
void setup() {
    Wire.begin();           // Initialize the I2C bus
    Serial.begin(9600);     // Initialize serial communication for debugging

    GB_SHT35_initialize(&SHT35); // Initialize the SHT35 sensor
    GB_SHT35_Configuration(&SHT35); // Configure the SHT35 sensor
}

void loop() {
    GB_SHT35_Get_Data(&SHT35); // Read data from the sensor

    Serial.print("Temperature: ");
    Serial.print(SHT35.TEMPERATURE);
    Serial.println(" °C");

    Serial.print("Humidity: ");
    Serial.print(SHT35.HUMIDITY);
    Serial.println(" %");

    delay(2000); // Delay between readings
}

The Sample file code text:

C
#include "GebraBit_SHT35.h"

GebraBit_SHT35 SHT35;

void setup() {
    Wire.begin();           // Initialize the I2C bus
    Serial.begin(9600);     // Initialize serial communication for debugging

    GB_SHT35_initialize(&SHT35); // Initialize the SHT35 sensor
    GB_SHT35_Configuration(&SHT35); // Configure the SHT35 sensor
}

void loop() {
    GB_SHT35_Get_Data(&SHT35); // Read data from the sensor

    Serial.print("Temperature: ");
    Serial.print(SHT35.TEMPERATURE);
    Serial.println(" °C");

    Serial.print("Humidity: ");
    Serial.print(SHT35.HUMIDITY);
    Serial.println(" %");

    delay(2000); // Delay between readings
}

Arduino خود را به کامپیوتر وصل کنید و برد Arduino خود را انتخاب کنید.

سپس کد نمونه را تأیید (Verify) و آپلود (Upload) کنید.

بعد از آپلود کردن کد، سریال مانیتور را باز کنید و می‌توانید مقادیر روشنایی را مشاهده کنید.

با نظرات خود به تیم جبرا در بهبود کیفیت کمک کنید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

سبد خرید
پیمایش به بالا