Tiesitkö että...
Kuuluisin käden etäisyyteen reagoiva soitin on nimeltään Theremin keksijänsä Leo Thereminin (1896-1993) mukaan. Alkuperäisessä thereminissä käden paikka vaikutti antennien vastaanottamaan sähkömagneettiseen säteilyyn.
Tässä harjoituksessa rakennetaan soitin, jota soitetaan liikuttamalla kättä etäisyyssensorin edessä. Äänenkorkeus vaihtelee etäisyyden mukaan. Nuottien kestoa säädellään potentiometrillä.
Mehackit boardin (tai Arduinon), USB-johdon, koekytkentälevyn ja johtimien lisäksi tarvitset seuraavat komponentit.
Osa | Kuva | Kuvaus |
---|---|---|
Piezo-kaiutin | Elektroninen komponentti, jota voi käyttää värähtelyn havaitsemiseen sekä äänten tuottamiseen. | |
Etäisyyssensori (infrapuna tai ultraääni) | Maker kitistäsi löytyy näistä etäisyysantureista jompi kumpi. Ylempi anturi toimii infrapunan ja alempi ultraäänen avulla. | |
Kolmipaikkainen terminal block. | Jos Maker kitistäsi löytyy tällainen, infrapunalla toimiva etäisyysanturi on helpompi liittää koekytkentälevyyn sen avulla. | |
Potentiometri | Potentiometri on säätövastus, jota voidaan säätää pyörittämällä nuppia. Potentiometristä tulee Arduinon analogiseen porttiin säädöstä riippuva jännite.. |
Jos Maker kitissäsi on infrapunalla toimiva etäisyyssensori, löydät alta vinkkejä sen liittämiseen koekytkentälevyyn. Jos sinulla on ultraäänellä toimiva etäisyyssensori, voit siirtyä eteenpäin ohjeissa.
Jos Maker kitistäsi löytyy kolmipaikkainen sokeripala ja talttapäinen ruuvimeisseli, ruuvaa etäisyyssensorin johtimien päät sokeripalan sisään ja paina sokeripala koekytkentälevyyn. Varmista, että johtimet on työnnetty oikealle puolelle sokeripalaa eli sinne, missä on isommat reiät. Varmista tukeva kiinnitys vetämällä piuhoja kevyesti, jolloin niiden pitäisi pysyä paikallaan.
Jos Maker kitissäsi ei ole sokeripalaa, vuole saksen terällä varovasti johtoa ytimen ympäriltä pois siten, että saat taitettua noin 1 cm pätkän johdinta ulos. Pyöritä varovasti johtimen säikeet yhteen sormenpäittesi välissä.
Kytke johtimen päät koekytkentälevyyn. Mustan ja punaisen johtimen voit kytkeä levyn vaakariveille ja keltaisen johtimen pystyriville. Voit vahvistaa kytkennät sinitarralla tai teipillä, kuten alla olevassa kuvassa. Näin johtimet eivät varmasti irtoa kovassakaan käytössä!
Kaavio 1: Infrapunasensori
Kaavio 2: Ultraäänisensori
Kun käden etäisyys anturista kasvaa, piezon soittama äänenkorkeus madaltuu. Mitä lähempänä sensoria käsi on, sitä korkeampi ääni piezosta kuuluu. Potentiometrillä säädetään nuotin kestoa: mitä pienempi potentiometristä tuleva arvo, sitä lyhyempi nuotti.
Tuttuja komentoja:
Infrapunasensorin lukemia luet komennolla analogRead(portti)
Ultraäänisensorin käyttämiseen tarvitset seuraavia komentoja
Aluksi pääset testaamaan etäisyyssensorin toimintaa. Piezo-summeri ja säätövastus otetaan mukaan vasta seuraavassa vaiheessa.
Tee TEHTÄVÄ 1, jos sinulla on infrapunalla toimiva etäisyyssensori. Jos sinulla on ultraäänellä toimiva etäisyyssensori, tee TEHTÄVÄ 2
void setup() {
// määrittele portti 9 ulostuloksi
// käynnistä sarjaliikenne
}
void loop() {
int sensorValue = analogRead(A0);
// tulosta sensorValue serial monitoriin
}
Ohjelmassa on käytetty pulseIn-komentoa ja delayMicroseconds-komentoa.
// Luo kokonaislukumuuttujat "duration" ja "distance"
void setup() {
pinMode(11, OUTPUT);// määrittellään portti 11 (trigPin) ulostuloksi
pinMode(12, INPUT); // määrittellään portti 12 (echoPin) sisääntuloksi
// käynnistä sarjaliikenne.
}
void loop() {
//Seuraavat rivit käyttävät portin 11 tilassa HIGH muutamien mikrosekuntien ajan.
digitalWrite(11, LOW);
delayMicroseconds(2);
digitalWrite(11, HIGH);
delayMicroseconds(10);
digitalWrite(11, LOW);
duration = pulseIn(12, HIGH); //Tämä komento tallentaa muuttujaan "duration"
//ajan, joka portilla 12 (echoPin) kestää muuttua tilaan HIGH.
distance = duration*0.034/2; //Tämä komento muuttaa ajan senttimetreiksi.
// Tulostetaan muuttuja "distance" serial monitoriin.
Serial.print("Distance: ");
Serial.println(distance);
}
Ensin pääset tutkimaan, kuinka eri taajuuksia voi soittaa piezolla etäisyyssensorin lukemiin perustuen. Säätövastus otetaan mukaan vasta seuraavalla sivulla.
Jos sinulla on käytössä infrapunasensori, tee TEHTÄVÄ 1 Jos käytössäsi on ultraäänisensori, tee TEHTÄVÄ 2.
void setup() {
//määrittele portti 9 ulostuloksi
//käynnistä sarjaliikenne
}
void loop() {
int sensorValue = analogRead(A0);
//tulosta sensorValue serial monitoriin
int aani = map(sensorValue, 0, 1023, 100, 3000);
//tone-komennossa on nyt parametria: piezon portti (9),
//soitettava äänenkorkeus ja nuotin kesto (1000 millisekuntia)
tone(9, aani, 1000);
//300 millisekunnin viive.
delay(300);
}
// Luo kokonaislukumuuttujat "duration" ja "distance"
void setup() {
pinMode(11, OUTPUT);// määrittellään portti 11 (trigPin) ulostuloksi
pinMode(12, INPUT); // määrittellään portti 12 (echoPin) sisääntuloksi
// käynnistä sarjaliikenne.
}
void loop() {
//Seuraavat rivit käyttävät portin 11 tilassa HIGH muutamien mikrosekuntien ajan.
digitalWrite(11, LOW);
delayMicroseconds(2);
digitalWrite(11, HIGH);
delayMicroseconds(10);
digitalWrite(11, LOW);
duration = pulseIn(12, HIGH); //Tämä komento tallentaa muuttujaan "duration"
//ajan, joka portilla 12 (echoPin) kestää muuttua tilaan HIGH.
distance = duration*0.034/2; //Tämä komento muuttaa ajan senttimetreiksi.
// Tulostetaan muuttuja "distance" serial monitoriin.
Serial.print("Distance: ");
Serial.println(distance);
//pohdi, mitka ovat järkeviä vaihteluvälejä map-komentoon.
int aani = map(distance, 0, 1023, 100, 3000);
//tone-komennossa on nyt parametria: piezon portti (9),
//soitettava äänenkorkeus ja nuotin kesto (1000 millisekuntia)
tone(9, aani, 1000);
//300 millisekunnin viive.
delay(300);
}
void loop() {
//...aiempi ohjelma
//...aiempi ohjelma
// luo kokonaislukumuuttuja potValue ja anna sen arvoksi analogiportin A1 lukema
delay(potValue); // muuttujaa potValue käytetään viiveen kestona
}
Etäisyysanturin toiminta
Infrapunalla toimiva etäisyyssensori eli IR-sensori (Infra Red) toimii lähettämällä infrapunasäteilyä ja mittaamalla säteiden heijastumista takaisin. Infrapunasäteily on samankaltaista sähkömagneettista säteilyä kuin näkyvä valo, mutta sen aallonpituus on niin suuri, että ihmisen silmä ei havaitse sitä.
Koska IR-sensori mittaa säteilyn heijastumista eikä suoraan etäisyyttä, voi kohteen materiaali (kyky heijastaa) vaikuttaa mitattuihin arvoihin. Jotkin materiaalit heijastavat infrapunaa paremmin kuin toiset. Voit kokeilla tätä omalla IR-sensorillasi, joka nyt on kiinni piirissä.
Sensorista tuleva jännite kasvaa välillä 0-5 cm (tai 0-10 cm, riippuu hieman sensorista) Tämä jälkeen se alkaa taas pienentyä. 5 cm etäisyydellä sensori antaa siis suurimman arvon, joka on jännitteenä noin 3 V ja muunnettuna välille 0-1023 noin 630. Tätä “raja-arvoa” voi hyödyntää osana erilaisia projekteja: esimerkiksi auto voi kääntyä aina, kun etäisyyssensorista tuleva arvo on yli 600 eli etäisyys edessä olevaan kohteeseen noin 5 cm.