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

16 komentarzy do “Prosty Theremin

Odpowiedz

anuluj

Masz uwagi?