سلام دوستان .من یه سیستم مانیتورینگ دما فشار نور رطوبت رو میخوام با codvision avr طراحی کنم و با proteus شبیه سازی .درمورد سنسور دما lm35 رو انتخاب کردم برنامه نویسیشم بلدم ولی در مورد سنسور فشار رطوبت نور چیزی نمیدونم اینکه اسم این سنسورها در proteus چیه و برنامه نویسیش چه جوریه؟ قبلا از دوستانی که لطف میکنن کمکم میکنن ممنوووووووووووونم :biggrin:
اطلاعیه
Collapse
No announcement yet.
کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
Collapse
X
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
والا دوست عزیز تا اونجا که من میدونم همه چیزو نیمشه تو پروتئوس شبیه سازی کرد ولی مثلا به ldr که یه مقاومت وابسته به نوره یه ولوم با همون مقدار تو پروتئوس بزاری اگه با تغییرات ولوم درصد نور تغییر کنه با ldr هم میشه چون هر دو از یه جنسن ولی با سنسور فشار کار نکردم بعیدم میدونم بشه شبیه سازی کرد
پیروز باشیدمن به آمار زمین مشکوکم...
اگر این شهر پر از آدم هاست......
پس چرا این همه دل ها تنهاست؟
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
نوشته اصلی توسط محمد فاطمیهوالا دوست عزیز تا اونجا که من میدونم همه چیزو نیمشه تو پروتئوس شبیه سازی کرد ولی مثلا به ldr که یه مقاومت وابسته به نوره یه ولوم با همون مقدار تو پروتئوس بزاری اگه با تغییرات ولوم درصد نور تغییر کنه با ldr هم میشه چون هر دو از یه جنسن ولی با سنسور فشار کار نکردم بعیدم میدونم بشه شبیه سازی کرد
پیروز باشید
ولی نمیدونم واسه کدویژن چه کدی رو باید بنویسم؟ :redface:
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
نوشته اصلی توسط lordsorooshفکر نکنم بتونید شبیه سازیش بکنید اما برا ساختش شروع کنید ما هم کمک می کنیم
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
نوشته اصلی توسط shohreh_nدوست عزیز اولین قدم برای ساختش نوشتن برنامه کدویژن برای کنترل المانهاییه که گفتم . واسه برنامه نویسیش میتونید کمکم کنین؟ :job:جانم به فدای ائمه اطهار
می دونستم تحمل مرگ اعضای خانواده خیلی سخته ولی نه تا این حد،ایکاش پدرم بیشتر می موند.روحش شاد.
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
نوشته اصلی توسط ahmadpashaeiسلام شهره جان عضویتتون رو تبریک می گم.برای کنترل دما و رطوبت بهتره از سنسور sht11 استفاده کنید که خروجی دیجیتال هم داره! اینجا استاد AVR تا دلتون بخواد داره ولی کار اصلی به عهده شماست و ایشالا راهنمایی می کنن. :applause:
این اساتید محترم avr کجان بیان یه کمکی کنن فوری فوتییییییییییییییییییییییه :sad: :rolleyes:
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
من دیتاشیت این سنسو را گرفتم خوندم . ظاهرا راه اندازیش خیلی سخت نیست. sht11
خوب اول با مدارش شروع میکنیم :
چیزی را بگو که بتوانی بنویسی
چیزی را بنویس که بتوانی امضا کنی
چیزی را امضا کن که بتوانی به آن عمل کنی (ناپلئون)
- تشکرها 1
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
یه سنسور دیگه هم هست به نام HH10D که یه ایپرام داره که باید 4 بایت اون رو بخونید تا مقدار کالیبر دستتون بیاد و بعد فرکانس خروجی سنسور رو اندازه میگیرید بعدش مقدار بدست اومده رو میزارید تو فرمول دیتاشیت رطوبت رو حساب میکنید
اینم دیتاشیتش:
http://www.hoperf.com/upload/sensor/HH10D.pdf
تو ایران هم هست
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
ماژول بعد از روشن شدن باید به مدت 11 ثانیه در حالت خودش باقی بماند و هیچ دستوری ارسال نشود.
بعد از 11 پانیه باید یک start ارسال شود و بعد از ان یک بایت داده شامل سه بیت ادرس 000 و 5 بیت دستور می باشد . به شکل زیر :
مثلا اگر می خواهیم دما را بخوانیم باید بعد از start ر 00000011 را بفرستیم. بعد از ارسال از طرف ماژول دو بایت داده و یک بایت crc ارسال می شود . ماژول بعد از دریافت اخرین ack خود به خود به حالت اسلیپ بر میگردد و اماده دریافت فرمان بعدی می شود.چیزی را بگو که بتوانی بنویسی
چیزی را بنویس که بتوانی امضا کنی
چیزی را امضا کن که بتوانی به آن عمل کنی (ناپلئون)
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
نوشته اصلی توسط lordsorooshمن دیتاشیت این سنسو را گرفتم خوندم . ظاهرا راه اندازیش خیلی سخت نیست. sht11
خوب اول با مدارش شروع میکنیم :
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
خروجی سنسور دیجیتاله و در دیتاشیت فرمول محاسبه دما و رطوبت به صورت جدا و مفصل توضیح داده شده.اینم از یادگاری های قدیم که دیتاشیت ها باشه:
http://eca.ir/sharing/uploads/13376179141.rar
http://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
جانم به فدای ائمه اطهار
می دونستم تحمل مرگ اعضای خانواده خیلی سخته ولی نه تا این حد،ایکاش پدرم بیشتر می موند.روحش شاد.
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با codvision avr
اساتید محترم بعد از کلی مطالعه و تفحص تو دیتاشیت سنسور sht11 و البته راهنماییهای شما دوستان عزیز یه برنامه ای پیدا کردم و با اطلاعاتی که بدست اوردم ویرایش کردمش و ارورهاشو گرفتم ولی با شبیه سازی تو پروتیوس رطوبت رو صفر می مونه و دما به طور صعودی میره بالا.از دوستان کسی هس اشکالات این برنامرو بهم بگه یا حداقل یه برنامه بدون عیب با کدویژن بذاره؟ خیلی ممنون میییییییشم :rolleyes:
دیدگاه
-
پاسخ : کمک برای ساخت سیستم کنترل دما ,فشار,رطوبت ونور با 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;
}
دیدگاه
دیدگاه