Инструменты пользователя

Перевод этой страницы:

Инструменты сайта


Боковая панель

Для чего нужен ОрбиКрафт

Подсистемы конструктора

Инструкции по работе с ОрбиКрафт

Уроки

Лабораторная оснастка

Знакомство с Arduino

Полезная нагрузка на базе Arduino

Обратная связь

Новости

arduino_s_07

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

7.1 Принцип работы фоторезистора

Фоторезистор - это полупроводниковый прибор, электрическое сопротивление которого меняется в зависимости от интенсивности падающего на него света. Чем интенсивней свет, тем меньше становится сопротивление фоторезистора.

Фоторезистор имеет два вывода: один подключается к питанию, второй через резистор к земле. В месте соединения вывода фоторезистора с резистором устанавливается провод для считывания его показаний. Номинал резистора от 1 до 10 кОм. В зависимости от величины резистора будет меняться диапазон показаний датчика.

На платформе tinkercad изменить освещенность резистора можно перемещая ползунок слева направо.

7.2 Считываем показания фоторезистора в монитор порта

7.2.1 Собираем схему с фоторезистором

7.2.2 Программа для считывания показаний фоторезистора в монитор порта

#define photores A0          //создаем переменную для фоторезистора
int light;                   //создаем переменную для хранения показаний фоторезистора
 
void setup(){
  pinMode(photores, INPUT);  //настраиваем пин, к которому подключен фоторезистор, как вход
  Serial.begin(9600);        //настраиваем работу с монитором порта
}
 
void loop(){
  light = analogRead(photores);    //считываем показания фоторезистора и сохраняем в переменную light
  Serial.print("Light = ");        //выводим в монитор порта слово "Light: "
  Serial.println(light);           //выводим в монитор порта значение переменной light и ждем полсекунды
  delay(500);
}

7.3 Автоматическое освещение

7.3.1 Собираем схему

7.3.2 Программа для автоматического включения освещения

#define photores A0    //создаем переменную для фоторезистора
#define led 3          //создаем переменную для светодиода
int light;             //создаем переменную для хранения показаний фоторезистора
int day = 400;         //создаем переменную для условия день-ночь(светло-темно)
 
void setup(){
  pinMode(photores, INPUT);  //настраиваем пин, к которому подключен фоторезистор, как вход
  pinMode(led, OUTPUT);      //настраиваем пин, к которому подключен светодиод, как выход
  Serial.begin(9600);        //настраиваем работу с монитором порта
}
 
void loop(){
  light = analogRead(photores);  //считываем показания фоторезистора и сохраняем в переменную light
  Serial.print("Light = ");
  Serial.println(light);         //выводим показания фоторезистора в монитор порта
  if(light<day){                 //если если текущая освещенность меньше 400, то включаем светодиод
    digitalWrite(led, HIGH);
  }
  else{                          //иначе светодиод выключен
    digitalWrite(led, LOW);
  }
  delay(100); //задержка 100 миллисекунд
}

7.4 Управляем скоростью сервомотора в зависимости от освещенности

7.4.1 Собираем схему

7.4.2 Программа для управления скоростью сервомотора в зависимости от освещенности

#include <Servo.h>        //подключаем библиотеку для работы с сервомотором
#define photores A0       //создаем переменную для фоторезистора
Servo myservo;            //объявляем сервомотор
int light;                //создаем переменную для хранения показаний фоторезистора
int msec;                 //создаем переменную, отвечающую за скорость движений сервомотора
                          //эта переменная определяет время задержки сервомотора в каждой позиции во время его движения
                          //чем больше значение переменной, тем медленнее вращается сервомотор
 
void setup(){
  pinMode(photores, INPUT);   //настраиваем пин, к которому подключен фоторезистор, как вход
  myservo.attach(2);          //настраиваем пин 2 как управляющий пин сервомотора
}
 
void loop(){
  for(int i=0; i<=180; i++){   //цикл для вращения сервомотора из 0 в 180
    myservo.write(i);
    delay(msec);
    checkLight();              //функция, проверяющая уровень освещенности
  }
  for(int i=180; i>=0; i--){   //цикл для вращения сервомотора из 180 в 0
    myservo.write(i);
    delay(msec);
    checkLight();              //функция, проверяющая уровень освещенности
  }
}
 
//функция считывает показания фоторезистора
//затем преобразует их во время задержки сервомотора в каждой позиции
void checkLight(){
  light = analogRead(photores);
  msec = map(light, 6, 679, 100, 5);
}

Задания

1. Соберите схему с двумя фоторезисторами, установленными под углом 90 градусов друг относительно друга. Напишите программу, которая после калибровки будет определять направление на источник света в диапазоне +-90 градусов с точностью 10 градусов.

2. Соберите схему с четырьмя фоторезисторами, установленными под углом 90 градусов друг относительно друга. Напишите программу, которая после калибровки будет определять направление на источник света в диапазоне +-180 градусов с точностью 15 градусов.

arduino_s_07.txt · Последние изменения: 2020/05/27 15:48 — golikov

Инструменты страницы