Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Управление яркостью излучения методом ШИМ

Кафедра «Мехатронные системы»

 

Ю.Р.Никитин

 

 

Методические указания к лабораторной работе

"Управление яркостью излучения светодиодов

методом ШИМ"

по дисциплине

"Электронные устройства мехатронных и робототехнических систем"

 

Ижевск 2017

Управление яркостью излучения методом ШИМ

Теоретическая часть

 

Потенциометр

 

Потенциометрoм называется переменный резистор. Это такой вид резистора, сопротивление которого можно регулировать вручную. У потенциометра три вывода: первый - питание, второй - выход (определяет положение), третий - земля. На рисунке 1.1 показан пример потенциометра.

 

Рисунок 1.1 – Потенциометр

 

Фоторезистор

 

Фоторезистор - это разновидность резистора, сопротивление которого не постоянно, а меняется в зависимости от яркости попадающего на него света. Чем ярче свет попадает на фоторезистор, тем меньше его сопротивление. Имеет две ножки. Одна подключается к земле, другая к аналоговому входу. Внешний вид фоторезистора показан на рисунке 1.2.

 

 

Рисунок 1.2 – Фоторезистор

Виды портов

 

Каждый вывод на Аrduino может работать в режиме входа и в режиме выхода. Если мы подключаем к порту какой-либо датчик (кнопку, потенциометр, фоторезистор), то, соответственно, мы должны сконфигурировать его как вход, если исполняющее устройство (светодиод, двигатель), то конфигурируем в режим выхода. Работая в режиме входа, порты могут быть цифровыми и аналоговыми. Цифровые (дискретные) порты могут принимать два значения: 0 и 1. Аналоговые могут принимать значения от 0 до 1023. На плате дискретные порты имеют обыкновенную числовую нумерацию, а перед номером аналогового входа добавляется буква А. В режиме выхода все порты являются цифровыми, т.е. могут принимать значения 0 или 1. На физическом уровне это значит, что при значении 0 на порту нет напряжения, а при 1 генерируется 3.3 В. Некоторые порты могут генерировать промежуточные напряжения от
0 В до 3.3 В, чередуя состояния 0 и 1. На такие порты можно отправлять значения от 0 до 255.

 

Широтно-импульсно модулированный сигнал – это импульсный сигнал постоянной частоты, но переменной скважности (соотношение длительности импульса и периода его следования). Из-за того, что большинство физических процессов в природе имеют инерцию, то резкие перепады напряжения от 1 к 0 будут сглаживаться, принимая некоторое среднее значение. С помощью задания скважности можно менять среднее напряжение на выходе ШИМ.

Если скважность равняется 100%, то всё время на цифровом выходе Arduino будет напряжение логическая "1" или 5 вольт. Если задать скважность 50%, то половину времени на выходе будет логическая "1", а половину – логический "0", и среднее напряжение будет равняться 2,5 вольтам. Ну и так далее.

 

Рисунок 1.3 – ШИМ

 

Принцип работы широтно-импульсной модуляции (ШИМ)

В программе скважность задаётся не в процентах, а числом от 0 до 255. Например, команда analogWrite(10, 64) скажет микроконтроллеру подать на цифровой PWM выход №10 сигнал со скважностью 25%.

Выводы Arduino с функцией широтно-импульсной модуляции работают на частоте около 500 Гц. Значит, период следования импульсов – около 2 миллисекунд, что и отмеряют зелёные вертикальные штрихи на рисунке.

Получается, что мы можем сымитировать аналоговый сигнал на цифровом выходе!

Как же мы можем использовать ШИМ? Применений масса! Например, управлять яркостью светодиода, скоростью вращения двигателя, током транзистора, звуком из пьезоизлучателя и т.д.…

Схема для демонстрации широтно-импульсной модуляции в Arduino

Давайте рассмотрим самый базовый пример – управление яркостью светодиода с помощью ШИМ. Соберём классическую схему.

 

Рисунок 1.4 – Схема для демонстрации ШИМ в Arduino

 

Пример скетча с ШИМ

Откроем из примеров скетч "Fade": Файл Образцы 01.Basics Fade.

Рисунок 1.5 – Меню для программы ШИМ

 

Открываем скетч для Arduino с использованием ШИМ.

Немного изменим его и загрузим в память Arduino.

int ledPin = 3; // объявляем пин, управляющий светодиодом

int brightness = 0; // переменная для задания яркости

int fadeAmount = 5; // шаг изменения яркости

 

void setup() {

pinMode(ledPin, OUTPUT);

}

 

void loop() {

analogWrite(ledPin, brightness); // устанавливаем яркость brightness на выводе ledPin

 

brightness += fadeAmount; // изменяем значение яркости

 

/* при достижении границ 0 или 255

меняем направление изменения яркости */

if (brightness == 0 || brightness == 255) {

fadeAmount = -fadeAmount; // изменяем знак шага

}

delay(30); // задержка для большей видимости эффекта

}

 

Управление яркостью светодиода с помощью PWM и Arduino

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

 

Пример

1. Реализовать светильник, яркость которого изменяется вращением потенциометра.

