نور شب از یک لامپ قدیمی، بر اساس آردوینو و WS2812. وظایف برای راه حل مستقل

احتمالاً همه در کودکی (و بیش از یک رویا) رویاهایی داشتند. حتی می‌توانید سعی کنید احساسی را که وقتی رویای کودک به حقیقت می‌پیوندد، روح او را پر می‌کند، یا آن درخشش دور و آشنا در چشمانش را به یاد بیاورید... در کودکی آرزو داشتم که نور شب خودم را داشته باشم.

اکنون من دانشجوی سال چهارم در BSUIR هستم و وقتی به ما گفتند که یک پروژه درسی در طراحی مدار را می توان نه بر روی کاغذ، بلکه روی یک قطعه سخت افزار انجام داد، به نظرم رسید: نور شبی که آنقدر می خواستم. یک کودک می تواند توسط خودم ساخته شود. علاوه بر این، نه تنها یک شی که اتاق را در تاریکی روشن می کند، بلکه وسیله ای بسازید که به راحتی قابل کنترل باشد تا با هر خلق و خوی سازگار باشد. چرا که نه؟ تصمیم گرفتم قابلیت تغییر رنگ ها را با استفاده از دستانم اضافه کنم: هر چه دست من به نور شب نزدیک تر باشد، یکی از رنگ ها (RGB) روشن تر می شود. من همچنین می خواهم نور شب را با استفاده از کنترل از راه دور کنترل کنم.

من بلافاصله اعتراف می کنم که این ایده را در وب سایت cxem.net مشاهده کردم. به طور خلاصه، این مثال از یک ماتریس RGB استفاده می‌کند که با استفاده از شیفت رجیسترها و سنسورهای فاصله اولتراسونیک کنترل می‌شود. اما من فکر می کردم که ماتریس فقط در یک جهت می تابد، اما می خواستم نور شب به طرفین بتابد.

توجیه عناصر مدار


من توجهم را به میکروکنترلرهای آردوینو معطوف کردم. UNO گزینه کاملا مناسبی برای ایده من است، اولاً به این دلیل که محبوب ترین پلتفرم است و تعداد پین ها بر خلاف مگا زیاد نیست و دوم اینکه می توانید یک منبع تغذیه خارجی به آن وصل کنید، در مورد من 12 ولت است. ثالثاً بر خلاف نانو... خب، من فکر می کنم می توانیم در این دو نقطه توقف کنیم. این پلتفرم به دلیل راحتی و سادگی زبان برنامه نویسی و همچنین معماری باز و کد برنامه آن در سراسر جهان بسیار محبوب است.

بیشتر اطلاعات دقیقشما به راحتی می توانید اطلاعات مربوط به این تابلو را در اینترنت پیدا کنید، بنابراین من مقاله را بیش از حد بارگذاری نمی کنم.

بنابراین، الزامات اساسی برای سیستم. ضروری:
- حسگرهایی که فاصله تا یک مانع را برای کنترل سیستم ردیابی می کنند.
- سنسور برای خواندن سیگنال از کنترل از راه دور کنترل از راه دور;
- LED ها که عملکرد روشنایی لازم را ارائه می دهند.
- یک واحد کنترل که کل سیستم را کنترل می کند.

این پروژه به مسافت یاب هایی به عنوان حسگرهای فاصله نیاز دارد که هر کدام از آنها با رنگ خاصی مطابقت دارد: قرمز، سبز، آبی. سنسورهای فاصله، فاصله عقربه تا نور شب را کنترل می کنند و هر چه عقربه به سنسور خاصی نزدیک شود، رنگ مربوط به این فاصله یاب قوی تر روشن می شود. برعکس، هر چه عقربه دورتر باشد، ولتاژ کمتری به رنگ مربوط به سنسور اعمال می شود.

محبوب ترین مسافت یاب ها در این لحظهاینها شارپ GP2Y0A21YK و HC-SR04 هستند. شارپ GP2Y0A21YK یک مسافت یاب مادون قرمز است. مجهز به یک فرستنده IR و یک گیرنده IR است: اولی به عنوان منبع پرتو عمل می کند که انعکاس آن توسط دومی گرفته می شود. در عین حال، اشعه IR سنسور برای چشم انسان نامرئی است و در چنین شدتی بی ضرر است.

در مقایسه با سنسور اولتراسونیک HC-SR04، این سنسور هم مزایا و هم معایبی دارد. از مزایای آن می توان به بی طرفی و بی ضرری اشاره کرد. معایب آن برد کوتاه تر و وابستگی به تداخل خارجی، از جمله برخی از انواع روشنایی است.

به عنوان سنسور فاصله برای پروژه استفاده می شود: فاصله یاب اولتراسونیک HC-SR04.
اصل عملکرد HC-SR04 بر اساس پدیده شناخته شده اکولوکاسیون است. هنگام استفاده از آن، امیتر یک سیگنال صوتی تولید می کند، که پس از انعکاس از مانع، به سنسور باز می گردد و توسط گیرنده ثبت می شود. با دانستن سرعت انتشار اولتراسوند در هوا (تقریباً 340 متر بر ثانیه) و زمان تاخیر بین سیگنال منتشر شده و دریافتی، محاسبه فاصله تا مانع صوتی آسان است.

