Разработка схемы устройства




Создаем схему в программе 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 г.).



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: