Создаем схему в программе Fritzing (или другой подобной).
Описываем работу системы.
Собираем, приводим фотографии.
Схема подключения «Фоторезистора»
Схема электрическая принципиальная.
Собираем фоторезистор.
Разработка программного обеспечения
Составляем блок-схему программы и приводим ее подробное описание. Пишем программный код.
Блок схема алгоритма программы.
Программный код
// Зададим константы для объявления пинов
const int sensorPin = 0;
const int ledPin = 9;
// Также зададим 3 глобальные переменные - lightLevel, high и low
int lightLevel, high = 0, low = 1023;
Void setup()
{
//ledpin - цифровой вход/выход 9, зададим как выход
pinMode(ledPin, OUTPUT);
}
Void loop()
{
// Чтобы считать значение на аналоговом входе воспользуемся analogRead()
// Эта функция измерит напряжение на фоторезисторе.
// Значение напряжения может варьироваться в пределах от 0 при 0 Вольт
// до 1023 (5 Вольт),
lightLevel = analogRead(sensorPin);
// Теперь полученное значение используем для контроля над яркостью светодиода
// Но у нас есть проблема: функция analogRead() возвращает знач. от 0 до 1023
// А функция analogWrite() использует значения от 0 до 255.
// Мы можем решить эту проблему с помощью двух полезных функций, map() и constrain().
// Map () переводит один диапазон значений в другой.
// Если мы скажем функции map(), что наш "from" диапазон это 0-1023,
// И наш "to" диапазон это 0-255, то map() скукожит больший диапазон до меньшего.
// lightLevel = map(lightLevel, 0, 1023, 0, 255);
// Поскольку map() все ещё может вернуть числа находящиеся за пределами "to" диапазона
// мы просто на всякий пожарный воспользуемся функцией проверки пришедшего числа заданному диапазону
// Функция называется constrain(), который будет вклеивать числа в нужный диапазон.
|
// Если число выше диапазона, то оно станет 255 (самым высоким нужного диапазона)
// Если ниже то станет нулём (самым низким нужного диапазона).
// Если число находится в пределах, то оно останется тем же самым числом.
// lightLevel = constrain(lightLevel, 0, 255);
// Есть одно но. В схеме которую мы сделали не будет отражён весь диапазон от 0 до 1023.
// Диапазон будет гораздо меньше. Например уровень тьмы будет соответствовать 300, а самое светлое значение - 800.
// В таком случае светодиод никогда не будет полностью выключен или включен на максимум
// В приведённых ниже функциях этот баг поправлен. Не забудьте раскомментировать вторую, а первую закомментировать
ManualTune(); // функция для изменения диапазона вручную
//autoTune(); // в этой функции ардуинка всю работу сделает за нас
// В этих функциях, которые выше, мы подправим уровни яркости освещения
analogWrite(ledPin, lightLevel);
// То, что написано выше подаст на 9ый цифровой выход уровень освещённости на фоторезисторе
// Чтобы светодиод гас когда света попадает на фоторезистор меньше, а не так как сейчас - меньше света, сильнее горит,
// замените "lightLevel" на "255-lightLevel".
}
Void manualTune()
{
// Как я уже сказал выше, если запустить этот скетч без доп настройки
// светодиод будет загораться или гаснуть не до конца, даже в при полном отсутствии света на фоторезисторе.
// В функции мануальной настройки будем настраивать в ручную
// Настроим диапазон "from" в функции map().
// Попытаемся вручную сменить диапзон на меньший (от 300 до 800)
// Просто меняем 0, 1023 в страке ниже на что-то типа 300-800
lightLevel = map(lightLevel, 0, 1023, 0, 255); //!!!!!меняй сказал!!!!!!!!
|
lightLevel = constrain(lightLevel, 0, 255);
// теперь такой изменённый lightlevel попадёт на светодиод
}
Void autoTune()
{
// Функция автонастройки будет менять значения автоматически, это гораздо удобнее.
// Arduino будет отслеживать самое высокое и низкое значение освещённости, которое приходит из analogRead().
// В верху скетча, где мы задавали переменные, мы задали "low" = 1023
// Всё что мы получим из analogRead() ниже чем 1023, мы сохраним и подставим в "low".
// Тоесть значение у нас сместится до более оптимального.
if (lightLevel < low)
{
low = lightLevel;
}
// Тоже самое и с уровнем "high"
if (lightLevel > high)
{
high = lightLevel;
}
// Тут есть ещё один баг
// Чтобы светодиод не мигал на приделах полного включения и выключения мы добавим небольшое смещение
lightLevel = map(lightLevel, low+30, high-30, 0, 255);
lightLevel = constrain(lightLevel, 0, 255);
Заключение.
Краткие выводы по проделанной работе и возможных доработках системы.
Список литературы:
Приводим список источников (не менее трех), которые использовались в работе
Обратите внимание на оформление источников из интернета
Примеры оформления:
1. Жабина С.Г. Основы экономики, менеджмента и маркетинга в общественном питании / С.Г. Жабина. - М.: Академия, 2014. - 336 с.
2. Волков, М.В. Современная экономика: учебное пособие / М.В. Волков. - СПб.: Питер, 2014.- 225 с
3. Боков, В.К. Причины кризиса экономической модели США / В.К. Боков // РБК. -2014. - №4 (11). - С. 32-36.
4. Рекомендации по оформлению списка литературы [Электронный ресурс] / Всероссийский банк учебных материалов; ред. Марфунин Р.М.- Режим доступа: https://referatwork.ru, свободный. (Дата обращения: 16.02.2015 г.).
|