tiistai 20. joulukuuta 2016

Alien hyökkäys KY-038, KY-006 ja KY-008

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