اطلاعیه

Collapse
No announcement yet.

کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

    سلام دوستان .من یه سیستم مانیتورینگ دما فشار نور رطوبت رو میخوام با codvision avr طراحی کنم و با proteus شبیه سازی .درمورد سنسور دما lm35 رو انتخاب کردم برنامه نویسیشم بلدم ولی در مورد سنسور فشار رطوبت نور چیزی نمیدونم اینکه اسم این سنسورها در proteus چیه و برنامه نویسیش چه جوریه؟ قبلا از دوستانی که لطف میکنن کمکم میکنن ممنوووووووووووونم :biggrin:

    #2
    پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

    والا دوست عزیز تا اونجا که من میدونم همه چیزو نیمشه تو پروتئوس شبیه سازی کرد ولی مثلا به ldr که یه مقاومت وابسته به نوره یه ولوم با همون مقدار تو پروتئوس بزاری اگه با تغییرات ولوم درصد نور تغییر کنه با ldr هم میشه چون هر دو از یه جنسن ولی با سنسور فشار کار نکردم بعیدم میدونم بشه شبیه سازی کرد
    پیروز باشید
    من به آمار زمین مشکوکم...
    اگر این شهر پر از آدم هاست......
    پس چرا این همه دل ها تنهاست؟

    دیدگاه


      #3
      پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

      فکر نکنم بتونید شبیه سازیش بکنید اما برا ساختش شروع کنید ما هم کمک می کنیم
      چيزي را بگو که بتواني بنويسي
      چيزي را بنويس که بتواني امضا کني
      چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

      دیدگاه


        #4
        پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

        نوشته اصلی توسط محمد فاطمیه
        والا دوست عزیز تا اونجا که من میدونم همه چیزو نیمشه تو پروتئوس شبیه سازی کرد ولی مثلا به ldr که یه مقاومت وابسته به نوره یه ولوم با همون مقدار تو پروتئوس بزاری اگه با تغییرات ولوم درصد نور تغییر کنه با ldr هم میشه چون هر دو از یه جنسن ولی با سنسور فشار کار نکردم بعیدم میدونم بشه شبیه سازی کرد
        پیروز باشید
        از پاسختون ممنون با یه سرچی که تو سایتای خارجی کردم گویا از این دو تا سنسور واسه نور و رطوبت استفاده میکنن: sht1x , HS1101
        ولی نمیدونم واسه کدویژن چه کدی رو باید بنویسم؟ :redface:

        دیدگاه


          #5
          پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

          نوشته اصلی توسط lordsoroosh
          فکر نکنم بتونید شبیه سازیش بکنید اما برا ساختش شروع کنید ما هم کمک می کنیم
          دوست عزیز اولین قدم برای ساختش نوشتن برنامه کدویژن برای کنترل المانهاییه که گفتم . واسه برنامه نویسیش میتونید کمکم کنین؟ :job:

          دیدگاه


            #6
            پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

            نوشته اصلی توسط shohreh_n
            دوست عزیز اولین قدم برای ساختش نوشتن برنامه کدویژن برای کنترل المانهاییه که گفتم . واسه برنامه نویسیش میتونید کمکم کنین؟ :job:
            سلام شهره جان عضویتتون رو تبریک می گم.برای کنترل دما و رطوبت بهتره از سنسور sht11 استفاده کنید که خروجی دیجیتال هم داره! اینجا استاد AVR تا دلتون بخواد داره ولی کار اصلی به عهده شماست و ایشالا راهنمایی می کنن. :applause:
            جانم به فدای ائمه اطهار
            می دونستم تحمل مرگ اعضای خانواده خیلی سخته ولی نه تا این حد،ایکاش پدرم بیشتر می موند.روحش شاد.

            دیدگاه


              #7
              پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

              نوشته اصلی توسط ahmadpashaei
              سلام شهره جان عضویتتون رو تبریک می گم.برای کنترل دما و رطوبت بهتره از سنسور sht11 استفاده کنید که خروجی دیجیتال هم داره! اینجا استاد AVR تا دلتون بخواد داره ولی کار اصلی به عهده شماست و ایشالا راهنمایی می کنن. :applause:
              ممنون از پاسختون . واسه برنامه نویسیش مشکل دارم .واسه کدنویسیه دما(LM35) میدونم که باید یه متغیر تعریف شه و چیزی که ADC میخونه رو بریزه رو اون متغیر و بعدش تبدیل به انالوک شه رو LCD نمایش داده بشه حالا این روند واسه سنسورای دیگه چه فرقی میکنه ؟
              این اساتید محترم avr کجان بیان یه کمکی کنن فوری فوتییییییییییییییییییییییه :sad: :rolleyes:

              دیدگاه


                #8
                پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                من دیتاشیت این سنسو را گرفتم خوندم . ظاهرا راه اندازیش خیلی سخت نیست. sht11

                خوب اول با مدارش شروع میکنیم :

                چيزي را بگو که بتواني بنويسي
                چيزي را بنويس که بتواني امضا کني
                چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

                دیدگاه


                  #9
                  پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                  یه سنسور دیگه هم هست به نام HH10D که یه ایپرام داره که باید 4 بایت اون رو بخونید تا مقدار کالیبر دستتون بیاد و بعد فرکانس خروجی سنسور رو اندازه میگیرید بعدش مقدار بدست اومده رو میزارید تو فرمول دیتاشیت رطوبت رو حساب میکنید
                  اینم دیتاشیتش:
                  http://www.hoperf.com/upload/sensor/HH10D.pdf
                  تو ایران هم هست

                  دیدگاه


                    #10
                    پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                    ماژول بعد از روشن شدن باید به مدت 11 ثانیه در حالت خودش باقی بماند و هیچ دستوری ارسال نشود.
                    بعد از 11 پانیه باید یک start ارسال شود و بعد از ان یک بایت داده شامل سه بیت ادرس 000 و 5 بیت دستور می باشد . به شکل زیر :

                    مثلا اگر می خواهیم دما را بخوانیم باید بعد از start ر 00000011 را بفرستیم. بعد از ارسال از طرف ماژول دو بایت داده و یک بایت crc ارسال می شود . ماژول بعد از دریافت اخرین ack خود به خود به حالت اسلیپ بر میگردد و اماده دریافت فرمان بعدی می شود.
                    چيزي را بگو که بتواني بنويسي
                    چيزي را بنويس که بتواني امضا کني
                    چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

                    دیدگاه


                      #11
                      پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                      نوشته اصلی توسط lordsoroosh
                      من دیتاشیت این سنسو را گرفتم خوندم . ظاهرا راه اندازیش خیلی سخت نیست. sht11

                      خوب اول با مدارش شروع میکنیم :

                      مرسی از اطلاعاتتون .این سنسور تو پروتیوسم هس میشه شبیه سازی کرد .فقط یه سوال برای کدویژنش: این که بنویسم خط data توسط adc خونده بشه و رو lcd نمایش داده بشه کافیه ؟ یا فرمول خاصی واسه خروجیش داره؟ :job:

                      دیدگاه


                        #12
                        پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                        خط data نباید به adc خونده بشه. این ماژول با i2c کار میکنه
                        چيزي را بگو که بتواني بنويسي
                        چيزي را بنويس که بتواني امضا کني
                        چيزي را امضا کن که بتواني به آن عمل کني (ناپلئون)

                        دیدگاه


                          #13
                          پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                          خروجی سنسور دیجیتاله و در دیتاشیت فرمول محاسبه دما و رطوبت به صورت جدا و مفصل توضیح داده شده.اینم از یادگاری های قدیم که دیتاشیت ها باشه:
                          http://vip.eca.ir/sharing/uploads/13376179141.rar
                          http://vip.eca.ir/sharing/uploads/13376179142.rar

                          اینم نمونه کدنویسی در زبان C:
                          http://www.sensirion.com/en/pdf/prod...nsor_SHTxx.pdf
                          و F:\jozveh&maghale\maghalat\2\data sheet\SHT11\shtdemo1_c.mht

                          جانم به فدای ائمه اطهار
                          می دونستم تحمل مرگ اعضای خانواده خیلی سخته ولی نه تا این حد،ایکاش پدرم بیشتر می موند.روحش شاد.

                          دیدگاه


                            #14
                            پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                            اساتید محترم بعد از کلی مطالعه و تفحص تو دیتاشیت سنسور sht11 و البته راهنماییهای شما دوستان عزیز یه برنامه ای پیدا کردم و با اطلاعاتی که بدست اوردم ویرایش کردمش و ارورهاشو گرفتم ولی با شبیه سازی تو پروتیوس رطوبت رو صفر می مونه و دما به طور صعودی میره بالا .از دوستان کسی هس اشکالات این برنامرو بهم بگه یا حداقل یه برنامه بدون عیب با کدویژن بذاره؟ خیلی ممنون میییییییشم :rolleyes:

                            دیدگاه


                              #15
                              پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr

                              اینم از برنامه کدویژن :
                              /*********************************************
                              Pin 1 GND
                              Pin 2 Data (PB0)
                              Pin 3 Serial Clock (PB1)
                              Pin 4 VDD (2.4V to 5.5V)

                              *********************************************/

                              #include <mega32.h>
                              #include <stdio.h>
                              #include <delay.h>
                              #include <math.h>
                              #include <stdlib.h>
                              // Alphanumeric LCD Module functions
                              #asm
                              .equ __lcd_port=0x1B ;PORTA
                              #endasm
                              #include <lcd.h>

                              // Declare your global variables here

                              typedef union
                              { unsigned int i; float f;} value;


                              enum {TEMP,HUMI};

                              sfrb PINB = 0x16;
                              sfrb PORTB = 0x18;
                              sfrb DDRB = 0x17;

                              #define SHT_DATA_OUT DDRB.0
                              #define SHT_DATA_IN PINB.0
                              #define SHT_SCK PORTB.1
                              #define noACK 0
                              #define ACK 1
                              //adr command r/w
                              #define STATUS_REG_W 0x06 //000 0011 0
                              #define STATUS_REG_R 0x07 //000 0011 1
                              #define MEASURE_TEMP 0x03 //000 0001 1
                              #define MEASURE_HUMI 0x05 //000 0010 1
                              #define RESET 0x1e //000 1111 0

                              const float C1=-4.0; // for 12 Bit
                              const float C2=+0.0405; // for 12 Bit
                              const float C3=-0.0000028; // for 12 Bit
                              const float T1=+0.01; // for 14 Bit @ 5V
                              const float T2=+0.00008; // for 14 Bit @ 5V

                              //SHT Functions
                              char SHT_WriteByte(unsigned char valuep);
                              char SHT_ReadByte(unsigned char ack);
                              void s_transstart(void);
                              void s_connectionreset(void);
                              char s_softreset(void);
                              char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode);
                              void calc_sth11(float *p_humidity ,float *p_temperature);
                              float calc_dewpoint(float h,float t);

                              unsigned char key=16,uch_TempTime_Number=0;
                              int intTemp1=0,intTime1=0,intTemp2=0,intTime2=0,intTem p3=0,intTime3=0;
                              int intTemp4=0,intTime4=0,intTemp5=0,intTime5=0,intTem p6=0,intTime6=0;






                              void print_temp_humy (void)
                              {
                              char str_hum_temp[10];

                              value humi_val, temp_val;
                              unsigned char error, checksum, status;
                              float dew_point;
                              error=0;
                              error+=s_measure((unsigned char*) &humi_val.i,&checksum,HUMI);
                              error+=s_measure((unsigned char*) &temp_val.i,&checksum,TEMP);
                              if(error!=0) s_connectionreset();
                              else{
                              humi_val.f=(float)humi_val.i; //converts integer to float
                              temp_val.f=(float)temp_val.i; //converts integer to float
                              calc_sth11(&humi_val.f,&temp_val.f); //calculate humidity, temperature
                              dew_point=calc_dewpoint(humi_val.f,temp_val.f); //calculate dew point
                              }
                              temp_val.f+=10;
                              ftoa(temp_val.f,0,str_hum_temp);
                              lcd_clear();
                              lcd_putsf("Tempreature: "
                              lcd_puts(str_hum_temp);
                              ftoa(humi_val.f,0,str_hum_temp);
                              lcd_gotoxy(0,1);
                              lcd_putsf("Humydity: "
                              lcd_puts(str_hum_temp);
                              }

                              void main(void)
                              {
                              // Declare your local variables here




                              PORTA=0x00;
                              DDRA=0x00;
                              PORTB=0x00;
                              DDRB=0x00;

                              DDRC=0x0F;
                              PORTC=0xF0;

                              DDRD=0x0F;
                              PORTD=0xF0;

                              TCCR0=0x00;
                              TCNT0=0x00;
                              TCCR1A=0x00;
                              TCCR1B=0x00;
                              TCNT1H=0x00;
                              TCNT1L=0x00;
                              OCR1AH=0x00;
                              OCR1AL=0x00;
                              OCR1BH=0x00;
                              OCR1BL=0x00;
                              ASSR=0x08;
                              TCCR2=0x05;
                              TCNT2=0x00;
                              OCR2=0x00;
                              //GIMSK=0x00;
                              MCUCR=0x00;
                              TIMSK=0x40;
                              ACSR=0x80;

                              // Setup Sensibus Pins

                              PORTB.1 = 0; // ClockLow
                              DDRB.1 = 1; // SCK is an output

                              PORTB.0 = 0; // Always Zero
                              // Toggle DDRB.0 for Data

                              // LCD module initialization
                              lcd_init(16);

                              Start:

                              s_softreset();
                              print_temp_humy();

                              while (1)
                              {
                              delay_ms(500);
                              print_temp_humy();



                              goto Start;
                              }

                              }


                              //----------------------------------------------------------------------------------
                              // tulis byte ke SHT
                              //----------------------------------------------------------------------------------
                              char SHT_WriteByte(unsigned char valuep)
                              {
                              unsigned char i,error=0;
                              for (i=0x80;i>0;i/=2)
                              {
                              if (i & valuep) SHT_DATA_OUT=0;
                              else SHT_DATA_OUT=1;
                              SHT_SCK=1;
                              delay_us(5); //pulswith approx. 5 us
                              SHT_SCK=0;
                              }
                              SHT_DATA_OUT=0; //release DATA-line
                              SHT_SCK=1; //clk #9 for ack
                              error=SHT_DATA_IN; //check ack (DATA will be pulled down by SHT11)
                              SHT_SCK=0;
                              return error; //error=1 in case of no acknowledge
                              }

                              //----------------------------------------------------------------------------------
                              // baca byte dari SHT, dan berikan ACK
                              //----------------------------------------------------------------------------------
                              char SHT_ReadByte(unsigned char ack)
                              {
                              unsigned char i,val=0;
                              SHT_DATA_OUT=0; //release DATA-line
                              for (i=0x80;i>0;i/=2)
                              {
                              SHT_SCK=1;
                              if (SHT_DATA_IN) val=(val | i); //read bit
                              SHT_SCK=0;
                              }
                              SHT_DATA_OUT=ack; //in case of "ack==1" pull down DATA-Line
                              SHT_SCK=1; //clk #9 for ack
                              delay_us(5); //pulswith approx. 5 us
                              SHT_SCK=0;
                              SHT_DATA_OUT=0; //release DATA-line
                              return val;
                              }

                              //----------------------------------------------------------------------------------
                              // kondisi start
                              // _____ ________
                              // DATA: |_______|
                              // ___ ___
                              // SCK : ___| |___| |______
                              //----------------------------------------------------------------------------------
                              void s_transstart(void)
                              {
                              SHT_DATA_OUT=0;
                              SHT_SCK=0; //Initial state
                              delay_us(1);
                              SHT_SCK=1;
                              delay_us(1);
                              SHT_DATA_OUT=1;
                              delay_us(1);
                              SHT_SCK=0;
                              delay_us(5);
                              SHT_SCK=1;
                              delay_us(1);
                              SHT_DATA_OUT=0;
                              delay_us(1);
                              SHT_SCK=0;
                              }

                              //----------------------------------------------------------------------------------
                              // reset koneksi, 9 clock diikuti dengan kondisi start
                              // __________________________________________________ ___ ________
                              // DATA: |_______|
                              // _ _ _ _ _ _ _ _ _ ___ ___
                              // SCK : __| |__| |__| |__| |__| |__| |__| |__| |__| |______| |___| |______
                              //----------------------------------------------------------------------------------

                              void s_connectionreset(void)
                              {
                              unsigned char i;
                              SHT_DATA_OUT=0; SHT_SCK=0; //Initial state
                              for(i=0;i<9;i++) //9 SCK cycles
                              {
                              SHT_SCK=1;
                              delay_us(1);
                              SHT_SCK=0;
                              }
                              s_transstart(); //transmission start
                              }

                              //----------------------------------------------------------------------------------
                              // reset SHT-nya !!
                              //----------------------------------------------------------------------------------

                              char s_softreset(void)
                              {
                              unsigned char error=0;
                              s_connectionreset(); //reset communication
                              error+=SHT_WriteByte(RESET); //send RESET-command to sensor
                              return error; //error=1 in case of no response form the sensor
                              }

                              //----------------------------------------------------------------------------------
                              // pengukuran data
                              //----------------------------------------------------------------------------------
                              char s_measure(unsigned char *p_value, unsigned char *p_checksum, unsigned char mode)
                              {
                              unsigned error=0;
                              unsigned int i;

                              s_transstart(); //transmission start
                              switch(mode){ //send command to sensor
                              case TEMP : error+=SHT_WriteByte(MEASURE_TEMP); break;
                              case HUMI : error+=SHT_WriteByte(MEASURE_HUMI); break;
                              default : break;
                              }
                              for (i=0;i<65535;i++) if(SHT_DATA_IN==0) break; //wait until sensor has finished the measurement
                              if(SHT_DATA_IN) error+=1; // or timeout (~2 sec.) is reached
                              *(p_value+1) =SHT_ReadByte(ACK); //read the first byte (MSB)
                              *(p_value) =SHT_ReadByte(ACK); //read the second byte (LSB)
                              *p_checksum =SHT_ReadByte(noACK); //read checksum
                              return error;
                              }

                              //----------------------------------------------------------------------------------------
                              // hitung temperature [°C] and humidity [%RH]
                              // input : humi [Ticks] (12 bit)
                              // temp [Ticks] (14 bit)
                              // output: humi [%RH]
                              // temp [°C]
                              //----------------------------------------------------------------------------------------

                              void calc_sth11(float *p_humidity ,float *p_temperature)
                              {

                              //float rh=*p_humidity; // rh: Humidity [Ticks] 12 Bit
                              //float t=*p_temperature; // t: Temperature [Ticks] 14 Bit
                              float rh_lin; // rh_lin: Humidity linear
                              float rh_true; // rh_true: Temperature compensated humidity
                              float t_C; // t_C : Temperature [°C]

                              t_C=*p_temperature*0.01 - 40; //calc. temperature from ticks to [°C]
                              rh_lin=C3*(*p_humidity)*(*p_humidity) + C2*(*p_humidity) + C1; //calc. humidity from ticks to [%RH]
                              rh_true=(t_C-25)*(T1+T2*(*p_humidity))+rh_lin; //calc. temperature compensated humidity [%RH]
                              if(rh_true>100)rh_true=100; //cut if the value is outside of
                              if(rh_true<0.1)rh_true=0.1; //the physical possible range

                              *p_temperature=t_C; //return temperature [°C]
                              *p_humidity=rh_true; //return humidity[%RH]
                              }

                              //--------------------------------------------------------------------
                              // calculates dew point
                              // input: humidity [%RH], temperature [°C]
                              // output: dew point [°C]
                              //--------------------------------------------------------------------

                              float calc_dewpoint(float h,float t)
                              {
                              float logEx,dew_point;
                              logEx=0.66077+7.5*t/(237.3+t)+(log10(h)-2);
                              dew_point = (logEx - 0.66077)*237.3/(0.66077+7.5-logEx);
                              return dew_point;
                              }

                              دیدگاه

                              لطفا صبر کنید...
                              X