Тема 3: КНОПКА и ФОТОРЕЗИСТОР

Кнопка

Кнопка — это электронный компонент, который позволяет пользователю активировать или деактивировать устройство. Обычно она имеет небольшой размер и состоит из механической или электронной кнопки, которая реагирует на нажатие пользователя. Кнопки широко используются в различных электронных устройствах, включая компьютеры, игровые консоли, пульты дистанционного управления и системы умного дома.

Принцип работы кнопок обычно основан на соединении или размыкании контактов. Когда кнопку нажимают, создается электрическое соединение, позволяющее току проходить, и устройство активируется. Использование кнопок обеспечивает простой и интуитивно понятный контроль, предоставляя пользователю возможность быстро и легко управлять устройствами.

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

Фоторезистор (или фотосопротивление) — это электронный компонент, сопротивление которого изменяется в зависимости от интенсивности света. Он изготовлен из полупроводниковых материалов, которые реагируют на свет, изменяя свои электрические свойства. Фоторезисторы широко применяются в различных областях, включая управление освещением, солнечные панели, датчики света и другие электронные устройства.

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

1. Пример кнопки

Компоненты:

Схема:

Код:

const int button1Pin = 2;  //viik kunu on ühebdatud nupp1

const int button2Pin = 3; //viik kuhu on ühendatud nupp2

const int ledPin =  13;   

void setup()

{

  pinMode(button1Pin, INPUT); //algväärtuse nupu viigu sisendiks

  pinMode(button2Pin, INPUT); //algväärtuse nupu viigu sisendiks

  pinMode(ledPin, OUTPUT);   //algväärtuse LED viigu väljundiks
 

}

void loop()

{

  int button1State, button2State;  //nupu oleku muutujad

  button1State = digitalRead(button1Pin);// salvestame muutujasse nupu hetke väärtuse(HIGH või LOW)

  button2State = digitalRead(button2Pin);

  if (((button1State == LOW) || (button2State == LOW))   // kui nupu on alla vajutatud

      && !

      ((button1State == LOW) && (button2State == LOW))) // kui nupude on alla vajutatud

  {

    digitalWrite(ledPin, HIGH);  // lülitame LED sisse

  }

  else                          

  {

    digitalWrite(ledPin, LOW);  // lülitame LED välja

  }    	

  }


2. Пример использования Slideswitch (слайд-переключатель)

Компоненты:

Схема:

Код:

// C++ code
//
int swPin=4;
int ledPin=10;
int switchstate=0;
void setup()
{
pinMode (swPin, INPUT);
pinMode (ledPin, OUTPUT);
}

void loop()
{
switchstate=digitalRead(swPin);
if(switchstate==HIGH)
{
  digitalWrite(ledPin, HIGH);
}
else
{
  digitalWrite(ledPin, LOW)
}
}

3. Эксперимент с фоторезистором / Измерение света с помощью фоторезистора, светочувствительный LED

Компоненты:

Схема:

Код:

const int sensorPin = 0;

const int ledPin = 9;

int lightLevel, high = 0, low = 1023;

void setup()

{

  pinMode(ledPin, OUTPUT);

  Serial.begin(9600); // //Serial monitori seadistamine

}

void loop()

{

  // AnalogRead() kasutab väärtused vahemikus 0 (0 вольт) и 1023 (5 вольт).

  // AnalogWrite(),  kasutatakse, et LEDi sujuvalt sisselülitada 0(ei põle) kuni 255(põleb maksimalselt).

  lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse

  // Map() teisendab sisendi väärtused ühest vahemikust teisse. Näiteks, «from» 0-1023 «to» 0-255.

  // Constrain() saed muutujale kindlad piirväärtused.

  // Näiteks:  kui constrain() kohtub arvudega 1024, 1025, 1026.., siis ta teisendab need 1023, 1023, 1023..). Kui arvud vähem kui 0, siis teisendab need 0:. 

  // lightLevel = constrain(lightLevel, 0, 255);

  manualTune();  //

  //autoTune();  //

  analogWrite(ledPin, lightLevel);

  // Выражение выше, будет изменять яркость светодиода вместе с уровнем освещенности. Чтобы сделать наоборот, заменить в analogWrite(ledPin, lightLevel) «lightLevel» на «255-lightLevel». Теперь у нас получился ночник!

  Serial.print(lightLevel);     // prindime tulemused Serial Monitori (вывод данных с фоторезистора (0-1023))

  Serial.println(«»);          

  delay(1000);                

}

void manualTune()

{

  lightLevel = map(lightLevel, 300, 800, 0, 255); // kaardistame selle analoogväljundi vahemikku (будет от 300 темно, до 800 (светло)). 

  lightLevel = constrain(lightLevel, 0, 255);

} 

void autoTune()

{

  if (lightLevel < low)  

  {                      

    low = lightLevel;   

  }

  if (lightLevel > high)

  {

    high = lightLevel;

  }

  lightLevel = map(lightLevel, low+10, high-30, 0, 255);

  lightLevel = constrain(lightLevel, 0, 255);

}

Задание 3: Ночник

Компоненты:

9 проводов, 5 светодиодов, 1 фоторезистор, 1 выключатель, 6 резисторов

Схема:

Код:

const int swPin = 4;
const int sensorPin = 0;
const int ledPin1 = 8;
const int ledPin2 = 9;
const int ledPin3 = 10;
const int ledPin4 = 11;
const int ledPin5 = 12;

int switchstate = LOW;

int lightLevel, high = 0;

void setup()

{

  pinMode(swPin, INPUT);
  pinMode(ledPin1, OUTPUT);
  pinMode(ledPin2, OUTPUT);
  pinMode(ledPin3, OUTPUT);
  pinMode(ledPin4, OUTPUT);
  pinMode(ledPin5, OUTPUT);

  Serial.begin(9600); 

}

void loop(){

  switchstate = digitalRead(swPin);
    if (switchstate == HIGH) {



  lightLevel = analogRead(sensorPin); 

  lightLevel = map(lightLevel, 100, 1000, 0, 255);
  lightLevel = constrain(lightLevel, 0, 255); 

  analogWrite(ledPin1, lightLevel);
  analogWrite(ledPin2, lightLevel);
  analogWrite(ledPin3, lightLevel);
  analogWrite(ledPin4, lightLevel);
  analogWrite(ledPin5, lightLevel);

  Serial.print(lightLevel);

  Serial.println("");

  delay(100);

}
 else {
    digitalWrite(ledPin1, LOW);
    digitalWrite(ledPin2, LOW);
    digitalWrite(ledPin3, LOW);
    digitalWrite(ledPin4, LOW);
    digitalWrite(ledPin5, LOW);

  }}

НОВЫЕ ЗНАНИЯ ПОСЛЕ РАБОТЫ

Константы:

  1. swPin — Пин, к которому подключен выключатель (переключатель). Значение 4.
  2. sensorPin — Пин, к которому подключен датчик. Значение 0.
  3. ledPin1 — Пин, к которому подключен первый светодиод. Значение 8.
  4. ledPin2 — Пин, к которому подключен второй светодиод. Значение 9.
  5. ledPin3 — Пин, к которому подключен третий светодиод. Значение 10.
  6. ledPin4 — Пин, к которому подключен четвертый светодиод. Значение 11.
  7. ledPin5 — Пин, к которому подключен пятый светодиод. Значение 12.

Переменные:

  1. switchstate — Переменная, в которой хранится текущее состояние выключателя (LOW — низкий уровень, HIGH — высокий уровень).
  2. lightLevel — Переменная, в которой хранится текущий уровень освещенности, считанный с датчика.
  3. high — Переменная, которая не используется в коде.

Функции:

  1. setup() — Функция, вызываемая один раз при запуске программы Arduino. В этой функции инициализируются пины ввода/вывода и настраивается порт для последовательной связи (Serial).
  2. loop() — Функция, которая выполняется циклически после выполнения функции setup(). В этой функции считывается состояние выключателя, а затем в зависимости от этого состояния происходит либо регулировка яркости светодиодов в соответствии с уровнем освещенности, либо их выключение.
  1. Фоторезистор это электронный компонент, чувствительный к свету. Он изменяет свое сопротивление в зависимости от уровня освещенности. Фоторезисторы используются для автоматического регулирования освещенности, контроля света в камерах, систем безопасности, измерения уровня освещенности и в энергосберегающих системах.
const int sensorPin = A0; // Подключение фоторезистора к аналоговому входу A0

void setup() {
  Serial.begin(9600); // Настройка порта последовательной связи для вывода данных
}

void loop() {
  int lightLevel = analogRead(sensorPin); // Считывание уровня освещенности с фоторезистор
  Serial.println(lightLevel); // Вывод уровня освещенности в монитор последовательного порта
  delay(1000); // Задержка в 1 секунду между измерениями
}

2) Переключатель используется для открытия или закрытия электрической цепи, позволяя пользователю контролировать подачу электричества в устройствах или схемах.

const int switchPin = 2; // Пин, к которому подключен переключатель
const int ledPin = 9; // Пин, к которому подключен светодиод

void setup() {
  pinMode(switchPin, INPUT); // Установить пин переключателя как вход
  pinMode(ledPin, OUTPUT); // Установить пин светодиода как выход
}

void loop() {
  digitalWrite(ledPin, digitalRead(switchPin) == HIGH ? HIGH : LOW);
}

3) Светодиод (Light Emitting Diode, LED) — это полупроводниковое устройство, которое излучает свет при прохождении через него электрического тока в одном направлении. Он применяется в различных устройствах для индикации, подсветки, передачи данных и других целей благодаря своей эффективности, долговечности и низкому энергопотреблению.

const int switchPin = 2; // Пин, к которому подключен переключатель
const int ledPin = 9; // Пин, к которому подключен светодиод

void setup() {
  pinMode(switchPin, INPUT); // Установить пин переключателя как вход
  pinMode(ledPin, OUTPUT); // Установить пин светодиода как выход
}

void loop() {
  int switchState = digitalRead(switchPin); // Считать состояние переключателя
  digitalWrite(ledPin, switchState == HIGH ? HIGH : LOW);
}

4) Кнопка — устройство для открытия или закрытия электрической цепи при нажатии.

const int buttonPin = 2; // Пин, к которому подключена кнопка
const int ledPin = 9; // Пин, к которому подключен светодиод

void setup() {
  pinMode(buttonPin, INPUT); // Установить пин кнопки как вход
  pinMode(ledPin, OUTPUT); // Установить пин светодиода как выход
}

void loop() {
  int buttonState = digitalRead(buttonPin); // Считать состояние кнопки

  // Если кнопка нажата (замкнута), включить светодиод
  if (buttonState == HIGH) {
    digitalWrite(ledPin, HIGH);
  } else {
    digitalWrite(ledPin, LOW);
  }
}