ورودی TRIG به هر پایه ای از میکروکنترلر متصل می شود. یک پالس باید به این پین اعمال شود. سیگنال دیجیتالمدت زمان 10 میکروثانیه بر اساس سیگنال ورودی TRIG، سنسور بسته ای از پالس های اولتراسونیک را ارسال می کند. پس از دریافت سیگنال منعکس شده، سنسور یک سیگنال پالسی در پین ECHO تولید می کند که مدت زمان آن متناسب با فاصله تا مانع است.

سنسور IR البته سیگنال مورد نیاز برای کنترل از راه دور از این سنسور خوانده و رمزگشایی خواهد شد. TSOP18 فقط در فرکانس با یکدیگر تفاوت دارند. سنسور VS1838B TSOP1838 برای این پروژه انتخاب شد.

این پروژه بر اساس ایده نورپردازی اتاق به هر رنگی بود، به این معنی که شما به 3 رنگ اصلی نیاز خواهید داشت که از آنها نورپردازی به دست می آید: قرمز، سبز، آبی. بنابراین، مدل LED SMD 5050RGB انتخاب شد که به خوبی از عهده این کار بر می آید.

بسته به میزان ولتاژی که به هر LED داده می شود، شدت این روشنایی را تغییر می دهند. ال ای دی باید از طریق یک مقاومت وصل شود، در غیر این صورت نه تنها آن، بلکه آردوینو را نیز در معرض خطر خراب کردن قرار می دهیم. مقاومت برای محدود کردن جریان روی LED به مقدار قابل قبول مورد نیاز است. واقعیت این است که مقاومت داخلی LED بسیار کم است و اگر از مقاومت استفاده نکنید، جریانی از LED عبور می کند که به سادگی هم LED و هم کنترلر را می سوزاند.

نوارهای LED مورد استفاده در پروژه با برق 12 ولت تغذیه می شوند.

با توجه به اینکه ولتاژ LED ها در حالت "خاموش" 6 ولت است و باید منبع تغذیه را تنظیم کرد که بیش از 5 ولت است، لازم است ترانزیستورها را در حالت سوئیچینگ به مدار اضافه کنید. انتخاب من روی مدل BC547c افتاد.

اجازه دهید برای کسانی که فراموش کرده اند، به طور خلاصه اصل عملکرد را در نظر بگیریم ترانزیستور npn. اگر به هیچ وجه ولتاژ اعمال نکنید، بلکه به سادگی پایه و پایانه های امیتر را اتصال کوتاه کنید، حتی اگر اتصال کوتاه نباشد، اما از طریق یک مقاومت چند اهم، معلوم می شود که ولتاژ پایه-امیتر صفر است. در نتیجه جریان پایه وجود ندارد. ترانزیستور بسته است، جریان کلکتور بسیار ناچیز است، فقط همان جریان اولیه. در این حالت گفته می شود که ترانزیستور در حالت قطع است. حالت مخالف اشباع نامیده می شود: زمانی که ترانزیستور کاملاً باز است، به طوری که جایی برای باز کردن بیشتر وجود ندارد. با این درجه باز شدن، مقاومت بخش کلکتور-امیتر آنقدر کم است که روشن کردن ترانزیستور بدون بار در مدار کلکتور به سادگی غیرممکن است؛ فوراً می سوزد. در این حالت، ولتاژ باقیمانده روی کلکتور می تواند تنها 0.3 ... 0.5 ولت باشد.

این دو حالت اشباع و قطع زمانی استفاده می شود که ترانزیستور در حالت سوئیچینگ مانند یک کنتاکت رله معمولی کار می کند. معنی اصلی این حالت این است که یک جریان پایه کوچک یک جریان کلکتور بزرگ را کنترل می کند که چندین ده برابر بیشتر از جریان پایه است. یک جریان کلکتور بزرگ به دلیل به دست می آید منبع خارجیانرژی، اما همچنان سود فعلی، همانطور که می گویند، آشکار است. در مورد ما، میکرو مدار، که ولتاژ کاری آن 5 ولت است، شامل 3 نوار با LED هایی است که از 12 ولت کار می کنند.

بیایید حالت عملکرد آبشار کلید را محاسبه کنیم. لازم است مقدار مقاومت در مدار پایه محاسبه شود تا LED ها با قدرت کامل بسوزند. یک شرط ضروری هنگام محاسبه این است که بهره جریان بزرگتر یا برابر با ضریب تقسیم حداکثر جریان جمع کننده ممکن بر حداقل جریان پایه ممکن باشد:

بنابراین، نوارها می توانند ولتاژ کاری 220 ولت داشته باشند و مدار پایه را می توان از یک میکرو مدار با ولتاژ 5 ولت کنترل کرد. اگر ترانزیستور طوری طراحی شده باشد که با چنین ولتاژی در کلکتور کار کند، LED ها بدون مشکل روشن می شوند.
افت ولتاژ در محل اتصال بیس-امیتر 0.77 ولت است، مشروط بر اینکه جریان پایه 5 میلی آمپر و جریان کلکتور 0.1 آمپر باشد.
ولتاژ مقاومت پایه به صورت زیر خواهد بود:

طبق قانون اهم:

از محدوده استاندارد مقاومت، یک مقاومت 8.2 کیلو اهم انتخاب می کنیم. این محاسبه را کامل می کند.

توجه شما را به مشکلی که با آن برخورد کردم جلب می کنم. هنگام استفاده از کتابخانه IRremote، آردوینو هنگام تنظیم رنگ آبی منجمد شد. پس از جستجوی طولانی و کامل در اینترنت، مشخص شد که این کتابخانه از تایمر 2 به طور پیش فرض برای این مدل آردوینو استفاده می کند. تایمر برای کنترل خروجی های PWM استفاده می شود.

