Легко бачити, що у фотогенераторному режимі роботи (рис. 5 б) якщо струм через зовнішне коло не тече: I01 - exp VOut φТ + C Ф = 0 і вихідна напруга дорівнює: VOut = φТ ln C Ф + φТ φТ або наближено VOut = φТ ln C φТ Ф . Тобто вихідна напруга пропорційна логарифму освітленості. а) VOut Vсс R1 VD1 VOut VD1 б) Рис. 5. Типові схеми включення фотодіодів а) фотодіодний режим, б) фотогенераторний режим Фрагмент програми, що контролює рівень освітленості об'єкта і залежно від рівня вмикає світлодіод наведено нижче. int led = 13; //змінна з номером піну світлодіоду int ldr = 0; //змінна з номером піну фоторезистора
void setup() //процедура setup
{
pinMode(led, OUTPUT); //вказуємо, що світлодіод - вихід
}
void loop() //процедура loop
{
if (analogRead(ldr) < 800) digitalWrite(led, HIGH);
//якщо показник освітленості менше 800, вмикаємо світлодіод
else digitalWrite(led, LOW); //в іншому випадку вимикаємо
підсилювача LM324. На основі U2D (DD1.4) побудовано підсилювач із коефіцієнтом підсилення 6. U2C - складає основу полосового фільтра, а його вихідний сигнал потім ще підсилюється мікросхемою U2B у 8 разів. Підсилювач U2A використовується разом з Q1 в якості компаратора із гістерезисом. Після того, як поступає вхідний сигнал запуску контролер давача вмикає живлення MAX232. Після чого очікує 250 мкс, і видає 8 імпульсів частотою 40 кHz і потім видає на лінію Echo логічну одиницю. Протягом видачі імпульсів вхід компаратора також підтримується у виключеному стані, щоб запобігти будь-яким паразитним сигналам, що можуть надійти на приймач. Далі схема переходить очікування відбитого сигналу. Як тільки перший імпульс виявлений в приймачі сигнал Echo скидається і можна визначати ширину відбитого імпульсу для обчислення відстані. Таким чином, для роботи з датчиком від електроніки приладу потрібно один цифровий керуючий вихід (Trig) і один вхід для сигналу датчика (Echo). Часові діаграми роботи датчика наведені на рис. 8. Рис. 8. Часові діаграми роботи давача Довжина імпульсу на виході Echo пропорційна відстані до перешкоди. І відстань обчислюється за формулою: S = F 5.8 де S - відстань у міліметрах, F - тривалість імпульсу у мікросекундах. Для визначення тривалості імпульсу на вході Arduino можна використовувати функцію pulseIn. Синтаксис функції наступний pulseIn(pin, value)
pulseIn(pin, value, timeout)
Параметри функції наступні
◊ pin: номер виводу, з котрого необхідно зчитати тривалість імпульсу int. ◊ value: тип імпульсу, що очікується: HIGH чи LOW (int)
◊ timeout час очікування імпульсу в мікросекундах; значення за замовчуванням - 1 секунда
Функція повертає значення тривалості імпульсу в мікросекундах або 0 у випадку відсутності імпульсу на протязі часу вимірювання (unsigned long).
Фрагмент програми, що зчитує значення з давача положення наведений нижче
const byte echoPin = 6; //задаємо значення вхідного
unsigned long SonarRead()
{//Функція зчитування даних із роботи з давача
delayMicroseconds(1); //очікуємо 1 мс
digitalWrite(trigPin, HIGH);//видаємо на лінію trigPin 1
delayMicroseconds(1); //очікуємо 1 мс
digitalWrite(trigPin, LOW); //видаємо на лінію trigPin 0
unsigned long F = pulseIn(echoPin, HIGH,5800*5);
//зчитуємо значення тривалості імпульсу //так як немає потреби контролювати відстань більшу //ніж 5 м навколо датчика тайм-аут обраний на рівні 5 м if(F == 0) // перевіряємо pulseIn на тайм-аут і інші проблеми {F = 5800*5;} // якщо надійшло нульове значення - замінюємо його на // максимально можливе return F; } //підпрограма підготовки void setup() { pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT);
digitalWrite(trigPin, LOW); //видаємо на лінію trigPin 0