Нічник зі старої лампочки, на основі Arduino та WS2812. Підключення фоторезистора до ардуїно та робота з датчиком освітленості

Для додаткового завдання

    ще 1 світлодіод

    ще 1 резистор номіналом 220 Ом

    ще 2 дроти

Принципова схема

Схема на макетці

Зверніть увагу

    У цьому вся експерименті ми встановлюємо фоторезистор між живленням і аналоговим входом, тобто. в позицію R1 у схемі дільника напруги. Це нам потрібно для того, щоб при зменшенні освітленості ми отримували меншу напругу на аналоговому вході.

    Намагайтеся розмістити компоненти так, щоб світлодіод не засвічував фоторезистор.

Скетч

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) ; // Оголошуємо логічну змінну та призначаємо їй значення // «темно зараз». Логічні змінні, на відміну // Цілочисленних, можуть містити лише одне з двох значень: // Істину (англ. true) або брехня (англ. false). Такі значення // Ще називають булевими (англ. boolean). boolean tooDark = (lightness< threshold) ; // використовуємо розгалуження програми: процесор виконає один з //Двох блоків коду в залежності від виконання умови. // Якщо (англ. «if») занадто темно... if (tooDark) ( // ...включаємо освітлення digitalWrite(LED_PIN, HIGH); ) else ( // ...інакше світло не потрібне - вимикаємо його digitalWrite(LED_PIN, LOW); )

Пояснення до коду

    Ми використовуємо новий тип змінних - boolean , які зберігають лише значення true (істина, 1) або false (брехня, 0). Ці значення є результатом обчислення логічних виразів. У цьому прикладі логічний вираз - це lightness< threshold . На человеческом языке это звучит как: «освещенность ниже порогового уровня». Такое высказывание будет истинным, когда освещенность ниже порогового уровня. Микроконтроллер может сравнить значения переменных lightness и threshold , которые, в свою очередь, являются результатами измерений, и вычислить истинность логического выражения.

    Ми взяли цей логічний вираз у дужки тільки для наочності. Завжди краще писати код читання. В інших випадках дужки можуть впливати на порядок дій, як у звичайній арифметиці.

    У нашому експерименті логічний вираз буде істинним, коли значення lightness менше значення threshold , тому що ми використовували оператор< . Мы можем использовать операторы > , <= , >= , == , != , які означають «більше», «менше чи одно», «більше чи одно», «рівно», «не дорівнює» відповідно.

    Будьте особливо уважні з логічним оператором == і плутайте його з оператором присвоєння = . У першому випадку ми порівнюємо значення виразів і отримуємо логічне значення (істина чи брехня), тоді як у другому випадку присвоюємо лівому операнду значення правого. Компілятор не знає наших намірів і помилку не видасть, а ми можемо ненароком змінити значення якоїсь змінної і потім довго розшукувати помилку.

    Умовний оператор if («якщо») - одна з ключових у більшості мов програмування. З його допомогою ми можемо виконувати як жорстко задану послідовність дій, але приймати рішення, якою гілки алгоритму йти, залежно від умов.

    У логічного вираження lightness< threshold есть значение: true или false . Мы вычислили его и поместили в булеву переменную tooDark («слишком темно»). Таким образом мы как бы говорим «если слишком темно, то включить светодиод»

    З тим самим успіхом ми могли б сказати «якщо освітленість менше порогового рівня, то включити світлодіод», тобто. передати в if весь логічний вираз:

