Praktika 3: Nupp ja Photoresistor

Sisukord:

  1. Katse 3.1
  2. Katse 3.2
  3. Katse 3.3
  4. Katse 3.4 (Ülesanne 3.2 Valgusfoor öö ja päeva režiimides)

Katse 3.1

Kirjeldus:

Projekt, kus LED-e juhitakse nuppudega.

Programm:

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
  }    	
}

Kuidas programm töötab:

Programm kontrollib kahe nupu olekut ning vastavalt nende seisule juhib LEDi sisse või välja. LED põleb ainult siis, kui vajutatud on täpselt üks nupp
Kui mõlemad nupud on vajutatud või mõlemad vabad, LED ei põle
Programm kontrollib kahe nupu olekut ning vastavalt nende seisule juhib LEDi sisse või välja. LED põleb ainult siis, kui vajutatud on täpselt üks nupp
Kui mõlemad nupud on vajutatud või mõlemad vabad, LED ei põle

Katse 3.2

Kirjeldus:

Projekt, kus LED-i lülitatakse lüliti abil (switch)

Programm:

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);
  }
}

Kuidas programm töötab:

Programm loeb lüliti olekut ja juhib LEDi vastavalt sellele. Kui lüliti on sisse lülitatud (HIGH), süttib LED. Kui lüliti on välja lülitatud (LOW), kustub LED.

Katse 3.3

Kirjeldus:

Projekt, kus LED-i heledust muudetakse fotoresistori poolt loetava valguse heleduse suhtes.

Programm:

const int sensorPin = A0;
const int ledPin = 9;
int lightLevel, high = 0, low = 1023; 

void setup()
{
  pinMode(ledPin, OUTPUT);
  pinMode(sensorPin, INPUT);
  Serial.begin(9600); // //Serial monitori seadistamine
}

void loop()
{
  lightLevel = analogRead(sensorPin); //loeme mõõdetud analoogväärtuse
  
  manualTune();
  //autoTune();
  analogWrite(ledPin, lightLevel); 
  
  Serial.print(lightLevel);
  Serial.println("");          
  delay(1000);           
}

void manualTune()
{
  lightLevel = map(lightLevel, 300, 800, 0, 255);
  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);
}

Kuidas programm töötab:

Programm loeb sensori väärtust ja muudab selle põhjal LEDi heledust. Iga sekundi järel prinditakse sensori väärtus serial monitorisse.
Funktsioon autoTune() muudaks LEDi heledust vastavalt kõige madalamale ja kõrgeimale väärtusele, aga seda ei kasutata.

Katse 3.4 (Ülesanne 3.2 Valgusfoor öö ja päeva režiimides)

Töö kirjeldus:
Spetsiaalse mooduliga valgusfoor, millel on heleduse näit režiimi (öö/päev) seadistamiseks.

Töö protsess:
Programm loeb fotoresistori väärtust, et teha kindlaks, kas on päev või öö. Kui heledustase on alla 750, lülitub programm sisse öörežiimi. Kui heledustase on kõrgem, lülitub programm päevarežiimile.

Kasutatud komponenid:
Arduino UNO plaat (1tk)
Arendusplaat (1tk)
Juhtmed (9tk)
Takisti (1tk, 10 kΩ)
Liiklusfoori moodul (punane, kollane, roheline LED) (1tk)
Fotoristor (1tk)

Fotoristor rakendamine:
Fotoristoreid kasutatakse valgustuse automaatseks juhtimiseks, näiteks tänavavalgustites, aiavalgustites või ekraanide heleduse reguleerimiseks vastavalt valgustingimustele.

Skeem:

Programm:

const int RED_PIN = 13;
const int YELLOW_PIN = 12;
const int GREEN_PIN = 11;
const int SENSOR_PIN = A0;

const int LIGHT_LEVEL_NIGHT = 750;

int lightLevel = 0;

void setup() 
{
  pinMode(RED_PIN, OUTPUT);
  pinMode(YELLOW_PIN, OUTPUT);
  pinMode(GREEN_PIN, OUTPUT);
  pinMode(SENSOR_PIN, INPUT);
  Serial.begin(9600);
}

void checkPhotoresistor()
{
	lightLevel = analogRead(SENSOR_PIN);
	Serial.print("lightLevel: ");
	Serial.println(lightLevel);
}

void checkSensors()
{
	checkPhotoresistor();
}

void loop() 
{
	checkSensors();

	if (lightLevel < LIGHT_LEVEL_NIGHT) 
	{
		night();
	} 
	else 
	{
		day();
	}
}

void day() 
{
  digitalWrite(RED_PIN, HIGH);
  digitalWrite(YELLOW_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  delay(5000);
  checkSensors();
  
  digitalWrite(YELLOW_PIN, HIGH);
  delay(1000);
  checkSensors();
  
  digitalWrite(RED_PIN, LOW);
  digitalWrite(YELLOW_PIN, LOW);
  digitalWrite(GREEN_PIN, HIGH);
  delay(5000);
  checkSensors();
  
  for(int i = 0; i < 3; i++) 
  {
    digitalWrite(GREEN_PIN, LOW);
    delay(500);
    checkSensors();
    digitalWrite(GREEN_PIN, HIGH);
    delay(500);
    checkSensors();
  }
  
  digitalWrite(GREEN_PIN, LOW);
  digitalWrite(YELLOW_PIN, HIGH);
  delay(1000);
}

void night() 
{
  digitalWrite(RED_PIN, LOW);
  digitalWrite(GREEN_PIN, LOW);
  
  digitalWrite(YELLOW_PIN, HIGH);
  delay(500);
  checkSensors();
  digitalWrite(YELLOW_PIN, LOW);
  delay(500);
}

Video:

–> LINK <–

Uued funktsioonid:

day() – juhib LED-e päeva ajal, süttides punase, kollase ja rohelise järjestuses.

night() – süttib ainult kollane LED öösel, mis vilgub.

checkPhotoresistor() – loeb fotoristori väärtuse ja kuvab selle.

checkSensors() – kutsub üles checkPhotoresistor() valgustingimuste jälgimiseks.

Täiesti uusi funktsioone ei ole.