تایمر 0 (زمان سیستم، PWM 5 و 6)؛
تایمر 1 (PWM 9 و 10)؛
تایمر 2 (PWM 3 و 11).

در ابتدا از PWM 11 برای تنظیم رنگ آبی استفاده کردم. بنابراین، هنگام کار با PWM، تایمرها و کتابخانه های شخص ثالثی که ممکن است از آنها استفاده کنند، مراقب باشید. عجیب است که صفحه نخستدر مورد این تفاوت ظریف در Github چیزی گفته نشده است. در صورت تمایل، می توانید خط را با تایمر 1 لغو نظر کرده و 2 را کامنت کنید.

اتصال عناصر روی تخته نان به شکل زیر است:

پس از آزمایش بر روی تخته نان، مراحل "قرار دادن عناصر روی تخته" و "کار با آهن لحیم کاری" آغاز شد. پس از اولین آزمایش تخته تمام شده، فکری به ذهنم خطور می کند: مشکلی پیش آمده است. و در اینجا مرحله آشنا برای بسیاری آغاز می شود، "کار پر زحمت با تستر." با این حال، مشکلات (چند کنتاکت مجاور به طور تصادفی به هم لحیم شده بودند) به سرعت برطرف شد و در اینجا نور شیطانی مورد انتظار LED ها است.

بعد فقط موضوع بدن بود. به همین دلیل، تخته سه لا با سوراخ برای سنسورهای ما بریده شد. پشت جلدبه طور ویژه قابل جابجایی ساخته شده بود تا بتوانید از نمای داخل لذت ببرید و در صورت تمایل، کاری را تکمیل یا دوباره انجام دهید. همچنین دارای 2 سوراخ برای برنامه ریزی مجدد برد و منبع تغذیه می باشد.

بدنه با چسب اپوکسی دو جزئی چسبانده شد. شایان ذکر است ویژگی این چسب برای کسانی که قبلاً با آن برخورد نکرده اند. این محصول در دو ظرف مجزا عرضه می شود و هنگامی که محتویات آن مخلوط می شود، یک واکنش شیمیایی فوری رخ می دهد. پس از مخلوط کردن، شما باید به سرعت، در عرض 3-4 دقیقه عمل کنید. برای استفاده بیشتر، باید یک قسمت جدید را مخلوط کنید. بنابراین اگر می خواهید این کار را تکرار کنید، توصیه من به شما این است که در قسمت های کوچک مخلوط کنید و خیلی سریع عمل کنید، زمان زیادی برای فکر کردن باقی نمی ماند. بنابراین، ارزش دارد که از قبل در مورد نحوه و مکان چسباندن بدن فکر کنید. علاوه بر این، این کار را نمی توان در یک جلسه انجام داد.

برای نصب نوارها با LED در پوشش بالاییلوله ای وارد شده بود که تمام سیم ها به خوبی از آن عبور می کردند.

وقتی مشکل آباژور پیش آمد، به یاد آوردم که چگونه در کودکی از نخ ساده، چسب و یک بادکنک کاردستی درست می‌کردم که پایه آن بود. اصل برای آباژور یکسان است، اما پیچاندن چند وجهی دشوارتر از توپ بود. با توجه به فشار وارد شده توسط رزوه ها به سازه، شروع به باریک شدن به سمت بالا کرد و رزوه ها شروع به ریزش کردند. فوری، با دستانم با چسب پوشانده شده، تصمیم گرفته شد که ساختار را از بالا تقویت کنم. و سپس سی دی به کمک آمد. نتیجه نهایی این نور شب است:

در پایان چه می خواهید بگویید؟

چه چیزی را باید در پروژه تغییر دهم؟ برای تامین سیگنال TRIG به سنسورهای فاصله، می توان از یک خروجی آردوینو به جای سه خروجی استفاده کرد. من همچنین یک سوراخ برای سنسور IR (که فراموش کرده بودم) فراهم می کنم، که متأسفانه هنوز در موردی پنهان است که طبیعتاً نمی تواند سیگنال های کنترل از راه دور را بخواند. با این حال، چه کسی گفت که شما نمی توانید چیزی را لحیم کاری یا سوراخ کنید؟

می خواهم توجه داشته باشم که این ترم جالبی بود و فرصتی عالی برای تلاش برای انجام کاری غیر روی کاغذ، که به لطف آن می توانم علامت دیگری را در کنار آیتم "رویای کودکی" بگذارم. و اگر فکر می‌کنید که امتحان کردن چیز جدید دشوار است و نمی‌دانید ابتدا چه کاری انجام دهید، نگران نباشید. بسیاری از مردم این فکر را در سر دارند که از کجا شروع کنند و چگونه می توان این کار را انجام داد؟ کارهای زیادی در زندگی وجود دارد که می توانید از آنها گیج شوید، اما یک بار که تلاش کنید، متوجه می شوید که با یک برق چشمانتان می توانید کوه ها را جابجا کنید، حتی اگر برای این کار کمی تلاش کنید.

برای یک کار اضافی

    1 LED دیگر

    1 مقاومت دیگر با مقدار اسمی 220 اهم

    2 سیم دیگر

نمودار شماتیک

طرح روی تخته نان

