سلام به همه! من آرتم لوژتسکی هستم و مجموعه ای از مقالات اختصاص داده شده به " خانه هوشمند"و اینترنت اشیا (انگلیسی - اینترنت اشیا، اینترنت اشیا). ما با روش های شگفت انگیز برای ایجاد آشنا خواهیم شد. شبکه خانگیاز دستگاه های مختلفی که به صورت مستقل یا با کمک یک فرد کار می کنند. خوب؟ بیا شروع کنیم!

اولین مقاله مقدماتی است، می‌خواهم بدانید که من با رایج‌ترین بردها و ماژول‌ها کار خواهم کرد تا اکثر مردم بتوانند در توسعه اینترنت اشیا دست خود را امتحان کنند.

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

آردوینو UNO

فکر نمی کنم نیازی به معرفی این تابلو به شما داشته باشم، این تابلو در بین مبتدیان و علاقه مندان به DIY بسیار محبوب است. فقط می گویم که قابلیت های این برد محدود است و UNO نمی تواند با پروتکل https کار کند، کافی نیست. قدرت پردازشمیکروکنترلر ATmega328P، بنابراین زمانی که باید با میکروکنترلر و پروتکل https کار کنیم، ESP8266 را برنامه ریزی می کنیم.

ESP8266

من با ماژول Troyka ESP8266 از Amperka کار خواهم کرد ، اما می توانید با خیال راحت از ماژول معمولی ESP 8266 استفاده کنید ، آنها عملاً هیچ تفاوتی ندارند ، نکته اصلی هنگام اتصال این است که به ارزش پین ها نگاه کنید و به یاد داشته باشید که ESP مطابق با آن کار می کند. به منطق 3.3 ولت، بنابراین باید یا از طریق 5 ولت وصل شوید، اما یک تنظیم کننده ولتاژ را به مدار وصل کنید، یا به سادگی از یک پین با منبع ولتاژ 3.3 ولت استفاده کنید.

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

توضیحات بیشتر

ما همچنین باید تمام آزمایش ها را ایجاد کنیم:

  1. ال ای دی ها
  2. مقاومت نوری
  3. ترمیستور
  4. فاصله یاب اولتراسونیک
  5. اسپیکر پیزو
  6. مینی سروو
  7. سنسور IR
  8. کنترل از راه دور IR

برای کار با اینترنت اشیا نیازی به داشتن همه این ماژول ها نیست، اما برای انجام تمام پروژه های آینده، در نهایت باید همه آنها را خریداری کنیم.

برنامه ها و کتابخانه ها

ابتدا کتابخانه ای را دانلود کنید که در صورت استفاده از ESP8266 به شما کمک می کند در Arduino IDE بسیار راحت تر کار کنید - http://wiki.amperka.ru/_media/iot-m:iot-m-libs.zip

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

  1. www.dweet.io
  2. maker.iftt.com
  3. narodmon.ru
  4. و غیره.

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

  1. هاب باز
  2. پلک زدن
  3. و غیره.

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

2. ساخت "لامپ هوشمند"

آیا من قبلاً شما را خسته کرده ام؟ بیایید ساده ترین ها را بسازیم لامپ هوشمندکه اگر اتاق تاریک باشد روشن می شود.

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

اگر مطمئن نیستید که آماده کار با برق 220 ولت هستید، به جای چراغ قوه از LED معمولی استفاده کنید. در ابتدا من مال خودم را گرفتم لامپ قدیمی TLI - 204، تقریباً در هر فروشگاهی چنین وجود دارد (از قبل از شبکه جدا شده است).

لامپ دو نوع کار دارد (روشن/خاموش)، کاری که من می خواهم انجام دهم، می خواهم عملکرد آن را افزایش دهم، قابلیت روشن و خاموش کردن کامل لامپ را بگذارم.

اتصال یک مقاومت نوری با یک رله به نحوی موازی با مدار بدون استفاده از سوئیچ دیگر کار نمی کند، بنابراین تصمیم گرفتم به جای یک سوئیچ دو حالته، یک کلید ضامن سه حالته قرار دهم.

مدار الکتریکی کلی باید به شکل زیر باشد:

اگر همه چیز به درستی انجام شود، در موقعیت سوم سوئیچ می توانید با تامین جریان به رله از میکروکنترلر، لامپ را روشن کنید.

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

3. کد برای "لامپ هوشمند"

حالا بیایید کدی را بنویسیم که در صورت تاریک بودن اتاق، جریان را به رله منتقل کنیم.

#define SHINE 5 //PIN ON PHOTORESISTOR #define REL 13 //PIN ON RELAY void setup()(pinMode(SHINE, INPUT); pinMode(REL, OUTPUT); Serial.begin(9600); ) void loop()( اگر (آنالوگ خواندن (SHINE)<600) // Если света в комнате мало, то включаем лампу { digitalWrite(REL, HIGH) } else // если много, то выключаем { digitalWrite(REL, LOW); } Serial.printIn(analogRead(SHINE)); selay(500); }

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

