دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فارسی!)

در اين بخش مي‌توانيد طرح آماده و کامل شده مرتبط با میکروکنترلرهای AVR را مشاهده بفرمایید

مدیران انجمن: SAMAN, sinaset, شوراي نظارت

طرح های موجود را چطور دیدید؟!

1-بسیار خوب و ایده ال
4
80%
2-خوب و جالب
1
20%
3-جایی کار بیشتری داشت.
0
بدون راي
 
مجموع رای گیری: 5

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فارسی!)

پست توسط sinaset » دو شنبه 27 دی 1395, 10:34 am

بنام خداوند بخشنده و مهربان
باسلام

دماسنج و رطوبت سنج با سنسور SHT20
 تصویر 
بعد از درخواست مکرر بعضی کاربران در تاپیک "دماسنج و رطوبت سنج با سنسور DHT22" برخره تصمیم گرفتیم تاپیکی نیز،برای این سنسور با دقت درست و تنظیم کنیم. تصویر  مشخصات و قابلیت ها: 
سنسور SHT20 جزو خانواده سری SHT2X می باشد.با سنسور SHT20 می توان به راحتی با رابط I2C ارتباط برقرار کرد ! (این در حالیست که سنسور DHT22 با رابط 1 وایر و کمی دشواری باید با ایسی ارتباط برقرار می کرد) . دمایی این سنسور به طور کامل کالیبره شده است و هیچ نیازی نیست شما کاری انجام دهید! و فقط باید،مقادیر را از ایسی دریافت کنید!
دما اندازه گیری -40 تا +125 درجه
رطوبت اندازه گیری 0 تا 100 درصد !
دقت دما سنج این سنسور 14 بیت! (و قابل تغییر به 12 بیت) است!یعنی می تواند 0.01 صدم کاهش یا افزایش دما را سنس یا تشخیص دهد!!! (در حالت 14 بیتی! و در حالت 12 بیتی 0.04 صدم اختلاف دما!!) درصد تشخیص خطا دمایی نیز متوسط 0.03 صدم درصدی می باشد ! (که واقعا قابل قبول می باشد)
دقت رطوبت سنج سنسور 12 بیت (و قابل تغییر به 12 بیت) است! یعنی می تواند 0.04 صدم درصد کاهش یا افزایش رطوبت را تشخیص دهد!!!(در حالت 12 بیتی! و در حالت 8 بیتی 0.7 دهم اختلاف رطوبت)در تشخیص خطا رطوبت نیز متوسط 3.0 درصد می باشد .
ولتاژ کاری این سنسور 2.1 تا 3.6 ولت می باشد. در صورتی که به این سنسور ولتاژ 3 داده شده باشد، در زمان کار 300 میکروآمپر مصرف می کند! و در حالت خواب 0.15 میکرو آمپر (به عبارتی 150 نانوآمپر ) مصرف می کند! این میزان مصرف در نوع خود واقعا کم نظیر است!
قیمت این سنسور در حال حاضر حدود 16 هزارتومان می باشد.

کد و برنامه اولیه برای آزمایش:(کدویژن)

مدار را به مانند تصویر اتصال دهید (پرتئوس سنسور SHt20 را ندارد که ما از 21 استفاده کردیم،که چندان تفاوتی ندارد!)
 تصویر 

[HIGHLIGHT=#00b050]*دقت کنید،ولتاژ کمتر از 3.6 ولت (با رگولاتور)به سنسور Sht20 بدهید،تا مشکلی برایش پیش نیاید.
 *
مقاومت 4.7 تا 10 کیلواهمی را به مانند تصویر بالا به Scl و Sda وصل کنید (از مثبت )

در نهایت خروجی TX را به یک مبدل سریال به usb بدهید تا مقادیر را برای کامپیوتر بفرستد ..

کدهایی برنامه:

کد: انتخاب همه

/*******************************************************
Project : Test Sensor SHT20 ,Usart
Version :0.1 Beta
Date  : 1395.10.27
Edit:Sinast
centralclubs.com

Chip type         : ATmega328P
AVR Core Clock frequency: 8.000000 MHz
*******************************************************/

#include <mega328p.h>
#include <delay.h>
#include <i2c.h>
#include <stdio.h>

float t,h;             //تعريف دو متغير اعشاري 32 بيتي
unsigned long int byt[2];   
char str[50];

void Read_temp()    //تابع خواندن دما
{
     byt[0]=byt[1]=0;
    
     i2c_start();
     i2c_write(0x80); 
     i2c_write(0xF3); 
     delay_ms(100);
     i2c_start();
     i2c_write(0x81);
     byt[0]=i2c_read(1);
     byt[1]=i2c_read(1);
     i2c_read(0);
     i2c_stop();
    
        t=byt[0]*256;   //فرمول بدست آوري دما
      t+=byt[1];
       t*=175.72;
       t/=65536;
       t-=46.85;   
      
}

void Read_hum()      //تابع خواندن رطوبت
{
     byt[0]=byt[1]=0;
    
     i2c_start();
     i2c_write(0x80); 
     i2c_write(0xF5); 
     delay_ms(90);
     i2c_start();
     i2c_write(0x81);
     byt[0]=i2c_read(1);
     byt[1]=i2c_read(1);
     i2c_read(0);
     i2c_stop();
    
        h=byt[0]*256;   //فرمول بدست آوري رطوبت
       h+=byt[1];
       h*=125;
       h/=65536;
      h-=6;
       if (h>=83.9)h-=0.9;
       else if (h>=58.4) h-=0.8;
       else if (h>=36.7)h-=0.7;
       else if (h>=8)h-=0.6;
       else if (h>=0) h-=0.5;
       else h=0;
      

}

void main(void)
{
//سرعت يوآرت 9600
UCSR0A=(0<<RXC0) | (0<<TXC0) | (0<<UDRE0) | (0<<FE0) | (0<<DOR0) | (0<<UPE0) | (0<<U2X0) | (0<<MPCM0);
UCSR0B=(0<<RXCIE0) | (0<<TXCIE0) | (0<<UDRIE0) | (0<<RXEN0) | (1<<TXEN0) | (0<<UCSZ02) | (0<<RXB80) | (0<<TXB80);
UCSR0C=(0<<UMSEL01) | (0<<UMSEL00) | (0<<UPM01) | (0<<UPM00) | (0<<USBS0) | (1<<UCSZ01) | (1<<UCSZ00) | (0<<UCPOL0);
UBRR0H=0x00;
UBRR0L=0x33;

puts("End Name Of God\r\n");
puts("Test Sensor SHT20\r\n");

delay_ms(1500);
i2c_init();        //مقداري دهي اوليه به واحد  يوآرت

while (1)
    {

       Read_temp();      //تابع دما را بخوان
       Read_hum();       //تابع رطوبت را بخوان
         
        sprintf(str,"Temp=%0.2f C Hum=%0.2f %% \r\n",t,h);   
      puts(str);
      delay_ms(3000); //زمان تاخير
    }
}


[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]سورس و شبیه ساز .
-------------------------------------------------------------------
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]کتابخانه تنظیم شده برای SHT20

لیست طرح های موجود در تاپیک:

صفحه اول:
ورژن 1 ، دماسنج با LCD رنگی ، قابلیت نمایش دما و رطوبت،حداکثر و حداقل دما،نمودار انالیز دما،ایکون ها گرافیکی دما و رطوبت و ..دانلود از [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید].
صفحه سوم:
ورژن 2 ، ساده ،برای LCD کاراکتری،دانلود از [لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید].
--
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: دماسنج و رطوبت سنج با سنسور SHT20(نسخه آزمایشی)

پست توسط sinaset » جمعه 22 بهمن 1395, 10:48 am

بنام خدا
باسلام


ورژن 1
دماسنج پیشرفته فارسی با LCD n96 رنگی (ایسی کنترولی ili9325)
 تصویر  به یاری خدا توانستیم ورژن شماره 1 اماده شد... تصویر 
قابلیت ها:

*نمایش دما و رطوبت هر 1 ثانیه یکبار
*نمودار آنالیز دما و رطوبت (هر 1 ثانیه یک بار،یک واحد افزایش می یابد)
*نمایش دما و رطوبت، 10 دقیقه ، 30 دقیقه ، 1 ساعت ، 12 ساعت، 24 ساعت قبل .
*کم مصرف بودن! وقتی سمت چپ مانیتور را فشار دهید، دماسنج به مدت 20 ثانیه روشن می ماند،سپس خاموش میشود، وقتی سمت راست را فشار دهید دماسنج نیم ساعت روشن می ماند و بعد خاموش میشود
*حداقل و حداکثر رطوبت،دما در 1 ساعت گذاشته
*واچ داگ برای اتوماتیک ریستارت شدن مدار.
و...

مدار و نکات:
 تصویر 

*ولتاژ مدار 3.3 ولت است،،شما نیز باید از رگولاتور 3.3 ولتی استفاده کنید تا به مدار (مثل سنسور و مانیتور )صدمه وارد نشود

*پایه PORTB2 که در شبیه ساز به LED اتصال یافته،در واقع پایه است که باید به VCC نمایشکر (در واقع LED نمایشگر اتصال یابد،* که در بعضی ماژول ها به PWM مشخص شده)
*مدار نیاز به دو کریستال 32.768 مگاهرتزی و یک کریستال 16 مگاهرتزی دارد..
*فراموش نکنید که فیوزبیت ها را در حالت کریستال خارجی قرار دهید و گزینه CKOPT را هم فعال کنید

کد و کتابخانه :

این کتابخانه رو نیز برای کدویژن ادیت کرده ایم، می توانید از ان برای طرح های خود استفاده کنید :

کد: انتخاب همه

/*
lib  SHT2X Temp Hum
edit:sinaset
v1 1395.11.21
*/

#ifndef SHT2X_H_
#define SHT2X_H_

