sunnuntai 17. huhtikuuta 2016

Mittaus

Valovastus ja valo LED ovat vastakkain ”suojattuna” hiukan ympäristön valolta. Ensimmäisessä mittauksessa lukema nousi lähelle tuhatta jo pienilläkin, muutaman prosentin valo-ohjausarvoilla. Siksi LDR (ohjataan analogisesti PWM) piti sulkea pahvin sisään ja puhkaista vain pieni valoaukko. Jokainen painikkeen painallus kasvatti lähtöarvoa 25:dellä eli noin 10 %. Alla mittaustulokset:

Arvo %        0        10        20        30        40        50        60        70        80        90       100
Ohjaus         0        25        50        75       100      125      150      175      200      225       250
AnaTulo      55      435      548      612       625      655      670      690      715      733       750

Oheisesta pylväsdiagrammista voi havaita, että 30% yläpuolella ohjaus- ja mittausarvot kasvavat melko lineaarisesti. 
Kytkennässä on paljon samaa edellisen kanssa, mutta jotakin on jäänyt pois ja jotakin on tullut lisää. Yksi ero on se, että lamppu (LED) tähtää nyt suoraan valovastukseen (LDR) ja analogiatulo ei mittaa suoraan valovastuksen muodostamaa jännitettä, vaan välillä on RC-suodin. Koska valovastuksen kuormasta lähtee melko suuri (100 kohm) vastus elektrolyyttikondensaattoriin, ovat muutokset analogiatulossa hitaampia kuin LDR:n navassa. 


Kuvat puhukoot puolestaan. Elekrolyytikondensaattori, harmaa komponentti pahvitötterön vieressä, melko keskellä koelevyä, näkyy kokonaiskuvan alaosassa. Toisessa kuvassa LDR on suojattu pahvikääröön ja valoreikä näkyy vaaleampana.


Ohjelma 13
/***************************************
 *  Ohjelma 13
 *  19.04.2016
 *  Mittaus ja muunnos
 **************************************/

// MÄÄRITTELYT:
// Kellon määrittely
unsigned long Ulo_MilliSek = 0;
unsigned long Ulo_UusiMilliSek = 0;
const long CoL_EroSekunti = 999;
int Int_Sekunti = 0;
boolean Bol_Tulosta = true; // Tulostusta ohjataan kellolla

// Muutamia perusmäärityksiä
const int Con_LDRTulo = 0;
int Int_LDRTulo = 0;
const int Con_Painike = 2;
boolean Bol_PainikeTila = false;
const int Con_PainikeViive = 3;
int Int_PainikeViive = 0;
int Seq_Painike = 1;
const int Con_Valo = 3;
int Int_Ohjaus = 0;

// ASETUKSET:
void setup(){                 
 Serial.begin(9600);         
 //while (!Serial) { ; } // Odottaa sarjaportin kytkeytymistä
pinMode(Con_Painike, INPUT);
pinMode(Con_Valo, OUTPUT);
}// Asetuksen loppu

// PÄÄLOOPPI Varsinainen suoritusosa. Jatkuva suoritus
void loop(){
// Sisäisen kellon käyttö
Ulo_MilliSek = millis();
  if(Ulo_MilliSek - Ulo_UusiMilliSek > CoL_EroSekunti){
    Ulo_UusiMilliSek = Ulo_MilliSek;
    Int_Sekunti++;
    if (Bol_Tulosta == true){Fun_Tulostus();}
  }
 
// Päivitetään tulot ja lähdöt
Int_LDRTulo = analogRead(Con_LDRTulo);
Bol_PainikeTila = digitalRead(Con_Painike);
Int_Ohjaus = constrain(Int_Ohjaus, 0, 255);
analogWrite(Con_Valo, Int_Ohjaus);

// KOSKETTIMEN-tilan käsittely, nouseva reuna
switch (Seq_Painike) {
  case 1:
    if (Bol_PainikeTila == true){
      Int_PainikeViive ++;
        if (Int_PainikeViive > Con_PainikeViive){
          Int_Ohjaus = Int_Ohjaus + 25;
          Int_PainikeViive = 0;
          Seq_Painike = 2;
        }
    }
    break;
  case 2:
    if (Bol_PainikeTila == false){
          Seq_Painike = 1;
        }
    break;
}
 delay(1);
} // Pääohjelma LOPPU

// FUNKTIOT
void Fun_Tulostus(){
//Serial.print("Teksti :");  Serial.println(Muuttuja);
Serial.print("Ohjausarvo :");  Serial.println(Int_Ohjaus);
Serial.print("LDR lukema :");  Serial.println(Int_LDRTulo);
 }

Ei kommentteja:

Lähetä kommentti