آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

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

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

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

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(دماسنج با 7سگ

پست توسط sinaset » شنبه 11 فروردین 1397, 7:56 am

سلام بر شما
خواهش میکنم. می توانید از کلید تشکر هم استفاده کنید..

1- تغییرات زیادی نیاز است! اگر مشکل شما انچان خاص نیست بهتر است تعویض نکنید!
برای تعویض پایه ds18b20 به قسمت configure (واقع در منو project کدویژن ) برید و بعد قسمت سی کامپایلر و بعد قسمت کتابخانه، سربرگ 1wire انچا می توانید پایه را مشخص و در نهایت OK و بعد برنامه را ذخیره کنید
2-نوشتن این برنامه ها زمان زیادی می برد.. (برنامه مشابه در تاپیک سنسور دما dht22 وجود دارد،می توانید از ان استفاده کنید،یا از نمونه کدها استفاده کنید)

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

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

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(دماسنج با 7سگ

پست توسط sinaset » شنبه 11 فروردین 1397, 8:45 am

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


ورژن 3 با سون سگمنت 4 رقمی (نمایش ممیز و علامت منفی) تصویر 
ورژن 3 تکمیل یافته تر،سون سگمنت 4 رقمی می باشد! ورژن قبلی زمان تاخیر محسوس داشت! در این نسخه تاخیر و عملکر بسیار افزایش یافته و دمایی منفی و همچنین ممیز دما نیز نمایش داده میشود ..

کدها:

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

/**************************************
name   : 'Temp 7seg ds18b20'
date   : 1397/1/11
ver 3.0
site: centralclubs.com
by sinaset
**************************************/
#include <mega8.h>
#include <delay.h>
#include <stdio.h>
#include <sleep.h>
#include <ds18b20.h>    //کتابخانه ايسي دماسنج در کدويژن
#include <1wire.h>   //فعال سازي واحد

flash unsigned char s[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char DS18B20_Rom_Codes[9];    //متغير 9 رشته ي،براي گرفتن شماره سريال ايسي
float Thermometer=0.0;    //متغير  اعشاري براي گرفتن دما
int  b=0,c=0,m=0; 
char Y=0;   

interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{

    if(Y==0)
    {
    PORTB=1;
    if(Thermometer>=0)PORTD=0xff;
    else PORTD=~0b01000000;
    }
   if ( Y==1)
    {

   PORTB=2;
    PORTD=~s[B];
[/B]   }
    if( Y==2)
    {

   PORTB=4;
    PORTD=~s[m]+0b10000000;
    }
    if ( Y==3)
    {

   PORTB=8;
    PORTD=~s[c];
    }
    Y++;
    if(Y>3)Y=0;
   
    TCNT1H=0xC180 >> 8;
TCNT1L=0xC180 & 0xff;

    

}

void main(void)
{

   

PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;

// Timer/Counter 1 initialization
// Clock value: 125.000 kHz
// Timer Period: 5 ms
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0xC1;
TCNT1L=0x80;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<TOIE0);


w1_init();       //!wire مقدار دهي اوليه
w1_search(0xf0,DS18B20_Rom_Codes);     //کد براي معرفي ايسي و ريختن شمار ايسي به درون متغير ذکر شده

#asm("sei")
while(1)
  {
   Thermometer = ds18b20_temperature(DS18B20_Rom_Codes);   

   
    if(Thermometer>=0)
    {
    c=Thermometer * 10 ; 
    c= c % 10 ;
    b=Thermometer / 10;
    m=Thermometer, 
    m=m % 10;
    }   
    else
    {
    c=Thermometer * 10 * -1; 
    c= c % 10;
    b=(Thermometer / 10) * -1;
    m=Thermometer * -1, 
    m=m % 10;

    } 


      
   }

   

   



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

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

New Member
پست: 5
تاریخ عضویت: چهار شنبه 9 خرداد 1397, 11:58 am
سپاس‌های ارسالی: 9 بار
سپاس‌های دریافتی: 4 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20

پست توسط TeamDigital » چهار شنبه 9 خرداد 1397, 12:24 pm

sinaset نوشته شده:بنام خدا
--
سلام بر شما
انشالله در این پست توضیح خواهم داد،تشکر از تذکر شما.
--
استفاده از 20 سنسور DS18b20 در کنار هم.!
تصویر
تصویر
در این اموزش قصد داریم 20 ایسی دما ds18b20 را بهم دیگر برای یک میکرو راه اندازی کنیم!
همانجور که در گذشته نیز گفتیم،این ایسی ها دما،هر کدام یک کد شناسایی کارخانه ی نیز دارن،که کار را برای ما نیز اسان می کند، حال کافیست ما ابتدا یک دستور شناسایی برای همه ایسی بفرستیم،تا خودشان را معرفی کنند! سپس در برنامه به کمک کدهایی شناسایی ،هر ایسی که خواستیم را می توانیم صدا بزنیم و دمایی ان را بخوانیم!

در این برنامه بدلیل زیاد بودن تعداد ایسی ها و عدم نمایش صحیح بر روی LCD ،نمایش از طریق رابط uart انجام میشود.(پس یک مبدل uart به usb تهیه کنید،)
مراحل برنامه نویسی:

به قسمت های مهم می پردازیم..

متغیری تعریف میکنیم،که به کمک ان بتوانیم تعداد ایسی های موجود در مدار را بدست بیاوریم.

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

unsigned char IC_DS18B20@0x020; //متغير براي دريافت تعداد ايسي ها

20 آرایه دو بعدی تعریف می کنیم،تا کدهایی شناسایی هر ایسی را در ان قرار دهیم.

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

unsigned char DS18B20_Rom_Codes[20][9]@0x200; //ارايه دو بعدي براي دريافت کدهايي شناسايي ايسي ها

20 متغیر از نوع اعشاری برای دمایی هر ایسی تعریف می کنیم

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

float Thermometer[20];

به کمک دستور مهم زیر،از ایسی های می خواهیم خودشان را معرفی کنند،سپس کدشناسایی هر ایسی را در یکی از ارایه های DS18B20_Rom_Codes قرار میدهیم.

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

IC_DS18B20=w1_search(0xf0,DS18B20_Rom_Codes);

به کمک دستور ها زیر، کدشناسایی 20 ایسی نمایش داده میشود،(به کمک شماره کدشناسایی هر ایسی،می توانید هر ایسی را جداگانه پیدا کنید! یا مکان دقیق ایسی را در مدار بدانید و ..)

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

sprintf(str,"CODE_IC1:%x%x%x",DS18B20_Rom_Codes[0][3],DS18B20_Rom_Codes[0][2],DS18B20_Rom_Codes[0][1]),puts(str);
sprintf(str," CODE_IC2:%x%x%x",DS18B20_Rom_Codes[1][3],DS18B20_Rom_Codes[1][2],DS18B20_Rom_Codes[1][1]),puts(str);
sprintf(str," CODE_IC3:%x%x%x",DS18B20_Rom_Codes[2][3],DS18B20_Rom_Codes[2][2],DS18B20_Rom_Codes[2][1]),puts(str);
sprintf(str," CODE_IC4:%x%x%x",DS18B20_Rom_Codes[3][3],DS18B20_Rom_Codes[3][2],DS18B20_Rom_Codes[3][1]),puts(str);
sprintf(str," CODE_IC5:%x%x%x\r\n",DS18B20_Rom_Codes[4][3],DS18B20_Rom_Codes[4][2],DS18B20_Rom_Codes[4][1]),puts(str);
sprintf(str,"CODE_IC6:%x%x%x",DS18B20_Rom_Codes[5][3],DS18B20_Rom_Codes[5][2],DS18B20_Rom_Codes[5][1]),puts(str);
sprintf(str," CODE_IC7:%x%x%x",DS18B20_Rom_Codes[6][3],DS18B20_Rom_Codes[6][2],DS18B20_Rom_Codes[6][1]),puts(str);
sprintf(str," CODE_IC8:%x%x%x",DS18B20_Rom_Codes[7][3],DS18B20_Rom_Codes[7][2],DS18B20_Rom_Codes[7][1]),puts(str);
sprintf(str," CODE_IC9:%x%x%x",DS18B20_Rom_Codes[8][3],DS18B20_Rom_Codes[8][2],DS18B20_Rom_Codes[8][1]),puts(str);
sprintf(str," CODE_IC10:%x%x%x\r\n",DS18B20_Rom_Codes[9][3],DS18B20_Rom_Codes[9][2],DS18B20_Rom_Codes[9][1]),puts(str);
sprintf(str,"CODE_IC11:%x%x%x",DS18B20_Rom_Codes[10][3],DS18B20_Rom_Codes[10][2],DS18B20_Rom_Codes[10][1]),puts(str);
sprintf(str," CODE_IC12:%x%x%x",DS18B20_Rom_Codes[11][3],DS18B20_Rom_Codes[11][2],DS18B20_Rom_Codes[11][1]),puts(str);
sprintf(str," CODE_IC13:%x%x%x",DS18B20_Rom_Codes[12][3],DS18B20_Rom_Codes[12][2],DS18B20_Rom_Codes[12][1]),puts(str);
sprintf(str," CODE_IC14:%x%x%x",DS18B20_Rom_Codes[13][3],DS18B20_Rom_Codes[13][2],DS18B20_Rom_Codes[13][1]),puts(str);
sprintf(str," CODE_IC15:%x%x%x\r\n",DS18B20_Rom_Codes[14][3],DS18B20_Rom_Codes[14][2],DS18B20_Rom_Codes[14][1]),puts(str);
sprintf(str,"CODE_IC16:%x%x%x",DS18B20_Rom_Codes[15][3],DS18B20_Rom_Codes[15][2],DS18B20_Rom_Codes[15][1]),puts(str);
sprintf(str," CODE_IC17:%x%x%x",DS18B20_Rom_Codes[16][3],DS18B20_Rom_Codes[16][2],DS18B20_Rom_Codes[16][1]),puts(str);
sprintf(str," CODE_IC18:%x%x%x",DS18B20_Rom_Codes[17][3],DS18B20_Rom_Codes[17][2],DS18B20_Rom_Codes[17][1]),puts(str);
sprintf(str," CODE_IC19:%x%x%x",DS18B20_Rom_Codes[18][3],DS18B20_Rom_Codes[18][2],DS18B20_Rom_Codes[18][1]),puts(str);
sprintf(str," CODE_IC20:%x%x%x\r\n",DS18B20_Rom_Codes[19][3],DS18B20_Rom_Codes[19][2],DS18B20_Rom_Codes[19][1]),puts(str);

به کمک دستور زیر،دمایی هر ایسی خوانده میشود و سپس هر کدام در متغیر رشته ی Thermometer ذخیره میشود..

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

for (i=0;i<IC_DS18B20;i++) { //حلقه ي براي خواندن مقدار دما ها
Thermometer = ds18b20_temperature(DS18B20_Rom_Codes); //خواندن دمايي هر ايسي
}

در پایان نیز،مقدار دمای هر ایسی برای نمایش فرستاده میشود

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

sprintf(str,"\r\nT1:%.1f ",Thermometer[0]),puts(str); //نمايش دما 20 ايسي
sprintf(str,"T2:%.1f ",Thermometer[1]),puts(str);
sprintf(str,"T3:%.1f ",Thermometer[2]),puts(str);
sprintf(str,"T4:%.1f ",Thermometer[3]),puts(str);
sprintf(str,"T5:%.1f ",Thermometer[4]),puts(str);
sprintf(str,"T6:%.1f ",Thermometer[5]),puts(str);
sprintf(str,"T7:%.1f ",Thermometer[6]),puts(str);
sprintf(str,"T8:%.1f ",Thermometer[7]),puts(str);
sprintf(str,"\r\nT9:%.1f ",Thermometer[8]),puts(str);
sprintf(str,"T10:%.1f ",Thermometer[9]),puts(str);
sprintf(str,"T11:%.1f ",Thermometer[10]),puts(str);
sprintf(str,"T12:%.1f ",Thermometer[11]),puts(str);
sprintf(str,"T13:%.1f ",Thermometer[12]),puts(str);
sprintf(str,"T14:%.1f ",Thermometer[13]),puts(str);
sprintf(str,"T15:%.1f ",Thermometer[14]),puts(str);
sprintf(str,"T16:%.1f ",Thermometer[15]),puts(str);
sprintf(str,"\r\nT17:%.1f ",Thermometer[16]),puts(str);
sprintf(str,"T18:%.1f ",Thermometer[17]),puts(str);
sprintf(str,"T19:%.1f ",Thermometer[18]),puts(str);
sprintf(str,"T20:%.1f ",Thermometer[19]),puts(str);

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

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

/*******************************************************
Project : 20 temp ds18b20 uart
Version :
Date : 09/02/2016
Edit : siaset


Chip type : ATmega8A
AVR Core Clock frequency: 8.000000 MHz
*******************************************************/
#include <mega8.h>
#include <stdio.h>
#include <ds18b20.h>
#include <1wire.h>

unsigned char IC_DS18B20@0x020; //متغير براي دريافت تعداد ايسي ها
unsigned char DS18B20_Rom_Codes[20][9]@0x200; //ارايه دو بعدي براي دريافت کدهايي شناسايي ايسي ها
typedef unsigned char byte;

void main(void){
float Thermometer[20]; //متغير دما
char str[32]; //رشته
int i=0;


//فعال سازي يو آرت
// USART Transmitter: On
// USART Baud Rate: 9600
UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
UBRRH=0x00;
UBRRL=0x33;

w1_init(); //مقدار دهي اوليه به واحد 1 واير

puts("TEMP 5 DS18B20 \r\n"); //چاپ يک متن

IC_DS18B20=w1_search(0xf0,DS18B20_Rom_Codes); //شناسايي ايسي ها و ذخيره کدهايي شناسايي

//خطوط زير براي نمايش کدشناسايي 20 ايسي مي باشد،که مي تواند در اينده به شما کمک کند
sprintf(str,"CODE_IC1:%x%x%x",DS18B20_Rom_Codes[0][3],DS18B20_Rom_Codes[0][2],DS18B20_Rom_Codes[0][1]),puts(str);
sprintf(str," CODE_IC2:%x%x%x",DS18B20_Rom_Codes[1][3],DS18B20_Rom_Codes[1][2],DS18B20_Rom_Codes[1][1]),puts(str);
sprintf(str," CODE_IC3:%x%x%x",DS18B20_Rom_Codes[2][3],DS18B20_Rom_Codes[2][2],DS18B20_Rom_Codes[2][1]),puts(str);
sprintf(str," CODE_IC4:%x%x%x",DS18B20_Rom_Codes[3][3],DS18B20_Rom_Codes[3][2],DS18B20_Rom_Codes[3][1]),puts(str);
sprintf(str," CODE_IC5:%x%x%x\r\n",DS18B20_Rom_Codes[4][3],DS18B20_Rom_Codes[4][2],DS18B20_Rom_Codes[4][1]),puts(str);
sprintf(str,"CODE_IC6:%x%x%x",DS18B20_Rom_Codes[5][3],DS18B20_Rom_Codes[5][2],DS18B20_Rom_Codes[5][1]),puts(str);
sprintf(str," CODE_IC7:%x%x%x",DS18B20_Rom_Codes[6][3],DS18B20_Rom_Codes[6][2],DS18B20_Rom_Codes[6][1]),puts(str);
sprintf(str," CODE_IC8:%x%x%x",DS18B20_Rom_Codes[7][3],DS18B20_Rom_Codes[7][2],DS18B20_Rom_Codes[7][1]),puts(str);
sprintf(str," CODE_IC9:%x%x%x",DS18B20_Rom_Codes[8][3],DS18B20_Rom_Codes[8][2],DS18B20_Rom_Codes[8][1]),puts(str);
sprintf(str," CODE_IC10:%x%x%x\r\n",DS18B20_Rom_Codes[9][3],DS18B20_Rom_Codes[9][2],DS18B20_Rom_Codes[9][1]),puts(str);
sprintf(str,"CODE_IC11:%x%x%x",DS18B20_Rom_Codes[10][3],DS18B20_Rom_Codes[10][2],DS18B20_Rom_Codes[10][1]),puts(str);
sprintf(str," CODE_IC12:%x%x%x",DS18B20_Rom_Codes[11][3],DS18B20_Rom_Codes[11][2],DS18B20_Rom_Codes[11][1]),puts(str);
sprintf(str," CODE_IC13:%x%x%x",DS18B20_Rom_Codes[12][3],DS18B20_Rom_Codes[12][2],DS18B20_Rom_Codes[12][1]),puts(str);
sprintf(str," CODE_IC14:%x%x%x",DS18B20_Rom_Codes[13][3],DS18B20_Rom_Codes[13][2],DS18B20_Rom_Codes[13][1]),puts(str);
sprintf(str," CODE_IC15:%x%x%x\r\n",DS18B20_Rom_Codes[14][3],DS18B20_Rom_Codes[14][2],DS18B20_Rom_Codes[14][1]),puts(str);
sprintf(str,"CODE_IC16:%x%x%x",DS18B20_Rom_Codes[15][3],DS18B20_Rom_Codes[15][2],DS18B20_Rom_Codes[15][1]),puts(str);
sprintf(str," CODE_IC17:%x%x%x",DS18B20_Rom_Codes[16][3],DS18B20_Rom_Codes[16][2],DS18B20_Rom_Codes[16][1]),puts(str);
sprintf(str," CODE_IC18:%x%x%x",DS18B20_Rom_Codes[17][3],DS18B20_Rom_Codes[17][2],DS18B20_Rom_Codes[17][1]),puts(str);
sprintf(str," CODE_IC19:%x%x%x",DS18B20_Rom_Codes[18][3],DS18B20_Rom_Codes[18][2],DS18B20_Rom_Codes[18][1]),puts(str);
sprintf(str," CODE_IC20:%x%x%x\r\n",DS18B20_Rom_Codes[19][3],DS18B20_Rom_Codes[19][2],DS18B20_Rom_Codes[19][1]),puts(str);


while(1){
for (i=0;i<IC_DS18B20;i++) { //حلقه ي براي خواندن مقدار دما ها
Thermometer[i] = ds18b20_temperature(DS18B20_Rom_Codes[i]); //خواندن دمايي هر ايسي

}
sprintf(str,"\r\nT1:%.1f ",Thermometer[0]),puts(str); //نمايش دما 20 ايسي
sprintf(str,"T2:%.1f ",Thermometer[1]),puts(str);
sprintf(str,"T3:%.1f ",Thermometer[2]),puts(str);
sprintf(str,"T4:%.1f ",Thermometer[3]),puts(str);
sprintf(str,"T5:%.1f ",Thermometer[4]),puts(str);
sprintf(str,"T6:%.1f ",Thermometer[5]),puts(str);
sprintf(str,"T7:%.1f ",Thermometer[6]),puts(str);
sprintf(str,"T8:%.1f ",Thermometer[7]),puts(str);
sprintf(str,"\r\nT9:%.1f ",Thermometer[8]),puts(str);
sprintf(str,"T10:%.1f ",Thermometer[9]),puts(str);
sprintf(str,"T11:%.1f ",Thermometer[10]),puts(str);
sprintf(str,"T12:%.1f ",Thermometer[11]),puts(str);
sprintf(str,"T13:%.1f ",Thermometer[12]),puts(str);
sprintf(str,"T14:%.1f ",Thermometer[13]),puts(str);
sprintf(str,"T15:%.1f ",Thermometer[14]),puts(str);
sprintf(str,"T16:%.1f ",Thermometer[15]),puts(str);
sprintf(str,"\r\nT17:%.1f ",Thermometer[16]),puts(str);
sprintf(str,"T18:%.1f ",Thermometer[17]),puts(str);
sprintf(str,"T19:%.1f ",Thermometer[18]),puts(str);
sprintf(str,"T20:%.1f ",Thermometer[19]),puts(str);
}
}[/i][/i]
 
[لینک خارجی برای کاربران مهمان مخفی است، لطفا برای مشاهده لینک ثبت نام نموده و یا وارد سایت شوید]شبیه ساز و برنامه.
باتشکر.
 


سلام و خسته نباشید میگم بهتون مهندس واقعا مطلب مفیدی رو اموزش دادید ...ولی چون مطلب اموزشی بود کاش بصورت 3 تا سنسوره بر روی ال سی راه اندازی میکردید ولی من سعی میکنم از این پروژتون استفاده کنم( البته با اجازه خودتون) و قابلیت های دیگه مثل ماکزیمم ومینیمم دما رو هم بشه ست کردتصویرتصویر

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

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » چهار شنبه 9 خرداد 1397, 4:01 pm

باسلام

طرح بد نیست،انشالله ان را ساخته و قرار خواهم داد.

یک سوال، در محبوبیت،سنسور Ds18b20 با وجود بودن سنسورهای دما و رطوبت(در یک چیپ) چیست؟!

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

New Member
پست: 5
تاریخ عضویت: چهار شنبه 9 خرداد 1397, 11:58 am
سپاس‌های ارسالی: 9 بار
سپاس‌های دریافتی: 4 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط TeamDigital » پنج شنبه 10 خرداد 1397, 12:09 pm

sinaset نوشته شده:باسلام

طرح بد نیست،انشالله ان را ساخته و قرار خواهم داد.

یک سوال، در محبوبیت،سنسور Ds18b20 با وجود بودن سنسورهای دما و رطوبت(در یک چیپ) چیست؟!

باتشکر.

مهندس من باوجود داتشن خود سنسور هنوز فرصت نکردم ازاین سنسور در عمل استفاده کنم و ببینم چقد این محبوبیت درموردش درسته ! اما اکثرا از دوستان شنیدم که دقت خیلی بالایی داره ، سرعت پاسخگویی بالا و همچنین قیمت مناسب این سنسور رو عوامل محبوبیت و استفاده زیاد اون بیان کردن

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

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » جمعه 11 خرداد 1397, 12:51 pm

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


ورژن 4.0 ، نمایش ساده بر روی LCD
تصویر
این نسخه، دمای یک سنسور ds18b20 به روی LCD نمایش داده میشود.

کدها برنامه:

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

/*******************************************************
Project : temp DS18B20 lcd 16X2
Version :4.0
Date : 1395.7.18
Edit : siaset
ref: centralclubs.com
Chip type : ATmega8A
AVR Core Clock frequency: 8.000000 MHz
*******************************************************/
#include <mega8.h>
#include <stdio.h>
#include <alcd.h>
#include <delay.h>
#include <ds18b20.h> //کتابخانه ايسي دماسنج در کدويژن
#include <1wire.h> //فعال سازي واحد

unsigned char DS18B20_Rom_Codes[9]; //متغير 9 رشته ي،براي گرفتن شماره سريال ايسي

void main(void){
float Thermometer; //متغير اعشاري براي گرفتن دما
char str[16];

lcd_init(16);
w1_init(); //!wire مقدار دهي اوليه
w1_search(0xf0,DS18B20_Rom_Codes); //کد براي معرفي ايسي و ريختن شمار ايسي به درون متغير ذکر شده

lcd_puts("Be Name Khoda"); // LCD نمايش بر روي
delay_ms(2000);
lcd_clear();

while(1){
Thermometer = ds18b20_temperature(DS18B20_Rom_Codes);
// به کمک تابع ،کد شناسايي بر روي خط فرستاده ميشود،و بعد ايسي مقدر دما را بر روي براي ما مي فرستد
//ريخته ميشودthermometerو آن مقدار بر روي متغير
sprintf(str,"TEMP:%.1f C ",Thermometer);//ريختن مقدار متغير بر روي رشته
lcd_gotoxy(0,0);
lcd_puts(str); //LCD نمايش بر روي
delay_ms(50);
}
}

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

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

New Member
پست: 2
تاریخ عضویت: پنج شنبه 15 بهمن 1388, 12:32 pm
سپاس‌های ارسالی: 4 بار
سپاس‌های دریافتی: 1 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط reyha » یک شنبه 7 مرداد 1397, 7:07 pm

باعرض سلام خدمت استاد گرامی .من همشونو آزمایش کردم و بنظرم خیلی جالب هستند . من میخواستم با lcd nokia 5110 و 3 تا سنسور Ds18b20 یه دماسنج درست کنم تا دمای 3 محیط رو برام نشون بدن و یکی از سنسورها هم بتونه با بالا و یا پایین رفتن دما رله ای رو فعال کنه .میشه در این زمینه بنده رو راهنمایی بفرمایید . و اینکه اگه با آرداینو باشه که دیگه عالی میشه چون تعدادی دردسترس دارم .با تشکر و سپاس فراوان
 

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

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » یک شنبه 7 مرداد 1397, 10:23 pm

سلام بر شما
خواهش میکنم.

با سنسورهای دیگه،که در تاپیک های دیگر می باشد،کارهای شبیه به کارهای که گفتید،وجود دارد،می توانید از انها کمک بگیرید.

با ارداینو اشنایی ندارم،اینجانب. اما فکر میکنم در سایت مختلف در این زمینه با این دستگاه که فرمودید،برنامه های باشد! 

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

New Member
پست: 2
تاریخ عضویت: پنج شنبه 15 بهمن 1388, 12:32 pm
سپاس‌های ارسالی: 4 بار
سپاس‌های دریافتی: 1 بار

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط reyha » دو شنبه 8 مرداد 1397, 5:38 pm

بله درست میفرمایید .منتهی چون هم آرداینو پرو موجود داشتم و هم سنسور Ds18b20 و هم lcd nokia 5110 خواستم باهمینا پروژه رو درست کنم .درهرصورت بسیار ممنونم ازراهنمایی جناب عالی بسیارلطف فرمودید .بازم تشکر از سایت بسیار مفیدتون
 

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

Re: آموزش راه اندازی سنسور دما دیجیتال DS18B20(نسخه 3.0)

پست توسط sinaset » دو شنبه 8 مرداد 1397, 6:07 pm

باسلام 
در رابطه با گزارشتان.
لینک سالم می باشد،ان را ازمایش کردم.وقتی وارد ادرس میشود روی گزینه دانلود کلید کنید..

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

ارسال پست

بازگشت به “آموزش و مثال‌ها AVR”