توجه داشته باشید

    در این آزمایش ما یک مقاومت نوری بین منبع تغذیه و ورودی آنالوگ نصب می کنیم، یعنی. برای موقعیت R1 در مدار تقسیم کننده ولتاژ. ما به این نیاز داریم تا وقتی نور کم می شود، ولتاژ کمتری در ورودی آنالوگ دریافت کنیم.

    سعی کنید قطعات را طوری قرار دهید که LED مقاومت نوری را روشن نکند.

طرح

p050_night_light.ino #define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT) ; ) void loop() ( // سطح نور را بخوانید. اتفاقا اعلام کنید // می توانید یک متغیر و یک مقدار به آن اختصاص دهید int lightness = analogRead(LDR_PIN) ; // مقدار را از پتانسیومتری که با آن تنظیم می کنیم بخوانید // مقدار آستانه بین تاریکی شرطی و روشنایی int threshold = analogRead(POT_PIN) ; // یک متغیر بولی را اعلام کرده و یک مقدار به آن اختصاص دهید // "الان تاریک است." متغیرهای بولی، بر خلاف // اعداد صحیح، فقط می توانند شامل یکی از دو مقدار باشند: // درست یا غلط. چنین ارزش هایی // که به آن Boolean نیز می گویند. Boolean tooDark = (سبکی< threshold) ; // استفاده از شاخه‌بندی برنامه: پردازنده یکی از آن‌ها را اجرا می‌کند // دو بلوک کد بسته به اجرای شرط. // اگر (انگلیسی "اگر") خیلی تاریک است...اگر (خیلی تاریک) ( // ... روشنایی را روشن کنید DigitalWrite(LED_PIN، HIGH) ; ) دیگر ( // ... در غیر این صورت نور مورد نیاز نیست - آن را خاموش کنید DigitalWrite(LED_PIN، LOW) ; ))

توضیحاتی برای کد

    ما از نوع جدیدی از متغیر استفاده می کنیم - boolean، که فقط مقادیر true (true, 1) یا false (false, 0) را ذخیره می کند. این مقادیر نتیجه ارزیابی عبارات بولی هستند. در این مثال، عبارت Boolean lightness است< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    ما این عبارت منطقی را فقط برای وضوح در پرانتز قرار می دهیم. همیشه بهتر است کدهای خوانا بنویسید. در موارد دیگر، پرانتز می تواند بر ترتیب عملیات تأثیر بگذارد، مانند محاسبات معمولی.

    در آزمایش ما، عبارت بولی زمانی درست خواهد بود که مقدار سبکی کمتر از مقدار آستانه باشد زیرا ما از عملگر استفاده کردیم.< . Мы можем использовать операторы > , <= , >= , == , != که به ترتیب به معنی «بزرگتر از»، «کمتر یا مساوی»، «بزرگتر یا مساوی»، «مساوی»، «نه برابر» هستند.

    به خصوص مراقب عملگر منطقی == باشید و آن را با عملگر انتساب = اشتباه نگیرید. در حالت اول مقادیر عبارات را با هم مقایسه می کنیم و یک مقدار منطقی (درست یا نادرست) بدست می آوریم و در حالت دوم مقدار عملوند سمت راست را به عملوند چپ نسبت می دهیم. کامپایلر قصد ما را نمی‌داند و خطایی صادر نمی‌کند، اما می‌توانیم به‌طور تصادفی مقدار یک متغیر را تغییر دهیم و سپس زمان زیادی را صرف جستجوی خطا کنیم.

    دستور شرطی if یکی از موارد کلیدی در اکثر زبان های برنامه نویسی است. با کمک آن، ما می توانیم نه تنها دنباله ای دقیق از اقدامات را انجام دهیم، بلکه بسته به شرایط خاص، در مورد اینکه کدام شاخه از الگوریتم را دنبال کنیم، تصمیم گیری کنیم.

    بیان منطقی سبکی< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    با همان موفقیت می توانیم بگوییم "اگر روشنایی کمتر از سطح آستانه است، پس LED را روشن کنید". کل عبارت منطقی را به if ارسال کنید:

اگر (سبکی< threshold) { // ... }

    پشت عملگر شرطیاگر لزوماً از یک بلوک کد پیروی می کند که در صورت درست بودن عبارت منطقی اجرا می شود. هر دو بریس فرفری () را فراموش نکنید!

    اگر عبارت درست باشد، فقط باید اجرا کنیم یکیدستورالعمل، می توان آن را بلافاصله بعد از اگر (...) بدون آن نوشت آکولاد:

اگر (سبکی< threshold) digitalWrite(LED_PIN, HIGH) ;

    دستور if را می توان با یک ساختار else گسترش داد. بلوک کد، یا عبارت منفرد پس از آن، تنها در صورتی اجرا می شود که عبارت بولی in if به اشتباه ارزیابی شود. قوانین در مورد بریس های فرفری یکسان است. در آزمایش خود نوشتیم "اگر خیلی تاریک است، LED را روشن کنید، در غیر این صورت LED را خاموش کنید."

سنسورهای نور (روشنایی) که بر اساس مقاومت نوری ساخته شده اند، اغلب در پروژه های واقعی آردوینو استفاده می شوند. آنها نسبتا ساده هستند، گران نیستند و به راحتی در هر فروشگاه اینترنتی پیدا و خرید می شوند. مقاومت نوری آردوینو به شما امکان می دهد سطح نور را کنترل کنید و به تغییرات آن پاسخ دهید. در این مقاله به این خواهیم پرداخت که مقاومت نوری چیست، حسگر نور مبتنی بر آن چگونه کار می کند و نحوه اتصال صحیح سنسور به بردهای آردوینو.

همانطور که از نامش پیداست، مقاومت نوری به طور مستقیم با مقاومت هایی که اغلب در تقریباً هر مدار الکترونیکی یافت می شوند، مرتبط است. ویژگی اصلی یک مقاومت معمولی مقدار مقاومت آن است. ولتاژ و جریان به آن بستگی دارد؛ با استفاده از یک مقاومت، حالت های عملیاتی مورد نیاز سایر اجزا را تنظیم می کنیم. به عنوان یک قاعده، مقدار مقاومت یک مقاومت عملاً تحت شرایط کاری یکسان تغییر نمی کند.

بر خلاف یک مقاومت معمولی، مقاومت نوریمی تواند مقاومت خود را بسته به سطح نور محیط تغییر دهد. این بدان معنی است که در مدار الکترونیکیپارامترها دائماً تغییر خواهند کرد؛ اول از همه، ما به افت ولتاژ در مقاومت نوری علاقه مندیم. با ثبت این تغییرات ولتاژ روی پایه های آنالوگ آردوینو، می توانیم منطق مدار را تغییر دهیم و در نتیجه دستگاه هایی ایجاد کنیم که با شرایط خارجی سازگار شوند.

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

چه مقاومت های نوری را می توان در فروشگاه های آنلاین خریداری کرد

محبوب ترین و گزینه مقرون به صرفهسنسورهای موجود در بازار مدل های تولید انبوه از شرکت های چینی، کلون های محصولات تولید کننده VT هستند. همیشه نمی توان فهمید که این یا آن تامین کننده دقیقاً چه کسی و چه چیزی تولید می کند ، اما برای شروع کار با مقاومت نوری ، ساده ترین گزینه کاملاً مناسب است.

به یک کاربر تازه کار آردوینو می توان توصیه کرد که یک ماژول عکس آماده خریداری کند که به شکل زیر است:


این ماژول در حال حاضر شامل تمام عناصر لازم برای اتصال آسانمقاومت نوری به برد آردوینو. برخی از ماژول ها یک مدار مقایسه کننده را اجرا می کنند و یک خروجی دیجیتال و یک مقاومت تریم برای کنترل ارائه می دهند.

می توان به یک آماتور رادیویی روسی توصیه کرد که به سنسور PA روسی روی آورد. موجود در فروش عبارتند از FR1-3، FR1-4، و غیره. - در زمان شوروی تولید شد. اما، با وجود این، FR1-3 جزئیات دقیق تری است. از این به بعد تفاوت قیمت وجود دارد.برای FR آنها بیش از 400 روبل نمی خواهند. FR1-3 بیش از هزار روبل هزینه خواهد داشت.

علامت گذاری مقاومت نوری

برچسب زدن مدرن مدل های تولید شده در روسیه بسیار ساده است. دو حرف اول PhotoResistor هستند، اعداد بعد از خط تیره نشان دهنده شماره توسعه است. FR -765 - مقاومت نوری، توسعه 765. معمولاً مستقیماً روی بدنه قطعه مشخص می شود

سنسور VT دارای محدوده مقاومتی است که در نمودار علامت گذاری نشان داده شده است. مثلا:

  • VT83N1 - 12-100 کیلو اهم (12K - روشن، 100K - در تاریکی)
  • VT93N2 - 48-500 کیلو اهم (48K - روشن، 100K - در تاریکی).

گاهی اوقات، برای روشن شدن اطلاعات در مورد مدل ها، فروشنده سند خاصی را از سازنده ارائه می دهد. علاوه بر پارامترهای عملکرد، دقت قطعه نیز در آنجا نشان داده شده است. همه مدل ها دارای محدوده حساسیت در قسمت قابل مشاهده طیف هستند. جمع آوری حسگر روشناییباید بدانید که دقت عملیات یک مفهوم نسبی است. حتی برای مدل‌های تولیدکننده مشابه، دسته‌ای مشابه یا همان خرید، ممکن است 50 درصد یا بیشتر متفاوت باشد.

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

مزایا و معایب سنسور

نقطه ضعف اصلی مقاومت نوری حساسیت طیف است. بسته به نوع نور تابشی، مقاومت می تواند در چندین مرتبه بزرگی متفاوت باشد. معایب نیز شامل سرعت کمواکنش به تغییرات در روشنایی اگر چراغ چشمک بزند، سنسور زمانی برای واکنش ندارد. اگر فرکانس تغییر بسیار زیاد باشد، مقاومت به طور کلی از "دیدن" که روشنایی در حال تغییر است متوقف می شود.

از مزایای آن می توان به سادگی و در دسترس بودن اشاره کرد. تغییر مستقیم مقاومت بسته به نوری که روی آن می افتد به شما امکان می دهد ساده کنید نمودار الکتریکیاتصالات خود مقاومت نوری بسیار ارزان است، در کیت‌ها و سازنده‌های متعدد آردوینو گنجانده شده است و بنابراین تقریباً برای هر سازنده تازه‌کار آردوینو در دسترس است.

اتصال یک مقاومت نوری به آردوینو

در پروژه ها آردوینومقاومت نوری به عنوان سنسور نور استفاده می شود. با دریافت اطلاعات از آن، برد می تواند رله ها را روشن یا خاموش کند، موتورها را روشن کند و پیام ارسال کند. طبیعتا باید سنسور را درست وصل کنیم.

نمودار اتصال سنسور نور به آردوینو بسیار ساده است. اگر از مقاومت نوری استفاده کنیم، در نمودار اتصال سنسور به عنوان یک تقسیم کننده ولتاژ پیاده سازی شده است. یک بازوی بسته به سطح روشنایی تغییر می کند، بازوی دوم ولتاژ ورودی آنالوگ را تامین می کند. در تراشه کنترلر، این ولتاژ از طریق ADC به داده های دیجیتال تبدیل می شود. زیرا هنگامی که مقاومت سنسور با برخورد نور به آن کاهش می یابد، مقدار ولتاژی که در آن قرار می گیرد نیز کاهش می یابد.

بسته به اینکه مقاومت نوری را در کدام بازوی تقسیم کننده قرار دهیم، ولتاژ افزایش یا کاهش به ورودی آنالوگ وارد می شود. اگر یک پایه مقاومت نوری به زمین وصل شود، حداکثر مقدار ولتاژ مطابق با تاریکی خواهد بود (مقاومت مقاومت نور حداکثر است، تقریباً تمام ولتاژ در سراسر آن افت می کند) و مقدار حداقل با روشنایی خوب مطابقت دارد (مقاومت برابر است). نزدیک به صفر، ولتاژ حداقل است). اگر بازوی مقاومت نوری را به منبع تغذیه وصل کنیم، رفتار برعکس خواهد بود.

