Projekt Theremin: Porovnání verzí
Řádek 30: | Řádek 30: | ||
<code>#define ir_1 A0 // port pro senzor1</code> | <code>#define ir_1 A0 // port pro senzor1</code> | ||
+ | |||
<code>#define ir_2 A1 // port pro senzor2</code> | <code>#define ir_2 A1 // port pro senzor2</code> | ||
+ | |||
<code>#define model 20150 // typ optického senzoru - 1080 pro GP2Y0A21Y, 20150 pro GP2Y0A02Y</code> | <code>#define model 20150 // typ optického senzoru - 1080 pro GP2Y0A21Y, 20150 pro GP2Y0A02Y</code> | ||
+ | |||
<code>// rozlišení dvou čidel</code> | <code>// rozlišení dvou čidel</code> | ||
<code>SharpIR *IR1;</code> | <code>SharpIR *IR1;</code> |
Verze z 25. 5. 2016, 19:08
generátor a modulátor tónů pomocí infračervených čidel, vizualizace vzdálenosti od čidel led diodami – VRNI, LS 2015/2016
Obsah
Členové projektu
- Daniel Sýkora, Studia nových médií, sykora.dan@gmail.com
- Vladimír Anděl, Studia nových médií, va@vladimirandel.cz
Motivace vzniku projektu a jeho význam
Theremin je elektronický hudební nástroj, na který se hraje bez doteku. Namísto, abychom sestrojili technologicky podobný nástroj vytvářející elektrické kmity dvou nesynchronizovaných oscylátorů, jejichž sobě podobné tóny spolu interferují (viz zázněj), jsme se chopili využítí obdobného principu ovládání bezdotykově, ve zjednodušené formě.
Projekt jsme si zvolili pro jeho jednoduchou interpretaci fyzického pohybu v prostředí. Kolem nás se vyskytuje mnoho elektronických senzorů a čidel, které jsou nám mnohdy neviditelné, jejich funkčnost obdobně (využití infračerveného světla, které lidské oko není schopno vnímat). Zábavnou formou transformujeme pohyb lidského těla na zvukovou a vizuální složku. Uživatel našeho výstupu je schopný pomocí končetin zasahovat do zorného pole infračervených čidel a tím ovlivňovat funkčnost v reálném čase - ihned dochází ke zpětné vazbě na jeho pohyb.
Použitý materiál
- 1x Arduino UNO (+ propojovací USB A-B kabel)
- 2x Infračervené čidlo SHARP 2Y0A21
- 1x Breadboard (nepájivé pole)
- 1x Reproduktor
- 3x LED
- 1x Potenciometr
- Cca 25x propojovací kabel
- 1x Box z tvrdého kartonu
- 1x Powerbanka
Použitý software
- Arduino IDE 1.6.9
- Atom či jiný textový editor
Odkazy na knihovnu arduina a vlastní zdrojový kód
- Zdrojový kód ve formátu ino a rtf
- Knihovna Sharp IR pro senzory
Vlastní zdrojový kód
#include <SharpIR.h> // knihovna pro optické senzory
#define ir_1 A0 // port pro senzor1
#define ir_2 A1 // port pro senzor2
#define model 20150 // typ optického senzoru - 1080 pro GP2Y0A21Y, 20150 pro GP2Y0A02Y
// rozlišení dvou čidel
SharpIR *IR1;
SharpIR *IR2;
//určení délky tonu (4 pro čtvrťovou dobu, 8 pro osminovou atp.)
int noteDurations[] = {
8,
};
void setup() {
Serial.begin(9600);
IR1 = new SharpIR(ir_1, model);
IR2 = new SharpIR(ir_2, model);
// pin pro zvukový výstup
pinMode(9, OUTPUT);
// pin pro led diody
pinMode(4, OUTPUT);
pinMode(7, OUTPUT);
pinMode(13, OUTPUT);
}
void loop() {
unsigned long pepe1 = millis(); // takes the time before the loop on the library begins
int dis = 0;
// this returns the distance to the object you're measuring
int dis2 = 0;
for (int i = 0; i < 1; i++) {
Serial.println(i);
dis += IR1->distance();
dis2 += IR2->distance();
}
dis = dis / 1;
dis2 = dis2 / 1;
Serial.print("Mean distance: "); // log do konzole - naměřená vzdálenost senzoru 1
Serial.println(dis);
Serial.print("Mean distance2: "); // log do konzole - naměřená vzdálenost senzoru 2
Serial.println(dis2);
unsigned long pepe2 = millis() - pepe1; // the following gives you the time taken to get the measurement
Serial.print("Time taken (ms): ");
Serial.println(pepe2);
// mapování analogového vstupu (v tomto případě, 20 - 150 z optických čidel)
// hraniční frekvence zvukového výstupu (500 - 4000Hz)
int thisPitch = map(dis, 20, 150, 500, 4000);
// žlutá led dioda
if((dis > 40) && (dis < 150)) // bliká v rozsahu hodnot 40 až 150 {
digitalWrite(7, HIGH); // zapne diodu napětím (HIGH)
delay(dis/8);
digitalWrite(7, LOW); // vypne diodu napětím (LOW)
delay(dis/8);
}
// červená led dioda
if ((dis > 80) && (dis < 150)) {
digitalWrite(4, HIGH);
delay(dis/32);
digitalWrite(4, LOW);
delay(dis/32);
}
// zelená led dioda
if (dis < 150) {
digitalWrite(13, HIGH);
delay(dis2);
digitalWrite(13, LOW);
delay(dis2);
tone(10, thisPitch, dis2);
}
else {
noTone(10);
}
}
Popis vývoje a konečná verze vlastního produktu
Pro vstupy, které následně generují zvuk, jsme využili dva optické senzory Sharp IR, které jsou schopny detekovat vzdálenost přibližně jednoho metru od samotného senzoru. Každý senzor má přitom jinou funkci. Senzor na levé straně s přibývající vzdáleností ruky od senzoru plynule zvyšuje frekvenci zvuku, tedy jeho výšku, zatímco senzor na straně pravé reguluje rychlost opakování daného tónu. Zvukový výstup zajišťuje jednoduchý reproduktor, do kterého je vpouštěn mono signál. Intenzita zvuku je regulovatelná potenciometrem. Pro vizuální znázornění zvukového výstupu jsou vyvedeny tři led diody, které reflektují oba možné vstupy, tedy jak výšku tónu, kdy zelená dioda je tón nejnižší a s přibývajícími frekvencemi se přes diodu žlutou rozsvítí konečně i dioda červená, tak frekvenci opakování tónu, což je znázorněno blikáním diod. Tyto komponenty jsou skrz breadboard vedeny do Arduina UNO, které je naprogramováno výše zmíněným kódem. Veškeré prvky jsou umístěny v tmavém boxu z tvrdého kartonu. Napájení je zajištěno power bankou, takže zařízení je soběstačné a mobiní.
Zhodnocení
Při použití tohoto typu infračerveného čidla jsme nedbali na jeho zorné pole. Umístění do boxu ukázalo, že je problematické umístění zařízení - čidla snímají všechny objekty ve svém zorném poli, a to i plochu, na které zařízení stojí. Je tedy potřeba pozorně vybírat prostor umístění. Škála interpretovaných tónu je příliš široká a je velmi obtížné úmyslně zahrát konkrétní melodii. Další revize vyžaduje namapovat všechny vzdálenosti objektu od čidla a vytvořit přesně definovaná pole, konkrétní zvukové tóny, obsahující limitní vzdálenosti.
Bylo velmi přínosné pracovat v týmu na projektu, který zahrnuje open hardware. Mikrokontroléry jsou svou variabilitou a použitelností vhodným entry levelem pro práci s hardwarem. Zejména pak arduino, které integruje serial port pro komunikaci, GPIO sběrnici pro analogovou a digitální komunikaci s periferiemi a speciální IDE software s velmi jednoduchým a přehledným rozhraním. Open hardware je vázán i na početnou komunitu lidí, která je velmi vzručná v DIY a v programování. S těmito dispozicemi je pak jednoduché vstoupit do tohoto světa: S využitím již hotových knihoven a příkladů použití různých funkcí, zpracovaných problematik a kvalitní dokumentace (zejména na webu arduino.org a DIY platformě instructables.com) lze vytvořit mnoho kvalitních projektů, které mají reálné využití.