keskiviikko 7. joulukuuta 2016

Pitomuisti KY-011, KY-017 ja KY-002

Elohopeakytkin KY-017
Koska tuo heiluri on vielä kiinnitettynä tuohon pöydän reunaan, on hyvä laatia ohjelman pätkä, mikä eliminoi elohopeakytkimen pisaran pomppimisen. On neljä tapausta: 1. elohopeakytkimen tila otetaan muistiin heti ensimmäisestä kosketuksesta ja muisti puretaan viiveen jälkeen, 2. muisti asetetaan vasta viiveen jälkeen, mutta palautetaan välittömästi pisaran irrottua, 3. sekä muistin asetus että palautus viiveen jälkeen, 4. tärinäanturin signaali otetaan heti muistiin ja asetetaan pitempi viive.
Käytän tässä elohopeakytkintä KY-017 ja tärinäanturia KY-002 muistin tilan ilmaisuun kaksiväristä LEDiä KY-011. Kun muisti on ykkönen (1), palaa punainen ja kun nolla (0) niin vihreä. Pitomuistin tunnuksena käytän ilmaisua Kep_ . Se tulee sanasta Keep = pitää, säilyttää, varastoida, pysyä.
Tärinäanturi KY-002
     Tärinäanturi (KY-002) poikkeaa toiminnaltaan oleellisesti elohopeakytkimestä sekä myös useimmista muista kytkimistä. Siinä on kaksi sisäkkäistä vieteriä, joista sisempi heilahtaa herkästi kiinni ulompaan. Anturilla on ainoastaan yksi stabiili asento, eli nolla (0), siis kytkin on johtamaton. Siksi tärähdys pitää ottaa muistiin, mikä puretaan vasta viiveen jälkeen. Ohjelmassa d, jokainen tärähdys myös nollaa viiveen, joten viive alkaa aina alusta. Tärähdysten lukumäärää voisi myös tilastoida ja tallettaa. Tarpeet riippuvat tietysti sovelluksesta.

Tärinän vaikutuksesta kytkinosa vain hipaisee toista kohtiota ja tulee hetkellisesti johtavaksi. Nykyään saa näköjään kännykkään apsin, mikä voi varoittaa maanjäristyksestä. Niin herkkä tämä tärinäanturi tuskin on ainakaan täällä meillä, mutta reagoi jo 1cm pudotuksesta. Myös tiukka isku pöytään sai sen toimimaan.
Jos ilkeä naapuri (sellaisia ei tietenkään todellisuudessa ole!) jyskyttää oveen, niin tuonhan voi järjestää ottamaan kuva. Samoin murtautujien varalle. Keksittävissä on tietysti monenlaista käyttöä.
Yllä olevasta kaaviosta näkyy, että antureiden kytkentä poikkeaa toisitaan. Samoin poikkeaa toiminnan suunta. Kun elohopeakytkin (KY-017) on aktiivinen, antaa se nollajänniteen ja kytkimen ollessa auki noin 3,6V (eikä 5V). Kun katsoo kytkentää, niin huomaa, että +5V:in jännite kulkee LEDin kautta. Tuo jännitepudotus johtuu LEDin myötäsuuntaisesta jännitehäviöstä. Tuokin jännite (3,6V) on riittävän korkea sille, että Arduinon digitaalitulo tulkitsee sen ykköseksi (1 = true).
Tärinäanturin merkinnät ovat hiukan ristiriitaiset ( - merkittyyn napaan kytketään +5V). Anturin sisällä on valmiina 10kohm;in vastus digitaalitulon maadoitusta varten. Tämän anturin toiminta on positiivinen, eli ollessaan aktiivinen, se antaa digitaalituloon 5V:in jännitteen.
LEDien etuvastukset (331ohm) on integroitu kuvassa ruskeana näkyvään piiriin. Alla on määrittelyosa vain kerran ja varsinaiset toimintaosat (loopit) erikseen.

 
OHJELMA 27a
/***************************************
* Ohjelma 27 (a, b, c ja d)
* 06.12.2016
* Värähtelevän kytkimen pitomuisti
**************************************/