if (lightness< threshold) { // ... }

    За умовним оператором if обов'язково слідує блок коду, який виконується у разі істинності логічного виразу. Не забувайте про обидві фігурні дужки ()!

    Якщо у разі істинності виразу нам потрібно виконати лише однуінструкцію, її можна написати відразу після if (...) без фігурних дужок:

if (lightness< threshold) digitalWrite(LED_PIN, HIGH) ;

    Оператор if може бути розширений конструкцією else («інакше»). Блок коду або єдина інструкція, що йде за нею, буде виконаний тільки якщо логічний вираз у if має значення false, «брехня». Правила, що стосуються фігурних дужок, такі самі. У нашому експерименті ми написали «якщо надто темно, включити світлодіод, інакше вимкнути світлодіод».

Напевно, у кожного у дитинстві була мрія (і не одна). Можна спробувати навіть згадати те почуття, яке переповнює душу дитини при виконанні її мрії або той далекий знайомий блиск в очах… Я ж у дитинстві мріяла мати свій нічник.

Зараз я навчаюсь на 4-му курсі БДУІР і коли нам повідомили, що курсовий проект із схемотехніки можна зробити не на папері, а на залізяку, мене осяяло: нічник, який так хотів у дитинстві, можна зробити самої. Причому зробити не просто об'єкт, який освітлюватиме кімнату в темний час доби, а пристрій, яким можна буде легко управляти під будь-який настрій. А чому б і ні? Я вирішила додати можливість міняти кольори за допомогою рук: чим ближче рука підноситься до нічника, тим яскравіше горить один із квітів (RGB). А також хотілося б керувати нічником за допомогою пульта дистанційного керування.

Відразу зізнаюся, що ідею я підглянула на cxem.net. Якщо коротко, у цьому прикладі використовувалася RGB-матриця, яка керувалася за допомогою регістрів зсуву, та ультразвукові датчики відстані. Але я подумала, що матриця світить виключно в один бік, мені ж хотілося, щоб нічник світив на всі боки.

Обґрунтування елементів схеми


Я звернула увагу на мікроконтролери Arduino. UNO цілком підходящий варіант для мого задуму, по-перше тому що це найбільш популярна платформа і кількість пінів не надто велика, на відміну від Mega, по-друге до неї можна підключити зовнішнє джерело живлення, в моєму випадку він 12В, на відміну від Nano , по-третє… ну думаю можна зупинитися на цих двох пунктах. Платформа користується величезною популярністю у всьому світі завдяки зручності та простоті мови програмування, а також відкритій архітектурі та програмному коду.

Більш детальну інформацію про цю плату можна легко знайти на просторах інтернету, так що не перевантажуватиму статтю.

Отже, основні вимоги до системи. Необхідні:
– датчики, які відстежуватимуть відстань до перешкоди для керування системою;
- Датчик для зчитування сигналів з пульта дистанційного керування;
- світлодіоди, які і забезпечуватимуть необхідну функціональність освітлення;
– керуючий блок, який керуватиме всією системою.

Як датчики відстані для проекту необхідні далекоміри, кожен з яких відповідатиме певному кольору: червоний, зелений, синій. Датчики відстані стежитимуть за відстанню руки до нічника і, чим ближче рука підноситиметься до певного датчика, тим сильніше горітиме колір, що відповідає цьому далекоміру. І навпаки, що далі рука, то менше подається напруга на колір, що відповідає датчику.

Найбільш популярні далекоміри на даний момент це Sharp GP2Y0A21YK та HC-SR04. Sharp GP2Y0A21YK - це інфрачервоний далекомір. Він оснащений ік-випромінювачем і ик-приймачем: перший є джерелом променя, відбиток якого ловить другий. При цьому ик-промені датчика для ока невидимі і за такої інтенсивності нешкідливі.

Порівняно з ультразвуковим датчиком HC-SR04, цей датчик має і переваги, і недоліки. До переваг можна віднести нейтральність і нешкідливість. А недоліки – менший радіус дії та залежність від зовнішніх перешкод, у тому числі – деяких типів освітлення.

Як датчики відстані для проекту використані ультразвукові далекоміри HC-SR04.
Принцип дії HC-SR04 ґрунтується на добре відомому явищі ехолокації. При використанні випромінювач формує акустичний сигнал, який відбившись від перешкоди, повертається до датчика і реєструється приймачем. Знаючи швидкість поширення ультразвуку в повітрі (приблизно 340м/с) і час запізнення між випромінюваним та прийнятим сигналом, легко розрахувати відстань до акустичної перешкоди.

Вхід TRIG підключається до будь-якого висновку мікроконтролера. На цей висновок необхідно подавати імпульсний цифровий сигнал тривалістю 10 мкс. За сигналом на вході TRIG датчик надсилає пачку ультразвукових імпульсів. Після прийому відбитого сигналу датчик формує на виведенні ECHO імпульсний сигнал, тривалість якого пропорційно відстані до перешкоди.

Ік-датчик. Зрозуміло, з даного датчика зчитуватиметься і декодуватиметься сигнал, необхідний для дистанційного керування. TSOP18 відрізняються між собою лише за частотою. Для проекту вибрано датчик VS1838B TSOP1838.

В основі проекту лежала ідея про освітлення приміщення будь-яким кольором, це говорить про те, що знадобляться 3 основні кольори, з яких буде отримано освітлення: червоний, зелений, синій. Тому була обрана модель світлодіодів SMD 5050RGB, які чудово впораються з поставленим завданням.

Залежно від величини напруги, що подається на кожен світлодіод, вони змінюватимуть інтенсивність цього освітлення. Світлодіод повинен бути підключений через резистор, інакше ризикуємо зіпсувати не лише його, а й Arduino. Резистор необхідний у тому, щоб обмежити струм на світлодіоді до прийнятної величини. Справа в тому, що внутрішній опір світлодіода дуже низький і, якщо не використовувати резистор, через світлодіод пройде такий струм, який просто спалить і світлодіод, і контролер.

Планки зі світлодіодами, що використовуються у проекті, живляться від 12В.

У зв'язку з тим, що напруга на світлодіодах у «вимкненому» стані дорівнює 6В і необхідно регулювати живлення, яке перевищує 5В, до схеми необхідно додати транзистори в ключовому режимі. Мій вибір ліг на модель BC547c.

Розглянемо коротко, для тих, хто призабув, принцип роботи n-p-n транзистора. Якщо напруга не подавати зовсім, а просто взяти і замкнути висновки бази та емітера нехай навіть і не накоротко, а через резистор у кілька Ом, вийде, що напруга база-емітер дорівнює нулю. Отже, немає й струму бази. Транзистор закритий, колекторний струм зневажливо малий, саме цей початковий струм. І тут кажуть, що транзистор перебуває у стані відсічення. Протилежний стан називається насичення: коли транзистор відкритий повністю, то далі відкриватися вже нікуди. При такому ступені відкриття опір ділянки колектор емітер настільки мало, що включати транзистор без навантаження в колекторному ланцюзі просто не можна, згорить моментально. При цьому залишкова напруга на колекторі може становити лише 0,3…0,5В.

Ці два стани – насичення та відсікання, використовуються в тому випадку, коли транзистор працює у ключовому режимі на кшталт звичайного контакту реле. Основний сенс такого режиму в тому, що малий струм бази управляє великим струмом колектора, який у кілька десятків разів більший за струм бази. Великий струм колектора виходить за рахунок зовнішнього джерела енергії, але все одно посилення струму, що називається, є. У нашому випадку, мікросхема, робоча напруга якої 5В, включає 3 планки зі світлодіодами, що працюють від 12В.

Розрахуємо режим роботи ключового каскаду. Потрібно розрахувати величину резистора в ланцюгу бази, щоб світлодіоди горіли на повну потужність. Необхідна умова при розрахунку, щоб коефіцієнт посилення по струму був більшим або дорівнює частці від поділу максимально можливого струму колектора на мінімально можливий струм бази:

Тому планки можуть бути робочу напругу 220В, а базова ланцюг управлятися від мікросхеми з напругою 5В. Якщо транзистор розрахований працювати з такою напругою на колекторі, то світлодіоди горітимуть без проблем.
Падіння напруги на переході база-емітер 0,77В за умови, що струм бази 5мА, струм колектора 0,1А.
Напруга на базовому резисторі складе:

За Законом Ома:

Зі стандартного ряду опорів вибираємо резистор 8,2 кОм. На цьому розрахунок закінчено.

Хочу звернути увагу на одну проблему, з якою я зіткнулася. При використанні бібліотеки IRremote Arduino зависав під час регулювання синього кольору. Після тривалого та ретельного пошуку в інтернеті виявилося, що ця бібліотека використовує за замовчуванням таймер 2 для цієї моделі Arduino. Таймери використовуються для керування виходами ШІМ.

Tаймер 0 (системний час, ШІМ 5 і 6);
Таймер 1 (ШИМ 9 і 10);
Таймер 2 (ШИМ 3 і 11).

Спочатку у мене був використаний ШІМ 11 для регулювання синього кольору. Тому будьте уважні при роботі з ШІМ, таймерами та сторонніми бібліотеками, які можуть їх використовувати. Дивно, що на головній сторінці на гітхабі про цей нюанс не було нічого сказано. За бажанням ви можете розкоментувати рядок з таймером 1 і закоментувати 2.

Підключення елементів на макетній платі виглядає так:

Після тестування на макетці розпочалися фази «Розміщення елементів на платі» та «Робота з паяльником». Після першого тестування готової плати на думку закрадається думка: щось пішло не так. І тут починається знайома багатьом фаза «Кропітка робота з тестером». Однак неполадки (випадково спаялися кілька сусідніх контактів) були швидко усунуті і ось він довгоочікуваний бешкетний вогник світлодіодів.

Далі справа стояла лише за корпусом. З цього приводу було випиляно фанерки з отворами для наших датчиків. Задня кришка робилася спеціально знімною, щоб можна було насолодитися видом зсередини і, за бажанням, щось доробити чи переробити. Також у ній є 2 отвори для перепрограмування плати та харчування.

Корпус клеївся на двокомпонентному епоксидному клеї. Варто відзначити особливість даного клею для тих, хто з ним раніше не зустрічався. Цей товариш поставляється у двох окремих ємностях, при змішуванні вмісту яких відбувається миттєва хімічна реакція. Після змішування діяти доводиться швидко, не більше 3–4 хвилин. Для подальшого використання слід змішати нову порцію. Так що якщо намагаєтеся це повторити, моя вам порада, змішувати маленькими порціями і діяти дуже швидко, час на подумати буде не так вже й багато. Тому варто заздалегідь продумати, як і де склеїти корпус. Причому за один раз це зробити не вийде.

Для кріплення планок зі світлодіодами у верхню кришку була вставлена ​​трубка, через яку чудово пройшли всі дроти.

Коли виникло питання з абажуром, я згадала як у дитинстві робила вироби з простої нитки, клею та повітряної кульки, яка служила основою. Принцип для абажура взятий той самий, проте обмотувати багатогранник виявилося складніше, ніж кулька. За рахунок тиску, що чиниться нитками на конструкцію, догори вона почала звужуватися і нитки стали опадати. Екстрено, з руками в клею, було вирішено зміцнити конструкцію зверху. І тут прийшов на допомогу компакт-диск. У результаті вийшов такий нічник:

Що хочеться сказати у результаті

Щоб я змінила проект? Для подачі сигналу TRIG датчиків відстані можна використовувати один вихід Arduino замість трьох. Так само я передбачила б отвір для ик-датчика (про який я забула), який поки, на жаль, захований в корпусі з якого він, природно, не може зчитувати сигнали з пульта. Однак хто сказав, що не можна нічого перепаювати і свердлити?

Хочеться відзначити, що це був цікавий семестр, і чудова можливість спробувати зробити щось не на папері, завдяки чому я можу поставити ще одну галочку біля пункту дитяча мрія. І якщо вам здається, що пробувати щось нове складно, і ви не знаєте, за що насамперед взятися, не варто переживати. У багатьох у голові пролітає думка: з чого тут почати і як це взагалі можна зробити? У житті багато виникає завдань, від яких можна розгубитися, але варто лише спробувати, як ви помітите, що з вогником в очах ви можете згорнути гори, нехай навіть для цього доведеться трошки постаратися.

Для наступного проекту ми будемо використовувати фоторезистор. А розглянемо ми реалізацію нічника в спальню, який автоматично включатиметься коли темно і вимикатиметься коли стає світло.

Опір фоторезистора залежить від світла, що потрапляє на нього. Використовуючи фоторезистор у зв'язці зі звичайним резистором 4.7 кОм, ми отримуємо дільник напруги, в якому напруга, що проходить через фоторезистор, змінюється залежно від рівня освітленості.

Напруга з дільника, ми подаємо на вхід АЦП Arduino. Там ми порівнюємо отримане значення з певним порогом і вмикаємо чи вимикаємо світильник.

Принципова схема дільника показана нижче. Коли освітленість збільшується, опір фоторезистора падає і на виході дільника (і вході АЦП) напруга збільшується. Коли освітленість падає навпаки.

На фото нижче показана зібрана схема на макетній платі. Напруги 0В та 5В беруться з Arduino. Ніжка А0 використовується як вхід АЦП.

Нижче показаний скетч Arduino. У цьому уроці ми просто вмикаємо та вимикаємо LED, який вбудований у плату Arduino. Більш яскравий LED-світлодіод, ви можете підключити до ноги 13 (через резистор ~220 Ом). Якщо підключатимете більш потужне навантаження, таку як лампу розжарювання, то її слід підключати через реле або тиристор.

У коді програми є закоментовані ділянки, вони служать для налагодження. Можна буде контролювати значення АЦП (від 0 до 1024). Також, необхідно в коді змінити значення 500 (поріг включення та вимкнення) на те, яке ви підберете досвідченим шляхом, змінюючи освітленість.

/* ** Нічник ** ** www.hobbytronics.co.uk */ int sensorPin = A0; // встановлюємо вхідну ногу для АЦП unsigned int sensorValue = 0; // цифрове значення фоторезистора void setup() ( pinMode(13, OUTPUT); Serial.begin(9600); // старт послідовного виведення даних (для тестування) ) void loop() ( sensorValue = analogRead(sensorPin); // зчитуємо значення з фоторезистора if(sensorValue<500) digitalWrite(13, HIGH); // включаем else digitalWrite(13, LOW); // выключаем // Для отладки раскомментируйте нижеследующие строки //Serial.print(sensorValue, DEC); // вывод данных с фоторезистора (0-1024) //Serial.println(""); // возврат каретки //delay(500); }

Доброго дня чи ночі, у кого як. Сьогодні я поділюся інструкцією з виготовлення невеликого каганця. Основою послужить - матовий розсіювач від світлодіодної лампочки, що згоріла. А всередину ми помістимо Arduino Pro Mini та світлодіоди SW2812. Я викладу лише один скетч, але варіантів кольорів чи переливань може бути дуже багато. Почнемо, як завжди, зі списку необхідного:

Розсіювач від світлодіодної лами, цоколь Е27
- Блок живлення на 5В
- Arduino Pro Mini 5V
- USB-TTL (для заливання скетчу в ардуїно)
- Світлодіоди WS2812
- Тонкий пластик
- Двосторонній скотч
- Зарядка від телефону не потрібна, але робоча
- Паяльник
- Провід
- Приспій, каніфоль
- Термоклейовий пістолет

Крок 1. Виготовлення корпусу.
Для початку нам знадобиться здобути розсіювач. Беремо світлодіодну лампочку з цоколем Е27. Краще, звичайно, брати лампочку, що вже відпрацювала:

Однією рукою тримаємо лампочку за цоколь та пластиковий корпус, іншою – беремо за розсіювач, і надламуємо лампочку. Розсіювач повинен легко відійти від корпусу, тому що тримається тільки на герметиці:

Тепер нам треба виготовити основу, до якої ми приклеюватимемо світлодіоди. Для цього беремо тонкий пластик, підійде обкладинка від пластикового швидкозшивача. Тепер заміряємо внутрішній діаметр отвору розсіювача, а також треба виміряти глибину розсіювача. Переходимо до виготовлення основи. Вона буде у формі циліндра, діаметр якого повинен бути на 5 мм менше внутрішнього діаметра посадкового отвору розсіювача. А висота менша на 7 мм глибини розсіювача. Виглядати має приблизно так:

На цьому поки що закінчимо.

Крок 2. Електрика.
Як я вже говорив раніше, контролером буде Arduino Pro Mini, версія, що працює від 5 вольт. Світлодіодна стрічка підключається просто, для цього необхідно контакт +5V підключити до плюсу від блока живлення на 5 вольт, а GND - до мінуса. Контакт DIN (вхід) з'єднати з pin 6 Arduino. Порт підключення стрічки можна поміняти на будь-який зручний у скетчі. Arduino живитимемо від того ж блоку живлення. Так як блок живлення використовуватимемо стабілізований, з'єднуємо плюс від блоку живлення з контактом 5V на Arduino. Мінус блока живлення має бути підключений до GND Arduino. Схема така:

Отже, один світлодіод, за максимальної яскравості всіх трьох кольорів, споживає 60 мА. У мене помістилося 25, значить виходить:

25 х 60 mA = 1500 mA = 1.5 А

Тобто, мені потрібен блок живлення 5 В, 1.5 А. Це максимальний показник сили струму, який при включенні всіх світлодіодів в режим максимальної яскравості всіх трьох кольорів.

Як блок живлення візьмемо стару зарядку від телефону. Блок живлення треба вибирати на 5 вольт, а за потужністю порахувати скільки у вас поміститися світлодіодів:

Відрізаємо штекер від неї та припаюємо дроти безпосередньо до стрічки, не забудьте перевірити полярність тестером або мультиметром. Також слід зробити висновки проводів для живлення Arduino. І сигнальний провід від стрічки Arduino.

У нижній частині циліндра робимо проріз, щоб пропустити контакти стрічки з припаяними проводами всередину:

Вставив кінець стрічки з проводами у проріз, фіксуємо її за допомогою термоклею. Далі приклеюємо льону по колу, злегка задираю її вгору, так щоб вийшла спіраль зі стрічки. На верхівку циліндра так само клеємо стрічку, кількість діодів залежить від діаметра, у мене на верхівці по діагоналі помістилося максиму два світлодіоди, та ще й так що контакти звисали:

Якщо у вас вийшло так само, не засмучуйтеся, просто обріжте стрічку, що звисає по краях, і припаяйте дроти безпосередньо до світлодіодів. Контакти WS2812:

Звернути увагу, світлодіодна стрічка на WS2812B має напрямок, з одного боку (початок або вхід), у неї контакти DIN, +5V, GND. З іншого боку (кінець чи вихід) DO, +5V, GND. Якщо припаює на пряму до світлодіодів, дивися на розташування контактів, орієнтуючись на ключ (зріз кута). Для спрощення монтажу на стрічці намальовані стрілки, що вказують на напрямок. Особливу увагу приділіть переходу на верх, виходить дуже різкий вигин, велика можливість переламати стрічку. У мене вийшло ось так:


Зверху припаювався на пряму до світлодіодів:

А посередині, другим рівнем, ще кілька світлодіодів:

І для надійності, заливаємо дроти термоклеєм:

Тепер вставляємо наш циліндр зі світлодіодами усередину кулі від лампочки. Використовуючи термоклей, фіксуємо циліндр усередині кулі по колу:

Не забудьте зробити проріз для виведення назовні дроту живлення:

Крок 3. Підготовка середовище та прошивка.
Для завантаження скетчу (або прошивки) будемо використовувати Arduino IDE. Завантажуємо з офіційного останню версію та встановлюємо її.

Щоб це зробити, спочатку завантажуємо архів. Потім розпаковуємо цей архів. І переміщуємо розпаковані файли до папки «libraries», яка знаходиться в папці із встановленою Arduino IDE. Можна зробити простіше. Запускаємо Arduino IDE. Не розпаковуємо завантажений архів. Прямо серед Arduino IDE вибираємо пункт меню Скетч – Підключити бібліотеку. У самому верху списку вибираємо пункт «Додати.Zip бібліотеку». З'явиться діалогове вікно. Далі в ньому вибираємо нашу бібліотеку Adafruit_NeoPixel-master. Трохи варто зачекати. Знову відкриваємо пункт меню Скетч – Підключити бібліотеку. Тепер у самому низу списку ви побачите нову бібліотеку. Перезавантаживши Arduino IDE, можна використовувати бібліотеку.

Завантажуємо мій скетч:

Залишилося залити скетч в Arduino. Ми використовуємо Arduino Pro Mini. Ця версія популярної Arduino не має розпаяного на платі USB-TTL чіпа. Тому для зв'язку з комп'ютером та заливки скетчу необхідно використовувати окремий USB-TTL. Підключення за наступною схемою:

Arduino – USB-TTL
RX (P0) - TX
TX (P1) - RX
GND – GND

Живлення USB-TTL буде від USB порту комп'ютера. Arduino можна запитати від USB-TLL або використовувати зовнішнє джерело живлення. Головне, щоб контакти GND USB-TTL і Arduino були з'єднані. Найчастіше у продажу трапляються USB-TTL без виведення контакту DTR. Контакт DTR необхідно з'єднати з Reset Arduino для автоматичного перезавантаження перед завантаженням скетчу. Якщо у вас, як і у мене, такого висновку немає, перезавантаження перед заливкою скетчу необхідно виконувати вручну. Діємо так: підключаємо всім за схемою, описаною вище, відкриваємо Arduino IDE, відкриваємо скачений вами скетче, натискає кнопку - Завантаження - і дивимося, що написано внизу. Поки йде "компіляція", нічого не робимо, просто чекаємо, коли з'явиться напис "завантаження", нам необхідно натиснути кнопку Reset на Arduino. Якщо не зручно натискати кнопку на платі, можна вивести кнопку, підключену до GND та Reset. Або просто вивести дроти до тих самих висновків і замикати їх у потрібний момент.

Хочу сказати, що варіантів свічення нічника безліч, я записав у скетч лише кілька, які мені самому сподобалися. Ви можете відредагувати скетч, як вам подобається. Поекспериментуйте та оберіть те, що вам найбільше сподобається.

У цьому експерименті світлодіод повинен включатися при падінні рівня освітленості нижче за поріг, заданий потенціометром.

СПИСОК ДЕТАЛІВ ДЛЯ ЕКСПЕРИМЕНТУ

- 1 плата Arduino Uno;

- 1 безпайкова макетна плата;

- 1 світлодіод;

- 1 фоторезистор;

- 1 резистор номіналом 220 Ом; 1 резистор номіналом 10 кОм;

- 1 змінний резистор (потенціометр);

- 10 дротів «тато-тато».

ДЕТАЛІ ДЛЯ ДОДАТКОВОГО ЗАВДАННЯ

Ще 1 світлодіод;

Ще один резистор номіналом 220 Ом;

Ще 2 дроти.

ПРИНЦИПОВА СХЕМА

СХЕМА НА МАКЕТНІЙ ПЛАТІ

СКЕТЧ

скачати для Arduino IDE
#define LED_PIN 13 #define LDR_PIN A0 #define POT_PIN A1 void setup() ( pinMode(LED_PIN, OUTPUT); ) void loop() ( // зчитуємо рівень освітленості. До речі, оголошувати // змінну і присвоювати їй значення можна разом = analogRead(LDR_PIN);// зчитуємо значення з потенціометра, яким ми регулюємо // граничне значення між умовними темнотою і світлом int threshold = analogRead(POT_PIN);// оголошуємо логічну змінну і призначаємо їй значення // "темно зараз". Логічні змінні, на відміну від // цілих, можуть містити лише одне з двох значень: // істину (англ. true) або брехня (англ. false) Такі значення // ще називають булевими (англ. boolean). (lightness< threshold); // используем ветвление программы: процессор исполнит один из // двух блоков кода в зависимости от исполнения условия. // Если (англ. «if») слишком темно... if (tooDark) { // ...включаем освещение digitalWrite(LED_PIN, HIGH); } else { // ...иначе свет не нужен — выключаем его digitalWrite(LED_PIN, LOW); } }

ПОЯСНЕННЯ ДО КОДУ

  • Ми використовуємо новий тип змінних. boolean, які зберігають лише значення true (істина, 1) або false (брехня, 0). Ці значення є результатом обчислення логічних виразів. У цьому прикладі логічний вираз — це lightness< threshold . На людській мові це звучить як: «освітленість нижча від порогового рівня». Таке висловлювання буде істинним, коли освітленість нижча від порогового рівня. Мікроконтролер може порівняти значення змінних lightnessі threshold, які, у свою чергу, є результатами вимірів, і обчислити істинність логічного виразу.
  • Ми взяли цей логічний вираз у дужки тільки для наочності. Завжди краще писати код читання. В інших випадках дужки можуть впливати на порядок дій, як у звичайній арифметиці.
  • У нашому експерименті логічний вираз буде істинним, коли значення lightnessменше значення threshold, тому що ми використовували оператор < . Ми можемо використовувати оператори > , <= , >= , = = , != , які означають «більше», «менше чи одно», «більше чи одно», «рівно», «не дорівнює» відповідно.
  • Будьте особливо уважні з логічним оператором = = і не плутайте його з оператором присвоєння = . У першому випадку ми порівнюємо значення виразів і отримуємо логічне значення (істина чи брехня), тоді як у другому випадку присвоюємо лівому операнду значення правого. Компілятор не знає наших намірів і помилку не видасть, а ми можемо ненароком змінити значення якоїсь змінної і потім довго розшукувати помилку.
  • Умовний оператор ifякщо») - одна з ключових у більшості мов програмування. З його допомогою ми можемо виконувати як жорстко задану послідовність дій, але приймати рішення, якою гілки алгоритму йти, залежно від умов.
  • У логічного виразу lightness< threshold є значення: trueабо false. Ми вирахували його та помістили у булеву змінну tooDark(«занадто темно»). Таким чином ми говоримо «якщо занадто темно, то включити світлодіод»
  • З тим самим успіхом ми могли б сказати «якщо освітленість менше порогового рівня, то включити світлодіод», тобто. передати до ifвесь логічний вираз:
if (lightness< threshold) { // ... }
  • За умовним оператором ifобов'язково слідує блок коду, який виконується у разі істинності логічного виразу. Не забувайте про обидві фігурні дужки {} !
  • Якщо у разі істинності виразу нам потрібно виконати лише одну інструкцію, її можна написати відразу після if (…)без фігурних дужок:
if (lightness< threshold) digitalWrite(LED_PIN, HIGH);
  • Оператор ifможе бути розширений конструкцією else(«Інакше»). Блок коду або єдина інструкція, що слідує за нею, буде виконаний тільки якщо логічний вираз у ifмає значення false , « брехня». Правила, що стосуються фігурних дужок, такі самі. У нашому експерименті ми написали «якщо надто темно, включити світлодіод, інакше вимкнути світлодіод».

ПИТАННЯ ДЛЯ ПЕРЕВІРКИ СЕБЕ

  1. Якщо ми встановимо фоторезистор між аналоговим входом та землею, наш пристрій працюватиме навпаки: світлодіод буде вмикатися зі збільшенням кількості світла. Чому?
  2. Який результат роботи пристрою ми отримаємо, якщо світло від світлодіода падатиме на фоторезистор?
  3. Якщо ми все ж таки встановили фоторезистор так, як сказано в попередньому питанні, як нам потрібно змінити програму, щоб пристрій працював правильно?
  4. Допустимо, у нас є код if (умова) (дія;). У яких випадках буде виконано дія ?
  5. При яких значеннях yвираз x + y > 0буде істинним, якщо x > 0 ?
  6. Чи обов'язково вказувати, які інструкції виконувати, якщо умова оператора ifхибно?
  7. Чим відрізняється оператор = = від оператора = ?
  8. Якщо ми використовуємо конструкцію if (умова) дію1; else дію2;Чи може бути ситуація, коли жодна з дій не виконається? Чому?

ЗАВДАННЯ ДЛЯ САМОСТІЙНОГО РІШЕННЯ

  1. Перепишіть програму без використання змінної tooDarkіз збереженням функціоналу пристрою.
  2. Додайте до схеми ще один світлодіод. Доповніть програму так, щоб при падінні освітленості нижче порогового значення включався один світлодіод, а при падінні освітленості нижче половини від порогового значення включалися обидва світлодіоди.
  3. Змініть схему та програму так, щоб світлодіоди включалися за старим принципом, але світилися тим сильніше, чим менше світла падає на фоторезистор.

2021 wisemotors.ru. Як це працює. Залізо. Майнінг. Криптовалюта.