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:
- Arduino (ja używam Uno R3)
- Płytka stykowa chyba najwygodniej 270 otworów
- Przewody połączeniowe
- Rezystor 1 kΩ (nie wymagany) i 2,2 kΩ
- Ultradźwiękowy czujnik odległości
- Dowolny głośniczek lub buzzer
- Przycisk
- I dobre chęci :)
(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:
a tak kiedy buzzer:
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.
INFORMACJA: Poniższy post nie wydostał się z Poczekalni :(
Przydał by się filmik z działania ;)
Dodam filmik w najbliższych dniach. Dziękuję za wyrozumiałość.
Przy głośniku (a więc cewce) powinna być chyba dioda, która chroniłaby pin w mikrokontrolerze, prawda?
Moim zdaniem wystarczy sam rezystor sprawdzałem to i nic nie stało się z moim Arduino.
Jeśli nic się nie stało do tej pory to nie znaczy , że się nie stanie w przyszłości.
To tak samo jak z rezystorami do Led-ów. Bez nich nic się nie stanie od razu ale po kilku godzinach, dniach, a może nawet miesiącach, Pyk! I mikrokontroler do wymiany.
Wiem mój błąd. Jutro to zmienie.
Ten projekt jest banalny. Każdy może coś takiego stworzyć. Ale za dobre chęci daję ci 1. Xd
Fajnie by było, gdyby się ktoś tak “miło” nie podszywał pod moją osobę…
To pochwal się swoimi projektami.
Fajny post jak na post dla początkujących z Arduino.
Dzięki!
Projekt dość prosty, ale poprawnie wykonany. 0d jak dawna pracujesz z Arduino?
Od ok. 2 tygodni. Wielkie dzięki!
szukam producenta theremina . jego zadaniem będzie praca z antena 14 metrow. jeśli jest tu bohater który jest w stanie wykonać takie cacko to proszę o kontakt 511131154
wykonawcy theremina szukam 511131154. oczywiście place gotowka :)
Jeśli mogę , to zachęcam autora do zbudowania prototypu na dwa czujniki. Wysokość dźwięku i głośność. Wtedy instrument będzie do pełnego ogarnięcia. Mi się projekt podoba, taki z dwoma czujnikami bym sobie zrobił. Słaby ze mnie elektronik dlatego w ten sposób piszę. Pozdro.