نصب خود برد نباید مشکلی ایجاد کند. از آنجایی که مقاومت نوری قطبیت ندارد، می توان آن را از هر طرف وصل کرد؛ می توان آن را به برد لحیم کرد، با استفاده از برد مدار با سیم وصل کرد یا از گیره های معمولی (گیره های کروکودیل) برای اتصال استفاده کرد. منبع تغذیه مدار خود آردوینو است. مقاومت نورییک پا به زمین متصل است، دیگری به برد ADC (در مثال ما - AO) متصل است. ما یک مقاومت 10 کیلو اهم را به همان پایه وصل می کنیم. به طور طبیعی، شما می توانید یک مقاومت نوری را نه تنها به پین ​​آنالوگ A0، بلکه به هر دیگری متصل کنید.

چند کلمه در مورد مقاومت اضافی 10 K. در مدار ما دو عملکرد دارد: محدود کردن جریان در مدار و تشکیل ولتاژ مورد نیازدر یک مدار با یک تقسیم کننده. محدودیت جریان در شرایطی ضروری است که یک مقاومت نوری کاملاً روشن به شدت مقاومت آن را کاهش می دهد. و تولید ولتاژ برای مقادیر قابل پیش بینی در پورت آنالوگ است. در واقع برای عملکرد عادیبا مقاومت نوری ما، مقاومت 1K کافی است.

با تغییر مقدار مقاومت می‌توانیم سطح حساسیت را به سمت «تاریک» و «روشن» تغییر دهیم. بنابراین، 10 K خواهد داد سوئیچینگ سریعشروع نور در مورد 1K، سنسور نور با دقت بیشتری سطوح نور بالا را تشخیص می دهد.

اگر استفاده می کنید ماژول آمادهسنسور نور، سپس اتصال حتی ساده تر خواهد بود. خروجی ماژول VCC را به کانکتور 5 ولت روی برد، GND به زمین وصل می کنیم. پین های باقی مانده را به کانکتورهای آردوینو وصل می کنیم.

اگر برد خروجی دیجیتال داشته باشد، آن را به پین ​​های دیجیتال می فرستیم. اگر آنالوگ است، به آنالوگ بروید. در مورد اول، سیگنال ماشه را دریافت خواهیم کرد - سطح روشنایی از حد گذشته است (آستانه ماشه را می توان با استفاده از یک مقاومت تنظیم تنظیم کرد). از پایه های آنالوگ می توانیم یک مقدار ولتاژ متناسب با سطح روشنایی واقعی بدست آوریم.

نمونه ای از طرح یک حسگر نور بر روی یک مقاومت نوری

مدار را با مقاومت نوری به آردوینو وصل کردیم و مطمئن شدیم که همه چیز به درستی انجام شده است. اکنون فقط برنامه ریزی کنترلر باقی مانده است.

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

بیایید طرحی برای سنسور نوری بنویسیم که LED متصل شده را مطابق مدار زیر روشن یا خاموش می کند.

الگوریتم عملیاتی به شرح زیر است:

  • سطح سیگنال را از پین آنالوگ تعیین کنید.
  • سطح را با مقدار آستانه مقایسه می کنیم. حداکثر مقدار با تاریکی و حداقل مقدار با حداکثر روشنایی مطابقت دارد. بیایید یک مقدار آستانه برابر با 300 انتخاب کنیم.
  • اگر سطح کمتر از آستانه باشد، تاریک است، باید LED را روشن کنید.
  • در غیر این صورت، LED را خاموش کنید.
#define PIN_LED 13 #define PIN_PHOTO_SENSOR A0 void setup() (Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() (int val = analogRead(PIN_PHOTO_SENSOR);(Serial.print) val< 300) { digitalWrite(PIN_LED, LOW); } else { digitalWrite(PIN_LED, HIGH); } }

با پوشاندن مقاومت نوری (با دستان خود یا یک جسم ضد نور)، می توانیم روشن و خاموش شدن LED را مشاهده کنیم. با تغییر پارامتر آستانه در کد، می توانیم لامپ را مجبور کنیم در سطوح مختلف روشنایی روشن/خاموش شود.

هنگام نصب سعی کنید مقاومت نوری و LED را تا حد امکان از یکدیگر دور کنید تا نور کمتری از LED روشن روی سنسور نور بیفتد.

