به نام خدا : تو این پروژه، اومدم به کمک PWM نور یه LED RGB رو کنترل کردم، LED RGB همون طور که از اسمش تقریبا معلومه، یه LED هستش که ۳ رنگ قرمز(R) و سبز(G) و آبی(B) رو میتونه تولید کنه و برا همین ۴ تا پایه داره که یه پایه تغذیه هستش و به کمک ۳ پایه دیگه روشن و خاموش شدن هر رنگ رو تعیین میکنیم؛ حالا با کنترل میزان ولتاژ هر پایه، نور اون رنگ رو هم میشه کنترل کرد، مثل LED های معمولی؛ حالا برا کنترل این LED اومدم یه نرم افزار با #C تحت ویندوز نوشتم که این کا کنترل رو انجام میده و با ترکیب کردن نورها هم نورهای جدیدی هم ایجاد کردیم، مثلا سبز و آبی رو با هم روشن کردیم و یه نور جدید ایجاد کردیم و … نرم افزار رو ببینید تقریبا یه نرم افزار خوب برا این مطلب هستش – قابل قبول! ( پروژه led rgb با میکروکنترلر lpc1768 و سی شارپ )
پروژه led rgb با میکروکنترلر lpc1768 و سی شارپ
شماتیک پروژه
- پایه ۲ به پایه RXD ماژول USB TO TTL
- پایه ۳ به پایه TXD ماژول USB TO TTL
- پایه ۰ به پایه روشن کننده رنگ قرمز LED RGB
- پایه ۱ به پایه روشن کننده رنگ سبز LED RGB
- پایه ۲ به پایه روشن کننده رنگ آبی LED RGB
- پایه های تغذیه رو هم وصل کنید دیگه ^_^؛ الان مطلب جلسه ۱۰ ام آرم باید باشه، ندونید پایه های تغذیه کدوماس، واویلاس!
عکس پروژه در عمل
فیلم پروژه
کد پروژه lpc1768
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <lpc17xx.h> #include "pwm.h" #include "serial.h" #define RED_LED PWM_1 #define GREEN_LED PWM_2 #define BLUE_LED PWM_3 int main() { int red_value=0, green_value=0, blue_value=0; uart0_init( 1/*TxEnable*/, 1/*RxEnable*/, 9600/*baudrate*/, 0/*use_Recive_Interrupt*/, 0/*autoBaud_Enable*/, 0/*use_AutoBaud_Finish_Interrupt*/, _1Character/*NumberCharRxTrigger*/ ); PWM_Init(255); // Initialize the PWM module and the Cycle time(Ton+Toff) is set to 255(similar to arduino) PWM_Start( RED_LED | GREEN_LED | BLUE_LED ); // Enable the PWM on P2_0,P2_1,P2_2 PWM_SetDutyCycle(RED_LED,255-red_value); // مقدار رو از ماکسیمم کم میکنیم چون با کم شدن ولتاژ نور ای ای دی زیاد میشه و بلعکس PWM_SetDutyCycle(GREEN_LED,255-green_value); PWM_SetDutyCycle(BLUE_LED,255-blue_value); while(1) { Up: if( uart0_readData() == '!' ) { red_value = uart0_readNumber(100000,3) - 100; // LPC1768 has 12 bit adc and the max value will be 4096 green_value = uart0_readNumber(100000,3) - 100; // Since PWM Cycle(Ton+Toff) is 255, the adc value is divide by 16 to get 0-255 blue_value = uart0_readNumber(100000,3) - 100; // در سمت برنامه کامپیوتر به هر عدد ۱۰۰ تا اضافه کردم تا همیشه اعداد ارسالی ۳ رقمی باشن و این جا ۱۰۰ تا کم میکنم تا یر به یر بشه if( uart0_readData() == '%' ) { goto Down; } else { uart0_flush(); goto Up; } } else { uart0_flush(); goto Up; } Down: PWM_SetDutyCycle(RED_LED,255-red_value); PWM_SetDutyCycle(GREEN_LED,255-green_value); PWM_SetDutyCycle(BLUE_LED,255-blue_value); uart0_print( "Red:" ); uart0_printNumber( red_value, 10 ); uart0_print( ", Green:" ); uart0_printNumber( green_value, 10 ); uart0_print( ", Blue:" ); uart0_printNumberln( blue_value, 10 ); } } |
عکسی از پروژه #C
فایل ته مطلب رو که دانلود کردید، به مسیر زیر برید، به فایل EXE پروژه دست پیدا میکنید :
C#\WindowsFormsApplication1\bin\Debug
امیدوارم این مطلب براتون مفید باشه، ما رو هم دعا کنید ( هم خودم و هم خودتون میدونید که دعا نمیکنید ^_^)
مهمان
سلام اقا مهدی این پروژه با ارتباط سریال نوشتید
نویسنده این مطلب
سلام-بله.
مهمان
سلام حاج مهدی.عذر میخوام ،خیلی وقته دوست دارم طریقه ی درست کردن برنامه گرافیکی توسط سی شارپ رو یاد بگیرم ولی نمیدونم سراغ چه سایت و آموزشی برم.اگر امکانش هست راهنمایی بفرمایین
ممنونم اخوی
نویسنده این مطلب
سلام – سایت خاصی سراغ ندارم – تو گوگل سرچ کن.
مهمان
میخوام بتونم 15تا led rgb رو کنترل کنم و بتونم هرکدومو که خواستم خاموش روشن کنم ورنگشون عوض کنم ،برای کنترلش هم یا با ریموت یا با گوشی ،به نظرتون چطوری درستش کنم
نویسنده این مطلب
از آیسی pca9685 استفاده کن.
مهمان
سلام مهندس جان
خسته نباشی
حاجی لینک دانلود از کار افتاده لطفا یه لینک سالم بزار
دعا گوت هستیم اخوی
نویسنده این مطلب
سلام
اصلاح شد.
مهمان
خدا خیرت بده،واقعا سایت خوبی راه انداختی
مهمان
سلام، خدا قوت مهندس ،ممنون از لطف و عنایتی که به دوستان و برادران دارید .
ببخشید یه سوال داشتم: می توانیم با استفاده از آی سی های ۷۴hc573 برای افزایش pwm استفاده کنیم یا خیر ؟
ممنون
نویسنده این مطلب
سلام
باید بررسی کنی – دقیقا خاطرم نیست این آیسی آنالوگ بود یا دیجیتال.
مهمان
بعد یک سوال دیگه اینکه با این lpc1768 فقط ۲۵ led rgb رو میشه کنترل کرد؟
اگه من بخوام صد تا از اینا رو کنترل کنم باید از چی استفاده کنم؟
آخرین سوال اینکه برای طول سیم از lpc1768 تا led محدودیت اندازه داریم؟ مثلا اگه از میکرو تا led 3 متر فاصله باشه قابله انجامه؟
ممنون
یا علی
نویسنده این مطلب
هر led rgb برا کنترل هر ۳ رنگش نیاز به ۳ پایه داریم – لذا چون کلا ۶ تا پایه pwm داریم – فقط میتونیم ۲ تا led rgb رو کنترل کنیم.
اگه led ها در این فاصله روشن نشدن میتونی جریان خروجی پایه های میکرو رو افزایش بدی که مدارراتش تو نت پیدا میشه
مهمان
خب حالا اگه بخوایم صد تا rgb led داشته باشیم باید چکار کنیم؟
نویسنده این مطلب
خب اگه مطلب آموزش PWM رو خونده باشی – مبنای کار PWM یه تایمر استاندارد هستش – شما میتونی به کمک تایمرها – تمام پایه های میکرو رو PWM کنی – ولی خب منطقی نیست – چون کل میکرو درگیر این کار میشه – که بهتره از IC های مرتبط این کار ( DAC ) استفاده کنید.
مهمان
عذر خواهی میکنم من پی رو الان دقیقا سرچ کنم که به هدفم برسم؟ Dac رو سرچ کنم؟؟
نویسنده این مطلب
آیسی pwm یا آیسی dac
مهمان
چیزی که درباره pwm فهمیدم این بود که باهاش میشه ولتاژ خروجی رو کم و زیاد کرد ، آیا این برای فرستادن شدت هر کدام از سه رنگ هست؟
مثلا قرمز ۱۵۰ سبز۱۰۰ و آبی ۱۰؟
خب اگر از led تک رنگ استفاده کنیم حداکثر ۶ تا میشه داشته باشیم؟نمیشه جوری بیشتر led بزاریم؟
ممنون
نویسنده این مطلب
بله دیگه.
در نظر قبلی پاسخ داده شد
مهمان
سلام برادر ممنون بابت در اختیار قراردادن تجربیاتت
یک سوال اینکه غیر از اون پروژه ای که با سی شارپ درست کرد فقط اون قسمت که نوشتی “کد پروژه lpc1768” این بالا رو خودت نوشتی؟
چون تو فایلی که دانلود کردم یه عالمه فایل هست.
نویسنده این مطلب
سلام
مطلب کپی تو سایت گزاشته نمیشه
مهمان
بحث کپی بودن یا نبودن نیست من میخوام ببینم لایبری هست یا خودمون باید بنویسیم.
نویسنده این مطلب
متوجه نشدم – چی لایبراری هستش؟
مهمان
منظورم اینه که شما تو این پروژه فقط قسمت فرم سی شارپ و فایل main.c رو خودتون نوشتید ؟ آخه فایل ها تو پروژه خیلی زیاده که فکر میکنم لابری باشد درسته؟
نویسنده این مطلب
پروژه c# کتابخونه سریال خودش داشت – من فقط استفاده کردم.