Przetwornik piezoelektryczny - Kurs Arduino cz. 3
Jeśli kiedykolwiek otrzymałeś kartkę urodzinową, która po otwarciu grała jakąś melodię, najprawdopodobniej miałeś do czynienia z przetwornikiem piezoelektrycznym odgrywającym rolę głośniczka. Przetworniki takie spotyka się także w wielu innych urządzeniach,
takich jak telefony komórkowe, dzwonki do drzwi czy sonar podwodny.
Rysunek 3.6 przedstawia typowy przetwornik piezoelektryczny, który może być użyty do emitowania dźwięków podobnych do tych, jakie wydają niektóre kartki z pozytywką.
Rysunek 3.6. Typowy przetwornik piezoelektryczny występujący w „grających kartkach” lub jako czujnik w zestawach perkusyjnych
Jak on działa? Słowo piezoelektryczność oznacza „elektryczność zależną od nacisku”. Gdy element piezoelektryczny zostaje ściśnięty, wytwarza impuls elektryczny, tak jak to pokazano na rysunku 3.7. Typowym zastosowaniem takiego przetwornika w Arduino jest użycie go jako czujnika uderzenia. Gdy przetwornik zostanie dotknięty czy uderzony, Arduino wykrywa ten fakt i wykonuje wymaganą czynność, taką jak np. zaświecenie diody LED czy wygenerowanie dźwięku przez dołączony głośniczek.
Rysunek 3.7. Gdy przetwornik piezoelektryczny zostanie odkształcony, wytwarza impuls elektryczny; ściskanie i rozluźnianie
przetwornika wytwarza zmienne napięcie
I odwrotnie: jeśli do przetwornika piezoelektrycznego przyłożyć napięcie, odkształci się on, tak jak to pokazano na rysunku 3.8. Przykładając do przetwornika napięcie zmienne o określonej częstotliwości, możemy sprawić, że wygeneruje on dźwięk o określonej
wysokości. Właśnie w ten sposób użyte przetworniki piezoelektryczne spotyka się w grających kartkach okolicznościowych czy brzęczykach.
Rysunek 3.8. Przykładając do przetwornika piezoelektrycznego zmienne napięcie, powodujemy jego odkształcenia
Jak sam widzisz, ten sam przetwornik piezoelektryczny może być użyty zarówno jako element wejścia, jak i wyjścia. Urządzenia sonarowe, których sercem jest przetwornik piezoelektryczny, wysyłają sygnał akustyczny, a następnie nasłuchują jego echa.
Znamy to najlepiej jako charakterystyczny sygnał „piip” w filmach o łodziach podwodnych. Czas, jaki jest potrzebny, aby odbity sygnał powrócił do czujnika, wskazuje, jak daleko znajduje się cel. Do tematu powrócimy ponownie w rozdziale 6., gdzie zobaczymy
inny przykład, w którym użyto czujnika SRF05 firmy Devantech jako miernika odległości.
Teraz, gdy poznałeś już przetworniki piezoelektryczne i ich zasadę działania, użyjesz jednego z nich jako czujnika uderzenia. Gdy Arduino wykryje, że czujnik został puknięty lub uderzony, zaświeci diodę LED.
Schemat obwodu - Kurs Arduino
Do wykonania tego projektu będziesz potrzebować następujących elementów:
- Arduino;
- płytki stykowej i zwor;
- diody Zenera 5,1 V o mocy 0,5 W (my użyliśmy diody BZX55C5V);
- przetwornika piezoelektrycznego bez obudowy (my kupiliśmy swój przetwornik o średnicy 27 mm na aukcji internetowej);
- rezystora 1 MΩ.
Użyjesz przetwornika bez obudowy, gdyż jego zastosowanie daje lepsze efekty niż użycie przetwornika zabudowanego.
Przetwornik piezoelektryczny, gdy zostanie uderzony, może wytworzyć napięcie na tyle wysokie, że może ono uszkodzić Arduino. Dlatego w naszym obwodzie pojawia się dioda mająca zabezpieczyć Arduino oraz rezystor, który ma rozładować napięcie
powstałe na przetworniku. Na rysunku 3.9 pokazano schemat całego obwodu. Zwróć uwagę na kierunek podłączenia
diody Zenera oraz sposób, w jaki równolegle z rezystorem podłączona jest do przetwornika piezoelektrycznego.
Po obejrzeniu schematu obwodu możesz zabrać się za jego zmontowanie na płytce stykowej.
Rysunek 3.9. Przetwornik piezoelektryczny podłączony do wejścia analogowego A0. Dioda Zenera zabezpiecza Arduino przed wysokim napięciem powstającym w momencie uderzenia przetwornika
Połączenia- Kurs Arduino
Poza Arduino obwód zawiera trzy główne elementy: diodę Zenera 5,1 V, rezystor 1 MΩ oraz przetwornik piezoelektryczny. Jak już wspomniano, dioda i rezystor połączone są równolegle z przetwornikiem.
Rozpocznij od umieszczenia wszystkich trzech elementów na płytce stykowej. Zwróć szczególną uwagę na polaryzację przetwornika piezoelektrycznego, który zazwyczaj ma wstępnie przylutowane za pomocą lutowia o niskiej temperaturze topnienia dwa przewody:
czerwony i czarny. Czarny przewód podłączamy do masy w obwodzie, natomiast czerwony do analogowego wejścia A0 Arduino.
Dioda Zenera musi być podłączona w odpowiednim kierunku, aby chronić wejście analogowe Arduino przed napięciami przekraczającymi 5 V. Typowo katodę, czyli ujemne wyprowadzenie diody — oznaczone zazwyczaj czarnym paskiem — podłącza
się do masy, lecz w swoim obwodzie odwrócisz polaryzację diody i podłączysz ją w drugą stronę tak, aby katoda podłączona była do punktu o wyższym napięciu w obwodzie.
Dioda Zenera działa w taki sposób, że przewodzi prąd w kierunku zaporowym wtedy, gdy przekroczone zostanie jej napięcie przebicia, które w tym przypadku wynosi 5,1 V. Każde napięcie o wartości powyżej 5,1 V spowoduje przebicie diody i sprowadzenie
napięcia do masy obwodu, chroniąc w ten sposób wejście Arduino. Gdy trzy główne elementy zostaną już umieszczone na płytce stykowej, możesz ostatecznie połączyć je z masą i wejściem analogowym A0 Arduino. Rysunek 3.10 przedstawia gotowy obwód wraz z połączeniami do Arduino.
Rysunek 3.10. Gotowy obwód połączony z Arduino. Zwróć uwagę na kierunek podłączenia diody Zenera oraz polaryzację przetwornika piezoelektrycznego
Mając gotowe wszystkie połączenia, możesz zabrać się za napisanie szkicu, który połączy Arduino z Twoim przetwornikiem piezoelektrycznym.
Szkic pozwalający mierzyć impulsy pochodzące z przetwornika piezoelektrycznego
Rozpoczniesz od szkicu pokazanego na listingu 3.1. Jeśli go wcześniej nie zapisałeś, otwórz nowe okno szkicu i przepisz do niego treść listingu. Podłącz teraz Arduino do portu USB, załaduj szkic i uruchom monitor portu szeregowego. Początkowo powinien on wyświetlać po prostu wartości 0 (zero). Spróbuj teraz lekko puknąć lub ścisnąć przetwornik i zaobserwuj, jak zmieniają się wyświetlane wartości. Przykładowy zapis pokazany jest na rysunku 3.11. Po puknięciu w przetwornik wyświetlane odczyty powinny szybko skoczyć do wartości maksymalnej, a później opaść do zera.
Rysunek 3.11. Monitor portu szeregowego wyświetla wyniki odczytane w momencie dotykania lub naciskania przetwornika piezoelektrycznego
Zmieniające się wartości pokazują, jak mocno przetwornik został uderzony czy ściśnięty. Im większe wartości, tym mocniejsze
było uderzenie lub ściśnięcie. Jeśli nic się nie wydarzyło, sprawdź wszystkie połączenia, zwracając szczególną uwagę na właściwą polaryzację przetwornika i diody Zenera. Teraz zmodyfikujesz swój szkic tak, aby wypisywane były tylko wartości przekraczające
pewien próg. W tym celu możesz zmodyfikować swój szkic od potencjometru lub napisać nowy od początku. Na listingu 3.2 pokazano nowy szkic. Zapisz go pod nazwą próg (ang. threshold).
Listing 3.2. Wartość progowa dla przetwornika piezoelektrycznego
int sensorValue = 0;
int threshold = 200;
void setup() {
Serial.begin(9600);
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue > threshold) {
Serial.print("Odczyt = ");
Serial.println(sensorValue, DEC);
}
delay(10);
}
Na listingu 3.2 wartość progowa ustawiona jest na 200. W głównej pętli szkicu będziesz wypisywać tylko te odczytane wartości, które przekraczają ten próg. A teraz to przetestujmy.
Załadowanie i test - Kurs Arduino
Po wpisaniu treści szkicu pokazanego na listingu 3.2 upewnij się, czy kompiluje się on poprawnie, a następnie załaduj go do pamięci Arduino. Otwórz okno monitora portu szeregowego, a następnie spróbuj uderzać przetwornik piezoelektryczny z różną siłą.
Zauważ, że im mocniej uderzasz, tym większe są wartości odczytane z przetwornika. Rysunek 3.12 prezentuje przykładowe odczyty.
Rysunek 3.12. Odczyty przy uderzaniu przetwornika piezoelektrycznego z różną siłą
Masz zatem teraz szkic, który odczytuje wartość z wejścia analogowego A0 i wyświetla ją, jeśli przekroczy ona zadany próg. Teraz chciałbyś pewnie zrobić coś pożyteczniejszego niż tylko wyświetlanie tej wartości. Jeśli dodasz do swojego obwodu głośniczek,
możesz zmusić Arduino do zagrania dźwięku za każdym razem, gdy przetwornik zostanie uderzony. To właśnie teraz zrobisz.
Obwód z dodanym głośniczkiem
W tej części musisz dodać dwa elementy:
- mały głośniczek o impedancji 8 Ω,
- rezystor o wartości 1 kΩ.
Rysunek 3.13 prezentuje obwód z rysunku 3.9 z dodanymi rezystorem i głośniczkiem. Zbudujmy teraz ten obwód na płytce stykowej.
Połączenia - Arduino
Do obwodu dołącz głośniczek podłączony do wyjścia cyfrowego nr 8 poprzez rezystor 1 kΩ. Gotowy obwód możesz zobaczyć na rysunku 3.14. Musieliśmy przylutować do głośniczka parę zworek, ponieważ oryginalne przewody były zbyt miękkie, aby wcisnąć je w zaciski na płytce stykowej. Jeśli nie masz sprzętu do lutowania, możesz spróbować użyć taśmy izolacyjnej, aby przymocować zworki do oryginalnych przewodów dołączonych do głośniczka, lub użyć zacisków krokodylowych.
Rysunek 3.13. Do obwodu dodano głośniczek do generowania dźwięków
Rysunek 3.14. Połączenia po dodaniu głośniczka
Gdy wszystkie elementy zostaną już podłączone, będziesz mógł się zabrać za pisanie szkicu.
Szkic generujący dźwięk - Kurs Arduino
Na listingu 3.3 pokazano treść Twojego kolejnego szkicu, w którym ustawiasz wartości 3 zmiennych:
- toneDuration określa, jak długo (w milisekundach) ma być generowany dźwięk.
- toneFrequency ustawia częstotliwość (w Hz) emitowanego dźwięku (środkowe C ma częstotliwość 262 Hz).
- speakerPin określa numer złącza, do którego podłączony jest głośnik.
Listing 3.3. Generowanie dźwięku przez głośniczek
int sensorValue = 0;
int threshold = 200;
int toneDuration = 40;
int toneFrequency = 262;
int speakerPin = 8;
void setup() {
}
void loop() {
sensorValue = analogRead(sensorPin);
if (sensorValue > threshold) {
tone(speakerPin, toneFrequency, toneDuration);
}
}
W tym szkicu korzystasz z jednej z bibliotecznych funkcji Arduino: tone, która przyjmuje trzy argumenty:
tone(złącze, częstotliwość, trwanie)
Złącze oznacza tu numer złącza Arduino, na którym generowany jest sygnał dźwiękowy, częstotliwość określa częstotliwość generowanego dźwięku, a trwanie oznacza czas w milisekundach, przez który dźwięk jest emitowany. Jeśli nie podasz parametru
trwanie, wówczas dźwięk generowany jest aż do momentu wywołania funkcji noTone:
noTone(złącze)
W naszym szkicu dźwięk odtwarzany jest tylko wtedy, gdy odczytana wartość analogowa jest większa od wartości progowej (sensorValue > threshold). Sprawdźmy to!
Załadowanie i test - Arduino
Gdy już upewnisz się, że szkic kompiluje się poprawnie, podłącz Arduino i załaduj szkic do jego pamięci. Spróbuj uderzać w przetwornik piezoelektryczny i sprawdzać, czy w odpowiedzi pojawia się dźwięk. Jeśli go nie ma, sprawdź poprawność wszystkich połączeń.
WSKAZÓWKA Jeśli dźwięk wydobywający się z głośniczka jest bardzo cichy albo mimo sprawdzenia poprawności wszystkich połączeń nie słyszysz żadnego dźwięku, spróbuj zwiększyć wartość toneDuration z 40 do 1000 albo zmienić wartość
zmiennej toneFrequency.
Gdy wszystko już działa poprawnie, możesz zmienić wartość zmiennej toneFrequency, aby uzyskać inną wysokość odtwarzanego dźwięku. Im większa częstotliwość, tym wyższy ton; im mniejsza, tym ton niższy. Możesz także spróbować zmieniać wartość
parametru threshold. Im ona mniejsza, tym delikatniejsze dotknięcie czujnika wystarczy, aby z głośnika rozległ się dźwięk.
