Prosty Theremin

Prosty Theremin

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Cześć!

Jest to mój pierwszy post na tej stronie, więc proszę o napisanie w komentarzach co mógłbym poprawić.

Wpadłem na pomysł stworzenia prostego theremina. Jeżeli nie wiecie co to postaram się to wam wyjaśnić. Theremin to urządzenie które wydaję dźwięki różnej częstotliwości w zależności od odległości dłoni od anteny (w moim przypadku będzie to czujnik odległości). Jest to całkiem proste do zrobienia.

Potrzebne części to:

(linki do Botlandu)

 

A więc bierzmy się do roboty:

Na początku wetknijmy do naszej płytki stykowej czujnik ultradźwiękowy i podłączmy:

  • GND do GND na Arduino
  • Echo do dowolnego pinu PWM
  • Trig do któregoś z pinów cyfrowych Arduino
  • Vcc do +5V na Arduino

Następnie podłączamy przez nasz rezystor 1 kΩ  głośniczek do dowolnego pinu lub buzzer do pinu PWM , a gdy nie mamy rezystora podłączamy je bezpośrednio do Arduino. Potem tylko dodajemy przycisk, w którym jedną nóżkę wpinamy kablem do Arduino i rezystorem 2,2 kΩ do minusa, a drugą nóżkę kabelkiem do +. Proste prawda? Układ powinien wyglądać tak gdy podłączamy głośniczek:

theremin_glosnik
a tak kiedy buzzer:

 

theremin

Teraz należy przejść do kodu:

Tak wygląda kod gdy korzystamy z głośnika:

/* Arduino projekt Prosty Theremin na majsterkowo.pl
 10.01.2016 r.
*/

#define trigger 7 //definicja pinu wysyłającego fale ultradźwiękowe
#define echo 3 //definicja pinu odbierającego fale ultradźwiękowe
#define speaker 9 //definicja głośnika
#define button 11 //definicja przycisku kalibrującego maksymalną wysokość
int echo_time=0; //zmienna przechowująca ilość czas potrzebnego na dotarcie fali ultradźwiękowej z powrotem do czujnika
float distance=0; //zmienna przechowująca odległość od przeszkody w centymetrach
float max_distance=0;
int sound=0;
void setup() {
pinMode(trigger,OUTPUT); //ustawienie pinu wysyłającego falę jako wyjście 
pinMode(echo,INPUT); //ustawienie pinu odbierającego falę jako wejście
pinMode(speaker,OUTPUT); //ustawienie głośnika jako wyjścia
pinMode(button,INPUT_PULLUP);
}

void loop() {
digitalWrite(trigger,LOW); //wyłączenie wysyłania fali
delayMicroseconds(2); //odczekanie 2 mikrosekund
digitalWrite(trigger,HIGH); //włączenie wysyłania fali
delayMicroseconds(10); //odczekanie 10 mikrosekund w celu wysłania fali ultradźwiękowej
digitalWrite(trigger,HIGH); //wyłączenie wysyłania fali

echo_time=pulseIn(echo,HIGH); //ustawienie zmiennej echo_time na czas potrzebny do powrotu fali ultradźwiękowej do czujnika
distance=echo_time/58; //przeliczenie czasu na dystans w centymetrach
if(digitalRead(button)==HIGH){
  max_distance=distance; //ustawienie dystansu przy którym gra najwyższy dźwięk
}
  if(max_distance==0){} //jeżeli nie ustwiono maksymalnej wysokości nic nie rób 

    
else{ //w przeciwnym wypadku zagraj wartość na głośniczku
 sound=map(distance,0,max_distance,200,3000); //przeskalowanie dystansu w cm na  częstotliwość od 200hz do 3khz 
noTone(speaker); //wyłączenie głośnika
 tone(speaker,sound); //włączenie głośnika i ustawienie częstotliwości na wartość sound  
}

}

A tak kiedy używamy buzzera:

/* Arduino projekt Prosty Theremin na majsterkowo.pl
 10.01.2016 r.
*/

#define trigger 7 //definicja pinu wysyłającego fale ultradźwiękowe
#define echo 3 //definicja pinu odbierającego fale ultradźwiękowe
#define buzzer 9 //definicja buzzera
#define button 11 //definicja przycisku kalibrującego maksymalną wysokość
int echo_time=0; //zmienna przechowująca ilość czas potrzebnego na dotarcie fali ultradźwiękowej z powrotem do czujnika
float distance=0; //zmienna przechowująca odległość od przeszkody w centymetrach
float max_distance=0;
int sound=0;
void setup() {
pinMode(trigger,OUTPUT); //ustawienie pinu wysyłającego falę jako wyjście 
pinMode(echo,INPUT); //ustawienie pinu odbierającego falę jako wejście
pinMode(buzzer,OUTPUT); //ustawienie buzzera jako wyjścia
pinMode(button,INPUT_PULLUP);
}

void loop() {
digitalWrite(trigger,LOW); //wyłączenie wysyłania fali
delayMicroseconds(2); //odczekanie 2 mikrosekund
digitalWrite(trigger,HIGH); //włączenie wysyłania fali
delayMicroseconds(10); //odczekanie 10 mikrosekund w celu wysłania fali ultradźwiękowej
digitalWrite(trigger,HIGH); //wyłączenie wysyłania fali

echo_time=pulseIn(echo,HIGH); //ustawienie zmiennej echo_time na czas potrzebny do powrotu fali ultradźwiękowej do czujnika
distance=echo_time/58; //przeliczenie czasu na dystans w centymetrach
if(digitalRead(button)==HIGH){
  max_distance=distance; //ustawienie dystansu przy którym gra najwyższy dźwięk
}
  if(max_distance==0){} //jeżeli nie ustwiono maksymalnej wysokości nic nie rób 

    
else{ //w przeciwnym wypadku zagraj wartość na buzzerze
     sound=map(distance,0,max_distance,0,255); //przeskalowanie dystansu w cm na wartość od 0 do 255 (PWM) 
analogWrite(buzzer,0); //wyłączenie buzzera
     analogWrite(buzzer,sound); //włączenie buzzera i zagranie wartości sound   
}

}

I to tyle. Teraz trzeba ustawić naszą płytkę montażową tak, aby czujnik ultradźwiękowy ustawiony był w górę następnie trzeba ustawić rękę na maksymalna wysokość jaką chce się osiągnąć i nacisnąć przycisk, jeżeli wszytko jest dobrze zrobione głośnik lub buzzer powinien w zależności od wysokości naszej ręki lub innego przedmiotu grać inny ton .Proszę piszcie opinie o moim projekcie w komentarzach (to na prawdę pomaga) oraz razie jakichkolwiek problemów no i oczywiście, jeżeli coś źle zrobiłem. Mam jednak nadzieję, że popełniłem tych błędów jak najmniej.

DSC_0225

 

INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(

Ocena: 4.2/5 (głosów: 5)

Podobne posty

Kastaniety

Kastaniety

Instrument muzyczny ku uciesze niemowlaka :) Wykonany tradycyjnie narzędziami bez prądu.Na kastaniety wybrałem brzozową deskę…

16 komentarzy do “Prosty Theremin

Odpowiedz

anuluj

Prosty Theremin

Nie przegap nowych projektów!

Zapisując się na nasz Newsletter będziesz miał pewność, że nie przegapisz żadnego nowego projektu opublikowanego w Majsterkowie!

Od teraz nie przegapisz żadnego projektu!

Masz uwagi?