با سلام خدمت دوستان عزیز امروز براتون یک پروژه جالب با آردوینو اماده کردم که امیدوار مفید باشه براتون …..
این مقاله راجع به دماسنج دیجیتال با استفاده از آردوینو است. رنج این دما سنج از ۰ درجه سانتی گراد تا ۹۹٫۹ در جه سانتی گراد است.همچنین این امکان وجود دارد تا دما بر حسب فارنهایت محاسبه شود . سه ترمینال سنسور آنالوگ دما Lm35 به عنوان سنسور دما استفاده می شود . lm35 می تواند رنج دمایی بین -۵۵ درجه سانتی گراد تا +۱۵۵ را اندازه بگیرد . رنج ولتاژ تغذیه از ۴ تا ۳۰ ولت dc و جریان عبوری ۶۰ uA است . Lm35 در بسته to-92 فراهم است و استفاده از اون نیز بسیار سا ده هستش . ولتاژ خروجی از آردوینو ۱۰ میلی ولت به ازای هر درجه سانتی گراد افزایش می یابد .
به این معنی که اگر دما ۲۵ درجه سانتی گراد باشد ولتاژ سنسور ۲۵۰mV است . مداری که راجع به اون صحبت میکنیم شماتیک آن را در شکل زیر می بینید .
سنسور دما از طریق پورت های آنالوگ به آردوینو متصل شده است . پین A0 آردوینو به عنوان تغذیه برای سنسور است و پین A2 آردوینو به عنوان زمین است . آردوینو ولتاژ خروجی سنسور را توسط ورودی A1 می خواند .پین دیجیتال ۴ آردوینو به عنوان سلکتور بین سانتی گاد و فارنهایت است . ترانزیستورهای درایور دیجیتال Q1 ,Q2,Q3 به پین های ۱و ۲ و۳ آردوینو متصل است .پین های a تا dp سون سگمنت به پین های ۵ تا ۱۲ آ ردوینو متصل است.
مقاومت های R9,R10 ,R11جریان پایه از پاسخ فرکانس را محدود می کند .مقاومت های R1 تا R8 جریان عبوری از سگمنت ها را محدود می کند .
برنامه :
int i;
int backup;
int a;
int unit;
int value;
int vcc=A0;
int sensor=A1;
int gnd=A2;
int select=4;
int disp1=1;
int disp2=2;
int disp3=3;
int segA=5;
int segB=6;
int segC=7;
int segD=8;
int segE=9;
int segF=10;
int segG=11;
int segDP=12;
void setup()
{
pinMode(disp1, OUTPUT);
pinMode(disp2, OUTPUT);
pinMode(disp3, OUTPUT);
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);
pinMode(segDP, OUTPUT);
pinMode(sensor, INPUT);
pinMode(vcc, OUTPUT);
pinMode(gnd, OUTPUT);
pinMode(select, INPUT);
digitalWrite(vcc, HIGH);
digitalWrite(gnd, LOW);
}
void loop()
{
value=analogRead(sensor); //Reads the sensor LM35
value=value*5;
unit=digitalRead(select); //Reads the selector switch
if(unit==1)
{value=value;} // Output in celcius
else
{value=(value*1.8)+320;} //Output in Fahrenheit
backup=value; //Backs up the content in variable value
for(i=0;i<100;i++) //Loops the display loop 100 times(steadies the display)
{value=backup;
a=value%10;
digitalWrite(disp1,LOW);
digitalWrite(disp2,LOW);
digitalWrite(disp3, HIGH);
digitalWrite(segDP,HIGH);
display(a);
delay(4);
value = value/10;
a = value%10;
digitalWrite(disp3,LOW);
digitalWrite(disp2,HIGH);
digitalWrite(segDP,LOW);
display(a);
delay(4);
value=value/10;
a=value;
digitalWrite(disp2,LOW);
digitalWrite(disp1,HIGH);
digitalWrite(segDP,HIGH);
display(a);
delay(4);
}
}
int display (int a)
{
switch (a)
{
case 0:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, HIGH);
break;
case 1:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 2:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, HIGH);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 3:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, LOW);
break;
case 4:
digitalWrite(segA, HIGH);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 5:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 6:
digitalWrite(segA, LOW);
digitalWrite(segB, HIGH);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
); digitalWrite(segG, LOW
break;
case 7:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, HIGH);
digitalWrite(segE, HIGH);
digitalWrite(segF, HIGH);
digitalWrite(segG, HIGH);
break;
case 8:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, LOW);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
case 9:
digitalWrite(segA, LOW);
digitalWrite(segB, LOW);
digitalWrite(segC, LOW);
digitalWrite(segD, LOW);
digitalWrite(segE, HIGH);
digitalWrite(segF, LOW);
digitalWrite(segG, LOW);
break;
}}
درباره برنامه :
ولتاژ خروجی سنسور توسط تابع خواندن آنالوگ بررسی می شود . تابع خواندن آنالوگ ولتاژ ورودی آنالوگ را می خواند و ان را به مقدار دیجیتال بین ۰ و ۱۰۲۳ تبدیل می کند. مقدار کد = مقدار دیجیتال خوانده شده سنسور این ولتاژ را می خواند و آن را به مقدار دیجیتال تبدبل می کند و آن را در متغیری به نام “value” می ریزد. بنابراین برای ۳۰ درجه سانتی گراد عدد در متغیر “value” برابر ۳۰۰mV/(5/1023) است . این عدد در ۵ ضرب می شود تا به عدد ۳۰۵ برسیم و یک نقطه دسیمال قبل از اخرین عدد گزاشته می شود و در نتیجه بر روی سون سگمنت ۳۰٫۵ درجه سانتی گراد نمایش داده می شود.
این برنامه همچنین حالت پین دیجیتال ۴ را چک می کند و اگر پین یک باشد خروجی به صورت سانتی گراد نمایش داده می شود و اگر نه به شکل فارنهایت نمایش داده می شود .
در پایان خوشحال میشم که دوستان اگر انتقاد یا پیشنهادی راجع مطلب دارند در قسمت نظرات بیان کنید.
مطالب مرتبط :
پروژه دماسنج و رطوبت سنج با سنسور DHT11
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
سلام.چطور میشه همچین ماژولی رو به صورت بلوتوث ساخت.مثلا اندازه گیری دمای بدن نوزاد و ارسال اطلاعات به نمایشگر یا هرچیز دیگه به صورت بیسیم.ممنون میشم راهنمایی کنین❤?خیلی بهش نیاز دارم
با سلام، لطفا مقالات زیر را بخونید خیلی کار سختی نیست.
آموزش برنامه نویسی اپلیکیشن کنترل با بلوتوث اندروید
پروژه مانيتورينگ دما و رطوبت تحت وب سایت
راه اندازی ماژول های فرستنده و گیرنده RF با آردوینو
کنترل موتور DC به وسیله بلوتوث