// MÄÄRITTELYT:
// Viivelaskuri
const int Con_Kierrokset = 100;
int Int_Kierrokset = 0;

// Lähdöt, tulo ja muuttujat
const int Con_LED_Pun = 3;
const int Con_LED_Vih = 4;
const int Con_Anturi = 2;
boolean Bol_Anturi = false;
boolean Kep_PitoMuisti = false;
// ASETUKSET:
void setup(){
Serial.begin(9600);
pinMode(Con_Anturi, INPUT);
pinMode(Con_LED_Pun, OUTPUT);
pinMode(Con_LED_Vih, OUTPUT);
}// Asetuksen loppu

//OHJELMA 27a PÄÄLOOPPI
void loop(){
Bol_Anturi = !digitalRead(Con_Anturi);

// Viive asetuksessa
if(Bol_Anturi == true && Kep_PitoMuisti == false){
Int_Kierrokset++;
}else{
Int_Kierrokset = 0;
} // Asetuksen viive loppu

if(Int_Kierrokset > Con_Kierrokset){
Int_Kierrokset = 0;
Kep_PitoMuisti = true ;}

if(Bol_Anturi == false){
Kep_PitoMuisti = false;}

digitalWrite(Con_LED_Vih, !Kep_PitoMuisti);
digitalWrite(Con_LED_Pun, Kep_PitoMuisti);

delay(1);
} // Pääohjelma LOPPU

OHJELMA 27b
//OHJELMA 27b PÄÄLOOPPI
void loop(){
Bol_Anturi = digitalRead(Con_Anturi);// HUOM! ei käänteinen

// Viive palautuksessa
if(Bol_Anturi == true && Kep_PitoMuisti == false){
Int_Kierrokset++;
}else{
Int_Kierrokset = 0;
} // Asetuksen viive loppu

if(Int_Kierrokset > Con_Kierrokset){
Int_Kierrokset = 0;
Kep_PitoMuisti = true ;}

if(Bol_Anturi == false){
Kep_PitoMuisti = false;}

// LEDejä ohjataan ristiin
digitalWrite(Con_LED_Vih, Kep_PitoMuisti);
digitalWrite(Con_LED_Pun, !Kep_PitoMuisti);

delay(1);
} // Pääohjelma LOPPU

OHJELMA 27c
//OHJELMA 27c PÄÄLOOPPI
void loop(){
Bol_Anturi = !digitalRead(Con_Anturi);

// Viive asetuksessa
if(Bol_Anturi == true && Kep_PitoMuisti == false){
Int_Kierrokset++;
if(Int_Kierrokset > Con_Kierrokset){
Int_Kierrokset = 0;
Kep_PitoMuisti = true ;}
} // Asetuksen viive loppu

// Viive palautuksessa
if(Bol_Anturi == false && Kep_PitoMuisti == true ){
Int_Kierrokset++;
if(Int_Kierrokset > Con_Kierrokset){
Int_Kierrokset = 0;
Kep_PitoMuisti = false;}
} // Palautuksen viive loppu

digitalWrite(Con_LED_Vih, !Kep_PitoMuisti);
digitalWrite(Con_LED_Pun, Kep_PitoMuisti);

delay(1);
} // Pääohjelma LOPPU

OHJELMA 27d
const int Con_Kierrokset = 2000;

//OHJELMA 27d PÄÄLOOPPI
void loop(){
Bol_Anturi = digitalRead(Con_Anturi);

// Pitomuistin asetus
if(Bol_Anturi == true && Kep_PitoMuisti == false){
Kep_PitoMuisti = true ;
Int_Kierrokset = 0;
} // Asetuksen loppu

// Pitomuistin palautus
Int_Kierrokset ++;
if(Int_Kierrokset > Con_Kierrokset){
Int_Kierrokset = 0;
Kep_PitoMuisti = false;}

// LEDien ohjaus
digitalWrite(Con_LED_Vih, !Kep_PitoMuisti);
digitalWrite(Con_LED_Pun, Kep_PitoMuisti);

delay(1);
} // Pääohjelma LOPPU


Ei kommentteja:

Lähetä kommentti