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öä.
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