Vasemmalta: laser, mikki, "sireeni" |
Tässä
jaksossa kohteena on kolme moduulia: 1. Äänianturi (KY-038), missä
mikrofonin signaali vahvistetaan ja siirrtetään lähtöön sekä
analogisena että bibäärisignaalina (viime mainittua en testannut),
2. pietsoelementtisummeri (KY-006), mitä voidaan ohjata eri
korkuisilla äänisignaaleilla (PWM-lähtö. Pinnit D3 ja D11 ovat
tone-käskylle mahdollisia), sekä 3. laser-moduuli (KY-008),
mikä lähettää punaista koherenttia valoa. Viimeksi mainitussa
liitosmerkinnät olivat väärin päin. Oheisessa kaaviossa
toimivalla tavalla korjattuna. (Moduulissa siis Arduinon lähtö (+)
kytketään KY-008 miinus (-) merkittyyn pinniin ja maa (GND)
signaali (S) pinniin.
Taistelukaverit |
Ohjelma
on varsin yksinkertainen. Se koostuu kolmesta askeleesta:
ensimmäisessä askeleessa luetaan äänisignaalia. Mikäli se
ylittää tai alittaa annetulla määrällä (tässä 5) setup:issa
luetun pohjatason, sekvenssi siirtyy askeleeseen 2. Askeleessa kaksi
kasvatetaan ohjelmakierrosten lukumäärää annettuun rajaan saakka.
Näistä ohjelmakierroksista muodostetaan jakojäännös (modulo,
käsky on %). Jos jakojäännös on nolla (0), vilkutetaan laseria ja
signaloidaan sireeniä. Tuo jakojäännöksen käyttö on helppo tapa
saada nuo kaksi signaalia toimimaan saman aikaisesti, mutta eri
tahtiin. Kun kierroslaskuri ylittää annetun maksimiarvon
(Con_Kierrokset = 2800;),
siirtyy ohjelma askeleeseen kolme. On tärkeää, että askelissa
kaksi (2) ja kolme (3) ei tutkita mikrofonipiiriä, jotta se ei
herätä laseria ja sireeniä uudestaan, vaan ainoastaan ulkoinen
ääni. Askeleessa kolme (3) on samaa tarkoitusta varten myös 0,1
sekunnin viive. Ilman sitä kytkentä käynnistää itse itsensä.
Edellä
pari kuvaa: kokeilukytkentä sekä ”parhaat kaverukset”.
Torjuntataistelu ja ohjelman toiminta näkyvät parhaiten videosta antinarduvideo30.youtube.com.
Videolla
tosin “sireenin” ääni (melkein seireenin) on niin vaimea, että
se ei kylläkään havahduta ketään näinkään kauheassa
ihmiskuntaan kohdistuvassa tilanteessa!
ps. Ei tuo laser pysäyttänyt hyökkääjää. Ratkaisu löytyi Alien niskasta: ON-OFF-kytkin!
OHJELMA
30
/***************************************
*
Ohjelma 30
*
20.12.2016
*
Alien hyökkäys ja torjunta
**************************************/
//
MÄÄRITTELYT:
//
Ajastukset
const
int Con_Kierrokset = 2800;
int Int_Kierrokset = 0; // Ohjelmakierroslaskuri
const
int Con_LaserRytmi = 100;
const
int Con_SireeniRytmi = 400;
//
Muuttujamäärittelyt
const
int Con_MikkiTulo = 0;
int Int_MikkiPohja = 0;
int Int_MikkiArvo = 0;
int Int_Herkkyys = 5;
const
int Con_Laser = 2;
boolean
Bol_Laser = false;
const
int Con_Sireeni = 3;
boolean
Bol_Sireeni = false;
unsigned
int Unt_YlaTaajuus = 750;
unsigned
int Unt_AlaTaajuus = 350;
int Seq_Torjunta = 1;
//
ASETUKSET:
void
setup(){
Serial.begin(9600);
pinMode(Con_Laser, OUTPUT);
Int_MikkiPohja
= analogRead(Con_MikkiTulo);
}//
Asetuksen loppu
//
PÄÄLOOPPI
void
loop(){
switch
(Seq_Torjunta) {
case
1:
Int_MikkiArvo
= analogRead(Con_MikkiTulo);
if(Int_MikkiArvo > Int_MikkiPohja +
Int_Herkkyys
||
Int_MikkiArvo < Int_MikkiPohja - Int_Herkkyys){
Seq_Torjunta = 2;
}
break;
case
2:
Int_Kierrokset++;
if(Int_Kierrokset % Con_SireeniRytmi
== 0){
Bol_Sireeni = !Bol_Sireeni;}
if(Bol_Sireeni == false){
tone(Con_Sireeni, Unt_YlaTaajuus);
}else{
tone(Con_Sireeni, Unt_AlaTaajuus);
}
if(Int_Kierrokset % Con_LaserRytmi ==
0){
Bol_Laser
= !Bol_Laser;
digitalWrite(Con_Laser, Bol_Laser);
}
if(Int_Kierrokset >
Con_Kierrokset){
Seq_Torjunta = 3;}
break;
case
3:
noTone(Con_Sireeni);
delay(100);
Int_Kierrokset = 0;
Bol_Sireeni
= false;
Bol_Laser
= false;
digitalWrite(Con_Laser, Bol_Laser);
Seq_Torjunta = 1;
break;
}
delay(1);
}
// Pääohjelma LOPPU
Ei kommentteja:
Lähetä kommentti