Шаг 1. Соберем схему. Левый вывод потенциометра подключается к земле, средний - к аналоговому порту (может принимать значения не 0 и 1, как цифровой порт, а от 0 до 1023), правый - к питанию.

 

Рисунок 1.6 – Схема подключения

 

Рисунок 1.7 – Схема электрическая

 

Шаг 2. Задача состоит в том, чтобы яркость свечения светодиода зависела от угла поворота потенциометра. Яркость свечения может определяться числовым диапазоном от 0 до 255, а угол поворота потенциометра от 0 до 1023. Следовательно, задача сводится к нахождению значения переменной ЯркостьСветодиода (ledStatus). Эта переменная зависит прямо пропорционально от значения, полученного с потенциометра (чем больше значение с потенциометра, тем больше яркость светодиода). Зависимость определяется формулой:

 

яркостьСветодиода = 255 * значение с потенциометра/1023

 

Перед отправкой вычисленного значения на порт, его необходимо округлить.

 

 

// управление светодиодом с помощью потенциометра

// подключение вывода 0 к потенциометру и вывода 13 к LED (светодиоду)

int PotenPin = 0; // потенциометр

int LEDPin = 13; // LED

 

void setup()

{

// установка вывода 0 как входа, вывода 13 как выхода

pinMode(PotenPin, INPUT);

pinMode(LEDPin, OUTPUT);

}

 

void loop()

{

// основная программа - бесконечный цикл

int LEDLevel=255*analogRead (PotenPin)/1023; // преобразование диапазона

//1023 к диапазону 255

analogWrite (LEDPin, LEDLevel); // управление LED

}

 

2. Реализовать ночник, который начинает светиться, когда яркость окружающей среды меньше пороговой. Пороговую яркость можно изменять с помощью потенциометра.

 

Шаг 1. Соберем схему. В нее входят: светодиод, фоторезистор и потенциометр.

 

Рисунок 1.8 – Схема подключения

 

Шаг 2: Создаем две переменные пороговая_Освещенность (borderIllumination) и значение_Фоторезитора, присваиваем им значения, полученные с аналоговых портов А0 и А1 соответственно.

Шаг 3: Если значение фоторезистора меньше пороговой освещенности, посылаем на десятый вывод (светодиод) значение on (логическая 1), иначе – off (логический 0).

 

// LED control by photoresistor and potenciometr

/* подключение выводов A1 к потенциометру PotenPin, A2 к фоторезистору PhotoResistorPin и 13 к светодиоду LEDPin

*/

int PotenPin = 0; // потенциометр

int PhotoResistorPin = 1; // фоторезистор

int LEDPin = 13; // LED

 

void setup()

{

// установка выводов 0, 1 как входов, вывода 13 как выхода

pinMode(PotenPin, INPUT);

pinMode(PhotoResistorPin, INPUT);

pinMode(LEDPin, OUTPUT);

}

 

void loop()

{

// основная программа - бесконечный цикл

if (analogRead(PhotoResistorPin) < analogRead(PotenPin))

digitalWrite (LEDPin, HIGH); // LED включен

else digitalWrite (LEDPin, LOW); // LED выключен

}

 

Модуль фоторезистора
Photo resistor module KY-018

https://tkkrlab.nl/wiki/Arduino_KY-018_Photo_resistor_module

Рисунок 1.9 – Вид модуля фоторезистора

 

В темноте сопротивление фоторезистора 1MОм, но при освещении сопротивление уменьшается.

 

Подключение:

Arduino A5 --> Module Signal (S)

Arduino +V --> Module +V (Pin2)

Arduino GND --> Module GND (-)

 

Тестовая программа для чтения сигнала с фоторезистора и вывода зачения на монитор.

//KY018 Photo resistor module

 

int sensorPin = A5; // select the input pin for the potentiometer

int ledPin = 13; // select the pin for the LED

int sensorValue = 0; // variable to store the value coming from the sensor

void setup() {

pinMode(ledPin, OUTPUT);

Serial.begin(9600);

}

void loop() {

sensorValue = analogRead(sensorPin);

digitalWrite(ledPin, HIGH);

delay(sensorValue);

digitalWrite(ledPin, LOW);

delay(sensorValue);

Serial.println(sensorValue, DEC);

}

 

Вместо фоторезистора можно использовать модуль датчика света
Optical broken module KY-010

https://tkkrlab.nl/wiki/Arduino_KY-010_Optical_broken_module

Рисунок 1.10 – Вид модуля датчика света

 

Подключение выводов:

левый = 0 В;

средний = питание;

правый = сигнальный.

Если pin 3 Ардуино подключить к сигнальному выводу, то тестовая программа может быть записана в виде:

// Example code for KY-010

// photo interrupter module

 

int Led = 13; // светодиод

int buttonpin = 3; // photo sensor

int val; // переменная val

void setup ()

{

pinMode (Led, OUTPUT); // LED – output

pinMode (buttonpin, INPUT); // photo sensor – output

}

void loop ()

{

val = digitalRead (buttonpin); // чтение с порта buttonpin (3)

if (val == HIGH) // когда считывается сигнал высокого уровня излучения

{

digitalWrite (Led, HIGH); // включается светодиод

}

else // иначе

{

digitalWrite (Led, LOW); // выключается светодиод

}

}


Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...