User Tools

Site Tools


projektas_nr.6

Projektas Nr. 6. Šviesa – Fotorezistoriai

Ką darysime? Potenciometras yra puikus įvesties įrankis žmogaus valdomuose bandymuose. Tačiau ką naudosime aplinkos valdomame bandyme? Vietoje pasukimu valdomos varžos (potenciometro) naudosime šviesa valdomą varžą (fotorezistorių). „Arduino“ tiesiogiai nejaučia varžos, tačiau jaučia įtampą, taigi reiks nustatyti įtampos daliklį http://ardx.org/VODI. Tiksli įtampa jutiklio kontakte yra apskaičiuojama, bet mūsų projektui (šviesos kiekio matavimui) galime pažaisti su reikšmėmis ir pasižiūrėti, kas mums labiausiai tiks. Žemos įtampos pasireikš, kai sensorius gerai apšviestas, o aukštos įtampos susidarys esant mažesniam apšvietimui.

Grandinės dalys

  • CIRC-09 Maketo plokštės šablonas x1
  • 2 kištukų kontaktas
  • Fotorezistorius x1
  • Laidai x3
  • 10k rezistorius (Rudas-Juodas-Oranžinis) x1
  • 560 rezistorius (Žalias-Mėlynas-Rudas) x1
  • Žalias šviesos diodas x1

Principinė schema

Grandinės šablonas

Surinkta grandinė

Šaltiniai Maketo plokštės šablonas

Surinkimo video

Programos kodas (nereikia visko spausdinti) Atsisiųsti programos kodą: http://ardx.org/CODE09 (nukopijuokite tekstą ir įklijuokite tuščiame „Arduino“ IDE lange)

/*
 * A simple programme that will change the intensity of
 * an LED based  * on the amount of light incident on 
 * the photo resistor.
 * 
 */

//PhotoResistor Pin
int lightPin = 0; //the analog pin the photoresistor is 
                  //connected to
                  //the photoresistor is not calibrated to any units so
                  //this is simply a raw sensor value (relative light)
//LED Pin
int ledPin = 9;   //the pin the LED is connected to
                  //we are controlling brightness so 
                  //we use one of the PWM (pulse width
                  // modulation pins)
void setup()
{
  pinMode(ledPin, OUTPUT); //sets the led pin to output
}
 /*
 * loop() - this function will 
start after setup 
 * finishes and then repeat
 */
void loop()
{
 int lightLevel = analogRead(lightPin); //Read the
                                        // lightlevel
 lightLevel = map(lightLevel, 0, 900, 0, 255); 
         //adjust the value 0 to 900 to
         //span 0 to 255



 lightLevel = constrain(lightLevel, 0, 255);//make sure the 
                                           //value is between 
                                           //0 and 255
 analogWrite(ledPin, lightLevel);  //write the value
}

Neveikia? (trys dalykai kuriuos galime padaryti)

Šviesos diodas nešviečia - nuolatinė daroma klaida. Kad tik kas nors pagamintų LED diodą, šviečiantį prijungus bet kuria puse… Apsukite diodą priešingai.

Jis nereaguoja į šviesos kiekio pakitimus - kadangi laidai aplink fotorezistorių arti vienas kito, juos lengva supainioti. Dar kartą įsitikinkite, kad viskas sujungta teisingai.

Vis dar neveikia? - Kambarys gali būti per šviesus arba per tamsus. Pabandykite pajunginėti šviesas, galbūt padės. Jei turite, pasišvieskite žibintuvėliu.

Patobulinkime?

Atvirkščias atsakas: Jeigu norite atvirkščio atsako į šviesos pokyčius, pakeiskime kodo eilutę:

 analogWrite(ledPin, lightLevel); 

Į tokią:

 analogWrite(ledPin, 255 - lightLevel); 

Atsisiųskite į Arduino plokštę ir išbandykite.

Naktinis apšvietimas: Vietoje to, kad LED ryškumas kistų nuo šviesos, pabandykime jį įjungti ar išjungti ties pasirinkta slenkstine verte. pakeiskime loop() kodą:

 
void loop(){ 
  int threshold = 300; 
  if(analogRead(lightPin) > threshold){ 
    digitalWrite(ledPin, HIGH); 
  }else{ 
    digitalWrite(ledPin, LOW); 
  } 
} 

Šviesa kontroliuoja servo variklį: Išbandykime savo naujus šviesos aptikimo įgūdžius valdydami servo motorą (ir tuo pačiu šiek tiek pažaisdami su Arduino kodu). Prijunkite servą prie kontakto 9 (Servo pamoka. Atsidarykime valdymo svirtelės (Knob) pavyzdinę programą:

 File > Examples > Library-Servo > Knob 

Įveskite programėlės kodą į savo Arduino plokštę ir išbandykite nepakeisto kodo veikimą.

Išbandykime visas servo galimybes: Pastebėsite, kad servo motoras veikia tik tam tikroje dalyje savo pilno diapazono. Su mūsų naudojama įtampos dalijimo grandine analoginiame kontakte 0 įtampa nebus intervale nuo 0 iki 5 voltų, o svyruos tarp dviejų mažesnių verčių (jos priklausys nuo jūsų naudojamos įrangos). Norėdami tai ištaisyti, pabandykite pakeitinėti reikšmes eilutėje

val = map(val, 0, 1023, 0, 179);

. Daugiau instrukcijų šia tema rasite čia.

Kitas projektas. Matuosime temperatūrą davikliu TMP36

Atgal į projektus

projektas_nr.6.txt · Keista: 2015/12/02 12:11 vartotojo simonas