float read_temp(void)       //خواندن دما
{
unsigned long int byt[2];
float b=0;

    byt[0]=byt[1]=0;
     i2c_start();
     i2c_write(0x80); 
     i2c_write(0xF3); 
     delay_ms(100);
     i2c_start();
     i2c_write(0x81);
     byt[0]=i2c_read(1);
     byt[1]=i2c_read(1);
     i2c_read(0);
     i2c_stop();
    
     b=byt[0]*256;
     b+=byt[1];
      b*=175.72;
      b/=65536;
      b-=46.85;
      return b;
}

float read_humi(void)       //خواندن رطوبت
{
unsigned long int byt[2];
float b=0;
     byt[0]=byt[1]=0;
     i2c_start();
     i2c_write(0x80); 
     i2c_write(0xF5); 
     delay_ms(90);
     i2c_start();
     i2c_write(0x81);
     byt[0]=i2c_read(1);
     byt[1]=i2c_read(1);
     i2c_read(0);
     i2c_stop();
    
      b=byt[0]*256;
      b+=byt[1];
      b*=125;
      b/=65536;
       b-=6;
      if (b>=83.9)b-=0.9;
      else if (b>=58.4) b-=0.8;
      else if (b>=36.7)b-=0.7;
      else if (b>=8)b-=0.6;
      else if (b>=0) b-=0.5;
      else b=0;
      return b;
}

#endif


کدها:

کد: انتخاب همه

/*******************************************************
Project : Temp SHT 20  Nokia N96
Version : v1
Date    : 1395.11.19
Author  :sinaset
centralclubs.com

Chip type         : ATmega32A
AVR Core Clock frequency: 16.000000 MHz
*******************************************************/

#include <mega32a.h>
#include <i2c.h>
#include <delay.h>
#include <stdio.h>
#include <sleep.h>
#include "lib\SHT2X.h"
#include "lib\tftlcd_functions.h"
#include "lib\xpt2046.h"
#include "lib_pic\min.h"
#include "lib_pic\max.h"
#include "lib_pic\rain.h"
#include "lib_pic\temp.h"   

unsigned char sane=0,dagh=0,sat=0;    //متغيرهاي ساعت
unsigned char str[30];            //
unsigned int time_standby=0;
float t=0.0,h=0.0,t_min=0.0,t_max=0.0,h_min=0.0,h_max=0.0;             //متغيرهاي دما
         //متغيرهاي خواندن دما
char t1=0,t2=0,t3=0,t4=0,t5=0,h1=0,h2=0,h3=0,h4=0,h5=0;
bit Active=0;

interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
sane++;
time_standby++;
if(sane==60)
  {
   sane=0;
   dagh++;
    if(dagh==60){
    dagh=0;
    sat++;
    if(sat==24)sat=0;
   }
  } 
}

void ref()         //تابع براي ريفرش کردن صفحه هر چند مدت يک بار
{
                      #asm("wdr")
lcd_clear_screen();
lcd_set_font_color(WHITE);
lcd_text_highlight_color(BLUE);
lcd_text_highlight_on();   
sprintf(str,"ده دقيقه قبل دما %d رطوبت %d",t1,h1);
lcd_goto_xy(35,115);
lcd_putsf_mix(str,1);   

lcd_set_font_color(WHITE);
lcd_text_highlight_color(RED);
  sprintf(str,"نيم ساعت قبل دما %d رطوبت %d",t2,h2);
lcd_goto_xy(35,130);
lcd_putsf_mix(str,1);
#asm("wdr")
lcd_set_font_color(WHITE);
lcd_text_highlight_color(BLUE); 
sprintf(str,"يک ساعت قبل دما %d رطوبت %d",t3,h3);
lcd_goto_xy(35,145);
lcd_putsf_mix(str,1);

lcd_set_font_color(WHITE);
lcd_text_highlight_color(RED);
sprintf(str,"دوازده ساعت قبل دما %d رطوبت %d",t4,h4);
lcd_goto_xy(35,160);
lcd_putsf_mix(str,1);
#asm("wdr")
lcd_set_font_color(WHITE);
lcd_text_highlight_color(BLUE); 
sprintf(str,"يک روز قبل دما %d رطوبت %d",t5,h5);
lcd_goto_xy(35,175);
lcd_putsf_mix(str,1); 
lcd_text_highlight_off();

lcd_set_font_color(DARK_GREEN);
lcd_draw_rectangle(13,218,92,302,0,DARK_YELLOW);    //قاب دما
lcd_draw_rectangle(148,218,227,302,0,LIGHT_GREEN);  //قاب رطوبت
lcd_goto_xy(150,200);
lcd_putsf_mix("نمودارآناليزدما",1); 
lcd_goto_xy(8,200);
lcd_putsf_mix("نمودارآناليزررطوبت",1); 
                                 #asm("wdr")
      lcd_set_font_color(BLUE);
        //آناليز رطوبت
      if(h>=0 & h<=20)lcd_goto_xy(12,303),lcd_putsf_mix("هواي خشک",1); 
      if(h>=20 & h<=30)lcd_goto_xy(12,303),lcd_putsf_mix("هواي رطوبت دار",1); 
      if(h>=30 & h<=45)lcd_goto_xy(12,303),lcd_putsf_mix("معتدل روبه بالا",1); 
      if(h>=45 & h<=55)lcd_goto_xy(12,303),lcd_putsf_mix("رطوبت بالا",1);
      if(h>=55 & h<=65)lcd_goto_xy(12,303),lcd_putsf_mix("رطوبت بسيار بالا",1);
      if(h>=65 & h<=95)lcd_goto_xy(12,303),lcd_putsf_mix("وضعيت بد رطوبت",1);   
      //آناليز دما
      if(t>=0 & t<=10)lcd_goto_xy(142,303),lcd_putsf_mix ("هواي بسيار سرد",1); 
      if(t>=10 & t<=26)lcd_goto_xy(142,303),lcd_putsf_mix("هواي سردوخنک",1); 
      if(t>=26 & t<=35)lcd_goto_xy(142,303),lcd_putsf_mix("هواي معتدل وخوب",1); 
      if(t>=35 & t<=45)lcd_goto_xy(142,303),lcd_putsf_mix("هواي گرم",1);
      if(t>=45 & t<=55)lcd_goto_xy(142,303),lcd_putsf_mix("هواي بسيارگرم",1);
      if(t>=55 & t<=70)lcd_goto_xy(142,303),lcd_putsf_mix("هوادروضعيت بد",1);
      lcd_set_font_color(DARK_GREEN);
      
      lcd_goto_xy(0,0);   
      if(Active==0)lcd_putsf_mix("روشن شدن طولاني",1);    //نمايش نوع روشن شدن ماندن مانيتور
      if(Active==1)lcd_putsf_mix("روشن شدن موقت",1);     //نمايش نوع روشن شدن مانيتور
      
    #asm("wdr")   
   lcd_set_font_color(BLUE);    //نمايش حداقل و حداکثر دما
   sprintf(str,"دما    %0.2f         %0.2f",t_max,t_min);
   lcd_goto_xy(20,17);
   lcd_putsf_mix(str,1);
   sprintf(str,"رطوبت   %0.2f       %0.2f ",h_max,h_min);
   lcd_goto_xy(15,36);                    #asm("wdr")
   lcd_putsf_mix(str,1); 
                        ///  نمايش گرافيک هاي حداقل و حداکثر دما
   lcd_set_font_color(DARK_GREEN); 
   lcd_write_pic(120,15,min_pic);
   lcd_write_pic(120,32,min_pic);                        #asm("wdr") 
   lcd_write_pic(35,15,max_pic);                         #asm("wdr")
   lcd_write_pic(35,32,max_pic);                         #asm("wdr")
   lcd_write_pic(0,80,rain);                          #asm("wdr")
   lcd_write_pic(0,50,temp);                          #asm("wdr")

}

