شبیه سازی کنترل اتوماتیک چراغ قوه با Proteus
در این بخش پروژه شبیه سازی کنترل اتوماتیک چراغ قوه با سنسور فتوسل LDR و میکروکنترلر PIC در نرم افزار Proteus و کد نویسی به زبان C آماده کرده ایم که در ادامه معرفی پروژه پرداخته و فیلم و تصاویر خروجی قرار داده شده است.
معرفی پروژه
این پروژه یک مثال کارآمد از نحوه کنترل یک مدار خارجی با ولتاژ بالا را با رله ارائه می کند. در این پروژه برای کنترل، فقط یک چراغ قوه مورد استفاده قرار گرفته که یک چراغ روشنایی با کنترل دیجیتال است. به دلیل محدود بودن منابع در Proteus ، در این شبیه سازی برای لامپ و باتری از جریان مستقیم (DC) استفاده شده است. شما می توانید با توجه به نیاز خود در طراحی، از جریان متناوب (AC) با یک رله جریان بالا استفاده کنید.
شبیه سازی با Proteus و کد نویسی با زبان C
شبیه سازی این پروژه کنترل چراغ قوه با نرم افزار Proteus بوده و کد نویسی آن در محیط MPLAB X IDE با کامپایلر C30 به زبان C نوشته شده و با کمی تغییر کد در میکروکنترلر های PIC24، DsPIC33 و DsPIC30 (میکروکنترلر ۱۶ بیتی) نیز قابل استفاده است.
شرح خروجی ها
در شکل زیر یک ترانزیستور برای کنترل رله با یک دیود به منظور محافظت در مقابل جریان معکوس و سنسور های ایجاد شده توسط القایی رله استفاده شده است. این رله به عنوان یک سوئیچ برای کنترل یک مدار خارجی عمل می کند (در این پروژه برای کنترل لامپ). در این مدار فقط یک رله کنترل می شود که هدف کنترل لامپ می باشد.
شکل زیر نشان می دهد که وقتی شدت نور در LDR به بیش از ۹۴ درصد افزایش پیدا می کند، لامپ روشن می شود.
کد نویسی به زبان C
در کد زیر که به زبان برنامه نویسی C نوشته شده تابع اصلی نشان داده می شود که در آن، در ابتدا ماژول ADC را با ولتاژ مرجع داخلی و کانال ۰ (AN0) پیکربندی می کنیم و سپس PIN را برای کنترل سوئیچ خارجی (رله) پیکربندی می کنیم. و یک حلقه که فقط یک تابع به نام StreetLight () که مسئول کنترل مدار قدرت بالا می باشد، فراخوانی می شود.
int main(void)
{
ConfigModuleADC(); /* Configure ADC module */
ChangeChannelADC(0); /* AN0 channel */
ConfigLightPin();
while(1)
{
StreetLight();
__delay_ms(100); /* 200m Second delay */
}
return 0;
}
در کد زیر ما StreetLight داریم که دارای فرمول تقسیم پتانسیل، به دلیل شدت نور بر روی آن برای پیدا کردن مقاومت است. همچنین فرمول دوم برای تبدیل این مقاومت به عنوان یک درصد از شدت نور می باشد. در حال حاضر می توان زمانی که تشخیص داده شده شدت نور به بیش از ۹۴ درصد رسیده است، لامپ را خاموش کرد. شما می توانید این پارامتر را با توجه به نیاز طراحی خود را تغییر دهید.
void StreetLight(void)
{
unsigned int ADC_Value = 0;
unsigned long Light = 0;
float VoltageOutput = 0, ResistanceLDR = 0;
const float AdcRef = 4.8828125e-3, // Adcref = 5/1024
R3 = 10e3, // 10kOhm
Vcc = 5.0,
Resistance0 = 990e3; // resistance at no light.
ADC_Value = SamplingAndConversionADC(); /* Sampling */
VoltageOutput = ((float) ADC_Value) * AdcRef;
ResistanceLDR = (VoltageOutput * R3)/(Vcc - VoltageOutput);
Light = (unsigned long)((100 - ((ResistanceLDR / Resistance0) * 100)) * 1000);
/* As resistanc decreases with the
* increase in intensity of light so it is 100 - Light also made it in milli*/
/* Now light variable has values like this for 6% light it has 6000
for 80% -> 80,000
for 90% -> 90,000 and so ON */
if (Light >= 94000) // I Switch Off street Light when Light is 94 percent.
STREET_LIGHT = 0; // You may change according o your design.
else
STREET_LIGHT = 1;
}
مشاهده ویدئو در این باره