دفعه بعد سعی می کنیم کد را پیچیده کنیم و چند تابع دیگر اضافه کنیم. به زودی میبینمت!

در این آزمایش، 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 (eng. true) یا false (eng. false). چنین مقادیری ​​// به آنها بولی (eng. boolean) نیز می گویند.boolean tooDark = (سبکی< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

توضیحات کد

  • ما از نوع جدیدی از متغیرها استفاده می کنیم بولی، که فقط مقادیر را ذخیره می کند درست است، واقعی (حقیقت، 1) یا نادرست (نادرست، 0). این مقادیر نتیجه ارزیابی عبارات بولی هستند. در این مثال، عبارت بولی است سبکی< 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 ها به همین ترتیب روشن شوند، اما هر چه قوی تر بدرخشند، نور کمتری روی مقاومت نوری می افتد.

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

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

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

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


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

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

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

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

محبوب ترین مسافت یاب ها در این لحظهاینها شارپ GP2Y0A21YK و HC-SR04 هستند. شارپ GP2Y0A21YK یک مسافت یاب مادون قرمز است. مجهز به یک فرستنده 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 ولت تغذیه می شوند.

با توجه به اینکه ولتاژ ال ای دی ها در حالت "خاموش" 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 (که یادم رفته بود) تهیه می کنم که افسوس در کیس پنهان است که البته نمی تواند سیگنال های کنترل از راه دور را بخواند. با این حال، چه کسی گفته است که شما نمی توانید چیزی را لحیم کاری و سوراخ کنید؟

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

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

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

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

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

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

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

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


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

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

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

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

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

  • VT83N1 - 12-100kΩ (12K روشنایی، 100K تاریکی)
  • VT93N2 - 48-500kOhm (48K - روشن، 100K - در تاریکی).

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

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

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

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

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

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

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

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

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

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

چند کلمه در مورد مقاومت اضافی 10K این دو عملکرد در مدار ما دارد: محدود کردن جریان در مدار و تشکیل ولتاژ مناسبدر یک مدار با یک تقسیم کننده. محدودیت جریان در شرایطی مورد نیاز است که یک مقاومت نوری کاملاً روشن مقاومت آن را به شدت کاهش می دهد. و شکل دهی ولتاژ برای مقادیر قابل پیش بینی در پورت آنالوگ است. در واقع، مقاومت 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.Point; = map(val, 0, 1023, 0, 255)؛ // مقدار دریافتی را به سطح سیگنال PWM تبدیل کنید. هر چه مقدار نور کوچکتر باشد، نیاز به برق کمتری برای تامین LED از طریق PWM داریم. 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);< 300) { // Светло, выключаем реле digitalWrite(PIN_RELAY, HIGH); } else { // Темновато, включаем лампочку digitalWrite(PIN_RELAY, LOW); } }

نتیجه

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

برای پروژه بعدی ما از یک مقاومت نوری استفاده خواهیم کرد. و اجرای یک چراغ شب در اتاق خواب را در نظر خواهیم گرفت که در تاریکی هوا به طور خودکار روشن می شود و با روشن شدن خاموش می شود.

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

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

نمودار مدار تقسیم کننده در زیر نشان داده شده است. هنگامی که روشنایی افزایش می یابد، مقاومت مقاومت نوری کاهش می یابد و بر این اساس، ولتاژ در خروجی تقسیم کننده (و ورودی ADC) افزایش می یابد. وقتی نور کم می شود، برعکس است.

عکس زیر نشان می دهد مدار مونتاژ شدهروی تخته نان ولتاژهای 0 و 5 ولت از آردوینو گرفته شده است. پین A0 به عنوان ورودی ADC استفاده می شود.

طرح آردوینو در زیر نشان داده شده است. در این آموزش به سادگی LED تعبیه شده در برد آردوینو را روشن و خاموش می کنیم. یک LED روشن تر، می توانید به پین ​​13 (از طریق یک مقاومت 220 اهم) متصل شوید. اگر بار قوی تری مانند لامپ رشته ای را وصل می کنید، باید از طریق رله یا تریستور وصل شود.

بخش های نظر داده شده در کد برنامه وجود دارد، آنها برای اشکال زدایی خدمت می کنند. امکان کنترل مقدار ADC (از 0 تا 1024) وجود خواهد داشت. همچنین، باید مقدار 500 در کد (آستانه روشن و خاموش) را به چیزی که به صورت تجربی با تغییر روشنایی انتخاب می کنید، تغییر دهید.

/* ** نور شب ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // تنظیم پایه ورودی برای ADC signed int sensorValue = 0; // ارزش دیجیتال photoresistor void setup() (pinMode(13, OUTPUT); Serial.begin(9600)؛ // شروع خروجی داده سریال (برای آزمایش) ) void loop() (sensorValue = analogRead(sensorPin)؛ // خواندن مقدار از مقاومت نوری اگر (sensorValue<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }