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

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

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


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


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

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

У коді програми є закоментовані ділянки - вони використовуються для налагодження, під час якого можна буде контролювати значення АЦП (від 0 до 1024). В коді скетчу доведеться змінити значення 500 (поріг вмикання та вимикання) на те, яке ви підберете дослідним шляхом, змінюючи освітленість.
/* Фоторезистор */ 
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); 
}
Джерело: http://www.hobbytronics.co.uk 

- Copyright © Основи мікроелектроніки в школі