void main(void)
{
unsigned char x_t=15,x_h=150,f;    //متغيرهاي نمودار
int x_1,l_1;               //متغيرهاي نمودار
unsigned int x1=0,y1=0;          //متغيرهاي تاچ اسکرين
bit standby=0;

ASSR=1<<AS2;   // Timer/Counter 2 initialization
TCCR2=(0<<PWM2) | (0<<COM21) | (0<<COM20) | (0<<CTC2) | (1<<CS22) | (0<<CS21) | (1<<CS20);
TCNT2=0x00;
OCR2=0x00;
TIMSK=(1<<TOIE2);
//
WDTCR=(0<<WDTOE) | (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);  // Watchdog Timer Prescaler: OSC/2048k

DDRB.2=1;    //پايه براي ترانزيستور که به کمک ان پاور مانيتور کنترولر ميشود
PORTB.2=0;

  lcd_init();//آماده کردن ال سي دي براي شروع کار
  lcd_set_font_color(WHITE);
  lcd_fa_num();
  lcd_goto_xy(10,20); 
  lcd_text_highlight_color(GREEN);
  lcd_text_highlight_on();
  lcd_putsf_mix("بنام خدا",1);
  lcd_text_highlight_off(); 
  lcd_set_font_color(WHITE);
  lcd_text_highlight_color(BLUE);
  lcd_text_highlight_on(); 
  lcd_goto_xy(10,50);
  lcd_putsf_mix("دماسنج با سنسور SHT20",1);
  lcd_goto_xy(10,70);
  lcd_putsf_mix("دقت سنجش دما 0.01 درجه",1);
  lcd_goto_xy(10,90);
  lcd_putsf_mix("دقت سنجش رطوبت 0.03 درصد",1);
  lcd_text_highlight_off(); 
  delay_ms(5200);   
                  
i2c_init(); 
xpt2046_init();   //مقدار دهي اوليه به تاچ اسکرين
t=read_temp();  //خواندن دما
h=read_humi();  //خواندن رطوبت
t_min=t_max=t; //نمونه گيري اوليه دما براي حداقل و حداکثر
h_min=h_max=h; //نمونه گيري اوليه رطوبت براي حداقل و حداکثر
 
  ref(); 
  #asm("sei")
  sleep_enable();
    while (1)
    {
                       #asm("wdr")
    if(standby==1)idle(); 
   t=read_temp();
   h=read_humi();
   
     if(dagh==10)t1=t,h1=h;       //هر 10 دقيقه يک نمونه
     if(dagh==30)t2=t,h2=h;       //هر 30 دقيقه يک نمونه
     if(sat==1)t3=t,h3=h;       //هر 1 ساعت يک نمونه
     if(sat==12)t4=t,h4=h;      //هر 12 ساعت يک نمونه
     if(sat==24)t5=t,h5=h;      //هر 24 ساعت يک نمونه   
    
     if(dagh==59 && sane>50)    //هر 1 ساعتي يک بار نمونه گيري حداکثر و حداقل،مقدار دهي دوبار شوند
     {
      t_min=t_max=t;
      h_min=h_max=h;
     }
   
    xpt2046_get_xy(&x1,&y1);
    x1=x1/ 17.0325;
    y1=y1/  12.796;   
    if(x1>=10 &  x1<=110 && y1>=20 &  y1<=300)      //در صورتي که سمت چپ صفحه مانيتور فشار داده شد
    {    
                                  #asm("wdr")
       PORTB.2=!PORTB.2;
       standby=!standby;
       delay_ms(500);
       Active=0;
       if(standby==0)ref();
       time_standby=0;
    };
     if(x1>=120 &  x1<=220 && y1>=20 &  y1<=300)     //در صورتي که سمت راست صفحه مانيتور فشار داده شد
    {    
                                  #asm("wdr")
       PORTB.2=!PORTB.2;
       standby=!standby;
       delay_ms(500);
       Active=1;
       if(standby==0)ref();
       time_standby=0;

    };
    if(standby==0 && Active==1 && time_standby>=20)    //در صورتي که وضعيت بر روي موقت بود،20 ثانيه بعد خاموش ميشود
    {
     standby=1;
     PORTB.2=1;
    }
    if(standby==0 && Active==0 && time_standby>=18000)   //در صورتي که از نوع طولاني بود،30 دقيقه بعد خاموش ميشود
    {
     standby=1;
     PORTB.2=1;
    }
                                  #asm("wdr")
   if(standby==0)         //در صورتي که وضعيت مانيتور خاموش بود،شرايط زير اجرا شود
   {
   for(x_1=30;x_1<125;x_1++)
   {
     for(l_1=50;l_1<112;l_1++){
     lcd_write_pixel(x_1,l_1,WHITE);
     }
   };
                                #asm("wdr")
   sprintf(str,"  دما    %0.2f",t);
   lcd_goto_xy(40,50);
   lcd_putsf_mix(str,2);
   sprintf(str,"رطوبت   %0.2f",h);
   lcd_goto_xy(40,80);
   lcd_putsf_mix(str,2); 
   
   if(t_min>t )t_min=t;
   if(t_max<t )t_max=t;
   if(h_min>h )h_min=h;
   if(h_max<h )h_max=h;
   
     f=t;   //آناليز دما
     x_t++;
     for(l_1=300;l_1>300-f;l_1--){
      if(f>=0 & f<=10)lcd_write_pixel(x_t,l_1,LIGHT_BLUE);
      if(f>=10 & f<=26)lcd_write_pixel(x_t,l_1,BLUE);
      if(f>=26 & f<=35)lcd_write_pixel(x_t,l_1,DARK_BLUE);
      if(f>=35 & f<=45)lcd_write_pixel(x_t,l_1,LIGHT_RED);
      if(f>=45 & f<=55)lcd_write_pixel(x_t,l_1,RED);
      if(f>=55 & f<=70)lcd_write_pixel(x_t,l_1,DARK_RED );
     }; 
                                  #asm("wdr")
      
     if(x_t==90){         //ريفرش کردن نمودار
      for(x_t=15;x_t<91;x_t++)
      {
      for(l_1=300;l_1>220;l_1--){
      lcd_write_pixel(x_t,l_1,WHITE);
      }
      }
      x_t=15;
     };
                                    #asm("wdr")
     f=h;    //آناليز رطوبت
     x_h++;
     for(l_1=300;l_1>300-f;l_1--){
      if(f>=0 & f<=20)lcd_write_pixel(x_h,l_1,LIGHT_BLUE); 
      if(f>=20 & f<=30)lcd_write_pixel(x_h,l_1,BLUE); 
      if(f>=30 & f<=45)lcd_write_pixel(x_h,l_1,DARK_BLUE); 
      if(f>=45 & f<=55)lcd_write_pixel(x_h,l_1,LIGHT_RED);
      if(f>=55 & f<=65)lcd_write_pixel(x_h,l_1,RED);
      if(f>=65 & f<=95)lcd_write_pixel(x_h,l_1,DARK_RED );
     };
     if(x_h==225){  //ريفرش کردن نمودار
      for(x_h=150;x_h<226;x_h++)
      {
      for(l_1=300;l_1>220;l_1--){
      lcd_write_pixel(x_h,l_1,WHITE);
      }
      }
      if(standby==0)ref();
      x_h=150;
     };
                                     #asm("wdr")
     delay_ms(1000); 
    }
    
    }
}







[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]سورس و شبیه ساز.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

New Member
نمایه کاربر
پست: 2
تاریخ عضویت: یک شنبه 1 اسفند 1395, 11:51 pm
سپاس‌های ارسالی: 1 بار
سپاس‌های دریافتی: 3 بار

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط massoudlore » دو شنبه 2 اسفند 1395, 8:10 am

سلام . خسته نباشی واقعا گل کاشتی از همه بابت . کنابخانه این سنسور رو چند وقته دنبالشم نتونستم پیدا کنم تصویر

New Member
پست: 15
تاریخ عضویت: سه شنبه 16 آذر 1395, 12:16 pm
سپاس‌های ارسالی: 2 بار
سپاس‌های دریافتی: 2 بار

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط saeedbahadori2013 » سه شنبه 22 فروردین 1396, 12:16 am

با سلام و عرض خسته نباشید به شما ممنون بابت پروژه خوبتون
میخواستم بپرسم ک چ تغیراتی باید در این پروژه اعمال کنم ک بجای ATMEGA32از ATMEGA128aاستفاده کنم
و همچنین میتونین بفرمایین ک چگونه میتونم برا این پروژتون منو درست کنم برای دستگاه جوجه کشی میخواستم :razz:

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط sinaset » سه شنبه 22 فروردین 1396, 10:47 am

سلام بر شما
تشکر از نظرتون. تغییرات بخصوصی نیاز نیست،فقط پایه ها و تایمر رو و همچنین مقداری i2c و موار این چنین رو مورد بررسی قرار دهید.
منو،با کلید،باید چند کلید به پایه ها اضافه و پول اپ رو هم اتصال دهید،در تابع اصلی نیز،یک تعریف قرار دهید.که وقتی کلید،فعال شد.. (تابع فرعی و دستورات مد نظر شما،اجرا شوند).
--
یک ورژن پیشرفته تر از ورژن بالا نیز اماده می باشد،که یک حافظه فلش w25q32 بهش اضافه شده و در ابتدا یک عکس رنگی گرافیکی،(بسم الله الرحمن الرحیم) به اون اضافه شده . و می توان به کمک این حافظه نزدیک به 20 تا 30 عکس، تمام صفحه به طرح نیز اضافه کرد.*اما بدلیل اینکه پرتئوس w25qXX را پشتیبانی نمی کند،نیاز به اموزش بیشتر دارد.*برنامه پروگرام ایسی فلش نیز به کمک یک میکروکنترولر داریه، رابه SPI و USART نیز اماده می باشد.که انشالله در اینده هر کدام در تاپیک ها مربوط و این تاپیک اموزش ها مربوط ارسال میشود.

*ضمن اینکه کدهایی بارگزاری عکس حتا با eeprom هم اماده می باشد! اما eeprom بدلیل حجم پایین.(در ظرفیت 512kbit) نیز نمی توان یک عکس تمام صفحه را لود کند(حافظه کم می باشد).
*برای کارت SD نیز اماده می باشد و در اینده نیز در این تاپیک قرار داده میشود.
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

New Member
پست: 15
تاریخ عضویت: سه شنبه 16 آذر 1395, 12:16 pm
سپاس‌های ارسالی: 2 بار
سپاس‌های دریافتی: 2 بار

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط saeedbahadori2013 » چهار شنبه 23 فروردین 1396, 12:03 am

با سلام ممنون ک وقت میزارین و پاسخ میدین
من تغیراتی اعمال کردم ولی دما و رطوبت را به صورت 2fنمایش میده ممنون میشم راهنمایی کنید
و همچنین این ارور هاره میده
Linker error: D:\New folder\Compressed\N96 (Atmega32)\New folder (2)\lib\xpt2046.h(106): function 'xpt2046_init' declared, but never defined
Linker error: D:\New folder\Compressed\N96 (Atmega32)\New folder (2)\lib\xpt2046.h(107): function 'xpt2046_get_xy' declared, but never defined
و همچنین دو نوع از این السیدی در کدویژن هستش من باید کدوم یک از انهارو انتخاب کنم

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط sinaset » چهار شنبه 23 فروردین 1396, 7:43 am

سلام بر شما
خواهش میکنم
اشکال اول که فکر میکنم،مربوط به اعشار باشه. به منویه project برید و بعد روی گزینه اخر یعنی configuer کلیک کنید،سپس در پنجره باز شده به روی گزینه C compiler کلیک کنید،همان سربرگ اول،گزینه سمت چپ پایین صفحه Sprint Feature رو باز کنید و روی یکی از دو گزینه اخر بزارید . (گزینه اخر،حجم بیشتری اشغال میکنه!) . این کار باعث میشه،اعداد اعشاری در برنامه نمایش داده بشه.(تابعsprint رو با قابلیت اعشاری میکند).
این دو erro هم مربوط به کتابخانه تاچ می باشند ،ایا شما در صفحه جداگانه اقدام به ساخت فایل جدید کردید،یا در همان صفحه که کتابخانه های برنامه وجود دارد اقدام ساخت فایل جدید کردید؟!
اگر در همانجا هستید،ولی بازهم ،این اخطار وجود دارد،ادرس کتابخانه رو به برنامه بدهید. برای این کار "به منویه project برید و بعد روی گزینه اخر یعنی configuer کلیک کنید" سپس در صفحه باز شد. روی گزینه Add کلیک کنید و بعد کتابخانه xpt2046 را پیدا و بعد رو ان،جهت اضافه شدن به برنامه کلیک کنید.

و منظور شما رو از دو نوع LCD متوجه نشدم، کتابخانه نوشته شده برای LCD ، توسط یک شخص نوشته شده ، و از کتابخانه کدویژن استفاده نشده است.

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

New Member
پست: 15
تاریخ عضویت: سه شنبه 16 آذر 1395, 12:16 pm
سپاس‌های ارسالی: 2 بار
سپاس‌های دریافتی: 2 بار

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط saeedbahadori2013 » پنج شنبه 24 فروردین 1396, 12:48 am

با سلام و عرض خسته نباشید
ممنون از راهنمایی خوبتون مشکل نشان ندادن دما و رطوبت حل شد ولی همچنان ارور های قبلی پاورجاست داخل خود پروژه اصلی شما تغییرات مربوط به ATMEGA128 را اعمال کردم ارور برطرف شد ولی در موقع شبیه سازی تو همون مرحله اول که مینویسه به نام خدا ....میمونه پورتا میکرو در حال دادن اطلاعات هستن ولی ال سی دی تو همون مرحله ثابت میمونه
بله یک پروژه جدید تعریف کردم
منظورم از دو نوع ال سی دی
IL9325 16BIT BUS 240*320 TFT 64K COLORS
IL9325 16BIT BUS 240*320 TFT 256 COLORS
است که باید کدوم یک از این هارو انتخاب کنیم
1- تنظیمات مربوط ب تایمر دو را برای ATMEGA128 را باید چه تغیراتی اعمال کنیم
2-برای تغییر اندازه فونت باید چکار کنیم
3 همچنین چطور سطر مشخصی رو پاک کنیم .
4حالا ک از I2Cبرای سنسور استفاده کردیم دیگه ینی نمیشه از ماژول ساعت استفاده کرد
5میشه از چند سنسور SHT20 همزمان در این پروژه استفاده کرد
من فقط با السی دی کاراکتری کار کردم
با تشکر فراوان

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط sinaset » پنج شنبه 24 فروردین 1396, 6:02 pm

سلام بر شما.
دما و رطوبت درون LCD درست شده است،یا پرتئوس؟!
پایه رو درست وارد کرده اید،در پرتئوس خطوط پایه درست انجام شده است ؟!
رابط I2c بادرستی به سنسور اتصال پیدا کرده
نیازی به lCD ها که ذکر کردید،نیست،خودش از یک کتابخانه اختصاصی استفاده می کند.

1-برنامه قبلی رو ببینید متوجه خواهید شد(به هر حال قراره کریستا 32 کیلوهرتزی رو براش تعریف کنید و اینتراپ شدن هر 1 ثانیه. برای بررسی کدهای درون تابع ساعت)
2-تغییر فونت،کتابخانه متاسفانه چندان جالب نیست! ولی این تابع که متن را چاپ می کنید "(lcd_putsf_mix(str,2"عدد 2 سایز فونت می باشد. که بهترین حالت همان 1 می باشد! در حالت 2 سایز بزرگ تر میشود و در سایز 3 نیز بسیار بسیار بزرگ میشود! و... (نویسند کتابخانه باید این مسئله رو بهتر انجام میدادن،اما به هر حال کارشون خیلی خوب بوده و دستشون هم درد نکنه.)
3-اینجاب چنین دستوری رو در این کتابخانه پیدا نکردم،ولی معمولا ادرس قسمت (عرض و ارتفاعی) رو پیدا می کردم ،سپس درون تابع زیر می گذاشتم،تا ان قسمت را سفید (یا همان پاک) کند..

کد: انتخاب همه

   for(x_1=30;x_1<125;x_1++)
   {
     for(l_1=50;l_1<112;l_1++){
     lcd_write_pixel(x_1,l_1,WHITE);
     }
   };

این دستور در خطوط اصلی برنامه می باشد و در همانجایی که دمای اصلی نمایش داده میشود(قبل از اینکه دمایی اصلی با سایز بزرگ نمایش داده بشود،ان محدود به کمک دستور بالا،پاک میشود).
فکر میکنم این مسئله بیشتر در کتابخانه فارسی باشد و در کتابخانه ها اصلی نوشته شده،خود متن و.. جایگزین متن قبلی میشود ... (تا انجا که بخاطر دارم) این در حالی است که در این کتابخانه،باید کل صفحه پاک شود!! (شاید هم اینجانب اشتباه میکنم)
4-قاعدتا نباید مشکلی باشد،همانجور که احتمالا باید بدانید واحد i2c ابتدا یک کد شناسایی برای ایسی می فرستد(که هر ایسی برای خود یک کد شناسی دارد
مثلا همین سنسور ما کدشناسی ان در I2c مقدار "0x80" می باشد و ایسی ساعتی مثل ds1307 کد شناسیش "0x68" می باشد. که برای ارتباط ابتدا کد شناسی فرستاده میشود،سپس بعد از شناسی ایسی اماده برای دیگر عملیات ها میشود(در غیر اینصورت هیچ پاسخ ارسال نمی کند،و واکنشی ندارد). در یک خط ارتباطی i2c تا انجا که بخاطر دارم 127 دستگاه می تواند ،فقط به کمک 2 سیم،در ارتباط باشن.
اگر هم نهایت مشکلی باشد(که احتمالش 99.99 درصد می باشد!) می توانید از واحد TWI خود میکرو استفاده کنید (i2c که در کتابخانه کدویژن است،یک سری کد و ریجستر می باشد که i2c را شبیه سازی کرده است . و معمولا از خود twi که همون i2c سخت افزاری می باشد،کمتر استفاده میشود!)
5-چون همه سنسورها یک کدشناسایی دارن،نمی توان همه را به روش بالا،در یک خط قرار داد! شاید بتوان یکی را با i2c و یکی را با twi ادرس دهی کرد! به هر صورت کار سختی باید باشد. (می توانید از سنسور ds18b20 استفاده کنید،به کمک این سنسور میتونید تعداد زیادی سنسور بر روی یک خط داشته باشید.)

باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

New Member
پست: 15
تاریخ عضویت: سه شنبه 16 آذر 1395, 12:16 pm
سپاس‌های ارسالی: 2 بار
سپاس‌های دریافتی: 2 بار

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط saeedbahadori2013 » جمعه 25 فروردین 1396, 6:21 pm

با سلام ممنون از راهنمایی خوبتون مشکل حل شد ولی وقتی دابل اسلش این دستورو برمیدارم // xpt2046_get_xy(&x1,&y1); در هنگام سیمولیشن در پروتوس بعد نوشتن بنام خدا .... تو همون مرحله ثابت میمونه و همچنین اگه امکانش هست اموزش ساخت هدر فایل هایی مثل rain , temp وتدیل عکس به اون سایز کوچیک را بدین

Colonel II
Colonel II
نمایه کاربر
پست: 7011
تاریخ عضویت: سه شنبه 26 آذر 1387, 4:20 pm
سپاس‌های ارسالی: 9183 بار
سپاس‌های دریافتی: 21042 بار
تماس:

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط sinaset » جمعه 25 فروردین 1396, 7:11 pm

سلام بر شما
نمیدانم،مشکل شمادر رابطه با ان خط،که گفتید،چه چیزی می باشد.پایه ها خطوط را بدرستی به میکروکنترولر اتصال داده اید. ؟! معمولا اینجور اشکالات،یک سری اشکالات ریز می باشند،که باید بررسی بیشتر انجام دهید تا عیب کار مشخص شود. از برنامه atmega32 کمک بگیرید (چه شبیه ساز و چه کدها) ببینید دقیقا کجا کار را اشتباه انجام داده اید .
(*ضمن اینکه،در پرتئوس،فرکانس میکرو رو برای روی 16 مگاهرتز بگزارید و فیوزبیت را هم بر روی کریستال خارجی قرار دهید)

در رابطه با اخرین سوالات،سعی میکنم،در اینده ان را قرار دهم(انشالله).
باتشکر.
"قرآن"(کلام خدا) ...راه سعادت و خوشبختی.

Rookie Poster
Rookie Poster
پست: 24
تاریخ عضویت: یک شنبه 8 مرداد 1396, 3:48 pm
سپاس‌های ارسالی: 7 بار
سپاس‌های دریافتی: 1 بار

Re: دماسنج و رطوبت سنج با سنسور SHT20(ورژن1،LCDرنگی،تمام فار

پست توسط vdej » یک شنبه 22 مرداد 1396, 5:03 pm

سلام
وقت بخیر
ببخشید خودتون به صورت عملی امتحان کردین که آیا دقیق هست یا نه؟
چون من تمام سنسورهای dht22 که خریدم هیچ کدومشون دقیق نبودن و تقریبا هزینه زیادی کردم!
ممنونم

ارسال پست

بازگشت به “طرح آماده و کامل شده AVR”