Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ru:examples:sensor:photoresistor [2010/12/16 09:02] – создано eduardtlmkru:examples:sensor:photoresistor [Unknown date] (current) – removed - external edit (Unknown date) 127.0.0.1
Line 1: Line 1:
-====== Фоторезистор ====== 
- 
-//Необходимые знания: [HW] [[et:hardware:homelab:sensor]], [HW] [[et:hardware:homelab:lcd]], [ELC] [[et:electronics:voltage_divider]], \\ [AVR] [[et:avr:adc]], [LIB] [[et:software:homelab:library:adc]], [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]], \\ [PRT] [[et:examples:setup:windows]]// 
- 
-===== Теория ===== 
- 
-[{{  :examples:sensor:photoresistor:sensor_photoresistor.jpg?150|Фоторезистор}}] 
-[{{  :examples:sensor:photoresistor:sensor_photoresistor_designator.png?150|Электрическое обозначение фоторезистора}}] 
- 
-Фоторезистор – это датчик, электрическое сопротивление которого меняется в зависимости от интенсивности падающего на него света. Чем интенсивней свет, тем больше создается свободных носителей зарядов и тем меньше становится сопротивление элемента. Два внешних металлических контакта фоторезистора идут через керамический материал основания к светочувствительной пленке, которая по своей геометрии и свойству материала определяет электрические свойства сопротивления. Так как фоточувствительный материал по природе с большим сопротивлением, то между электродами с тонкой извилистой дорожкой, при средней интенсивности света, получается низкое общее сопротивление элемента. Так же как и человеческий глаз, фоторезистор чувствителен к определенному диапазону длины волны света. При выборе фотоэлемента приходится с этим считаться, поскольку в противном случае он может совсем не отреагировать на источник света, используемый в приложении. Здесь приведены длины волн видимого света, упрощенно разделенные по цвету. 
- 
-^ Цвет            ^ Диапазон длины волны (nm)  ^ 
-| Фиолетовый      | 400 – 450                  | 
-| Синий           | 450 – 500                  | 
-| Зеленый         | 500 – 570                  | 
-| Желтый          | 570 – 590                  | 
-| Оранжевый       | 590 – 610                  | 
-| Красный         | 610 – 700                  | 
- 
-У фоторезисторов обязательно определен и диапазон температуры. Если использовать датчик при разных температурах, то следует обязательно ввести уточняющие преобразования, т.к. свойство сопротивления зависит от внешней температуры. 
- 
-Для характеристики интенсивности света используют физическую величину освещённость (обозначение E), что показывает количество светового потока, достигающего какой-либо поверхности. Для измерения единицы имеется люкс (лк), где 1 люкс означает, что на поверхность размером 1 m<sup>2</sup> равномерно падает световой поток в 1 люмен (лм). В реальной жизни свет практически никогда не падает на (жилую) поверхность равномерно и поэтому освещённость получается больше в среднем значении. Для сравнения приведены некоторые примеры освещённости: 
- 
-^ Окружающая среда     ^ Освещённость (lx) ^ 
-| Полная луна             | 0,1          |  
-| Сумерки             | 1            |  
-| Аудитория             | 10            
-| Учебный класс             | 30            
-| Рассвет или закат         | 400          |  
-| Операционный зал больницы | 500 - 1000    
-| Прямой солнечный свет     | 10000        |  
- 
-===== Практика ===== 
- 
-Плата модуля «Датчики» Домашней Лаборатории снабжена фоторезистором VT935G. Один его вывод соединен с питанием +5 V и другой с каналом 1 (вывод PF1) аналогово-дигитального преобразователя микроконтроллера. С тем же выводом микроконтроллера и землей соединен и обычный 10 kΩ резистор, который вместе с фоторезистором образует делитель напряжения. Так как электрическое сопротивление фоторезистора уменьшается с увеличением интенсивности падающего на него света, то измеряемое напряжение на выводе микроконтроллера возрастает с увеличением интенсивности света. Важно учитывать, что используемый в Домашней Лаборатории фоторезистор реагирует более интенсивно на желтый и оранжевый свет. 
- 
-Датчик VT935G не является измерительным устройством для конкретных целей, а служит больше для обозначения общих световых условий – к примеру, горит ли в помещении лампа или нет. Поэтому нужно просто измерить сопротивление датчика в полутемной комнате, записать это в программу и с помощью этого сравнить измерения – светлее или темнее. 
- 
-Данное задание немного сложнее, т.к. освещенность ищется в люксах. Для создания этого используется приблизительная формула и числа с плавающей запятой. Числа с плавающей запятой в языке Си есть //float// и //double// типа, которыми можно представлять дробные числа. Их недостатком является довольно большая потребность в ресурсах. В компьютерах для их вычисления имеется специальное аппаратное обеспечение, для 8-битного микроконтроллера AVR вычисления делаются в программном обеспечение, что занимает довольно много программной памяти и времени. Если недостатки неважны, то числа с плавающей запятой стоит использовать. 
- 
-[{{  :examples:sensor:photoresistor:sensor_photoresistor_vt935g_slope.png?260|Взаимосвязь между освещенностью (E) и электрическим сопротивлением (R) VT935G}}] 
- 
-О взаимосвязи между освещенностью и электрическим сопротивлением фоторезистора дается приблизительная формула в спецификации датчика. Как видно на выше приведенном графике, на логарифмической шкале освещенность и сопротивление находятся приблизительно в линеарной зависимости и образуют прямое уравнение, потому что применяется следующее преобразование: 
- 
-log(a/b) = log(a) - log(b) 
- 
-Связь характирезует γ фактор (ровный подъем), который у датчика VT935G равен 0,9. Известны так же данные одной точки линии: 18,5 kΩ сопротивление (R<sub>A</sub>) 1при 10 lx освещенности (E<sub>A</sub>). Таким образом, имеются координаты 1 точки и ровный подъем и для вычисления любой другой точки хватит только одного координата. Если измерить сопротивление датчика (R<sub>B</sub>), то можно из уравнения линии вычислить освещенность  (E<sub>B</sub>) падающую на датчик. Выразим уравнение линии E<sub>B</sub>: 
- 
-log(E<sub>B</sub>) = log(R<sub>A</sub>/R<sub>B</sub>) / γ + log(E<sub>A</sub>) \\ \\ 
-E<sub>B</sub> = 10<sup>log(R<sub>A</sub>/R<sub>B</sub>) / γ + log(E<sub>A</sub>)</sup> 
- 
-Таким образом, имеется формула для вычисления освещения, если сопротивление известно. Сопротивление напрямую микроконтроллером измерить нельзя – для этого фоторезистор находится в делителе напряжения, выходное напряжение которого переводит аналогово-дигитальный преобразователь в конкретные числа (ADC). Для нахождения сопротивления, в первую очередь придется вычислить из значения ADC выходное напряжение (U<sub>2</sub>), делителя напряжения, учитывая и сравниваемое напряжение (U<sub>ref</sub>) преобразователя. Формула следующая: 
- 
-U<sub>2</sub> = U<sub>ref</sub> ⋅ (ADC / 1024) 
- 
-Из формулы делителя напряжения (смотри главу делителя напряжения) можно найти в схеме верхнего фоторезистора сопротивление (R<sub>1</sub>): 
- 
-R<sub>1</sub> = (R<sub>2</sub> ⋅ U<sub>1</sub>) / U<sub>2</sub> - R<sub>2</sub> 
- 
-Далее при вычислении напряжения и сопротивления известные факторы заменяются значениями и нижние индексы опущены: 
- 
-U = 5 ⋅ (ADC / 1024) \\ \\ 
-R = (10 ⋅ 5) / U - 10 \\ \\ 
- 
-Для нахождения освещенности можно сделать упрощающие переводы: 
- 
-E = 10<sup>log(18,5/R) / 0.9 + 1</sup> = 10<sup>log(18,5/R) ⋅ 10/9</sup> ⋅ 10<sup>1</sup> = \\ \\ 
-= 10<sup>log18,5 ⋅ 10/9 - logR ⋅ 10/9</sup> ⋅ 10 = (10<sup>log18,5 ⋅ 10/9</sup> / 10<sup>logR ⋅ 10/9</sup>) ⋅ 10 = \\ \\ 
-= (18,5<sup>10/9</sup> / R<sup>10/9</sup>) ⋅ 10 = 18,5<sup>10/9</sup> ⋅ 10 ⋅ R<sup>-10/9</sup> \\ 
- 
-Вычислив постоянную находящуюся перед переменной R, остается формула в виде: 
- 
-E = 255,84 ⋅ R<sup>-10/9</sup> 
- 
-С помощью этих формул можно использовать только фоторезистор, находящийся на плате модуля «Датчики» Домашней Лаборатории. При использовании схемы с другими компонентами придется изменить в формулах соответствующие числовые значения. Далее приведен исходный код примера программы, который осуществляет измерение с ADC, вычисление и отображение освещенности на LCD экране. Но еще перед компиляцией программы следует в проекте сделать настройки для использования чисел с плавающей запятой. Для этого имеется краткое руководство в главе установки программного обеспечения. 
- 
-В примере программы переменные напряжения, сопротивления и освещенности обозначаются числом с плавающей запятой типа //double//. Числа, которые используются в действии с плавающей запятой, должны всегда содержать число после запятой (на языке Си точки), этим числом может быть и ноль, потому что в таком случае компилятор понимает их правильно. С помощью //sprintf// при переводе чисел с плавающей запятой в текст нужно использовать формат “%f“, который можно дополнять целыми и дробными числами, к примеру “%3.2“, что отображает всегда 3 полных числа и 2 числа после запятой. 
-<code c> 
-// 
-// Пример программы фоторезистора модуля «Датчики» Домашней Лаборатории. 
-// На LCD экране отображается приблизительная освещенность в люксах. 
-// 
-#include <stdio.h>  
-#include <math.h> 
-#include <homelab/module/lcd_alpha.h> 
-#include <homelab/adc.h> 
-#include <homelab/delay.h> 
- 
-// 
-// Основная программа 
-// 
-int main(void) 
- 
- char text[16];   
- unsigned short adc_value; 
- double voltage, resistance, illuminance; 
- 
- // Настройка LCD экрана 
- lcd_alpha_init(LCD_ALPHA_DISP_ON);  
- 
- // Очистка LCD экрана 
- lcd_alpha_clear(); 
- 
- // Название программы 
- lcd_alpha_write_string("Люксметр"); 
- 
- // Настройка ADC преобразователя 
- adc_init(ADC_REF_AVCC, ADC_PRESCALE_8);  
- 
- // Бесконечный цикл 
- while (true) 
- { 
- // Считывание осредненного значения фоторезистора 
- adc_value = adc_get_average_value(1, 10); 
- 
- // Расчет напряжения во входе ADC 
- voltage = 5.0 * ((double)adc_value / 1024.0); 
- 
- // Измерение сопротивления фоторезистора в делителе напряжения 
- resistance = (10.0 * 5.0) / voltage - 10.0; 
- 
- // Вычисление освещенности в люксах  
- illuminance = 255.84 * pow(resistance, -10/9); 
- 
- // Перевод освещенности в текст  
- sprintf(text, "%0.1f lux   ", illuminance);  
- 
- // Отображение показания на LCD 
- lcd_alpha_goto_xy(0, 1); 
- lcd_alpha_write_string(text); 
- 
- // Задержка 500 мс 
- sw_delay_ms(500); 
- } 
-} 
-</code> 
  
ru/examples/sensor/photoresistor.1292482933.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0