سنسور نور و تغییر صاف در روشنایی نور پس زمینه

می توانید پروژه را طوری تغییر دهید که روشنایی LED بسته به میزان روشنایی تغییر کند. تغییرات زیر را به الگوریتم اضافه می کنیم:

  • ما روشنایی لامپ را از طریق PWM تغییر می دهیم و با استفاده از analogWrite() مقادیر را از 0 تا 255 به پین ​​می فرستیم.
  • برای تبدیل مقدار دیجیتال سطح نور از سنسور نور (از 0 تا 1023) به محدوده PWM روشنایی LED (از 0 تا 255)، از تابع map () استفاده می کنیم.

نمونه طرح:

#define PIN_LED 10 #define PIN_PHOTO_SENSOR A0 void setup() (Serial.begin(9600); pinMode(PIN_LED, OUTPUT); ) void loop() (int val = analogRead(PIN_PHOTO_SENSOR);Serial.Print; = map(val, 0, 1023, 0, 255)؛ // مقدار حاصل را به سطح سیگنال PWM تبدیل کنید. هرچه مقدار روشنایی کمتر باشد، باید برق کمتری را از طریق PWM به LED عرضه کنیم. analogWrite(PIN_LED، ledPower) ؛ // تغییر روشنایی)

در مورد روش اتصال دیگر، که در آن سیگنال از درگاه آنالوگ متناسب با درجه روشنایی است، علاوه بر این باید مقدار را با کم کردن آن از حداکثر "معکوس" کنید:

Int val = 1023 – analogRead(PIN_PHOTO_RESISTOR)؛

مدار حسگر نور با استفاده از مقاومت نوری و رله

نمونه هایی از طرح های کار با رله در مقاله برنامه نویسی رله در آردوینو آورده شده است. در این مورد، ما نیازی به انجام حرکات پیچیده نداریم: پس از تعیین "تاریکی"، به سادگی رله را روشن می کنیم و مقدار مربوطه را به پین ​​آن اعمال می کنیم.

#define PIN_RELAY 10 #define PIN_PHOTO_SENSOR A0 void setup() ( pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH)؛ ) void loop() ( int val = analogRead(PIN_PHOTO_val (SENSOR));< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

نتیجه

پروژه هایی که از حسگر نور مبتنی بر مقاومت نوری استفاده می کنند بسیار ساده و موثر هستند. شما می توانید بسیاری از پروژه های جالب را اجرا کنید و هزینه تجهیزات زیاد نخواهد بود. مقاومت نوری با استفاده از یک مدار تقسیم کننده ولتاژ با مقاومت اضافی متصل می شود. این سنسور به یک پورت آنالوگ برای اندازه‌گیری سطوح مختلف نور یا به یک دیجیتال متصل است، اگر تنها چیزی که ما به آن اهمیت می‌دهیم واقعیت تاریکی است. در طرح، ما به سادگی داده ها را از یک پورت آنالوگ (یا دیجیتال) می خوانیم و تصمیم می گیریم که چگونه به تغییرات واکنش نشان دهیم. بیایید امیدوار باشیم که اکنون چنین "چشم" ساده در پروژه های شما ظاهر شود.

در این آزمایش، LED باید زمانی روشن شود که سطح نور به زیر آستانه تعیین شده توسط پتانسیومتر کاهش یابد.

فهرست قطعات برای آزمایش

- 1 برد آردوینو Uno;

- 1 تخته نان بدون لحیم کاری؛

- 1 LED؛

- 1 مقاومت نوری؛

- 1 مقاومت با مقدار اسمی 220 اهم، 1 مقاومت با مقدار اسمی 10 کیلو اهم؛

- 1 مقاومت متغیر (پتانسیومتر)؛

- 10 سیم نر-نر.

جزئیات برای کار اضافی

1 LED دیگر؛

1 مقاومت دیگر با مقدار اسمی 220 اهم؛

2 تا سیم دیگه

مدار

نمودار روی تخته نان

طرح

دانلود طرح برای آردوینو IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // سطح نور را بخوانید. به هر حال، // می توانید یک متغیر را اعلام کرده و اختصاص دهید یک مقدار برای آن در یک لحظه int lightness = analogRead(LDR_PIN)؛ // مقدار را از پتانسیومتر می‌خوانیم، که از آن برای تنظیم // مقدار آستانه بین تاریکی شرطی و آستانه روشنایی int = analogRead (POT_PIN) استفاده می‌کنیم؛ // یک متغیر منطقی و به آن مقدار // "is it dark now" اختصاص دهید. متغیرهای بولی، بر خلاف // متغیرهای عدد صحیح، می توانند فقط یکی از دو مقدار را داشته باشند: // true یا false. به چنین مقادیری // نیز بولی گفته می شود. Boolean tooDark = (سبکی< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

توضیحات برای کد

  • ما از نوع جدیدی از متغیرها استفاده می کنیم بولی، که فقط مقادیر را ذخیره می کند درست است، واقعی (درست، 1) یا نادرست (نادرست، 0). این مقادیر نتیجه ارزیابی عبارات بولی هستند. در این مثال، عبارت Boolean است سبکی< threshold . در زبان انسان این به نظر می رسد: "روشنایی زیر سطح آستانه". چنین جمله ای زمانی درست خواهد بود که روشنایی زیر سطح آستانه باشد. میکروکنترلر می تواند مقادیر متغیرها را با هم مقایسه کند سبکیو آستانه، که به نوبه خود نتایج اندازه گیری هستند و صدق عبارت منطقی را محاسبه می کنند.
  • ما این عبارت منطقی را فقط برای وضوح در پرانتز قرار می دهیم. همیشه بهتر است کدهای خوانا بنویسید. در موارد دیگر، پرانتز می تواند بر ترتیب عملیات تأثیر بگذارد، مانند محاسبات معمولی.
  • در آزمایش ما، یک عبارت بولی وقتی مقدار درست خواهد بود سبکیکمتر از ارزش آستانهچون از اپراتور استفاده کردیم < . ما می توانیم از عملگرها استفاده کنیم > , <= , >= , = = , != که به ترتیب به معنی «بزرگتر از»، «کمتر یا مساوی»، «بزرگتر یا مساوی»، «مساوی»، «مساوی نیست».
  • به ویژه در مورد عملگر منطقی مراقب باشید = = و آن را با عملگر انتساب اشتباه نگیرید = . در حالت اول مقادیر عبارات را با هم مقایسه می کنیم و یک مقدار منطقی (درست یا نادرست) بدست می آوریم و در حالت دوم مقدار عملوند سمت راست را به عملوند چپ نسبت می دهیم. کامپایلر قصد ما را نمی‌داند و خطایی صادر نمی‌کند، اما می‌توانیم به‌طور تصادفی مقدار یک متغیر را تغییر دهیم و سپس زمان زیادی را صرف جستجوی خطا کنیم.
  • اپراتور مشروط اگراگر") یکی از موارد کلیدی در اکثر زبان های برنامه نویسی است. با کمک آن، ما می توانیم نه تنها دنباله ای دقیق از اقدامات را انجام دهیم، بلکه بسته به شرایط خاص، در مورد اینکه کدام شاخه از الگوریتم را دنبال کنیم، تصمیم گیری کنیم.
  • برای بیان منطقی سبکی< threshold یک معنی وجود دارد: درست است، واقعییا نادرست. ما آن را محاسبه کردیم و در یک متغیر بولی قرار دادیم خیلی تاریک("خیلی تاریک") بنابراین، به نظر می رسد که می گوییم "اگر خیلی تاریک است، LED را روشن کنید"
  • با همان موفقیت می توانیم بگوییم "اگر روشنایی کمتر از سطح آستانه است، پس LED را روشن کنید". انتقال به اگرتمام عبارات منطقی:
اگر (سبکی< threshold) { // ... }
  • پشت عبارت شرطی اگراگر عبارت منطقی درست باشد باید یک بلوک از کد وجود داشته باشد که اجرا شود. هر دو بریس مجعد را فراموش نکنید {} !
  • اگر عبارت درست باشد، فقط باید اجرا کنیم یکی دستورالعمل، می توان آن را بلافاصله بعد از آن نوشت اگر (…)بدون بریس مجعد:
اگر (سبکی< threshold) digitalWrite(LED_PIN, HIGH);
  • اپراتور اگربا طراحی قابل گسترش است دیگر("در غیر این صورت"). یک بلوک کد یا یک دستور منفرد به دنبال آن تنها در صورتی اجرا می شود که عبارت منطقی در آن باشد اگرمعنی دارد نادرست , « دروغ" قوانین در مورد بریس های فرفری یکسان است. در آزمایش خود نوشتیم "اگر خیلی تاریک است، LED را روشن کنید، در غیر این صورت LED را خاموش کنید."

سوالاتی برای آزمایش خود

  1. اگر یک مقاومت نوری بین ورودی آنالوگ و زمین نصب کنیم، دستگاه ما برعکس عمل می کند: زمانی که مقدار نور افزایش یابد LED روشن می شود. چرا؟
  2. اگر نور LED روی مقاومت نوری بیفتد چه نتیجه ای از عملکرد دستگاه خواهیم داشت؟
  3. اگر همانطور که در سوال قبل گفته شد، مقاومت نوری را نصب کنیم، چگونه باید برنامه را تغییر دهیم تا دستگاه به درستی کار کند؟
  4. فرض کنید ما کد را داریم اگر (شرط) (عمل؛). در چه مواردی انجام خواهد شد؟ عمل ?
  5. با چه ارزش هایی yاصطلاح x + y > 0درست خواهد بود اگر x > 0 ?
  6. آیا لازم است مشخص شود که اگر شرط در عبارت وجود دارد، کدام دستورات را اجرا کنیم؟ اگرنادرست؟
  7. چه تفاوتی بین اپراتور وجود دارد = = از اپراتور = ?
  8. اگر از ساخت و ساز استفاده کنیم اگر (شرط) اقدام1; other action2;، آیا شرایطی وجود دارد که هیچ یک از اقدامات اجرا نشود؟ چرا؟

وظایف برای راه حل مستقل

  1. برنامه را بدون استفاده از متغیر بازنویسی کنید خیلی تاریکبا حفظ عملکرد دستگاه.
  2. یک LED دیگر به مدار اضافه کنید. برنامه را طوری کامل کنید که وقتی نور از مقدار آستانه پایین می‌آید، یک LED روشن می‌شود و وقتی نور به کمتر از نصف مقدار آستانه می‌رسد، هر دو LED روشن می‌شوند.
  3. مدار و برنامه را طوری تغییر دهید که LED ها طبق همان اصل روشن شوند، اما هر چه شدت نور کمتری روی مقاومت نوری بیفتد، بدرخشند.




بالا