Nupp ja Photoresistor

3.1. Katse Nuppude ja Slideswitch’i kasutamise võimalus

Nupp

Komponendid:

Seejärel tuleb loop() funktsioon, mis käivitub pidevalt, kui Arduino töötab. Selles funktsioonis loetakse nuppude olekud, et teada saada, kas need on vajutatud või mitte. Tähtis on märkida, et Arduino puhul loetakse nupp “alla vajutatuks”, kui selle olek on LOW. See on seotud nupu ühenduse viisiga (nupp on tavaliselt ühendatud HIGH-ga, ja kui see on alla vajutatud, ühendub see maaga, saades LOW oleku).

Järgmine tingimus ütleb: kui ainult üks nupp on vajutatud (kas esimene või teine), kuid mitte mõlemad korraga, siis LED süttib. Seda tingimust väljendab kood kahes osas: üks kontrollib, kas vähemalt üks nupp on vajutatud, teine aga kontrollib, et ei oleks vajutatud mõlemat nuppu korraga. Kui ei ole vajutatud ühtegi nuppu või on vajutatud mõlemat nuppu, siis LED kustub.

-----Kood-----

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

  }    	

  }

3.1.2.- Näidis- Slideswitch’i kasutamine

3.2. Katse Photoresistor

Projekti koostamiseks läheb vaja:

Ühendamine:

Ühendada kõigepealt maketeerimislaua ühte äärde sarnaselt järgneva joonisega fototakisti nii et üks jalg oleks ühendatud toite ning teine läbi maandusesse mineva takisti analoogsignaaliga. Nüüd lisada maketeerimislaua teise otsa, et LED-i valgus ei mõjutaks andurit.

-----Kood-----

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

}

Kood loeb valguse taseme väärtusi fotodiodilt (sensorilt), mis on ühendatud piniga 0, ja muudab selle väärtuse põhjal LED-i heledust, mis on ühendatud piniga 9.

  • ManualTune() funktsioon: See muudab sensori väärtuse vahemiku (300–800) pikslite heledusväärtuseks vahemikus 0 kuni 255. Kõrge valguse tase muudab LED-i heledamaks, madal valgus aga tumedamaks.
  • AutoTune() funktsioon: Säilitab sensori miinimum- ja maksimumväärtused (madalam ja kõrgem valguse tase), muutes nende alusel LED-i heleduse.

Kood reguleerib LED-i heledust vastavalt sellele, kui palju valgust sensor tajub, ja kuvab tulemused arvutimonitoril. Kood võib töötada ka “öölambi” režiimis, muutes LED-i heleduse vastavalt sellele, kuidas sensor tajub pimeduse taset.

Kui sensori tase on madal, on LED tumedam, kui tase on kõrge, siis LED on heledam.

link :

https://www.tinkercad.com/things/1T3R06kMMaJ-fabulous-bruticus


Öölamp – Projekti kokkuvõte


1. Valminud näidisülesanne

Antud projekti raames valmis mitmerežiimiline öölamp, mille valgusrežiimi saab valida potentsiomeetri pööramise teel. Süsteemis kasutatakse RGB LED-i, valgusandurit (fotoresistori ehk LDR) ja PWM-signaale. Iga režiim aktiveerib erinevat värvi valguse – punase, rohelise või sinise – ning nende heledus sõltub ümbritseva valguse intensiivsusest.

Fotoresistor mõõdab keskkonna valgustaset ning vastavalt sellele reguleeritakse LED-i heledust. Režiimide muutmine toimub sujuvalt potentsiomeetri abil, ilma et oleks vaja vajutada nuppu.


2. Uuritud Arduino funktsioonid

Projekti käigus tutvusin järgmiste Arduino funktsioonidega:

  • analogRead(pin) – loeb analoogandmeid (väärtus vahemikus 0–1023)
  • analogWrite(pin, value) – väljastab PWM signaali, mis võimaldab LED-i heledust muuta (väärtus vahemikus 0–255)
  • digitalWrite(pin, HIGH/LOW) – lülitab digitaalpordi sisse või välja
  • map(value, fromLow, fromHigh, toLow, toHigh) – teisendab väärtuse ühest vahemikust teise
  • constrain(x, a, b) – piirab väärtuse etteantud vahemikku

3. Tööprotsessi kirjeldus

Eesmärk oli ehitada öölamp, mis kohandub keskkonnatingimustega ning mille valgusrežiime saab juhtida potentsiomeetri abil. Lamp kasutab RGB LED-i, mis muudab värvi sõltuvalt potentsiomeetri asendist, ning heledus muutub vastavalt valgustakisti mõõdetud väärtusele. Süsteem on loodud Arduino Uno baasil ja testitud Tinkercad keskkonnas.


4. Kasutatud komponendid

Öölambi ehitamiseks olid vajalikud järgmised elektroonikakomponendid:

  • Arduino Uno mikrokontroller
  • RGB LED
  • Valgustundlik takisti (LDR)
  • Potentsiomeeter
  • 220Ω takistid
  • Ühenduskaablid
  • Katseplaat (breadboard)

5. Skeem

Tinkercad skeem:

https://www.tinkercad.com/things/dmhElNEhMC3-super-sango

6. Programm


const int potensiometr = 1;

int fototakisti = 0;   

int lightLevel, high = 0, low = 1023;

const int RED1 = 10;
const int BLUE1 = 9;
const int GREEN1 = 8;
 
int sensorValue = constrain(sensorValue, 10, 150);
int Value_new;
 
void setup()
{
  pinMode(RED1, OUTPUT);
  pinMode(BLUE1, OUTPUT);
  pinMode(GREEN1, OUTPUT);
}
void loop()
{
  digitalWrite(RED1, LOW);
  digitalWrite(BLUE1, LOW);
  digitalWrite(GREEN1, LOW);
  
  lightLevel = analogRead(fototakisti);
  manualTune();
  
  Value_new = analogRead(potensiometr);
  Value_new = map(Value_new,0,1023,0,3);
  
  if (Value_new == 2)
  {
    BLUE();
  }
  else if (Value_new == 1)
  {
    RED();
  }
  else if (Value_new == 3)
  {
    GREEN();
  }
  else
  {
    digitalWrite(RED1, LOW);
    digitalWrite(BLUE1, LOW); 
    digitalWrite(GREEN1, LOW);
  }
}
void manualTune()
{
  lightLevel = map(lightLevel, 300, 800, 0, 255); 
  lightLevel = constrain(lightLevel, 0, 255);
} 
void GREEN()
{
  digitalWrite(GREEN1, lightLevel);
}
void RED()
{
  digitalWrite(RED1, lightLevel);
}
void BLUE()
{
  digitalWrite(BLUE1, lightLevel); 
}

7. Video


Projekti töödemonstratsioon on kättesaadav järgmiselt videolingilt:


8. Rakendusvõimalused igapäevaelus


  • Automaatne öölamp magamistuppa, mis süttib pimedas
  • Lastele mõeldud öölamp, mis suurendab turvatunnet
  • Meeleolulamp, mille värvust saab muuta vastavalt tujule
  • Dekoratiivne valgusti elutuppa, mis reageerib ruumi valgustasemele