User Tools

Site Tools


projektas_nr.6

Skirtumai

Čia matote skirtumus tarp pasirinktos versijos ir esamo dokumento.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
projektas_nr.6 [2015/10/25 18:02]
193.219.47.27
projektas_nr.6 [2015/12/02 14:11] (esamas)
simonas
Linija 1: Linija 1:
 ====== Projektas Nr. 6. Šviesa – Fotorezistoriai ====== ====== 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**
 +
 +{{:​ardu_pro61.jpg?​300|}}
 +
 +**Grandinės šablonas**
 + ​  ​
 +{{:​ardu_pro62.jpg?​300|}}
 +
 +**Surinkta grandinė**
 + 
 +{{:​ardu_pro63.jpg?​600|}}
 +
 +**Šaltiniai**
 +[[http://​ardx.org/​BBLS09|Maketo plokštės šablonas]]
 +
 +[[http://​ardx.org/​VIDE09|Surinkimo video]]
 +
 +
 +**Programos kodas** (nereikia visko spausdinti)
 +Atsisiųsti programos kodą: [[http://​ardx.org/​CODE09|]] ​
 +(nukopijuokite tekstą ir įklijuokite tuščiame ​ „Arduino“ IDE lange) ​
 +<​code>​
 +/*
 + * 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
 +}
 +</​code>​
 +
 +**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ę: ​
 +
 +<​code>​ analogWrite(ledPin,​ lightLevel);​ </​code>​ Į tokią: ​
 +<​code>​ analogWrite(ledPin,​ 255 - lightLevel);​ </​code>​
 +  ​
 +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ą:
 +<​code> ​
 +void loop(){ ​
 +  int threshold = 300; 
 +  if(analogRead(lightPin) > threshold){ ​
 +    digitalWrite(ledPin,​ HIGH); ​
 +  }else{ ​
 +    digitalWrite(ledPin,​ LOW); 
 +  } 
 +} </​code>​
 +  ​
 +**Š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 ([[projektas_nr.8|Servo pamoka]]. Atsidarykime valdymo svirtelės (Knob) pavyzdinę programą: <​code>​ File > Examples > Library-Servo > Knob </​code>​ Į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 ​
 +<​code>​
 +val = map(val, 0, 1023, 0, 179);</​code>​.
 +Daugiau instrukcijų šia tema rasite [[http://​arduino.cc/​en/​Reference/​Map|čia]]. ​
  
  
projektas_nr.6.1445788926.txt.gz · Keista: 2015/10/25 18:02 vartotojo 193.219.47.27